]> source.dussan.org Git - tigervnc.git/commitdiff
More changes to scaling code. Tested on Ubuntu 11.04/OpenJDK and Win7/Sun Java 6u27...
authorBrian Hinz <bphinz@users.sourceforge.net>
Thu, 6 Oct 2011 06:21:32 +0000 (06:21 +0000)
committerBrian Hinz <bphinz@users.sourceforge.net>
Thu, 6 Oct 2011 06:21:32 +0000 (06:21 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4712 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tigervnc/vncviewer/CConn.java
java/src/com/tigervnc/vncviewer/DesktopWindow.java
java/src/com/tigervnc/vncviewer/F8Menu.java

index ee9694773962cb6da6abe055c0fc64ffd4a1cbce..5dea315cb5ec4ec2d6474a5bd3e869fd9e4d3ae9 100644 (file)
@@ -62,7 +62,7 @@ import com.tigervnc.rfb.Exception;
 import com.tigervnc.rfb.Point;
 import com.tigervnc.rfb.Rect;
 
-class ViewportFrame extends JFrame implements ComponentListener 
+class ViewportFrame extends JFrame
 {
   public ViewportFrame(String name, CConn cc_) {
     cc = cc_;
@@ -79,30 +79,26 @@ class ViewportFrame extends JFrame implements ComponentListener
         cc.close();
       }
     });
-    addComponentListener(this);
-  }
-
-  public void componentResized(ComponentEvent e) {
-    if (cc.options.autoScale || cc.options.fixedRatioScale) {
-      if (sp.getSize().width != cc.desktop.scaledWidth ||
-          sp.getSize().height != cc.desktop.scaledHeight) {
-        cc.reconfigureViewport();
-        if (cc.desktop.cursor != null) {
-          Cursor cursor = cc.desktop.cursor;
-          cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot, 
-                       cursor.data, cursor.mask);
-        }
+    addComponentListener(new ComponentAdapter() {
+      public void componentResized(ComponentEvent e) {
+        if (cc.options.autoScale || cc.options.fixedRatioScale) {
+          if (sp.getSize().width != cc.desktop.scaledWidth ||
+              sp.getSize().height != cc.desktop.scaledHeight) {
+            cc.desktop.setScaledSize();
+            sp.setSize(new Dimension(cc.desktop.scaledWidth,
+                                     cc.desktop.scaledHeight));
+            sp.validate();
+            pack();
+            update(g);
+            if (cc.desktop.cursor != null) {
+              Cursor cursor = cc.desktop.cursor;
+              cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot, 
+                          cursor.data, cursor.mask);
+            }
+          }
+        }      
       }
-    }      
-  }
-
-  public void componentHidden(ComponentEvent e) {
-  }
-
-  public void componentShown(ComponentEvent e) {
-  }
-
-  public void componentMoved(ComponentEvent e) {
+    });
   }
 
   public void addChild(DesktopWindow child) {
@@ -492,7 +488,7 @@ public class CConn extends CConnection
     desktop.requestFocusInWindow();
   }
 
-  public void reconfigureViewport()
+  private void reconfigureViewport()
   {
     //viewport.setMaxSize(cp.width, cp.height);
     boolean pack = true;
@@ -504,8 +500,8 @@ public class CConn extends CConnection
       viewport.setExtendedState(JFrame.MAXIMIZED_BOTH);
       viewport.setGeometry(0, 0, dpySize.width, dpySize.height, false);
     } else {
-      int wmDecorationWidth = 0;
-      int wmDecorationHeight = 24;
+      int wmDecorationWidth = viewport.getInsets().left + viewport.getInsets().right;
+      int wmDecorationHeight = viewport.getInsets().top + viewport.getInsets().bottom;
       if (w + wmDecorationWidth >= dpySize.width) {
         w = dpySize.width - wmDecorationWidth;
         pack = false;
@@ -842,9 +838,11 @@ public class CConn extends CConnection
     String scaleString = viewer.scalingFactor.getValue();
     if (scaleString.equals("Auto")) {
       options.autoScale = true;
+      options.scalingFactor.setSelectedItem("Auto");
       // FIXME: set scaleFactor?
-    } else if( scaleString.equals("FixedRatio")) {
+    } else if(scaleString.equals("FixedRatio")) {
       options.fixedRatioScale = true;
+      options.scalingFactor.setSelectedItem("Fixed Aspect Ratio");
       // FIXME: set scaleFactor?
     } else { 
       digit = Integer.parseInt(scaleString);
index 1ecc0e3f1623fc688a2f45bb6204695a483ec9d3..54366155f6866344a9f2f447c7551f8766eeb768 100644 (file)
@@ -324,7 +324,11 @@ class DesktopWindow extends JPanel implements
         scaledWidth = cc.cp.width;
         scaledHeight = cc.cp.height;
       } else {
-        Dimension availableSize = cc.viewport.sp.getSize();
+        Dimension vpSize = cc.viewport.getSize();
+        Insets vpInsets = cc.viewport.getInsets();
+        Dimension availableSize = 
+          new Dimension(vpSize.width - vpInsets.left - vpInsets.right,
+                        vpSize.height - vpInsets.top - vpInsets.bottom);
         if (availableSize.width == 0 || availableSize.height == 0)
           availableSize = new Dimension(cc.cp.width, cc.cp.height);
         if (cc.options.fixedRatioScale) {
@@ -444,7 +448,13 @@ class DesktopWindow extends JPanel implements
   public void keyPressed(KeyEvent e) {
     if (e.getKeyCode() == 
         (KeyEvent.VK_F1+cc.menuKey-Keysyms.F1)) {
-      cc.showMenu(lastX, lastY);
+      int sx = (scaleWidthRatio == 1.00) 
+        ? lastX : (int)Math.floor(lastX*scaleWidthRatio);
+      int sy = (scaleHeightRatio == 1.00) 
+        ? lastY : (int)Math.floor(lastY*scaleHeightRatio);
+      java.awt.Point ev = new java.awt.Point(lastX, lastY);
+      ev.translate(sx - lastX, sy - lastY);
+      cc.showMenu((int)ev.getX(), (int)ev.getY());
       return;
     }
     if (!cc.viewer.viewOnly.getValue())
index 5838b38c1ea7652ed31d3e880662758211e0d98b..9b6178575df21380f420254a03433e20dceefec3 100644 (file)
@@ -58,7 +58,7 @@ public class F8Menu extends JPopupMenu implements ActionListener {
     newConn    = addMenuItem("New connection...", KeyEvent.VK_W);
     options    = addMenuItem("Options...", KeyEvent.VK_O);
     info       = addMenuItem("Connection info...", KeyEvent.VK_I);
-    about      = addMenuItem("About VNCviewer...", KeyEvent.VK_A);
+    about      = addMenuItem("About VncViewer...", KeyEvent.VK_A);
     addSeparator();
     dismiss    = addMenuItem("Dismiss menu");
     setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));