changeset 894:d4446f267e12 alignment_view

Scale drag thresholds according to actual display resolution
author Chris Cannam
date Thu, 15 Jan 2015 10:42:00 +0000
parents c0549bf12973
children a3b3b64fbc43
files view/Pane.cpp view/ViewManager.cpp view/ViewManager.h
diffstat 3 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/view/Pane.cpp	Fri Nov 21 14:50:27 2014 +0000
+++ b/view/Pane.cpp	Thu Jan 15 10:42:00 2015 +0000
@@ -2028,6 +2028,11 @@
 
     int smallThreshold = 10, bigThreshold = 80;
 
+    if (m_manager) {
+        smallThreshold = m_manager->scalePixelSize(smallThreshold);
+        bigThreshold = m_manager->scalePixelSize(bigThreshold);
+    }
+
 //    SVDEBUG << "Pane::updateDragMode: xdiff = " << xdiff << ", ydiff = "
 //              << ydiff << ", canMoveVertical = " << canMoveVertical << ", drag mode = " << m_dragMode << endl;
 
--- a/view/ViewManager.cpp	Fri Nov 21 14:50:27 2014 +0000
+++ b/view/ViewManager.cpp	Thu Jan 15 10:42:00 2015 +0000
@@ -720,3 +720,23 @@
     return dark;
 }
 
+int
+ViewManager::scalePixelSize(int pixels)
+{
+    static float ratio = 0.f;
+    if (ratio == 0.f) {
+        float baseEm;
+#ifdef Q_OS_MAC
+        baseEm = 17.f;
+#else
+        baseEm = 15.f;
+#endif
+        float em = QFontMetrics(QFont()).height();
+        ratio = em / baseEm;
+    }
+
+    int scaled = int(pixels * ratio + 0.5);
+    cerr << "scaledSize: " << pixels << " -> " << scaled << " at ratio " << ratio << endl;
+    if (pixels != 0 && scaled == 0) scaled = 1;
+    return scaled;
+}
--- a/view/ViewManager.h	Fri Nov 21 14:50:27 2014 +0000
+++ b/view/ViewManager.h	Thu Jan 15 10:42:00 2015 +0000
@@ -184,6 +184,13 @@
 
     void setMainModelSampleRate(int sr) { m_mainModelSampleRate = sr; }
 
+    /**
+     * Take a "design pixel" size and scale it for the actual
+     * display. This is relevant to hi-dpi systems that do not do
+     * pixel doubling (i.e. Windows and Linux rather than OS/X).
+     */
+    int scalePixelSize(int pixels);
+    
     enum OverlayMode {
         NoOverlays,
         GlobalOverlays,