OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.blimp; | 5 package org.chromium.blimp; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.graphics.Color; | 8 import android.graphics.Color; |
9 import android.graphics.Point; | 9 import android.graphics.Point; |
10 import android.os.Build; | 10 import android.os.Build; |
11 import android.util.AttributeSet; | 11 import android.util.AttributeSet; |
12 import android.view.MotionEvent; | 12 import android.view.MotionEvent; |
13 import android.view.Surface; | 13 import android.view.Surface; |
14 import android.view.SurfaceHolder; | 14 import android.view.SurfaceHolder; |
15 import android.view.SurfaceView; | 15 import android.view.SurfaceView; |
| 16 import android.view.View; |
16 import android.view.WindowManager; | 17 import android.view.WindowManager; |
17 | 18 |
18 import org.chromium.base.annotations.CalledByNative; | 19 import org.chromium.base.annotations.CalledByNative; |
19 import org.chromium.base.annotations.JNINamespace; | 20 import org.chromium.base.annotations.JNINamespace; |
20 import org.chromium.blimp.session.BlimpClientSession; | 21 import org.chromium.blimp.session.BlimpClientSession; |
21 import org.chromium.ui.UiUtils; | 22 import org.chromium.ui.UiUtils; |
22 | 23 |
23 /** | 24 /** |
24 * A {@link View} that will visually represent the Blimp rendered content. This
{@link View} starts | 25 * A {@link View} that will visually represent the Blimp rendered content. This
{@link View} starts |
25 * a native compositor. | 26 * a native compositor. |
26 */ | 27 */ |
27 @JNINamespace("blimp::client") | 28 @JNINamespace("blimp::client") |
28 public class BlimpView extends SurfaceView implements SurfaceHolder.Callback { | 29 public class BlimpView |
| 30 extends SurfaceView implements SurfaceHolder.Callback, View.OnLayoutChan
geListener { |
29 private long mNativeBlimpViewPtr; | 31 private long mNativeBlimpViewPtr; |
30 | 32 |
31 /** | 33 /** |
32 * Builds a new {@link BlimpView}. | 34 * Builds a new {@link BlimpView}. |
33 * @param context A {@link Context} instance. | 35 * @param context A {@link Context} instance. |
34 * @param attrs An {@link AttributeSet} instance. | 36 * @param attrs An {@link AttributeSet} instance. |
35 */ | 37 */ |
36 public BlimpView(Context context, AttributeSet attrs) { | 38 public BlimpView(Context context, AttributeSet attrs) { |
37 super(context, attrs); | 39 super(context, attrs); |
38 setFocusable(true); | 40 setFocusable(true); |
39 setFocusableInTouchMode(true); | 41 setFocusableInTouchMode(true); |
| 42 addOnLayoutChangeListener(this); |
40 } | 43 } |
41 | 44 |
42 /** | 45 /** |
43 * Starts up rendering for this {@link View}. This will start up the native
compositor and will | 46 * Starts up rendering for this {@link View}. This will start up the native
compositor and will |
44 * display it's contents. | 47 * display it's contents. |
45 * @param blimpClientSession The {@link BlimpClientSession} that contains th
e content-lite | 48 * @param blimpClientSession The {@link BlimpClientSession} that contains th
e content-lite |
46 * features required by the native components of t
he compositor. | 49 * features required by the native components of t
he compositor. |
47 */ | 50 */ |
48 public void initializeRenderer(BlimpClientSession blimpClientSession) { | 51 public void initializeRenderer(BlimpClientSession blimpClientSession) { |
49 assert mNativeBlimpViewPtr == 0; | 52 assert mNativeBlimpViewPtr == 0; |
(...skipping 19 matching lines...) Expand all Loading... |
69 * should not be used after this. | 72 * should not be used after this. |
70 */ | 73 */ |
71 public void destroyRenderer() { | 74 public void destroyRenderer() { |
72 getHolder().removeCallback(this); | 75 getHolder().removeCallback(this); |
73 if (mNativeBlimpViewPtr != 0) { | 76 if (mNativeBlimpViewPtr != 0) { |
74 nativeDestroy(mNativeBlimpViewPtr); | 77 nativeDestroy(mNativeBlimpViewPtr); |
75 mNativeBlimpViewPtr = 0; | 78 mNativeBlimpViewPtr = 0; |
76 } | 79 } |
77 } | 80 } |
78 | 81 |
79 /** | 82 // View.OnLayoutChangeListener implementation. |
80 * Triggers a redraw of the native compositor, pushing a new frame. | 83 @Override |
81 */ | 84 public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, |
82 public void setNeedsComposite() { | 85 int oldTop, int oldRight, int oldBottom) { |
83 if (mNativeBlimpViewPtr == 0) return; | 86 if (mNativeBlimpViewPtr == 0) return; |
84 nativeSetNeedsComposite(mNativeBlimpViewPtr); | 87 nativeOnContentAreaSizeChanged(mNativeBlimpViewPtr, right - left, bottom
- top, |
85 } | 88 getContext().getResources().getDisplayMetrics().density); |
86 | |
87 /** | |
88 * Toggles whether or not the native compositor draws to this {@link View} o
r not. | |
89 * @param visible Whether or not the compositor should draw or not. | |
90 */ | |
91 public void setCompositorVisibility(boolean visible) { | |
92 if (mNativeBlimpViewPtr == 0) return; | |
93 nativeSetVisibility(mNativeBlimpViewPtr, visible); | |
94 } | 89 } |
95 | 90 |
96 // View overrides. | 91 // View overrides. |
97 @Override | 92 @Override |
98 public boolean onTouchEvent(MotionEvent event) { | 93 public boolean onTouchEvent(MotionEvent event) { |
99 if (mNativeBlimpViewPtr == 0) return false; | 94 if (mNativeBlimpViewPtr == 0) return false; |
100 | 95 |
101 int eventAction = event.getActionMasked(); | 96 int eventAction = event.getActionMasked(); |
102 | 97 |
103 // Close the IME. It might be open for typing URL into toolbar. | 98 // Close the IME. It might be open for typing URL into toolbar. |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 public void onSwapBuffersCompleted() { | 179 public void onSwapBuffersCompleted() { |
185 if (getBackground() == null) return; | 180 if (getBackground() == null) return; |
186 | 181 |
187 setBackgroundResource(0); | 182 setBackgroundResource(0); |
188 } | 183 } |
189 | 184 |
190 // Native Methods | 185 // Native Methods |
191 private native long nativeInit(BlimpClientSession blimpClientSession, int ph
ysicalWidth, | 186 private native long nativeInit(BlimpClientSession blimpClientSession, int ph
ysicalWidth, |
192 int physicalHeight, int displayWidth, int displayHeight, float dpToP
ixel); | 187 int physicalHeight, int displayWidth, int displayHeight, float dpToP
ixel); |
193 private native void nativeDestroy(long nativeBlimpView); | 188 private native void nativeDestroy(long nativeBlimpView); |
194 private native void nativeSetNeedsComposite(long nativeBlimpView); | 189 private native void nativeOnContentAreaSizeChanged( |
| 190 long nativeBlimpView, int width, int height, float dpToPx); |
195 private native void nativeOnSurfaceChanged( | 191 private native void nativeOnSurfaceChanged( |
196 long nativeBlimpView, int format, int width, int height, Surface sur
face); | 192 long nativeBlimpView, int format, int width, int height, Surface sur
face); |
197 private native void nativeOnSurfaceCreated(long nativeBlimpView); | 193 private native void nativeOnSurfaceCreated(long nativeBlimpView); |
198 private native void nativeOnSurfaceDestroyed(long nativeBlimpView); | 194 private native void nativeOnSurfaceDestroyed(long nativeBlimpView); |
199 private native void nativeSetVisibility(long nativeBlimpView, boolean visibl
e); | |
200 private native boolean nativeOnTouchEvent( | 195 private native boolean nativeOnTouchEvent( |
201 long nativeBlimpView, MotionEvent event, | 196 long nativeBlimpView, MotionEvent event, |
202 long timeMs, int action, int pointerCount, int historySize, int acti
onIndex, | 197 long timeMs, int action, int pointerCount, int historySize, int acti
onIndex, |
203 float x0, float y0, float x1, float y1, | 198 float x0, float y0, float x1, float y1, |
204 int pointerId0, int pointerId1, | 199 int pointerId0, int pointerId1, |
205 float touchMajor0, float touchMajor1, | 200 float touchMajor0, float touchMajor1, |
206 float touchMinor0, float touchMinor1, | 201 float touchMinor0, float touchMinor1, |
207 float orientation0, float orientation1, | 202 float orientation0, float orientation1, |
208 float tilt0, float tilt1, | 203 float tilt0, float tilt1, |
209 float rawX, float rawY, | 204 float rawX, float rawY, |
210 int androidToolType0, int androidToolType1, | 205 int androidToolType0, int androidToolType1, |
211 int androidButtonState, int androidMetaState); | 206 int androidButtonState, int androidMetaState); |
212 } | 207 } |
OLD | NEW |