OSDN Git Service

[UI][Qt] Status bar: resize when screen was resized.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 17 Oct 2015 06:56:54 +0000 (15:56 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 17 Oct 2015 06:56:54 +0000 (15:56 +0900)
source/src/qt/common/qt_gldraw.cpp
source/src/qt/common/qt_gldraw.h
source/src/qt/common/qt_main.cpp
source/src/qt/common/qt_screen.cpp
source/src/qt/gui/display_statusbar.cpp
source/src/qt/gui/mainwidget.h

index 3f66efd..03d55ba 100644 (file)
@@ -503,6 +503,7 @@ void GLDrawClass::resizeGL(int width, int height)
 #endif
        
        AGAR_DebugLog(AGAR_LOG_DEBUG, "ResizeGL: %dx%d", width , height);
+       emit sig_resize_uibar(width, height);
        extfunc->glMatrixMode(GL_PROJECTION);
        extfunc->glLoadIdentity();
 #ifdef QT_OPENGL_ES_1
index 5124c85..94841d7 100644 (file)
@@ -200,6 +200,7 @@ signals:
        void do_notify_button_pressed(Qt::MouseButton button);
        void do_notify_button_released(Qt::MouseButton button);
        void sig_check_grab_mouse(bool);
+       void sig_resize_uibar(int, int);
 };
 
 #endif // End.
index da85ab1..bf5d2b0 100644 (file)
@@ -396,6 +396,8 @@ void Ui_MainWindow::LaunchEmuThread(void)
                hRunEmu, SLOT(button_released_mouse(Qt::MouseButton)));
        connect(glv, SIGNAL(sig_toggle_mouse(void)),
                this, SLOT(do_toggle_mouse(void)));
+       connect(glv, SIGNAL(sig_resize_uibar(int, int)),
+               this, SLOT(resize_statusbar(int, int)));
        objNameStr = QString("EmuDrawThread");
        hDrawEmu->setObjectName(objNameStr);
        hDrawEmu->start();
@@ -726,8 +728,10 @@ void Ui_MainWindow::set_window(int mode)
                // set screen size to emu class
                emu->suspend();
                emu->set_display_size(width, height, true);
-               if(rMainWindow) rMainWindow->getGraphicsView()->resize(width, height);
-
+               if(rMainWindow) {
+                       rMainWindow->getGraphicsView()->resize(width, height);
+                       rMainWindow->resize_statusbar(width, height);
+               }
        } else if(!now_fullscreen) {
                // fullscreen
                if(mode >= screen_mode_count) return;
@@ -754,6 +758,7 @@ void Ui_MainWindow::set_window(int mode)
                // set screen size to emu class
                emu->set_display_size(width, height, false);
                graphicsView->resize(width, height);
+               this->resize_statusbar(width, height);
        }
 }
 
index f8a7a24..711323b 100644 (file)
@@ -204,12 +204,12 @@ void EMU::set_display_size(int width, int height, bool window_mode)
        if(!stretch_changed && !display_size_changed) return;
        AGAR_DebugLog(AGAR_LOG_DEBUG, "Set display size");
        AGAR_DebugLog(AGAR_LOG_DEBUG, "       to %d x %d", width, height);
-#if 1   
+
        if(main_window_handle != NULL) {
+               main_window_handle->resize_statusbar(stretched_width, stretched_height);
                main_window_handle->resize(stretched_width, stretched_height);
                //      main_window_handle->getGraphicsView()->resize(stretched_width, stretched_height);
        }
-#endif   
        first_draw_screen = false;
        first_invalidate = true;
        screen_size_changed = false;
@@ -242,6 +242,7 @@ void EMU::change_screen_size(int sw, int sh, int swa, int sha, int ww, int wh)
        AGAR_DebugLog(AGAR_LOG_DEBUG, "       To   %d x %d", screen_width, screen_height);
        AGAR_DebugLog(AGAR_LOG_DEBUG, "Window Size:%d x %d", window_width, window_height);
        if(main_window_handle != NULL) {
+               main_window_handle->resize_statusbar(stretched_width, stretched_height);
                //        set_window(main_window_handle->getWindow(), window_mode); 
                main_window_handle->getGraphicsView()->resize(screen_width, screen_height);
        }
index 34cac2c..c667f55 100644 (file)
@@ -15,6 +15,7 @@
 #include <QPainter>
 #include <QBrush>
 #include <QGraphicsView>
+#include <QTransform>
 
 #include "menuclasses.h"
 #include "emu.h"
@@ -26,6 +27,7 @@ extern EMU* emu;
 void Ui_MainWindow::initStatusBar(void)
 {
        int i;
+       int wfactor;
        statusUpdateTimer = new QTimer;
        messagesStatusBar = new QLabel;
        //dummyStatusArea1 = new QWidget;
@@ -34,15 +36,32 @@ void Ui_MainWindow::initStatusBar(void)
        //   QHBoxLayout *layout = new QHBoxLayout();
        
        //statusbar->addWidget(layout, 0);
-       messagesStatusBar->setFixedWidth(350);
+       messagesStatusBar->setFixedWidth(400);
        statusbar->addPermanentWidget(messagesStatusBar, 0);
+       messagesStatusBar->font().setPointSize(12);
        dummyStatusArea1 = new QWidget;
        statusbar->addPermanentWidget(dummyStatusArea1, 1);
-       //   statusbar->insertStretch(1);
+       
+#if defined(USE_FD1) && defined(USE_QD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / (MAX_FD + MAX_QD);
+#elif defined(USE_FD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / MAX_FD;
+#elif defined(USE_QD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / MAX_QD;
+#elif defined(USE_FD1)
+       wfactor = (1280 - 400 - 100) / MAX_FD;
+#elif defined(USE_QD1)
+       wfactor = (1280 - 400 - 100) / MAX_QD;
+#elif defined(USE_QD1) && defined(USE_FD1)
+       wfactor = (1280 - 400 - 100) / (MAX_QD + MAX_FD);
+#else
+       wfactor = 0;
+#endif
 #ifdef USE_FD1
        for(i = 0; i < MAX_FD; i++) { // Will Fix
                fd_StatusBar[i] = new QLabel;
-               fd_StatusBar[i]->setFixedWidth(200);
+               fd_StatusBar[i]->font().setPointSize(12);
+               fd_StatusBar[i]->setFixedWidth((wfactor > 200) ? 200 : wfactor);
                //      fd_StatusBar[i]->setAlignment(Qt::AlignRight);
                statusbar->addPermanentWidget(fd_StatusBar[i]);
        }
@@ -50,7 +69,8 @@ void Ui_MainWindow::initStatusBar(void)
 #ifdef USE_QD1
        for(i = 0; i < MAX_QD; i++) {
                qd_StatusBar[i] = new QLabel;
-               qd_StatusBar[i]->setFixedWidth(150);
+               qd_StatusBar[i]->font().setPointSize(12);
+               qd_StatusBar[i]->setFixedWidth((wfactror > 150) ? 150 : wfactor);
                //     qd_StatusBar[i]->setAlignment(Qt::AlignRight);
                statusbar->addPermanentWidget(qd_StatusBar[i]);
        }
@@ -58,6 +78,7 @@ void Ui_MainWindow::initStatusBar(void)
 #ifdef USE_TAPE
        cmt_StatusBar = new QLabel;
        cmt_StatusBar->setFixedWidth(100);
+       cmt_StatusBar->font().setPointSize(12);
        statusbar->addPermanentWidget(cmt_StatusBar);
 #endif
        dummyStatusArea2 = new QWidget;
@@ -74,6 +95,26 @@ void Ui_MainWindow::initStatusBar(void)
        QBrush bbrush(QColor(Qt::black));
        led_graphicsView->setBackgroundBrush(bbrush);
        connect(this, SIGNAL(sig_led_update(QRectF)), led_graphicsView, SLOT(updateSceneRect(QRectF)));
+       {
+               QBrush rbrush(QColor(Qt::red));
+               float bitwidth = (float)dummyStatusArea2->width() / ((float)SUPPORT_DUMMY_DEVICE_LED * 2.0);
+               float start = -(float)dummyStatusArea2->width()  / 2.0f + bitwidth * 3.0f;
+
+               pen.setColor(Qt::black);
+               led_gScene->addRect(0, 0, 
+                                   -(float)dummyStatusArea2->width(),
+                                   (float)dummyStatusArea2->height(),
+                                   pen, bbrush);
+               for(i = 0; i < SUPPORT_DUMMY_DEVICE_LED; i++) {
+                       led_leds[i] = NULL;
+                       pen.setColor(Qt::red);
+                       led_leds[i] = led_gScene->addEllipse(start,
+                                 (float)dummyStatusArea2->height() / 3.0f,
+                                  bitwidth - 2.0f, bitwidth - 2.0f,
+                                  pen, rbrush);
+                       start = start + bitwidth * 1.5f;
+               }
+       }
 #endif
        statusbar->addPermanentWidget(dummyStatusArea2, 0);
        //   statusbar->addWidget(dummyStatusArea2);
@@ -86,38 +127,137 @@ void Ui_MainWindow::initStatusBar(void)
 #endif
 }
 
-#ifdef SUPPORT_DUMMY_DEVICE_LED
-void Ui_MainWindow::redraw_leds(void)
+void Ui_MainWindow::resize_statusbar(int w, int h)
 {
-               uint32 drawflags;
+       int wfactor;
+       QSize nowSize;
+       double height, width;
+       double scaleFactor;
+       int ww;
+       int pt;
+       int i;
+       int qd_width, fd_width;
+       int sfactor = 0;;
+
+       nowSize = messagesStatusBar->size();
+       height = (double)(nowSize.height());
+       width  = (double)(nowSize.width());
+       scaleFactor = (double)w / 1280.0;
+   
+       statusbar->setFixedWidth(w);
+       pt = (int)(14.0 * scaleFactor);
+       if(pt < 4) pt = 4;
+       sfactor = (int)(400.0 * scaleFactor);
+       messagesStatusBar->setFixedWidth((int)(400.0 * scaleFactor));
+       messagesStatusBar->font().setPointSize(pt);
+   
+#if defined(USE_FD1) && defined(USE_QD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / (MAX_FD + MAX_QD);
+#elif defined(USE_FD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / MAX_FD;
+#elif defined(USE_QD1) && defined(USE_TAPE)
+       wfactor = (1280 - 400 - 100 - 100) / MAX_QD;
+#elif defined(USE_FD1)
+       wfactor = (1280 - 400 - 100) / MAX_FD;
+#elif defined(USE_QD1)
+       wfactor = (1280 - 400 - 100) / MAX_QD;
+#elif defined(USE_QD1) && defined(USE_FD1)
+       wfactor = (1280 - 400 - 100) / (MAX_QD + MAX_FD);
+#else
+       wfactor = 100;
+#endif
+       fd_width = wfactor;
+       qd_width = wfactor;
+       if(fd_width > 200) fd_width = 200;
+       if(fd_width < 50) fd_width = 50;
+       if(qd_width > 150) qd_width = 150;
+       if(qd_width < 50) qd_width = 50;
+
+#ifdef USE_FD1
+       ww = (int)(scaleFactor * (double)fd_width);
+       for(i = 0; i < MAX_FD; i++) { // Will Fix
+               fd_StatusBar[i]->font().setPointSize(pt);
+               fd_StatusBar[i]->setFixedWidth(ww);
+               sfactor += ww;
+       }
+#endif
+#ifdef USE_QD1
+       ww = (int)(scaleFactor * (double)fd_width);
+       for(i = 0; i < MAX_QD; i++) { // Will Fix
+               qd_StatusBar[i]->font().setPointSize(pt);
+               qd_StatusBar[i]->setFixedWidth(ww);
+               sfactor += ww;
+       }
+#endif
+#ifdef USE_TAPE
+       cmt_StatusBar->setFixedWidth((int)(100.0 * scaleFactor));
+       cmt_StatusBar->font().setPointSize(pt);
+       sfactor += (int)(100.0 * scaleFactor);
+#endif
+#ifdef SUPPORT_DUMMY_DEVICE_LED
+       led_graphicsView->setFixedWidth((int)(100.0 * scaleFactor)); 
+#endif   
+       dummyStatusArea2->setFixedWidth((int)(108.0 * scaleFactor));
+       sfactor += (int)(100.0 * scaleFactor);
+       sfactor = (int)(1280.0 * scaleFactor) - sfactor;
+       if(sfactor > 10) {
+               dummyStatusArea1->setVisible(true);
+       } else {
+               dummyStatusArea1->setVisible(false);
+               sfactor = 10;
+       }
+       dummyStatusArea1->setFixedWidth(sfactor);   
+#ifdef SUPPORT_DUMMY_DEVICE_LED
+       {
                QPen pen;
                QBrush rbrush(QColor(Qt::red));
                QBrush bbrush(QColor(Qt::black));
-               float bitwidth = (float)dummyStatusArea2->width() / (float)(SUPPORT_DUMMY_DEVICE_LED * 2);
-               float start = -(float)dummyStatusArea2->width() + bitwidth * 3.0f;
+               float bitwidth = (float)dummyStatusArea2->width() / ((float)SUPPORT_DUMMY_DEVICE_LED * 2.0);
+               float start = -(float)dummyStatusArea2->width()  / 2.0f + bitwidth * 3.0f;
+
+               led_gScene->clear();
+
+               pen.setColor(Qt::black);
+               led_gScene->addRect(0, 0, 
+                                   -(float)dummyStatusArea2->width(),
+                                   (float)dummyStatusArea2->height(),
+                                   pen, bbrush);
+               for(i = 0; i < SUPPORT_DUMMY_DEVICE_LED; i++) {
+                       led_leds[i] = NULL;
+                       pen.setColor(Qt::red);
+                       led_leds[i] = led_gScene->addEllipse(start,
+                                 (float)dummyStatusArea2->height() / 3.0f,
+                                  bitwidth - 2.0f, bitwidth - 2.0f,
+                                  pen, rbrush);
+                       start = start + bitwidth * 1.5f;
+               }
+               //redraw_leds();
+       }
+#endif
+}
+
+#ifdef SUPPORT_DUMMY_DEVICE_LED
+void Ui_MainWindow::redraw_leds(void)
+{
+               uint32 drawflags;
                int i;
+               float bitwidth = (float)dummyStatusArea2->width() / ((float)SUPPORT_DUMMY_DEVICE_LED * 2.0);
+               float start = -(float)dummyStatusArea2->width() + bitwidth * 4.0f;
                if(emu == NULL) return;
                drawflags = emu->get_led_status();
                
                for(i = 0; i < SUPPORT_DUMMY_DEVICE_LED; i++) {
                        flags_led[i] = ((drawflags & (1 << i)) != 0);
-                       if(flags_led[i] != flags_led_bak[i]) {
+                       if(led_leds[i] != NULL) {
                                if(flags_led[i]) {
-                                       pen.setColor(Qt::red);
-                                       led_gScene->addEllipse(start,
-                                                                                  0.0f, bitwidth - 4.0f, bitwidth - 4.0f,
-                                                                                  pen, rbrush);
+                                       led_leds[i]->setVisible(true);
                                } else {
-                                       pen.setColor(Qt::black);
-                                       led_gScene->addEllipse(start,
-                                                                                  0.0f, bitwidth - 4.0f, bitwidth - 4.0f,
-                                                                                  pen, bbrush);
+                                       led_leds[i]->setVisible(false);
                                }
-                               emit sig_led_update(QRectF(start,
-                                                                                  0.0f, bitwidth * 2.0f, bitwidth * 2.0f));
                        }
+                       emit sig_led_update(QRectF(start,
+                                          0.0f, bitwidth * 2.0f, bitwidth * 2.0f));
                        start = start + bitwidth * 1.5f;
-                       flags_led_bak[i] = flags_led[i];
                }
                led_graphicsView->setScene(led_gScene);
 }      
index 9717d77..5f2a4e4 100644 (file)
@@ -21,6 +21,7 @@
 #include <QWidget>
 #include <QIcon>
 #include <QLabel>
+#include <QGraphicsEllipseItem>
 #else
 #include <QtCore/QVariant>
 #include <QtGui/QAction>
@@ -356,7 +357,7 @@ class Ui_MainWindow : public QMainWindow
        bool flags_led_bak[SUPPORT_DUMMY_DEVICE_LED];
        QGraphicsView *led_graphicsView;
        QGraphicsScene *led_gScene;
-
+       QGraphicsEllipseItem *led_leds[SUPPORT_DUMMY_DEVICE_LED];
 #endif
        // About Status bar
        virtual void initStatusBar(void);
@@ -516,6 +517,7 @@ public slots:
        void set_sound_device(int);
        void set_monitor_type(int);
        void message_status_bar(QString);
+       void resize_statusbar(int w, int h);
        void do_release_emu_resources(void);
 # if defined(USE_DEVICE_TYPE)
        void set_device_type(int);
@@ -565,6 +567,7 @@ signals:
        int sig_vm_loadstate(void);
        int sig_vm_savestate(void);
        int sig_check_grab_mouse(bool);
+       int sig_resize_uibar(int, int);
 #ifdef SUPPORT_DUMMY_DEVICE_LED
        int sig_led_update(QRectF);
 #endif