comparison src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java @ 458:4ea47640942a

intoroduce retina scaled frame buffer postion
author innparusu
date Thu, 23 Jun 2016 18:57:12 +0900
parents 34277b436cac
children c6058c4e2a79
comparison
equal deleted inserted replaced
457:effba48b76f3 458:4ea47640942a
29 import com.glavsoft.rfb.client.KeyEventMessage; 29 import com.glavsoft.rfb.client.KeyEventMessage;
30 import com.glavsoft.rfb.protocol.Protocol; 30 import com.glavsoft.rfb.protocol.Protocol;
31 import com.glavsoft.rfb.protocol.ProtocolContext; 31 import com.glavsoft.rfb.protocol.ProtocolContext;
32 import com.glavsoft.rfb.protocol.ProtocolSettings; 32 import com.glavsoft.rfb.protocol.ProtocolSettings;
33 import com.glavsoft.utils.Keymap; 33 import com.glavsoft.utils.Keymap;
34 import com.glavsoft.viewer.ConnectionPresenter; 34 import com.glavsoft.viewer.*;
35 import com.glavsoft.viewer.UiSettings;
36 import com.glavsoft.viewer.Viewer;
37 import com.glavsoft.viewer.ViewerInterface;
38 import com.glavsoft.viewer.swing.gui.OptionsDialog; 35 import com.glavsoft.viewer.swing.gui.OptionsDialog;
39 import jp.ac.u_ryukyu.treevnc.ScreenChangeRequest; 36 import jp.ac.u_ryukyu.treevnc.ScreenChangeRequest;
40 import jp.ac.u_ryukyu.treevnc.ScreenChangeSelectionPanel; 37 import jp.ac.u_ryukyu.treevnc.ScreenChangeSelectionPanel;
41 import jp.ac.u_ryukyu.treevnc.TreeRFBProto; 38 import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
42 39
852 849
853 final SwingViewerWindow viewerWindow = this; 850 final SwingViewerWindow viewerWindow = this;
854 JButton screenButton = buttonsBar.createButton("share", "Share my screen", new ActionListener() { 851 JButton screenButton = buttonsBar.createButton("share", "Share my screen", new ActionListener() {
855 @Override 852 @Override
856 public void actionPerformed(ActionEvent e) { 853 public void actionPerformed(ActionEvent e) {
857 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); 854 ArrayList<FbRectangle> rectangles = viewer.getScreenRectangles();
858 if (rectangles.size() == 1) { // single display 855 if (rectangles.size() == 1) { // single display
859 screenChangeRequest(context, 0); 856 screenChangeRequest(context, 0);
860 } else if (rectangles.size() > 1){ // dual display 857 } else if (rectangles.size() > 1){ // dual display
861 ScreenChangeSelectionPanel selectionPanel = new ScreenChangeSelectionPanel(viewerWindow, context); 858 ScreenChangeSelectionPanel selectionPanel = new ScreenChangeSelectionPanel(viewerWindow, context);
862 for (int i = 0; i < rectangles.size(); i++) { 859 for (int i = 0; i < rectangles.size(); i++) {
914 911
915 setButtonsBarVisible(true, container); 912 setButtonsBarVisible(true, container);
916 } 913 }
917 914
918 public void screenChangeRequest(ProtocolContext context, int shareScreenNumber) { 915 public void screenChangeRequest(ProtocolContext context, int shareScreenNumber) {
919 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); 916 ArrayList<FbRectangle> rectangles = viewer.getScreenRectangles();
920 Point offset = viewer.getScreenOffset(rectangles); 917 FbRectangle rectangle1 = rectangles.get(shareScreenNumber);
921 Rectangle rectangle1 = rectangles.get(shareScreenNumber);
922 int singleWidth = (int) (rectangle1.getWidth()); 918 int singleWidth = (int) (rectangle1.getWidth());
923 int singleHeight = (int) (rectangle1.getHeight()); 919 int singleHeight = (int) (rectangle1.getHeight());
924 int x = (int) (rectangle1.getX()) + offset.x; // convert double to int 920 int x = rectangle1.getXfb();
925 int y = (int) (rectangle1.getY()) + offset.y; 921 int y = rectangle1.getYfb();
926 int scale = viewer.retinaScale(shareScreenNumber); 922 int scale = rectangle1.getRetinaScale();
927 showScreenInfo("request screen change", 0, x, y, singleWidth, singleHeight, scale); 923 showScreenInfo("request screen change", 0, x, y, singleWidth, singleHeight, scale);
928 if (viewer.getRfb().isTreeManager()) { 924 if (viewer.getRfb().isTreeManager()) {
929 changeVncServer(viewer, x, y, singleWidth * scale, singleHeight * scale, scale, viewer.getRfb().getId()); 925 changeVncServer(viewer, x, y, singleWidth * scale, singleHeight * scale, scale, viewer.getRfb().getId());
930 } 926 }
931 if (viewer.getRfb().hasParent()) { 927 if (viewer.getRfb().hasParent()) {
954 950
955 /** 951 /**
956 * change screen viewer scale to fit the selected server screen size in multi screens 952 * change screen viewer scale to fit the selected server screen size in multi screens
957 */ 953 */
958 public void fitScreen() { 954 public void fitScreen() {
959 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles(); 955 ArrayList<FbRectangle> rectangles = viewer.getScreenRectangles();
960 if (rectangles.size()<=0) return; // no screens, nothing to do 956 if (rectangles.size()<=0) return; // no screens, nothing to do
961 int thisScreenNumber = getThisScreenNumber(rectangles); 957 int thisScreenNumber = getThisScreenNumber(rectangles);
962 958
963 959
964 int thisScreenWidth = (int) rectangles.get(thisScreenNumber).getWidth(); 960 int thisScreenWidth = (int) rectangles.get(thisScreenNumber).getWidth();
988 // scroller.scrollRectToVisible(visible); // this does not work 984 // scroller.scrollRectToVisible(visible); // this does not work
989 } 985 }
990 }); 986 });
991 } 987 }
992 988
993 private int getThisScreenNumber(ArrayList<Rectangle> rectangles) { 989 private int getThisScreenNumber(ArrayList<FbRectangle> rectangles) {
994 // find which screen we are on 990 // find which screen we are on
995 Point thisScreenLocation = frame.getLocation(); 991 Point thisScreenLocation = frame.getLocation();
996 Point mouse = frame.getMousePosition(); 992 Point mouse = frame.getMousePosition();
997 int thisScreenNumber = 0; 993 int thisScreenNumber = 0;
998 for(Rectangle rect : rectangles) { 994 for(Rectangle rect : rectangles) {