ui: refactoring for window resizing
authorGiWoong Kim <giwoong.kim@samsung.com>
Wed, 1 Apr 2015 07:26:12 +0000 (16:26 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Wed, 1 Apr 2015 08:43:03 +0000 (17:43 +0900)
do not call resize() or setGeometry() inside resizeEvent()
fit a scene on a view in SkinView
remove dependency between resolution and display size

Change-Id: I869d73c13e27471ce12abdd8f2e41139d1c35794
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
12 files changed:
tizen/src/ui/controller/dockingconview.cpp
tizen/src/ui/controller/floatingconview.cpp
tizen/src/ui/displaybase.cpp
tizen/src/ui/displaybase.h
tizen/src/ui/displayglwidget.cpp
tizen/src/ui/displayglwidget.h
tizen/src/ui/displayswwidget.cpp
tizen/src/ui/displayswwidget.h
tizen/src/ui/mainwindow.cpp
tizen/src/ui/resource/skins/mobile-general-3btn/layout.xml
tizen/src/ui/resource/skins/wearable-general-1btn/layout.xml
tizen/src/ui/skinview.cpp

index 5ab54a55e6d69b582c7de48600f4eab0c06af933..467b24822ff5cb2794a5dcaa9715920baa78c262 100644 (file)
@@ -86,6 +86,8 @@ void DockingConView::resizeEvent(QResizeEvent *event)
     Q_UNUSED(event)
 
     /* do nothing */
+
+    QGraphicsView::resizeEvent(event);
 }
 
 void DockingConView::mousePressEvent(QMouseEvent *event)
index 28bb576d6b6ba0704e42a4f7a0743bf0666d38d4..00338455931a400600c11da841ed39c7e5840432 100644 (file)
@@ -85,9 +85,11 @@ void FloatingConView::createItems(ControllerForm *conForm)
 
 void FloatingConView::resizeEvent(QResizeEvent *event)
 {
-    //qDebug("resize con view");
-
     Q_UNUSED(event)
+
+    /* do nothing */
+
+    QGraphicsView::resizeEvent(event);
 }
 
 int FloatingConView::isDockable(QWidget *object, QWidget *subject)
index 782b1c0ae7985b9e93eb36abb0e45ea46bb7a190..69a0b5c52e356883676dc6193f0433bed4ddc353 100644 (file)
@@ -35,44 +35,36 @@ uint32_t qt5_window_width = 0;
 uint32_t qt5_window_height = 0;
 int qt5_window_angle = 0;
 
-DisplayBase::DisplayBase(QSize resolution, QWidget *w)
-    : resolution(resolution), widget(w), isDragging(false)
+DisplayBase::DisplayBase(QRect rect, int angle, qreal scaleFactor,
+    QWidget *w) : widget(w)
 {
-    /* initialize */
-    // TODO: compare display region with resolution
+    this->rect = rect;
+    this->rotateAngle = angle;
+    this->scaleFactor = scaleFactor;
+    this->isDragging = false;
 
-    MainWindow *win = ((MainWindow *)w->parent()->parent());
-    rotateAngle = win->uiInfo->getMainFormDisplayType()->getAngle();
-    scaleFactor = win->getUIState()->getScaleFactor();
+    updateGeometry();
 }
 
-DisplayBase::~DisplayBase()
-{
-    qDebug("destory display");
-}
-
-void DisplayBase::rotate(int angle)
+void DisplayBase::rotate(QRect rect, int angle)
 {
     qDebug("display rotate : %d", angle);
 
-    rotateAngle = angle;
+    this->rect = rect;
+    qt5_window_angle = rotateAngle = angle;
 
-    qt5_window_angle = angle;
-
-    /* adjustSize() doesn't work */
-    widget->resize(0, 0);
+    updateGeometry();
 
     widget->repaint();
 }
 
-void DisplayBase::scale(int scale)
+void DisplayBase::scale(qreal scaleFactor)
 {
-    qDebug("display scale : %d", scale);
+    qDebug() << "display scale factor :" << scaleFactor;
 
-    scaleFactor = ((qreal)scale) / 100;
+    this->scaleFactor = scaleFactor;
 
-    /* adjustSize() doesn't work */
-    widget->resize(0, 0);
+    updateGeometry();
 
     widget->repaint();
 }
@@ -82,25 +74,23 @@ void DisplayBase::update()
     qt5_graphic_hw_invalidate();
 }
 
+void DisplayBase::updateGeometry()
+{
+    widget->setGeometry(rect.x() * scaleFactor,
+        rect.y() * scaleFactor,
+        rect.width() * scaleFactor,
+        rect.height() * scaleFactor);
+}
+
 void DisplayBase::handlePaint(QPaintEvent *event)
 {
+    /* do nothing */
 }
 
 void DisplayBase::handleResize(QResizeEvent *event)
 {
     qDebug("resize display");
 
-    MainWindow *win = ((MainWindow *)widget->parent()->parent());
-    MainForm *form = win->uiInfo->getMainForm();
-
-    const qreal sx = scaleFactor;
-    const qreal sy = scaleFactor;
-
-    widget->setGeometry(form->displayType->getRect().x() * sx,
-        form->displayType->getRect().y() * sy,
-        form->displayType->getRect().width() * sx,
-        form->displayType->getRect().height() * sy);
-
     qt5_window_width = widget->width();
     qt5_window_height = widget->height();
 
@@ -169,14 +159,14 @@ void DisplayBase::sendTouchEvent(int eventType, int clientX, int clientY)
     switch(rotateAngle) {
     case 90: /* Reverse Landscape */
         absX = yy;
-        absY = resolution.height() - xx;
+        absY = rect.height() - xx;
         break;
     case 180: /* Reverse Portrait */
-        absX = resolution.width() - xx;
-        absY = resolution.height() - yy;
+        absX = rect.width() - xx;
+        absY = rect.height() - yy;
         break;
     case 270: /* Landscape */
-        absX = resolution.width() - yy;
+        absX = rect.width() - yy;
         absY = xx;
         break;
     case 0:
@@ -186,3 +176,8 @@ void DisplayBase::sendTouchEvent(int eventType, int clientX, int clientY)
 
     do_mouse_event(0, eventType, clientX, clientY, absX, absY, 0);
 }
+
+DisplayBase::~DisplayBase()
+{
+    qDebug("destroy display");
+}
index 2ca4ec872fdceb34c16d003b530c87cff37cd111..ed1ccfdcada8dd2f722afa93755f246bbb469238 100644 (file)
@@ -45,17 +45,15 @@ enum {
 class DisplayBase
 {
 public:
-    void rotate(int angle);
-    void scale(int scale);
+    void rotate(QRect rect, int angle);
+    void scale(qreal scaleFactor);
     void update();
+    void updateGeometry();
 
 protected:
-    DisplayBase(QSize resolution, QWidget *w);
+    DisplayBase(QRect rect, int angle, qreal scaleFactor, QWidget *w);
     virtual ~DisplayBase();
 
-    void setRotate(int angle);
-    void setScale(int scale);
-
     void handlePaint(QPaintEvent *event);
     void handleResize(QResizeEvent *event);
 
@@ -66,8 +64,8 @@ protected:
 private:
     void sendTouchEvent(int eventType, int clientX, int clientY);
 
-    QSize resolution;
     QWidget *widget;
+    QRect rect;
     int rotateAngle;
     qreal scaleFactor;
 
index 1198fe0b6fd212278102da859e34ea79fb222a1c..50c2ba3ed442906450050278de22c31b70bf264b 100644 (file)
  *
  */
 
-#include <QtWidgets>
-
 #include "displayglwidget.h"
 
-DisplayGLWidget::DisplayGLWidget(QSize resolution, QGLContext *context, QWidget *parent) :
-    QGLWidget(context, parent),
-    DisplayBase(resolution, this)
+DisplayGLWidget::DisplayGLWidget(QWidget *parent,
+    QGLContext *context, QRect rect, int angle, qreal scaleFactor) :
+    QGLWidget(context, parent), DisplayBase(rect, angle, scaleFactor, this)
 {
     setAutoBufferSwap(false);
 }
@@ -83,4 +81,5 @@ void DisplayGLWidget::mouseMoveEvent(QMouseEvent *event)
 
 DisplayGLWidget::~DisplayGLWidget()
 {
+    /* do nothing */
 }
index 9a1b8d88b021ecf04cc5d0e783eaefd1d269d19e..808bd70033cff82c0b7f425f59394a80c6615482 100644 (file)
 #ifndef DISPLAYGLWIDGET_H
 #define DISPLAYGLWIDGET_H
 
-#include "displaybase.h"
 #include <QGLWidget>
 
+#include "displaybase.h"
+
 class DisplayGLWidget : public QGLWidget,
                         public DisplayBase
 {
     Q_OBJECT
 
 public:
-    DisplayGLWidget(QSize resolution, QGLContext *context, QWidget *parent = 0);
+    DisplayGLWidget(QWidget *parent,
+        QGLContext *context, QRect rect, int angle, qreal scaleFactor);
     ~DisplayGLWidget();
 
 protected:
index 3cb3b2331afb579b5ef4457914991fb06c74cfec..e036fc7605488edfcea293cfff81048d127c0ab3 100644 (file)
  *
  */
 
-#include <QtWidgets>
-
 #include "displayswwidget.h"
 
-DisplaySWWidget::DisplaySWWidget(QSize resolution, QWidget *parent) :
-    QLabel(parent),
-    DisplayBase(resolution, this)
+DisplaySWWidget::DisplaySWWidget(QWidget *parent,
+    QRect rect, int angle, qreal scaleFactor) :
+    QLabel(parent), DisplayBase(rect, angle, scaleFactor, this)
 {
+    /* do nothing */
 }
 
 void DisplaySWWidget::paintEvent(QPaintEvent *event)
@@ -67,4 +66,5 @@ void DisplaySWWidget::mouseMoveEvent(QMouseEvent *event)
 
 DisplaySWWidget::~DisplaySWWidget()
 {
+    /* do nothing */
 }
index 69454eb1e3583dee952871d523f86eba5d314a99..f8e99b4ce04680f629655b6906a0a37d0a43ce3d 100644 (file)
 #ifndef DISPLAYSWWIDGET_H
 #define DISPLAYSWWIDGET_H
 
-#include "displaybase.h"
 #include <QLabel>
 
+#include "displaybase.h"
+
 class DisplaySWWidget : public QLabel,
                         public DisplayBase
 {
     Q_OBJECT
 
 public:
-    DisplaySWWidget(QSize resolution, QWidget *parent = 0);
+    DisplaySWWidget(QWidget *parent,
+        QRect rect, int angle, qreal scaleFactor);
     ~DisplaySWWidget();
 
 protected:
index 8a4ffd7f351c5d8f612e6ae0950a733db92e3259..0d012d632de0ff9ed2298e40f67ff53d40773361 100644 (file)
@@ -120,13 +120,19 @@ MainWindow::MainWindow(UIInformation *uiInfo, QWidget *parent)
          */
         context = new QGLContext(format);
 
-        display = new DisplayGLWidget(uiInfo->resolution, context, skinView);
+        display = new DisplayGLWidget(skinView, context,
+            uiInfo->getMainFormDisplayType()->getRect(),
+            uiInfo->getMainFormDisplayType()->getAngle(),
+            getUIState()->getScaleFactor());
 
         context->setFormat(format);
 
         context->create(wrapperContext);
     } else { /* off-screen rendering */
-        DisplaySWWidget *w = new DisplaySWWidget(uiInfo->resolution, skinView);
+        DisplaySWWidget *w = new DisplaySWWidget(skinView,
+            uiInfo->getMainFormDisplayType()->getRect(),
+            uiInfo->getMainFormDisplayType()->getAngle(),
+            getUIState()->getScaleFactor());
 
         display = w;
         screenWidget = w;
@@ -254,7 +260,8 @@ void MainWindow::openController(int index, int dockPos)
 
     /* update layout */
     getUIState()->conState.conFormIndex = index;
-    adjustSize();
+
+    resize(uiInfo->getUiSize());
 
     /* arrange */
     if (dockPos == -1) {
@@ -293,7 +300,7 @@ void MainWindow::closeController()
 
         getUIState()->conState.dockingCon = NULL;
 
-        adjustSize();
+        resize(uiInfo->getUiSize());
     }
 
     if (getFloatingCon() != NULL) {
@@ -318,9 +325,9 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 {
     qDebug("resize main window");
 
-    resize(uiInfo->getUiSize());
-
     setMask(uiInfo->getUiRegion());
+
+    QWidget::resizeEvent(event);
 }
 
 /* override */
@@ -336,11 +343,13 @@ void MainWindow::switchForm(int index)
     qDebug("window switch : %d", index);
 
     getUIState()->mainFormIndex = index;
-
     skinView->update();
-    display->rotate(uiInfo->getMainFormDisplayType()->getAngle());
 
-    adjustSize();
+    display->rotate(
+        uiInfo->getMainFormDisplayType()->getRect(),
+        uiInfo->getMainFormDisplayType()->getAngle());
+
+    resize(uiInfo->getUiSize());
 }
 
 void MainWindow::scaleForm(int scale)
@@ -348,11 +357,11 @@ void MainWindow::scaleForm(int scale)
     qDebug("window scale : %d", scale);
 
     getUIState()->mainFormScale = scale;
+    skinView->update();
 
-    skinView->adjustSize();
-    display->scale(getUIState()->mainFormScale);
+    display->scale(getUIState()->getScaleFactor());
 
-    adjustSize();
+    resize(uiInfo->getUiSize());
 }
 
 void MainWindow::capture(void)
index 9ba5dd19043bbe8358eaf38953198e47305e045c..d9add190782cbea68c2730414082b2261f205485 100644 (file)
@@ -47,6 +47,7 @@
             </factorList>
         </scaleItem>
         <separator/>
+        <controllerItem/>
         <advancedItem>
             <menuList>
                 <screenShotItem name="Screen Shot">
@@ -61,7 +62,6 @@
                 </forceCloseItem>
             </menuList>
         </advancedItem>
-        <controllerItem/>
         <shellItem name="Shell">
             <shortcut>Ctrl+F5</shortcut>
         </shellItem>
index 17ac355777b1acf3e16fc572190be1f27fecc8d1..9d8d46a8a118e6191b4bf1f73068f04401f12a57 100644 (file)
@@ -37,6 +37,7 @@
             <shortcut property="next">Ctrl+Num+9</shortcut>
         </switchItem>
         <separator/>
+        <controllerItem/>
         <advancedItem>
             <menuList>
                 <screenShotItem name="Screen Shot">
index fd3e4f333d4825bb052609e314a8ae424e37f158..3a7a717e866ddf47822a2aa4bf57f2defba594e8 100644 (file)
@@ -75,9 +75,11 @@ void SkinView::update()
 {
     scene()->clear();
 
-    createItems(win->uiInfo->getMainForm());
+    /* resizing */
+    resize(win->uiInfo->getUiSize());
+    scene()->setSceneRect(0, 0, size().width(), size().height());
 
-    adjustSize();
+    createItems(win->uiInfo->getMainForm());
 }
 
 void SkinView::resizeEvent(QResizeEvent *event)
@@ -86,18 +88,13 @@ void SkinView::resizeEvent(QResizeEvent *event)
 
     qDebug("resize skin view");
 
-    /* geometry */
-    const int width = win->uiInfo->getUiSize().width();
-    const int height = win->uiInfo->getUiSize().height();
-    setGeometry(0, 0, width, height);
-
     /* scaling */
     const qreal sx = win->getUIState()->getScaleFactor();
     const qreal sy = win->getUIState()->getScaleFactor();
     QTransform transform(sx, 0, 0, 0, sy, 0, 0, 0, 1);
     setTransform(transform);
 
-    //QGraphicsView::resizeEvent(event);
+    QGraphicsView::resizeEvent(event);
 }
 
 void SkinView::mousePressEvent(QMouseEvent *event)