]> source.dussan.org Git - tigervnc.git/commitdiff
Split the Viewport out from CConn, really should never have been in there to begin...
authorBrian Hinz <bphinz@users.sourceforge.net>
Sun, 26 Aug 2012 20:35:30 +0000 (20:35 +0000)
committerBrian Hinz <bphinz@users.sourceforge.net>
Sun, 26 Aug 2012 20:35:30 +0000 (20:35 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4964 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/com/tigervnc/vncviewer/CConn.java
java/com/tigervnc/vncviewer/DesktopWindow.java
java/com/tigervnc/vncviewer/Viewport.java [new file with mode: 0644]

index 814b0df70ee49ee33e252232aff34c6514bee7cb..f4c75a2e3a704adb87068ca4a6901d079e00e545 100644 (file)
 
 package com.tigervnc.vncviewer;
 
-import java.awt.Color;
-import java.awt.Graphics;
+import java.awt.*;
 import java.awt.event.*;
-import java.awt.Dimension;
-import java.awt.Event;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -55,90 +52,11 @@ import java.util.*;
 
 import com.tigervnc.rdr.*;
 import com.tigervnc.rfb.*;
-import com.tigervnc.rfb.Exception;
 import com.tigervnc.rfb.Point;
-import com.tigervnc.rfb.Rect;
+import com.tigervnc.rfb.Exception;
 import com.tigervnc.network.Socket;
 import com.tigervnc.network.TcpSocket;
 
-class ViewportFrame extends JFrame
-{
-  public ViewportFrame(String name, CConn cc_) {
-    cc = cc_;
-    setTitle(name+" - TigerVNC");
-    setFocusable(false);
-    setFocusTraversalKeysEnabled(false);
-    sp = new JScrollPane();
-    sp.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
-    getContentPane().add(sp);
-    addWindowFocusListener(new WindowAdapter() {
-      public void windowGainedFocus(WindowEvent e) {
-        sp.getViewport().getView().requestFocusInWindow();
-      }
-    });
-    addWindowListener(new WindowAdapter() {
-      public void windowClosing(WindowEvent e) {
-        cc.deleteWindow();
-      }
-    });
-    addComponentListener(new ComponentAdapter() {
-      public void componentResized(ComponentEvent e) {
-        if ((getExtendedState() != JFrame.MAXIMIZED_BOTH) &&
-            cc.fullScreen) {
-          cc.toggleFullScreen();
-        }
-        String scaleString = cc.viewer.scalingFactor.getValue();
-        if (scaleString.equals("Auto") || scaleString.equals("FixedRatio")) {
-          if ((sp.getSize().width != cc.desktop.scaledWidth) ||
-              (sp.getSize().height != cc.desktop.scaledHeight)) {
-            int policy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
-            sp.setHorizontalScrollBarPolicy(policy);
-            cc.desktop.setScaledSize();
-            sp.setSize(new Dimension(cc.desktop.scaledWidth,
-                                     cc.desktop.scaledHeight));
-            sp.validate();
-            if (getExtendedState() != JFrame.MAXIMIZED_BOTH &&
-                scaleString.equals("FixedRatio")) {
-              int w = cc.desktop.scaledWidth + getInsets().left + getInsets().right;
-              int h = cc.desktop.scaledHeight + getInsets().top + getInsets().bottom;
-              setSize(w, h);
-            }
-            if (cc.desktop.cursor != null) {
-              Cursor cursor = cc.desktop.cursor;
-              cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot, 
-                           cursor.data, cursor.mask);
-            }
-          }
-        } else {
-          int policy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
-          sp.setHorizontalScrollBarPolicy(policy);
-          sp.validate();
-        }
-      }
-    });
-  }
-
-  public void setChild(DesktopWindow child) {
-    sp.getViewport().setView(child);
-  }
-
-  public void setGeometry(int x, int y, int w, int h, boolean pack) {
-    if (pack) {
-      pack();
-    } else {
-      setSize(w, h);
-    }
-    if (!cc.fullScreen)
-      setLocation(x, y);
-    setBackground(Color.BLACK);
-  }
-
-
-  CConn cc;
-  JScrollPane sp;
-  static LogWriter vlog = new LogWriter("ViewportFrame");
-}
-
 public class CConn extends CConnection
   implements UserPasswdGetter, UserMsgBox, OptionsDialogCallback, FdInStreamBlockCallback
 {
@@ -588,7 +506,7 @@ public class CConn extends CConnection
   private void recreateViewport()
   {
     if (viewport != null) viewport.dispose();
-    viewport = new ViewportFrame(cp.name(), this);
+    viewport = new Viewport(cp.name(), this);
     viewport.setUndecorated(fullScreen);
     desktop.setViewport(viewport);
     ClassLoader loader = this.getClass().getClassLoader();
@@ -1450,7 +1368,7 @@ public class CConn extends CConnection
   private boolean supportsSyncFence;
 
   public int menuKeyCode;
-  ViewportFrame viewport;
+  Viewport viewport;
   private boolean fullColour;
   private boolean autoSelect;
   boolean fullScreen;
index bc73143ef6a98a9a88f5459a4ec4b16aa85c2f7f..b55947eadd225d9ed7412138e000b8c2d23409b3 100644 (file)
@@ -96,7 +96,7 @@ class DesktopWindow extends JPanel implements
 
   final public PixelFormat getPF() { return im.getPF(); }
 
-  public void setViewport(ViewportFrame viewport)
+  public void setViewport(Viewport viewport)
   {
     viewport.setChild(this);
   }
diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java
new file mode 100644 (file)
index 0000000..680a02d
--- /dev/null
@@ -0,0 +1,112 @@
+/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+ * Copyright (C) 2011-2012 Brian P. Hinz
+ * Copyright (C) 2012 D. R. Commander.  All Rights Reserved.
+ * 
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+ */
+
+package com.tigervnc.vncviewer;
+
+import java.awt.Color;
+import java.awt.event.*;
+import java.awt.Dimension;
+import java.awt.Event;
+import javax.swing.*;
+
+import com.tigervnc.rdr.*;
+import com.tigervnc.rfb.*;
+
+public class Viewport extends JFrame
+{
+  public Viewport(String name, CConn cc_) {
+    cc = cc_;
+    setTitle(name+" - TigerVNC");
+    setFocusable(false);
+    setFocusTraversalKeysEnabled(false);
+    UIManager.getDefaults().put("ScrollPane.ancestorInputMap", 
+      new UIDefaults.LazyInputMap(new Object[]{}));
+    sp = new JScrollPane();
+    sp.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
+    getContentPane().add(sp);
+    addWindowFocusListener(new WindowAdapter() {
+      public void windowGainedFocus(WindowEvent e) {
+        if (isVisible())
+          sp.getViewport().getView().requestFocusInWindow();
+      }
+    });
+    addWindowListener(new WindowAdapter() {
+      public void windowClosing(WindowEvent e) {
+        cc.deleteWindow();
+      }
+    });
+    addComponentListener(new ComponentAdapter() {
+      public void componentResized(ComponentEvent e) {
+        if ((getExtendedState() != JFrame.MAXIMIZED_BOTH) &&
+            cc.fullScreen) {
+          cc.toggleFullScreen();
+        }
+        String scaleString = cc.viewer.scalingFactor.getValue();
+        if (scaleString.equals("Auto") || scaleString.equals("FixedRatio")) {
+          if ((sp.getSize().width != cc.desktop.scaledWidth) ||
+              (sp.getSize().height != cc.desktop.scaledHeight)) {
+            int policy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER;
+            sp.setHorizontalScrollBarPolicy(policy);
+            cc.desktop.setScaledSize();
+            sp.setSize(new Dimension(cc.desktop.scaledWidth,
+                                     cc.desktop.scaledHeight));
+            sp.validate();
+            if (getExtendedState() != JFrame.MAXIMIZED_BOTH &&
+                scaleString.equals("FixedRatio")) {
+              int w = cc.desktop.scaledWidth + getInsets().left + getInsets().right;
+              int h = cc.desktop.scaledHeight + getInsets().top + getInsets().bottom;
+              setSize(w, h);
+            }
+            if (cc.desktop.cursor != null) {
+              Cursor cursor = cc.desktop.cursor;
+              cc.setCursor(cursor.width(),cursor.height(),cursor.hotspot, 
+                           cursor.data, cursor.mask);
+            }
+          }
+        } else {
+          int policy = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
+          sp.setHorizontalScrollBarPolicy(policy);
+          sp.validate();
+        }
+      }
+    });
+  }
+
+  public void setChild(DesktopWindow child) {
+    sp.getViewport().setView(child);
+  }
+
+  public void setGeometry(int x, int y, int w, int h, boolean pack) {
+    if (pack) {
+      pack();
+    } else {
+      setSize(w, h);
+    }
+    if (!cc.fullScreen)
+      setLocation(x, y);
+    setBackground(Color.BLACK);
+  }
+
+
+  CConn cc;
+  JScrollPane sp;
+  static LogWriter vlog = new LogWriter("Viewport");
+}
+