use_vm_auto_key_table = true;
#endif
#if defined(MAX_BUTTONS)
- max_button = MAX_BUTTONS;
+ max_button = sizeof(vm_buttons) / sizeof(button_desc_t);
vm_buttons_d = (button_desc_t *)vm_buttons;
#endif
+#if defined(MAX_DRAW_RANGES)
+ max_ranges = sizeof(vm_ranges) / sizeof(vm_ranges_t);
+ vm_ranges_d = (vm_ranges_t *)vm_ranges;
+#endif
+
#if defined(USE_VERTICAL_PIXEL_LINES)
use_vertical_pixel_lines = true;
#endif
class EMU;
class OSD;
+
typedef struct {
- const _TCHAR* caption;
int x, y;
int width, height;
- int font_size;
int code;
} button_desc_t;
+typedef struct {
+ int x, y;
+ int width, height;
+} vm_ranges_t;
+
class DLL_PREFIX USING_FLAGS {
protected:
QString config_name;
bool use_vm_auto_key_table;
int max_button;
+ int max_ranges;
bool use_vertical_pixel_lines;
int screen_width;
bool machine_z80tvgame;
button_desc_t *vm_buttons_d;
-
+ vm_ranges_t *vm_ranges_d;
EMU *p_emu;
OSD *p_osd;
config_t *p_config;
int get_max_drive() { return max_drive; }
int get_max_d88_banks() { return max_d88_banks; }
- int get_max_draw_ranges() { return max_draw_ranges; }
-
bool is_use_joystick() { return use_joystick; }
bool is_use_joy_button_captions() { return use_joy_button_captions; }
int get_num_joy_button_captions() { return num_joy_button_captions; }
int get_screen_mode_num() { return screen_mode_num; }
int get_max_button() { return max_button; }
+ int get_max_draw_ranges() { return max_ranges; }
button_desc_t *get_vm_buttons() { return vm_buttons_d; }
+ vm_ranges_t *get_draw_ranges() { return vm_ranges_d; }
+
bool is_notify_key_down_lr_shift() { return notify_key_down_lr_shift; }
bool is_datarec_sound() { return use_datarec_sound; }
bool is_tape_binary_only() { return tape_binary_only; }
screen_height_aspect = WINDOW_HEIGHT_ASPECT;
max_button = 0;
vm_buttons_d = NULL;
-
+ max_ranges = 0;
+ vm_ranges_d = NULL;
+
use_datarec_sound = false;
use_vertical_pixel_lines = false;
notify_key_down_lr_shift = false;
#include <QOpenGLFramebufferObject>
#include <QOpenGLFramebufferObject>
#include <QColor>
+#include <QImageReader>
#include "qt_gldraw.h"
//#include "csp_logger.h"
rec_count = 0;
rec_width = using_flags->get_screen_width();
rec_height = using_flags->get_screen_height();
+ ButtonImages.clear();
}
GLDraw_2_0::~GLDraw_2_0()
void GLDraw_2_0::initButtons(void)
{
button_desc_t *vm_buttons_d = using_flags->get_vm_buttons();
+
if(vm_buttons_d != NULL) {
button_shader = new QOpenGLShaderProgram(p_wid);
if(button_shader != NULL) {
button_shader->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/normal_fragment_shader.glsl");
button_shader->link();
}
-
+
+ int ip = using_flags->get_max_button();
+ if(ip > 0) {
+ for(int num = 0; num < ip; num++) {
+ QString tmps;
+ tmps = QString::asprintf(":/button%02d.png", num);
+ QImageReader *reader = new QImageReader(tmps);
+ QImage *result = new QImage(reader->read());
+ QImage pic;
+ if(result != NULL) {
+ if(!result->isNull()) {
+ pic = result->convertToFormat(QImage::Format_ARGB32);
+ } else {
+ pic = QImage(10, 10, QImage::Format_RGBA8888);
+ pic.fill(QColor(0,0,0,0));
+ }
+ delete result;
+ }else {
+ pic = QImage(10, 10, QImage::Format_RGBA8888);
+ pic.fill(QColor(0,0,0,0));
+ }
+ ButtonImages.push_back(pic);
+ }
+ }
vertexButtons = new QVector<VertexTexCoord_t>;
- int i;
- for(i = 0; i < using_flags->get_max_button(); i++) {
+ for(int i = 0; i < using_flags->get_max_button(); i++) {
buffer_button_vertex[i] = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
buffer_button_vertex[i]->create();
fButtonX[i] = -1.0 + (float)(vm_buttons_d[i].x * 2) / (float)using_flags->get_screen_width();
void GLDraw_2_0::updateButtonTexture(void)
{
int i;
- QImage *img;
- QPainter *painter;
- QColor col;
- QRect rect;
- QPen *pen;
- QFont font = QFont(QString::fromUtf8("Sans"));
- if(button_updated) return;
- col.setRgb(0, 0, 0, 255);
- pen = new QPen(col);
button_desc_t *vm_buttons_d = using_flags->get_vm_buttons();
+ if(button_updated) return;
if(vm_buttons_d != NULL) {
for(i = 0; i < using_flags->get_max_button(); i++) {
- img = new QImage(vm_buttons_d[i].width * 4, vm_buttons_d[i].height * 4, QImage::Format_RGB32);
- painter = new QPainter(img);
- painter->setRenderHint(QPainter::Antialiasing, true);
- col.setRgb(255, 255, 255, 255);
- if(strlen(vm_buttons_d[i].caption) <= 3) {
- font.setPixelSize((vm_buttons_d[i].width * 4) / 2);
- } else {
- font.setPixelSize((vm_buttons_d[i].width * 4) / 4);
- }
- painter->fillRect(0, 0, vm_buttons_d[i].width * 4, vm_buttons_d[i].height * 4, col);
- painter->setFont(font);
- //painter->setPen(pen);
- rect.setWidth(vm_buttons_d[i].width * 4);
- rect.setHeight(vm_buttons_d[i].height * 4);
- rect.setX(0);
- rect.setY(0);
- painter->drawText(rect, Qt::AlignCenter, QString::fromUtf8(vm_buttons_d[i].caption));
+ QImage img = ButtonImages.at(i);
if(uButtonTextureID[i] != 0) {
p_wid->deleteTexture(uButtonTextureID[i]);
}
- uButtonTextureID[i] = p_wid->bindTexture(*img);
- delete painter;
- delete img;
+ uButtonTextureID[i] = p_wid->bindTexture(img);
}
}
- delete pen;
button_updated = true;
}
#include <QImage>
#include <QOpenGLFunctions_2_0>
#include <QTimer>
+#include <QList>
#include "common.h"
GLfloat fButtonHeight[128];
QVector<VertexTexCoord_t> *vertexButtons;
+ QVector<QImage> ButtonImages;
bool button_updated;
void updateButtonTexture(void);
+
GLfloat fBrightR;
GLfloat fBrightG;
} // retranslateUi
-META_MainWindow::META_MainWindow(USING_FLAGS *p, QWidget *parent) : Ui_MainWindow(p, parent)
+META_MainWindow::META_MainWindow(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent) : Ui_MainWindow(p, logger, parent)
{
setupUI_Emu();
retranslateUi();
class Ui_MainWindow;
class USING_FLAGS;
+class CSP_Logger;
class META_MainWindow : public Ui_MainWindow {
Q_OBJECT
protected:
void retranslateUi(void);
public:
- META_MainWindow(USING_FLAGS *p, QWidget *parent = 0);
+ META_MainWindow(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent = 0);
~META_MainWindow();
public slots:
-META_MainWindow::META_MainWindow(USING_FLAGS *p, QWidget *parent) : Ui_MainWindow(p, parent)
+META_MainWindow::META_MainWindow(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent) : Ui_MainWindow(p, logger, parent)
{
setupUI_Emu();
retranslateUi();
class Ui_MainWindow;
class USING_FLAGS;
+class CSP_Logger;
// wrote of X1 Specific menu.
class META_MainWindow : public Ui_MainWindow {
Q_OBJECT
void setupUI_Emu(void);
void retranslateUi(void);
public:
- META_MainWindow(USING_FLAGS *p, QWidget *parent = 0);
+ META_MainWindow(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent = 0);
~META_MainWindow();
public slots:
};
#include <QPoint>
#include <QTextCodec>
#include <QDateTime>
+#include <QImageReader>
#include "qt_gldraw.h"
#include "osd.h"
{
if(!using_flags->is_use_one_board_computer()) return;
- int i;
- QImage *img;
- QPainter *painter;
- QColor col;
- QRect rect;
- QPen *pen;
- QFont font = QFont(QString::fromUtf8("Sans"));
- col.setRgb(0, 0, 0, 255);
- pen = new QPen(col);
-
button_desc_t *vm_buttons_d = using_flags->get_vm_buttons();
if(vm_buttons_d != NULL) {
- for(i = 0; i < using_flags->get_max_button(); i++) {
- button_images[i] = QImage(vm_buttons_d[i].width, vm_buttons_d[i].height, QImage::Format_RGB32);
- img = &(button_images[i]);
- painter = new QPainter(img);
- painter->setRenderHint(QPainter::Antialiasing, true);
- col.setRgb(255, 255, 255, 255);
- if(strlen(vm_buttons_d[i].caption) <= 3) {
- font.setPixelSize(vm_buttons_d[i].width / 2);
- } else {
- font.setPixelSize(vm_buttons_d[i].width / 4);
+ for(int i = 0; i < using_flags->get_max_button(); i++) {
+ QString tmps;
+ tmps = QString::asprintf(":/button%02d.png", i);
+ QImageReader *reader = new QImageReader(tmps);
+ QImage *result = new QImage(reader->read());
+ QImage pic;
+ if(result != NULL) {
+ if(!result->isNull()) {
+ pic = result->convertToFormat(QImage::Format_ARGB32);
+ } else {
+ pic = QImage(10, 10, QImage::Format_RGBA8888);
+ pic.fill(QColor(0,0,0,0));
+ }
+ delete result;
+ }else {
+ pic = QImage(10, 10, QImage::Format_RGBA8888);
+ pic.fill(QColor(0,0,0,0));
}
- painter->fillRect(0, 0, vm_buttons_d[i].width, vm_buttons_d[i].height, col);
- painter->setFont(font);
- //painter->setPen(pen);
- rect.setWidth(vm_buttons_d[i].width);
- rect.setHeight(vm_buttons_d[i].height);
- rect.setX(0);
- rect.setY(0);
- painter->drawText(rect, Qt::AlignCenter, QString::fromUtf8(vm_buttons_d[i].caption));
- delete painter;
+ button_images[i] = pic;
}
}
- delete pen;
QRgb pixel;
if(vm_buttons_d != NULL) {
for(int ii = 0; ii < using_flags->get_max_button(); ii++) {
- for(int yy = 0; yy < vm_buttons_d[ii].width; yy++) {
- for(int xx = 0; xx < vm_buttons_d[ii].height; xx++) {
+ int ww = button_images[ii].width();
+ int hh = button_images[ii].height();
+ for(int yy = 0; yy < hh; yy++) {
+ for(int xx = 0; xx < ww; xx++) {
pixel = button_images[ii].pixel(xx, yy);
int xxx = vm_buttons_d[ii].x + xx;
int yyy = vm_buttons_d[ii].y + yy;
}
}
}
+
}
int OSD_BASE::add_video_frames()
QRgb pixel;
int ww = video_result->width();
int hh = video_result->height();
- printf("%d x %d\n", ww, hh);
+ //printf("%d x %d\n", ww, hh);
for(int yy = 0; yy < hh; yy++) {
for(int xx = 0; xx < ww; xx++) {
pixel = video_result->pixel(xx, yy);
if(dcount_sound < MAX_SOUND) {
d_sound[dcount_sound++] = device;
}
- printf("SOUND %d\n", dcount_sound);
+ //printf("SOUND %d\n", dcount_sound);
}
void touch_sound(void)
{