diff options
author | Brian Hinz <bphinz@users.sourceforge.net> | 2011-10-06 06:21:32 +0000 |
---|---|---|
committer | Brian Hinz <bphinz@users.sourceforge.net> | 2011-10-06 06:21:32 +0000 |
commit | 652953c7bb390d7079696d497807ed2a28352b9f (patch) | |
tree | fe367c4f7079db864dcb2521ab8985e0c85d806e /java | |
parent | 15b6e054053e0ed7fc083e78c053e9041e511ef8 (diff) | |
download | tigervnc-652953c7bb390d7079696d497807ed2a28352b9f.tar.gz tigervnc-652953c7bb390d7079696d497807ed2a28352b9f.zip |
More changes to scaling code. Tested on Ubuntu 11.04/OpenJDK and Win7/Sun Java 6u27. Auto, FixedRatio, & % scale all seem to work. Will test on other platforms soon.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4712 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'java')
-rw-r--r-- | java/src/com/tigervnc/vncviewer/CConn.java | 54 | ||||
-rw-r--r-- | java/src/com/tigervnc/vncviewer/DesktopWindow.java | 14 | ||||
-rw-r--r-- | java/src/com/tigervnc/vncviewer/F8Menu.java | 2 |
3 files changed, 39 insertions, 31 deletions
diff --git a/java/src/com/tigervnc/vncviewer/CConn.java b/java/src/com/tigervnc/vncviewer/CConn.java index ee969477..5dea315c 100644 --- a/java/src/com/tigervnc/vncviewer/CConn.java +++ b/java/src/com/tigervnc/vncviewer/CConn.java @@ -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); diff --git a/java/src/com/tigervnc/vncviewer/DesktopWindow.java b/java/src/com/tigervnc/vncviewer/DesktopWindow.java index 1ecc0e3f..54366155 100644 --- a/java/src/com/tigervnc/vncviewer/DesktopWindow.java +++ b/java/src/com/tigervnc/vncviewer/DesktopWindow.java @@ -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()) diff --git a/java/src/com/tigervnc/vncviewer/F8Menu.java b/java/src/com/tigervnc/vncviewer/F8Menu.java index 5838b38c..9b617857 100644 --- a/java/src/com/tigervnc/vncviewer/F8Menu.java +++ b/java/src/com/tigervnc/vncviewer/F8Menu.java @@ -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)); |