| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chromoting; | 5 package org.chromium.chromoting; |
| 6 | 6 |
| 7 import android.graphics.Point; | 7 import android.graphics.Point; |
| 8 import android.view.SurfaceHolder; | 8 import android.view.SurfaceHolder; |
| 9 import android.view.View; |
| 9 | 10 |
| 10 import org.chromium.chromoting.jni.Client; | 11 import org.chromium.chromoting.jni.Client; |
| 11 import org.chromium.chromoting.jni.GlDisplay; | 12 import org.chromium.chromoting.jni.GlDisplay; |
| 12 | 13 |
| 13 /** | 14 /** |
| 14 * The user interface for viewing and interacting with a specific remote host. U
ses OpenGL to draw | 15 * The user interface for viewing and interacting with a specific remote host. U
ses OpenGL to draw |
| 15 * the desktop and cursor. Should be used entirely on the UI thread. | 16 * the desktop and cursor. Should be used entirely on the UI thread. |
| 16 */ | 17 */ |
| 17 public class GlDesktopView extends AbstractDesktopView implements SurfaceHolder.
Callback { | 18 public class GlDesktopView extends AbstractDesktopView implements SurfaceHolder.
Callback { |
| 18 private final GlDisplay mDisplay; | 19 private final GlDisplay mDisplay; |
| 19 | 20 |
| 20 private Object mOnHostSizeChangedListenerKey; | 21 private Object mOnHostSizeChangedListenerKey; |
| 21 private Object mOnCanvasRenderedListenerKey; | 22 private Object mOnCanvasRenderedListenerKey; |
| 22 | 23 |
| 24 private static float sSmallFeedbackPixelDiameter = -1; |
| 25 private static float sLargeFeedbackPixelDiameter = -1; |
| 26 |
| 23 public GlDesktopView(GlDisplay display, Desktop desktop, Client client) { | 27 public GlDesktopView(GlDisplay display, Desktop desktop, Client client) { |
| 24 super(desktop, client); | 28 super(desktop, client); |
| 25 Preconditions.notNull(display); | 29 Preconditions.notNull(display); |
| 26 mDisplay = display; | 30 mDisplay = display; |
| 27 | 31 |
| 28 getHolder().addCallback(this); | 32 getHolder().addCallback(this); |
| 29 } | 33 } |
| 30 | 34 |
| 31 @Override | 35 private static float getFeedbackDiameterInPixel(InputFeedbackType feedbackTy
pe, View view) { |
| 32 public void showInputFeedback(InputFeedbackType feedbackToShow, Point pos) { | 36 // Note that the OpenGL renderer takes diameter as argument so the radiu
s we got needs |
| 33 float diameter; | 37 // to be multiplied by 2. |
| 34 // TODO(yuweih): diameter (and radius in DesktopView) should be defined
in dp so that it is | 38 switch (feedbackType) { |
| 35 // DPI independent. | 39 case SMALL_ANIMATION: |
| 36 switch (feedbackToShow) { | 40 if (sSmallFeedbackPixelDiameter < 0) { |
| 41 sSmallFeedbackPixelDiameter = 2 * view.getResources() |
| 42 .getDimensionPixelSize(R.dimen.feedback_animation_ra
dius_small); |
| 43 } |
| 44 return sSmallFeedbackPixelDiameter; |
| 45 |
| 37 case LARGE_ANIMATION: | 46 case LARGE_ANIMATION: |
| 38 diameter = 320.f; | 47 if (sLargeFeedbackPixelDiameter < 0) { |
| 39 break; | 48 sLargeFeedbackPixelDiameter = 2 * view.getResources() |
| 40 case SMALL_ANIMATION: | 49 .getDimensionPixelSize(R.dimen.feedback_animation_ra
dius_large); |
| 41 diameter = 80.f; | 50 } |
| 42 break; | 51 return sLargeFeedbackPixelDiameter; |
| 52 |
| 43 default: | 53 default: |
| 44 return; | 54 // Unreachable, but required by Google Java style and findbugs. |
| 55 assert false : "Unreached"; |
| 56 return 0.0f; |
| 45 } | 57 } |
| 46 float scaleFactor = mRenderData.transform.mapRadius(1); | |
| 47 mDisplay.showCursorInputFeedback(pos.x, pos.y, diameter / scaleFactor); | |
| 48 } | 58 } |
| 49 | 59 |
| 50 @Override | 60 @Override |
| 61 public void showInputFeedback(InputFeedbackType feedbackType, Point pos) { |
| 62 float scaleFactor = mRenderData.transform.mapRadius(1); |
| 63 mDisplay.showCursorInputFeedback(pos.x, pos.y, |
| 64 getFeedbackDiameterInPixel(feedbackType, this) / scaleFactor); |
| 65 } |
| 66 |
| 67 @Override |
| 51 public void transformationChanged() { | 68 public void transformationChanged() { |
| 52 if (mRenderData.imageHeight == 0 || mRenderData.imageWidth == 0 | 69 if (mRenderData.imageHeight == 0 || mRenderData.imageWidth == 0 |
| 53 || mRenderData.screenHeight == 0 || mRenderData.screenWidth == 0
) { | 70 || mRenderData.screenHeight == 0 || mRenderData.screenWidth == 0
) { |
| 54 return; | 71 return; |
| 55 } | 72 } |
| 56 float[] matrix = new float[9]; | 73 float[] matrix = new float[9]; |
| 57 mRenderData.transform.getValues(matrix); | 74 mRenderData.transform.getValues(matrix); |
| 58 mDisplay.pixelTransformationChanged(matrix); | 75 mDisplay.pixelTransformationChanged(matrix); |
| 59 } | 76 } |
| 60 | 77 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 @Override | 135 @Override |
| 119 public void surfaceDestroyed(SurfaceHolder holder) { | 136 public void surfaceDestroyed(SurfaceHolder holder) { |
| 120 // GlDisplay's life time spans to the whole session while GlDesktopView
may be created and | 137 // GlDisplay's life time spans to the whole session while GlDesktopView
may be created and |
| 121 // destroyed for multiple times (say when the phone is rotated). It is i
mportant to remove | 138 // destroyed for multiple times (say when the phone is rotated). It is i
mportant to remove |
| 122 // the listeners when the surface is about to be destroyed. | 139 // the listeners when the surface is about to be destroyed. |
| 123 mDisplay.onHostSizeChanged().remove(mOnHostSizeChangedListenerKey); | 140 mDisplay.onHostSizeChanged().remove(mOnHostSizeChangedListenerKey); |
| 124 mDisplay.onCanvasRendered().remove(mOnCanvasRenderedListenerKey); | 141 mDisplay.onCanvasRendered().remove(mOnCanvasRenderedListenerKey); |
| 125 mDisplay.surfaceDestroyed(); | 142 mDisplay.surfaceDestroyed(); |
| 126 } | 143 } |
| 127 } | 144 } |
| OLD | NEW |