Flutter Engine
The Flutter Engine
Classes | Enumerations | Functions | Variables
sk_app Namespace Reference

Classes

class  Application
 
class  CommandSet
 
struct  Message
 
struct  SkiaAndroidApp
 
class  Window
 
class  Window_android
 
class  Window_ios
 
class  Window_mac
 
class  Window_unix
 
class  Window_win
 

Enumerations

enum  MessageType {
  kUndefined , kSurfaceCreated , kSurfaceChanged , kSurfaceDestroyed ,
  kDestroyApp , kContentInvalidated , kKeyPressed , kTouched ,
  kUIStateChanged
}
 

Functions

static void config_resource_mgr (JNIEnv *env, jobject assetManager)
 
static const std::unordered_map< int, skui::KeyANDROID_TO_WINDOW_KEYMAP ({ {AKEYCODE_SOFT_LEFT, skui::Key::kLeft }, {AKEYCODE_SOFT_RIGHT, skui::Key::kRight} })
 
static const std::unordered_map< int, skui::InputStateANDROID_TO_WINDOW_STATEMAP ({ {AMOTION_EVENT_ACTION_DOWN, skui::InputState::kDown }, {AMOTION_EVENT_ACTION_POINTER_DOWN, skui::InputState::kDown }, {AMOTION_EVENT_ACTION_UP, skui::InputState::kUp }, {AMOTION_EVENT_ACTION_POINTER_UP, skui::InputState::kUp }, {AMOTION_EVENT_ACTION_MOVE, skui::InputState::kMove }, {AMOTION_EVENT_ACTION_CANCEL, skui::InputState::kUp }, })
 
JNIEXPORT jlong JNICALL Java_org_skia_viewer_ViewerApplication_createNativeApp (JNIEnv *env, jobject application, jobject assetManager)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerApplication_destroyNativeApp (JNIEnv *env, jobject application, jlong handle)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onSurfaceCreated (JNIEnv *env, jobject activity, jlong handle, jobject surface)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onSurfaceChanged (JNIEnv *env, jobject activity, jlong handle, jobject surface)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onSurfaceDestroyed (JNIEnv *env, jobject activity, jlong handle)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onKeyPressed (JNIEnv *env, jobject activity, jlong handle, jint keycode)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onTouched (JNIEnv *env, jobject activity, jlong handle, jint owner, jint state, jfloat x, jfloat y)
 
JNIEXPORT void JNICALL Java_org_skia_viewer_ViewerActivity_onUIStateChanged (JNIEnv *env, jobject activity, jlong handle, jstring stateName, jstring stateValue)
 
static skui::Key get_key (KeySym keysym)
 
static skui::ModifierKey get_modifiers (const XEvent &event)
 
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static skui::Key get_key (WPARAM vk)
 
static skui::ModifierKey get_modifiers (UINT message, WPARAM wParam, LPARAM lParam)
 

Variables

static const int LOOPER_ID_MESSAGEPIPE = 1
 
const long kEventMask
 
static int gWindowX = CW_USEDEFAULT
 
static int gWindowY = 0
 
static int gWindowWidth = CW_USEDEFAULT
 
static int gWindowHeight = 0
 

Enumeration Type Documentation

◆ MessageType

Enumerator
kUndefined 
kSurfaceCreated 
kSurfaceChanged 
kSurfaceDestroyed 
kDestroyApp 
kContentInvalidated 
kKeyPressed 
kTouched 
kUIStateChanged 

Definition at line 22 of file surface_glue_android.h.

Function Documentation

◆ ANDROID_TO_WINDOW_KEYMAP()

static const std::unordered_map< int, skui::Key > sk_app::ANDROID_TO_WINDOW_KEYMAP ( { {AKEYCODE_SOFT_LEFT, skui::Key::kLeft }, {AKEYCODE_SOFT_RIGHT, skui::Key::kRight} }  )
static

◆ ANDROID_TO_WINDOW_STATEMAP()

static const std::unordered_map< int, skui::InputState > sk_app::ANDROID_TO_WINDOW_STATEMAP ( { {AMOTION_EVENT_ACTION_DOWN, skui::InputState::kDown }, {AMOTION_EVENT_ACTION_POINTER_DOWN, skui::InputState::kDown }, {AMOTION_EVENT_ACTION_UP, skui::InputState::kUp }, {AMOTION_EVENT_ACTION_POINTER_UP, skui::InputState::kUp }, {AMOTION_EVENT_ACTION_MOVE, skui::InputState::kMove }, {AMOTION_EVENT_ACTION_CANCEL, skui::InputState::kUp }, }  )
static

◆ config_resource_mgr()

static void sk_app::config_resource_mgr ( JNIEnv *  env,
jobject  assetManager 
)
static

Definition at line 33 of file surface_glue_android.cpp.

33 {
34 static AAssetManager* gAAssetManager = nullptr;
35 SkASSERT(assetManager);
36 gAAssetManager = AAssetManager_fromJava(env, assetManager);
37 SkASSERT(gAAssetManager);
38 gResourceFactory = [](const char* resource) -> sk_sp<SkData> {
39 if (!gAAssetManager) {
40 return nullptr;
41 }
42 SkString path = SkStringPrintf("resources/%s", resource);
43 AAsset* asset = AAssetManager_open(gAAssetManager, path.c_str(), AASSET_MODE_STREAMING);
44 if (!asset) {
45 return nullptr;
46 }
47 size_t size = SkToSizeT(AAsset_getLength(asset));
49 (void)AAsset_read(asset, data->writable_data(), size);
50 AAsset_close(asset);
51 return data;
52 };
53}
sk_sp< SkData >(* gResourceFactory)(const char *)
Definition: Resources.cpp:21
#define SkASSERT(cond)
Definition: SkAssert.h:116
static SkString resource(SkPDFResourceType type, int index)
SK_API SkString SkStringPrintf(const char *format,...) SK_PRINTF_LIKE(1
Creates a new string and writes into it using a printf()-style format.
constexpr size_t SkToSizeT(S x)
Definition: SkTo.h:31
static sk_sp< SkData > MakeUninitialized(size_t length)
Definition: SkData.cpp:116
Definition: __init__.py:1
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition: switches.h:57
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:63

◆ get_key() [1/2]

static skui::Key sk_app::get_key ( KeySym  keysym)
static

Definition at line 190 of file Window_unix.cpp.

190 {
191 static const struct {
192 KeySym fXK;
193 skui::Key fKey;
194 } gPair[] = {
195 { XK_BackSpace, skui::Key::kBack },
196 { XK_Clear, skui::Key::kBack },
197 { XK_Return, skui::Key::kOK },
198 { XK_Up, skui::Key::kUp },
199 { XK_Down, skui::Key::kDown },
200 { XK_Left, skui::Key::kLeft },
201 { XK_Right, skui::Key::kRight },
202 { XK_Tab, skui::Key::kTab },
203 { XK_Page_Up, skui::Key::kPageUp },
204 { XK_Page_Down, skui::Key::kPageDown },
205 { XK_Home, skui::Key::kHome },
206 { XK_End, skui::Key::kEnd },
207 { XK_Delete, skui::Key::kDelete },
208 { XK_Escape, skui::Key::kEscape },
209 { XK_Shift_L, skui::Key::kShift },
210 { XK_Shift_R, skui::Key::kShift },
211 { XK_Control_L, skui::Key::kCtrl },
212 { XK_Control_R, skui::Key::kCtrl },
213 { XK_Alt_L, skui::Key::kOption },
214 { XK_Alt_R, skui::Key::kOption },
215 { 'a', skui::Key::kA },
216 { 'c', skui::Key::kC },
217 { 'v', skui::Key::kV },
218 { 'x', skui::Key::kX },
219 { 'y', skui::Key::kY },
220 { 'z', skui::Key::kZ },
221 };
222 for (size_t i = 0; i < std::size(gPair); i++) {
223 if (gPair[i].fXK == keysym) {
224 return gPair[i].fKey;
225 }
226 }
227 return skui::Key::kNONE;
228}
Key
Definition: Key.h:6
@ kBack
(CLR)
@ kHome
the home key - added to match android
@ kEnd
the red key
@ kOK
the center key

◆ get_key() [2/2]

static skui::Key sk_app::get_key ( WPARAM  vk)
static

Definition at line 124 of file Window_win.cpp.

124 {
125 static const struct {
126 WPARAM fVK;
127 skui::Key fKey;
128 } gPair[] = {
129 { VK_BACK, skui::Key::kBack },
130 { VK_CLEAR, skui::Key::kBack },
131 { VK_RETURN, skui::Key::kOK },
132 { VK_UP, skui::Key::kUp },
133 { VK_DOWN, skui::Key::kDown },
134 { VK_LEFT, skui::Key::kLeft },
135 { VK_RIGHT, skui::Key::kRight },
136 { VK_TAB, skui::Key::kTab },
137 { VK_PRIOR, skui::Key::kPageUp },
138 { VK_NEXT, skui::Key::kPageDown },
139 { VK_HOME, skui::Key::kHome },
140 { VK_END, skui::Key::kEnd },
141 { VK_DELETE, skui::Key::kDelete },
142 { VK_ESCAPE, skui::Key::kEscape },
143 { VK_SHIFT, skui::Key::kShift },
144 { VK_CONTROL, skui::Key::kCtrl },
145 { VK_MENU, skui::Key::kOption },
146 { 'A', skui::Key::kA },
147 { 'C', skui::Key::kC },
148 { 'V', skui::Key::kV },
149 { 'X', skui::Key::kX },
150 { 'Y', skui::Key::kY },
151 { 'Z', skui::Key::kZ },
152 };
153 for (size_t i = 0; i < std::size(gPair); i++) {
154 if (gPair[i].fVK == vk) {
155 return gPair[i].fKey;
156 }
157 }
158 return skui::Key::kNONE;
159}
vk
Definition: malisc.py:42
UINT_PTR WPARAM
Definition: windows_types.h:59

◆ get_modifiers() [1/2]

static skui::ModifierKey sk_app::get_modifiers ( const XEvent &  event)
static

Definition at line 230 of file Window_unix.cpp.

230 {
231 static const struct {
232 unsigned fXMask;
233 skui::ModifierKey fSkMask;
234 } gModifiers[] = {
235 { ShiftMask, skui::ModifierKey::kShift },
236 { ControlMask, skui::ModifierKey::kControl },
237 { Mod1Mask, skui::ModifierKey::kOption },
238 };
239
241 for (size_t i = 0; i < std::size(gModifiers); ++i) {
242 if (event.xkey.state & gModifiers[i].fXMask) {
243 modifiers |= gModifiers[i].fSkMask;
244 }
245 }
246 return modifiers;
247}
FlKeyEvent * event
ModifierKey
Definition: ModifierKey.h:9
GdkModifierType state
Definition: fl_key_event.h:32

◆ get_modifiers() [2/2]

static skui::ModifierKey sk_app::get_modifiers ( UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 161 of file Window_win.cpp.

161 {
163
164 switch (message) {
165 case WM_UNICHAR:
166 case WM_CHAR:
167 if (0 == (lParam & (1 << 30))) {
169 }
170 if (lParam & (1 << 29)) {
171 modifiers |= skui::ModifierKey::kOption;
172 }
173 break;
174
175 case WM_KEYDOWN:
176 case WM_SYSKEYDOWN:
177 if (0 == (lParam & (1 << 30))) {
179 }
180 if (lParam & (1 << 29)) {
181 modifiers |= skui::ModifierKey::kOption;
182 }
183 break;
184
185 case WM_KEYUP:
186 case WM_SYSKEYUP:
187 if (lParam & (1 << 29)) {
188 modifiers |= skui::ModifierKey::kOption;
189 }
190 break;
191
192 case WM_LBUTTONDOWN:
193 case WM_LBUTTONUP:
194 case WM_MOUSEMOVE:
195 case WM_MOUSEWHEEL:
196 if (wParam & MK_CONTROL) {
197 modifiers |= skui::ModifierKey::kControl;
198 }
199 if (wParam & MK_SHIFT) {
200 modifiers |= skui::ModifierKey::kShift;
201 }
202 break;
203 }
204
205 return modifiers;
206}
Win32Message message

◆ Java_org_skia_viewer_ViewerActivity_onKeyPressed()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onKeyPressed ( JNIEnv *  env,
jobject  activity,
jlong  handle,
jint  keycode 
)

Definition at line 272 of file surface_glue_android.cpp.

275 {
276 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
278 message.fKeycode = keycode;
279 skiaAndroidApp->postMessage(message);
280}

◆ Java_org_skia_viewer_ViewerActivity_onSurfaceChanged()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onSurfaceChanged ( JNIEnv *  env,
jobject  activity,
jlong  handle,
jobject  surface 
)

Definition at line 258 of file surface_glue_android.cpp.

259 {
260 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
262 message.fNativeWindow = ANativeWindow_fromSurface(env, surface);
263 skiaAndroidApp->postMessage(message);
264}
VkSurfaceKHR surface
Definition: main.cc:49

◆ Java_org_skia_viewer_ViewerActivity_onSurfaceCreated()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onSurfaceCreated ( JNIEnv *  env,
jobject  activity,
jlong  handle,
jobject  surface 
)

Definition at line 250 of file surface_glue_android.cpp.

251 {
252 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
254 message.fNativeWindow = ANativeWindow_fromSurface(env, surface);
255 skiaAndroidApp->postMessage(message);
256}

◆ Java_org_skia_viewer_ViewerActivity_onSurfaceDestroyed()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onSurfaceDestroyed ( JNIEnv *  env,
jobject  activity,
jlong  handle 
)

Definition at line 266 of file surface_glue_android.cpp.

267 {
268 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
269 skiaAndroidApp->postMessage(Message(kSurfaceDestroyed));
270}

◆ Java_org_skia_viewer_ViewerActivity_onTouched()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onTouched ( JNIEnv *  env,
jobject  activity,
jlong  handle,
jint  owner,
jint  state,
jfloat  x,
jfloat  y 
)

Definition at line 282 of file surface_glue_android.cpp.

283 {
284 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
286 message.fTouchOwner = owner;
287 message.fTouchState = state;
288 message.fTouchX = x;
289 message.fTouchY = y;
290 skiaAndroidApp->postMessage(message);
291}
AtkStateType state
double y
double x

◆ Java_org_skia_viewer_ViewerActivity_onUIStateChanged()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerActivity_onUIStateChanged ( JNIEnv *  env,
jobject  activity,
jlong  handle,
jstring  stateName,
jstring  stateValue 
)

Definition at line 293 of file surface_glue_android.cpp.

294 {
295 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
297 const char* nameChars = env->GetStringUTFChars(stateName, nullptr);
298 const char* valueChars = env->GetStringUTFChars(stateValue, nullptr);
299 message.stateName = new SkString(nameChars);
300 message.stateValue = new SkString(valueChars);
301 skiaAndroidApp->postMessage(message);
302 env->ReleaseStringUTFChars(stateName, nameChars);
303 env->ReleaseStringUTFChars(stateValue, valueChars);
304}

◆ Java_org_skia_viewer_ViewerApplication_createNativeApp()

JNIEXPORT jlong JNICALL sk_app::Java_org_skia_viewer_ViewerApplication_createNativeApp ( JNIEnv *  env,
jobject  application,
jobject  assetManager 
)

Definition at line 236 of file surface_glue_android.cpp.

238 {
239 config_resource_mgr(env, assetManager);
240 SkiaAndroidApp* skiaAndroidApp = new SkiaAndroidApp(env, application);
241 return (jlong)((size_t)skiaAndroidApp);
242}
static void config_resource_mgr(JNIEnv *env, jobject assetManager)

◆ Java_org_skia_viewer_ViewerApplication_destroyNativeApp()

JNIEXPORT void JNICALL sk_app::Java_org_skia_viewer_ViewerApplication_destroyNativeApp ( JNIEnv *  env,
jobject  application,
jlong  handle 
)

Definition at line 244 of file surface_glue_android.cpp.

245 {
246 auto skiaAndroidApp = (SkiaAndroidApp*)handle;
247 skiaAndroidApp->postMessage(Message(kDestroyApp));
248}

◆ WndProc()

LRESULT CALLBACK sk_app::WndProc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 208 of file Window_win.cpp.

209{
210 PAINTSTRUCT ps;
211
212 Window_win* window = (Window_win*) GetWindowLongPtr(hWnd, GWLP_USERDATA);
213
214 bool eventHandled = false;
215
216 switch (message) {
217 case WM_PAINT:
218 BeginPaint(hWnd, &ps);
219 window->onPaint();
220 EndPaint(hWnd, &ps);
221 eventHandled = true;
222 break;
223
224 case WM_CLOSE:
225 PostQuitMessage(0);
226 eventHandled = true;
227 break;
228
229 case WM_ACTIVATE:
230 // disable/enable rendering here, depending on wParam != WA_INACTIVE
231 break;
232
233 case WM_SIZE:
234 window->onResize(LOWORD(lParam), HIWORD(lParam));
235 eventHandled = true;
236 break;
237
238 case WM_UNICHAR:
239 eventHandled = window->onChar((SkUnichar)wParam,
240 get_modifiers(message, wParam, lParam));
241 break;
242
243 case WM_CHAR: {
244 const uint16_t* cPtr = reinterpret_cast<uint16_t*>(&wParam);
245 SkUnichar c = SkUTF::NextUTF16(&cPtr, cPtr + 2);
246 eventHandled = window->onChar(c, get_modifiers(message, wParam, lParam));
247 } break;
248
249 case WM_KEYDOWN:
250 case WM_SYSKEYDOWN:
251 eventHandled = window->onKey(get_key(wParam), skui::InputState::kDown,
252 get_modifiers(message, wParam, lParam));
253 break;
254
255 case WM_KEYUP:
256 case WM_SYSKEYUP:
257 eventHandled = window->onKey(get_key(wParam), skui::InputState::kUp,
258 get_modifiers(message, wParam, lParam));
259 break;
260
261 case WM_LBUTTONDOWN:
262 case WM_LBUTTONUP: {
263 int xPos = GET_X_LPARAM(lParam);
264 int yPos = GET_Y_LPARAM(lParam);
265
266 //if (!gIsFullscreen)
267 //{
268 // RECT rc = { 0, 0, 640, 480 };
269 // AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
270 // xPos -= rc.left;
271 // yPos -= rc.top;
272 //}
273
274 skui::InputState istate = ((wParam & MK_LBUTTON) != 0) ? skui::InputState::kDown
276
277 eventHandled = window->onMouse(xPos, yPos, istate,
278 get_modifiers(message, wParam, lParam));
279 } break;
280
281 case WM_MOUSEMOVE: {
282 int xPos = GET_X_LPARAM(lParam);
283 int yPos = GET_Y_LPARAM(lParam);
284
285 //if (!gIsFullscreen)
286 //{
287 // RECT rc = { 0, 0, 640, 480 };
288 // AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
289 // xPos -= rc.left;
290 // yPos -= rc.top;
291 //}
292
293 eventHandled = window->onMouse(xPos, yPos, skui::InputState::kMove,
294 get_modifiers(message, wParam, lParam));
295 } break;
296
297 case WM_MOUSEWHEEL: {
298 int xPos = GET_X_LPARAM(lParam);
299 int yPos = GET_Y_LPARAM(lParam);
300 eventHandled = window->onMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f,
301 xPos,
302 yPos,
303 get_modifiers(message, wParam, lParam));
304 } break;
305
306 case WM_TOUCH: {
307 uint16_t numInputs = LOWORD(wParam);
308 std::unique_ptr<TOUCHINPUT[]> inputs(new TOUCHINPUT[numInputs]);
309 if (GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, inputs.get(),
310 sizeof(TOUCHINPUT))) {
311 POINT topLeft = {0, 0};
312 ClientToScreen(hWnd, &topLeft);
313 for (uint16_t i = 0; i < numInputs; ++i) {
314 TOUCHINPUT ti = inputs[i];
316 if (ti.dwFlags & TOUCHEVENTF_DOWN) {
318 } else if (ti.dwFlags & TOUCHEVENTF_MOVE) {
320 } else if (ti.dwFlags & TOUCHEVENTF_UP) {
322 } else {
323 continue;
324 }
325 // TOUCHINPUT coordinates are in 100ths of pixels
326 // Adjust for that, and make them window relative
327 LONG tx = (ti.x / 100) - topLeft.x;
328 LONG ty = (ti.y / 100) - topLeft.y;
329 eventHandled = window->onTouch(ti.dwID, state, tx, ty) || eventHandled;
330 }
331 }
332 } break;
333
334 default:
335 return DefWindowProc(hWnd, message, wParam, lParam);
336 }
337
338 return eventHandled ? 0 : 1;
339}
int32_t SkUnichar
Definition: SkTypes.h:175
static skui::ModifierKey get_modifiers(const NSEvent *event)
Definition: Window_mac.mm:261
static skui::Key get_key(unsigned short vk)
Definition: Window_mac.mm:216
GLFWwindow * window
Definition: main.cc:45
SK_SPI SkUnichar NextUTF16(const uint16_t **ptr, const uint16_t *end)
Definition: SkUTF.cpp:159
InputState
Definition: InputState.h:6
long LONG
Definition: windows_types.h:23

Variable Documentation

◆ gWindowHeight

int sk_app::gWindowHeight = 0
static

Definition at line 28 of file Window_win.cpp.

◆ gWindowWidth

int sk_app::gWindowWidth = CW_USEDEFAULT
static

Definition at line 27 of file Window_win.cpp.

◆ gWindowX

int sk_app::gWindowX = CW_USEDEFAULT
static

Definition at line 25 of file Window_win.cpp.

◆ gWindowY

int sk_app::gWindowY = 0
static

Definition at line 26 of file Window_win.cpp.

◆ kEventMask

const long sk_app::kEventMask
Initial value:
= ExposureMask | StructureNotifyMask |
KeyPressMask | KeyReleaseMask |
PointerMotionMask | ButtonPressMask | ButtonReleaseMask

Definition at line 40 of file Window_unix.cpp.

◆ LOOPER_ID_MESSAGEPIPE

const int sk_app::LOOPER_ID_MESSAGEPIPE = 1
static

Definition at line 55 of file surface_glue_android.cpp.