controller: additional docking position support 84/29384/2
authorGiWoong Kim <giwoong.kim@samsung.com>
Mon, 13 Oct 2014 10:29:30 +0000 (19:29 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Tue, 28 Oct 2014 08:10:55 +0000 (01:10 -0700)
right-top, right-center, right-bottom

Change-Id: Icbf82983dba26f5eaee190d3dc861e278ae3c91c
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
12 files changed:
tizen/src/ui/dockingcontroller.cpp
tizen/src/ui/dockingcontroller.h
tizen/src/ui/dockingconview.cpp
tizen/src/ui/dockingconview.h
tizen/src/ui/floatingcontroller.cpp
tizen/src/ui/floatingcontroller.h
tizen/src/ui/floatingconview.cpp
tizen/src/ui/floatingconview.h
tizen/src/ui/mainwindow.cpp
tizen/src/ui/skinview.cpp
tizen/src/ui/uiinformation.cpp
tizen/src/ui/uiinformation.h

index fa1dd45903a371a79d1e33c146940f7f6cd9c87f..283e6babdeeb108a7486492618fca39decbbd4bf 100644 (file)
@@ -44,6 +44,14 @@ DockingController::DockingController(ControllerForm *conForm,
     layout->setMargin(0);
     layout->setSpacing(0);
 
+    if (dockPos & Qt::AlignCenter) {
+        layout->setAlignment(Qt::AlignCenter);
+    } else if (dockPos & Qt::AlignTop) {
+        layout->setAlignment(Qt::AlignTop);
+    } else if (dockPos & Qt::AlignBottom) {
+        layout->setAlignment(Qt::AlignBottom);
+    }
+
     QGraphicsScene *conScene = new QGraphicsScene(this);
     conScene->setBackgroundBrush(Qt::black);
 
@@ -52,6 +60,11 @@ DockingController::DockingController(ControllerForm *conForm,
     layout->addWidget(conView);
 }
 
+DockingConView *DockingController::getConView()
+{
+    return conView;
+}
+
 int DockingController::getDockPos()
 {
     return dockPos;
@@ -73,21 +86,6 @@ void DockingController::closeEvent(QCloseEvent *event) {
     win->getUIState()->conState.dockingCon = NULL;
 }
 
-void DockingController::setRegion(QImage baseImage)
-{
-    qDebug("set region");
-
-    /*
-    if (baseImage.isNull() == true) {
-        qWarning("invalid image for region");
-        return;
-    }
-
-    QImage region = baseImage.createAlphaMask();
-    setMask(QRegion(QBitmap::fromImage(region)));
-    */
-}
-
 DockingController::~DockingController()
 {
     qDebug("destroy docking contoller");
index b218f8c9048bd0efac8093c8a5e48522b5e5914d..a388030f56f8605e248b4a1047e35bfcf3f4e0ad 100644 (file)
@@ -44,14 +44,13 @@ public:
         QAction *menu, int dockPos, QWidget *parent = 0);
     ~DockingController();
 
+    DockingConView *getConView();
     int getDockPos();
 
 protected:
     void showEvent(QShowEvent *event);
     void closeEvent(QCloseEvent *event);
 
-    void setRegion(QImage baseImage);
-
 private:
     DockingConView *conView;
     ControllerForm *conForm;
index e56c514f9cff3c99b3a130ddf2c2daaf394ef64a..81919de2648948ece34a075911e7f13d48d094aa 100644 (file)
@@ -34,6 +34,8 @@
 DockingConView::DockingConView(ControllerForm *conForm, QGraphicsScene *scene, QWidget *parent)
     : QGraphicsView(scene, parent)
 {
+    this->parent = (DockingController *)parent;
+
     setStyleSheet("background: transparent");
     setStyleSheet("border-style: none");
 
@@ -83,11 +85,12 @@ void DockingConView::mousePressEvent(QMouseEvent *event)
     }
 
     if (event->button() == Qt::LeftButton) {
-        QWidget *win = ((QWidget *)this->parent()->parent());
+        QWidget *win = ((QWidget *)parent->parent());
 
         grabPos = event->globalPos();
         eventPos = event->pos();
-        rubberPos = win->pos() + ((QWidget *)this->parent())->pos();
+        rubberPos.setX(win->pos().x() + parent->pos().x());
+        rubberPos.setY(win->pos().y() + pos().y());
 
         if (rubberBand != NULL) {
             rubberBand->setGeometry(QRect(rubberPos, size()));
@@ -111,7 +114,7 @@ void DockingConView::mouseReleaseEvent(QMouseEvent *event)
             }
 
             /* toggle */
-            MainWindow *win = ((MainWindow *)this->parent()->parent());
+            MainWindow *win = ((MainWindow *)parent->parent());
             win->getUIState()->conState.recentlyFloatPos = event->globalPos() - eventPos;
 
             win->openController(win->getUIState()->conState.conFormIndex, -1);
index e4dc7d0c488b07272420e28ebfc876fc24ef3d9d..691400da41446f22821813ae7f7a61c740b11adc 100644 (file)
@@ -36,6 +36,8 @@
 #include "skinbezelitem.h"
 #include "controllerform.h"
 
+class DockingController;
+
 class DockingConView : public QGraphicsView
 {
 public:
@@ -55,6 +57,7 @@ protected:
 private:
     void createItems(ControllerForm *conForm);
 
+    DockingController *parent;
     SkinBezelItem *bezelItem;
     QRubberBand *rubberBand;
 };
index 36091f5c19218a80470904ed9b4878b4555e9f0c..0616eff4e73d21a33e8f341706ee90486b1dc803 100644 (file)
@@ -54,13 +54,18 @@ FloatingController::FloatingController(ControllerForm *conForm,
     layout->addWidget(conView);
 }
 
+FloatingConView *FloatingController::getConView()
+{
+    return conView;
+}
+
 void FloatingController::showEvent(QShowEvent *event)
 {
     if (menu != NULL) {
         menu->setChecked(true);
     }
 
-    setRegion(conForm->conImg[ControllerForm::normal]);
+    setRegion(&(conForm->conImg[ControllerForm::normal]));
 }
 
 void FloatingController::closeEvent(QCloseEvent *event) {
@@ -72,17 +77,16 @@ void FloatingController::closeEvent(QCloseEvent *event) {
     win->getUIState()->conState.floatingCon = NULL;
 }
 
-void FloatingController::setRegion(QImage baseImage)
+void FloatingController::setRegion(QImage *baseImage)
 {
-    //qDebug("set region");
+    qDebug("set region");
 
-    if (baseImage.isNull() == true) {
+    if (baseImage->isNull() == true) {
         qWarning("invalid image for region");
         return;
     }
 
-    QImage region = baseImage.createAlphaMask();
-    setMask(QRegion(QBitmap::fromImage(region)));
+    setMask(QRegion(QBitmap::fromImage(baseImage->createAlphaMask())));
 }
 
 FloatingController::~FloatingController()
index d70f6ee174652103accd1e40ae2e4946cbdeea82..d9e7bf50c0d21510b41647b77a7389ea0b8d806e 100644 (file)
@@ -43,11 +43,13 @@ public:
     explicit FloatingController(ControllerForm *conForm, QAction *menu, QWidget *parent = 0);
     ~FloatingController();
 
+    FloatingConView *getConView();
+
 protected:
     void showEvent(QShowEvent *event);
     void closeEvent(QCloseEvent *event);
 
-    void setRegion(QImage baseImage);
+    void setRegion(QImage *baseImage);
 
 private:
     FloatingConView *conView;
index 16038b7e398693fa2f194e7b32bbb763fbaf11dc..ca1c6b22191ba8ab1e483151fd81737cc0337236 100644 (file)
@@ -36,6 +36,8 @@
 FloatingConView::FloatingConView(ControllerForm *conForm, QGraphicsScene *scene, QWidget *parent)
     : QGraphicsView(scene, parent)
 {
+    this->parent = (FloatingController *)parent;
+
     setStyleSheet("background: transparent");
     setStyleSheet("border-style: none");
 
@@ -121,10 +123,8 @@ void FloatingConView::mousePressEvent(QMouseEvent *event)
     }
 
     if (event->button() == Qt::LeftButton) {
-        QWidget *con = ((QWidget *) this->parent());
-
         grabPos = event->globalPos();
-        conPos = con->pos();
+        conPos = parent->pos();
     }
 }
 
@@ -140,7 +140,7 @@ void FloatingConView::mouseReleaseEvent(QMouseEvent *event)
         grabPos = QPoint(-1, -1);
     }
 
-    QWidget *con = ((QWidget *)this->parent());
+    QWidget *con = ((QWidget *)parent);
     QWidget *dst = ((QWidget *)con->parent());
 
     int dockPos = isDockable(dst, con);
@@ -160,9 +160,8 @@ void FloatingConView::mouseMoveEvent(QMouseEvent *event)
         return;
     }
 
-    QWidget *con = ((QWidget *)this->parent());
     if (grabPos != QPoint(-1, -1)) {
-        con->move(conPos + (event->globalPos() - grabPos));
+        parent->move(conPos + (event->globalPos() - grabPos));
     }
 }
 
index 02830e1da4c6002508e35db949eb97975fcd8313..71ef154bb30119bfe27b380b0829ad9c9c3eedbe 100644 (file)
@@ -34,6 +34,8 @@
 #include "skinbezelitem.h"
 #include "controllerform.h"
 
+class FloatingController;
+
 class FloatingConView : public QGraphicsView
 {
 public:
@@ -54,6 +56,7 @@ protected:
 private:
     void createItems(ControllerForm *conForm);
 
+    FloatingController *parent;
     SkinBezelItem *bezelItem;
 };
 
index 08819c9e38589958b09a5b07bc0f7887fe6da805..54628de9b76227b4ac2d2bdb0f9065d763ee32e6 100644 (file)
@@ -256,7 +256,6 @@ void MainWindow::openController(int index, int dockPos)
 
         getFloatingCon()->show();
     } else {
-        // TODO: alignment
         winLayout->addWidget(getDockingCon());
     }
 }
@@ -286,8 +285,7 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 {
     qDebug("resize main window");
 
-    resize(uiInfo->getMainSize().width(),
-        uiInfo->getMainSize().height());
+    resize(uiInfo->getUiSize());
 
     setRegion();
 }
@@ -296,7 +294,7 @@ void MainWindow::setRegion()
 {
     //qDebug("set region");
 
-    setMask(uiInfo->getMainRegion());
+    setMask(uiInfo->getUiRegion());
 }
 
 void MainWindow::rotate(int angle)
index 720e937fa507004eb1fc26aa33a90c43500a09d5..c06f7566a185fb0ee89447785047471bb5f3b147 100644 (file)
@@ -89,8 +89,8 @@ void SkinView::resizeEvent(QResizeEvent *event)
     MainWindow *win = ((MainWindow *)this->parent());
 
     /* geometry */
-    const int width = win->uiInfo->getMainSize().width();
-    const int height = win->uiInfo->getMainSize().height();
+    const int width = win->uiInfo->getUiSize().width();
+    const int height = win->uiInfo->getUiSize().height();
     setGeometry(0, 0, width, height);
 
     /* scaling */
index ea2a93fd38093d5c73c3c5b7aca8f01a96d44e46..0b7e878eb9b70842f062bfce911bdf389e5a6842 100644 (file)
@@ -70,19 +70,31 @@ QSize UIInformation::getMainSize()
         return QSize(0, 0);
     }
 
-    QSize mainSize = mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
+    return mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
+}
+
+QSize UIInformation::getConSize()
+{
+    ControllerForm *conForm = getConForm();
+    if (conForm == NULL) {
+        qWarning("controller form is null");
+        return QSize(0, 0);
+    }
+
+    return conForm->conImg[ControllerForm::normal].size();
+}
+
+QSize UIInformation::getUiSize()
+{
+    QSize uiSize = getMainSize();
 
     /* docking controller */
     if (uiState.conState.dockingCon != NULL) {
-        ControllerForm *conForm = getConForm();
-        if (conForm != NULL) {
-            QSize conSize = conForm->conImg[ControllerForm::normal].size();
-
-            mainSize.setWidth(mainSize.width() + conSize.width());
-        }
+        QSize conSize = getConSize();
+        uiSize.setWidth(uiSize.width() + conSize.width());
     }
 
-    return mainSize;
+    return uiSize;
 }
 
 QRegion UIInformation::getMainRegion()
@@ -94,28 +106,50 @@ QRegion UIInformation::getMainRegion()
     }
 
     QImage *mainImage = &(mainForm->skinImg[MainForm::normal]);
-
     QImage regionImage = mainImage->scaled(
         mainImage->width() * uiState.getScaleFactor(),
         mainImage->height() * uiState.getScaleFactor()).createAlphaMask();
 
-    QRegion region(QBitmap::fromImage(regionImage));
+    return QRegion(QBitmap::fromImage(regionImage));
+}
+
+QRegion UIInformation::getConRegion()
+{
+    ControllerForm *conForm = getConForm();
+    if (conForm == NULL) {
+        qWarning("controller form is null");
+        return QRegion(0, 0, 0, 0);
+    }
+
+    QImage *conImage = &(conForm->conImg[ControllerForm::normal]);
+
+    return QRegion(QBitmap::fromImage(conImage->createAlphaMask()));
+}
+
+QRegion UIInformation::getUiRegion()
+{
+    QRegion uiRegion = getMainRegion();
 
     /* docking controller */
     DockingController *con = uiState.conState.dockingCon;
     if (con != NULL) {
-        ControllerForm *conForm = getConForm();
-        if (conForm != NULL) {
-            QImage *conImage = &(conForm->conImg[ControllerForm::normal]);
-            QRegion regionCon(QBitmap::fromImage(conImage->createAlphaMask()));
-
-            // TODO: height shift
-            regionCon.translate(regionImage.width() + 1, 0);
-            region = region.united(regionCon);
+        QRegion conRegion = getConRegion();
+
+        int vShift = 0;
+        if (getMainSize().height() > getConSize().height()) {
+            if (con->getDockPos() & Qt::AlignCenter) {
+                vShift = (getMainSize().height() / 2)
+                    - (getConSize().height() / 2);
+            } else if (con->getDockPos() & Qt::AlignBottom) {
+                vShift = getMainSize().height() - getConSize().height();
+            }
         }
+
+        conRegion.translate(getMainSize().width() + 1, vShift);
+        uiRegion = uiRegion.united(conRegion);
     }
 
-    return region;
+    return uiRegion;
 }
 
 UIInformation::~UIInformation()
index 221338e80c2dfc30baacaf1efb38ee842fb68fcf..14e7fa3225705fc091b02beba51bee32bb7b702c 100644 (file)
@@ -58,7 +58,11 @@ public:
     MainForm *getMainForm(); /* current */
     ControllerForm *getConForm();
     QSize getMainSize();
+    QSize getConSize();
+    QSize getUiSize(); /* size included main, docking con */
     QRegion getMainRegion();
+    QRegion getConRegion();
+    QRegion getUiRegion(); /* size included main, docking con */
 };
 
 #endif // UIINFORMATION_H