Added "anchoring" to screen edges for zoompanel and indicatorbutton
[situare] / src / ui / zoombuttonpanel.cpp
index 46e6310..919888e 100644 (file)
@@ -53,9 +53,16 @@ ZoomButtonPanel::ZoomButtonPanel(QWidget *parent)
     m_panelLayout.addWidget(m_zoomOutButton, 1, 0);
 
     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-    move(settings.value(ZOOMPANEL_POSITION,
-                        QPoint(ZOOM_BUTTON_PANEL_POSITION_X,
-                               ZOOM_BUTTON_PANEL_POSITION_Y)).toPoint());
+    QPoint savedLocation = settings.value(ZOOMPANEL_POSITION,
+                                          QPoint(ZOOM_BUTTON_PANEL_POSITION_X,
+                                                 ZOOM_BUTTON_PANEL_POSITION_Y)).toPoint();
+
+    if(savedLocation.x() > DEFAULT_SCREEN_WIDTH || savedLocation.y() > DEFAULT_SCREEN_HEIGHT) {
+        savedLocation.rx() = ZOOM_BUTTON_PANEL_POSITION_X;
+        savedLocation.ry() = ZOOM_BUTTON_PANEL_POSITION_Y;
+    }
+
+    move(savedLocation);
 
     m_dragStartTimer = new QTimer(this);
     m_dragStartTimer->setSingleShot(true);
@@ -228,20 +235,37 @@ void ZoomButtonPanel::screenResized(const QSize &newSize)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    int oldHeight = 0;
+    int oldWidth = 0;
+
+    if(m_screenSize.height() < 0)
+        oldHeight = DEFAULT_NON_FULLSCREEN_HEIGHT;
+    else
+        oldHeight = m_screenSize.height();
+
+    if(m_screenSize.width() < 0)
+        oldWidth = DEFAULT_SCREEN_WIDTH;
+    else
+        oldWidth = m_screenSize.width();
+
     m_screenSize = newSize;
 
     QPoint resizedPosition = pos();
-
-    if (resizedPosition.x() < SIDEBAR_WIDTH)
-        resizedPosition.rx() = SIDEBAR_WIDTH;
-    else if(resizedPosition.x() > (newSize.width() - rect().width()))
+    if(resizedPosition.x() > (newSize.width() - rect().width()))
         resizedPosition.rx() = newSize.width() - rect().width();
-
+    else if (resizedPosition.x() < SIDEBAR_WIDTH)
+        resizedPosition.rx() = SIDEBAR_WIDTH;
     if(resizedPosition.y() > (newSize.height() - rect().height()))
         resizedPosition.ry() = newSize.height() - rect().height();
     else if (resizedPosition.y() < 0)
         resizedPosition.ry() = 0;
 
+    if((pos().y() + rect().center().y()) > (oldHeight/2))
+        resizedPosition.ry() = newSize.height() - (oldHeight - pos().y());
+
+    if((pos().x() + rect().center().x()) > (oldWidth/2))
+        resizedPosition.rx() = newSize.width() - (oldWidth - pos().x());
+
     move(resizedPosition);
 }