mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-07-29 12:18:39 +00:00
控制交互
This commit is contained in:
parent
6f51c27913
commit
70bb98e0b4
15 changed files with 1880 additions and 14 deletions
|
@ -25,6 +25,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||
|
||||
#DEFINES += SKIP_FRAMES
|
||||
|
||||
# 源码
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
dialog.cpp \
|
||||
|
@ -37,7 +38,9 @@ SOURCES += \
|
|||
qyuvopenglwidget.cpp \
|
||||
videoform.cpp \
|
||||
devicesocket.cpp \
|
||||
tcpserver.cpp
|
||||
tcpserver.cpp \
|
||||
controlevent.cpp \
|
||||
controller.cpp
|
||||
|
||||
HEADERS += \
|
||||
dialog.h \
|
||||
|
@ -51,15 +54,23 @@ HEADERS += \
|
|||
videoform.h \
|
||||
devicesocket.h \
|
||||
tcpserver.h \
|
||||
qscrcpyevent.h
|
||||
qscrcpyevent.h \
|
||||
controlevent.h \
|
||||
controller.h
|
||||
|
||||
FORMS += \
|
||||
dialog.ui \
|
||||
videoform.ui
|
||||
|
||||
INCLUDEPATH += \
|
||||
$$PWD/ffmpeg/include
|
||||
#子工程
|
||||
include ($$PWD/android/android.pri)
|
||||
|
||||
# 附加包含路径
|
||||
INCLUDEPATH += \
|
||||
$$PWD/ffmpeg/include \
|
||||
$$PWD/android
|
||||
|
||||
# 依赖库
|
||||
LIBS += \
|
||||
-L$$PWD/ffmpeg/lib -lavcodec \
|
||||
-L$$PWD/ffmpeg/lib -lavformat \
|
||||
|
|
826
src/android/input.h
Normal file
826
src/android/input.h
Normal file
|
@ -0,0 +1,826 @@
|
|||
// copied from <https://android.googlesource.com/platform/frameworks/native/+/master/include/android/input.h>
|
||||
// blob 08299899b6305a0fe74d7d2b8471b7cd0af49dc7
|
||||
// (and modified)
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _ANDROID_INPUT_H
|
||||
#define _ANDROID_INPUT_H
|
||||
|
||||
/**
|
||||
* Meta key / modifer state.
|
||||
*/
|
||||
enum AndroidMetastate {
|
||||
/** No meta keys are pressed. */
|
||||
AMETA_NONE = 0,
|
||||
|
||||
/** This mask is used to check whether one of the ALT meta keys is pressed. */
|
||||
AMETA_ALT_ON = 0x02,
|
||||
|
||||
/** This mask is used to check whether the left ALT meta key is pressed. */
|
||||
AMETA_ALT_LEFT_ON = 0x10,
|
||||
|
||||
/** This mask is used to check whether the right ALT meta key is pressed. */
|
||||
AMETA_ALT_RIGHT_ON = 0x20,
|
||||
|
||||
/** This mask is used to check whether one of the SHIFT meta keys is pressed. */
|
||||
AMETA_SHIFT_ON = 0x01,
|
||||
|
||||
/** This mask is used to check whether the left SHIFT meta key is pressed. */
|
||||
AMETA_SHIFT_LEFT_ON = 0x40,
|
||||
|
||||
/** This mask is used to check whether the right SHIFT meta key is pressed. */
|
||||
AMETA_SHIFT_RIGHT_ON = 0x80,
|
||||
|
||||
/** This mask is used to check whether the SYM meta key is pressed. */
|
||||
AMETA_SYM_ON = 0x04,
|
||||
|
||||
/** This mask is used to check whether the FUNCTION meta key is pressed. */
|
||||
AMETA_FUNCTION_ON = 0x08,
|
||||
|
||||
/** This mask is used to check whether one of the CTRL meta keys is pressed. */
|
||||
AMETA_CTRL_ON = 0x1000,
|
||||
|
||||
/** This mask is used to check whether the left CTRL meta key is pressed. */
|
||||
AMETA_CTRL_LEFT_ON = 0x2000,
|
||||
|
||||
/** This mask is used to check whether the right CTRL meta key is pressed. */
|
||||
AMETA_CTRL_RIGHT_ON = 0x4000,
|
||||
|
||||
/** This mask is used to check whether one of the META meta keys is pressed. */
|
||||
AMETA_META_ON = 0x10000,
|
||||
|
||||
/** This mask is used to check whether the left META meta key is pressed. */
|
||||
AMETA_META_LEFT_ON = 0x20000,
|
||||
|
||||
/** This mask is used to check whether the right META meta key is pressed. */
|
||||
AMETA_META_RIGHT_ON = 0x40000,
|
||||
|
||||
/** This mask is used to check whether the CAPS LOCK meta key is on. */
|
||||
AMETA_CAPS_LOCK_ON = 0x100000,
|
||||
|
||||
/** This mask is used to check whether the NUM LOCK meta key is on. */
|
||||
AMETA_NUM_LOCK_ON = 0x200000,
|
||||
|
||||
/** This mask is used to check whether the SCROLL LOCK meta key is on. */
|
||||
AMETA_SCROLL_LOCK_ON = 0x400000,
|
||||
};
|
||||
|
||||
/**
|
||||
* Input event types.
|
||||
*/
|
||||
enum AndroidInputEventType {
|
||||
/** Indicates that the input event is a key event. */
|
||||
AINPUT_EVENT_TYPE_KEY = 1,
|
||||
/** Indicates that the input event is a motion event. */
|
||||
AINPUT_EVENT_TYPE_MOTION = 2
|
||||
};
|
||||
|
||||
/**
|
||||
* Key event actions.
|
||||
*/
|
||||
enum AndroidKeyeventAction {
|
||||
/** The key has been pressed down. */
|
||||
AKEY_EVENT_ACTION_DOWN = 0,
|
||||
|
||||
/** The key has been released. */
|
||||
AKEY_EVENT_ACTION_UP = 1,
|
||||
|
||||
/**
|
||||
* Multiple duplicate key events have occurred in a row, or a
|
||||
* complex string is being delivered. The repeat_count property
|
||||
* of the key event contains the number of times the given key
|
||||
* code should be executed.
|
||||
*/
|
||||
AKEY_EVENT_ACTION_MULTIPLE = 2
|
||||
};
|
||||
|
||||
/**
|
||||
* Key event flags.
|
||||
*/
|
||||
enum AndroidKeyeventFlags {
|
||||
/** This mask is set if the device woke because of this key event. */
|
||||
AKEY_EVENT_FLAG_WOKE_HERE = 0x1,
|
||||
|
||||
/** This mask is set if the key event was generated by a software keyboard. */
|
||||
AKEY_EVENT_FLAG_SOFT_KEYBOARD = 0x2,
|
||||
|
||||
/** This mask is set if we don't want the key event to cause us to leave touch mode. */
|
||||
AKEY_EVENT_FLAG_KEEP_TOUCH_MODE = 0x4,
|
||||
|
||||
/**
|
||||
* This mask is set if an event was known to come from a trusted
|
||||
* part of the system. That is, the event is known to come from
|
||||
* the user, and could not have been spoofed by a third party
|
||||
* component.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_FROM_SYSTEM = 0x8,
|
||||
|
||||
/**
|
||||
* This mask is used for compatibility, to identify enter keys that are
|
||||
* coming from an IME whose enter key has been auto-labelled "next" or
|
||||
* "done". This allows TextView to dispatch these as normal enter keys
|
||||
* for old applications, but still do the appropriate action when
|
||||
* receiving them.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_EDITOR_ACTION = 0x10,
|
||||
|
||||
/**
|
||||
* When associated with up key events, this indicates that the key press
|
||||
* has been canceled. Typically this is used with virtual touch screen
|
||||
* keys, where the user can slide from the virtual key area on to the
|
||||
* display: in that case, the application will receive a canceled up
|
||||
* event and should not perform the action normally associated with the
|
||||
* key. Note that for this to work, the application can not perform an
|
||||
* action for a key until it receives an up or the long press timeout has
|
||||
* expired.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_CANCELED = 0x20,
|
||||
|
||||
/**
|
||||
* This key event was generated by a virtual (on-screen) hard key area.
|
||||
* Typically this is an area of the touchscreen, outside of the regular
|
||||
* display, dedicated to "hardware" buttons.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY = 0x40,
|
||||
|
||||
/**
|
||||
* This flag is set for the first key repeat that occurs after the
|
||||
* long press timeout.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_LONG_PRESS = 0x80,
|
||||
|
||||
/**
|
||||
* Set when a key event has AKEY_EVENT_FLAG_CANCELED set because a long
|
||||
* press action was executed while it was down.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_CANCELED_LONG_PRESS = 0x100,
|
||||
|
||||
/**
|
||||
* Set for AKEY_EVENT_ACTION_UP when this event's key code is still being
|
||||
* tracked from its initial down. That is, somebody requested that tracking
|
||||
* started on the key down and a long press has not caused
|
||||
* the tracking to be canceled.
|
||||
*/
|
||||
AKEY_EVENT_FLAG_TRACKING = 0x200,
|
||||
|
||||
/**
|
||||
* Set when a key event has been synthesized to implement default behavior
|
||||
* for an event that the application did not handle.
|
||||
* Fallback key events are generated by unhandled trackball motions
|
||||
* (to emulate a directional keypad) and by certain unhandled key presses
|
||||
* that are declared in the key map (such as special function numeric keypad
|
||||
* keys when numlock is off).
|
||||
*/
|
||||
AKEY_EVENT_FLAG_FALLBACK = 0x400,
|
||||
};
|
||||
|
||||
/**
|
||||
* Bit shift for the action bits holding the pointer index as
|
||||
* defined by AMOTION_EVENT_ACTION_POINTER_INDEX_MASK.
|
||||
*/
|
||||
#define AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT 8
|
||||
|
||||
/** Motion event actions */
|
||||
enum AndroidMotioneventAction {
|
||||
/** Bit mask of the parts of the action code that are the action itself. */
|
||||
AMOTION_EVENT_ACTION_MASK = 0xff,
|
||||
|
||||
/**
|
||||
* Bits in the action code that represent a pointer index, used with
|
||||
* AMOTION_EVENT_ACTION_POINTER_DOWN and AMOTION_EVENT_ACTION_POINTER_UP. Shifting
|
||||
* down by AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT provides the actual pointer
|
||||
* index where the data for the pointer going up or down can be found.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_POINTER_INDEX_MASK = 0xff00,
|
||||
|
||||
/** A pressed gesture has started, the motion contains the initial starting location. */
|
||||
AMOTION_EVENT_ACTION_DOWN = 0,
|
||||
|
||||
/**
|
||||
* A pressed gesture has finished, the motion contains the final release location
|
||||
* as well as any intermediate points since the last down or move event.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_UP = 1,
|
||||
|
||||
/**
|
||||
* A change has happened during a press gesture (between AMOTION_EVENT_ACTION_DOWN and
|
||||
* AMOTION_EVENT_ACTION_UP). The motion contains the most recent point, as well as
|
||||
* any intermediate points since the last down or move event.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_MOVE = 2,
|
||||
|
||||
/**
|
||||
* The current gesture has been aborted.
|
||||
* You will not receive any more points in it. You should treat this as
|
||||
* an up event, but not perform any action that you normally would.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_CANCEL = 3,
|
||||
|
||||
/**
|
||||
* A movement has happened outside of the normal bounds of the UI element.
|
||||
* This does not provide a full gesture, but only the initial location of the movement/touch.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_OUTSIDE = 4,
|
||||
|
||||
/**
|
||||
* A non-primary pointer has gone down.
|
||||
* The bits in AMOTION_EVENT_ACTION_POINTER_INDEX_MASK indicate which pointer changed.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_POINTER_DOWN = 5,
|
||||
|
||||
/**
|
||||
* A non-primary pointer has gone up.
|
||||
* The bits in AMOTION_EVENT_ACTION_POINTER_INDEX_MASK indicate which pointer changed.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_POINTER_UP = 6,
|
||||
|
||||
/**
|
||||
* A change happened but the pointer is not down (unlike AMOTION_EVENT_ACTION_MOVE).
|
||||
* The motion contains the most recent point, as well as any intermediate points since
|
||||
* the last hover move event.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_HOVER_MOVE = 7,
|
||||
|
||||
/**
|
||||
* The motion event contains relative vertical and/or horizontal scroll offsets.
|
||||
* Use getAxisValue to retrieve the information from AMOTION_EVENT_AXIS_VSCROLL
|
||||
* and AMOTION_EVENT_AXIS_HSCROLL.
|
||||
* The pointer may or may not be down when this event is dispatched.
|
||||
* This action is always delivered to the winder under the pointer, which
|
||||
* may not be the window currently touched.
|
||||
*/
|
||||
AMOTION_EVENT_ACTION_SCROLL = 8,
|
||||
|
||||
/** The pointer is not down but has entered the boundaries of a window or view. */
|
||||
AMOTION_EVENT_ACTION_HOVER_ENTER = 9,
|
||||
|
||||
/** The pointer is not down but has exited the boundaries of a window or view. */
|
||||
AMOTION_EVENT_ACTION_HOVER_EXIT = 10,
|
||||
|
||||
/* One or more buttons have been pressed. */
|
||||
AMOTION_EVENT_ACTION_BUTTON_PRESS = 11,
|
||||
|
||||
/* One or more buttons have been released. */
|
||||
AMOTION_EVENT_ACTION_BUTTON_RELEASE = 12,
|
||||
};
|
||||
|
||||
/**
|
||||
* Motion event flags.
|
||||
*/
|
||||
enum AndroidMotioneventFlags {
|
||||
/**
|
||||
* This flag indicates that the window that received this motion event is partly
|
||||
* or wholly obscured by another visible window above it. This flag is set to true
|
||||
* even if the event did not directly pass through the obscured area.
|
||||
* A security sensitive application can check this flag to identify situations in which
|
||||
* a malicious application may have covered up part of its content for the purpose
|
||||
* of misleading the user or hijacking touches. An appropriate response might be
|
||||
* to drop the suspect touches or to take additional precautions to confirm the user's
|
||||
* actual intent.
|
||||
*/
|
||||
AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED = 0x1,
|
||||
};
|
||||
|
||||
/**
|
||||
* Motion event edge touch flags.
|
||||
*/
|
||||
enum AndroidMotioneventEdgeTouchTlags {
|
||||
/** No edges intersected. */
|
||||
AMOTION_EVENT_EDGE_FLAG_NONE = 0,
|
||||
|
||||
/** Flag indicating the motion event intersected the top edge of the screen. */
|
||||
AMOTION_EVENT_EDGE_FLAG_TOP = 0x01,
|
||||
|
||||
/** Flag indicating the motion event intersected the bottom edge of the screen. */
|
||||
AMOTION_EVENT_EDGE_FLAG_BOTTOM = 0x02,
|
||||
|
||||
/** Flag indicating the motion event intersected the left edge of the screen. */
|
||||
AMOTION_EVENT_EDGE_FLAG_LEFT = 0x04,
|
||||
|
||||
/** Flag indicating the motion event intersected the right edge of the screen. */
|
||||
AMOTION_EVENT_EDGE_FLAG_RIGHT = 0x08
|
||||
};
|
||||
|
||||
/**
|
||||
* Constants that identify each individual axis of a motion event.
|
||||
* @anchor AMOTION_EVENT_AXIS
|
||||
*/
|
||||
enum AndroidMotioneventAxis {
|
||||
/**
|
||||
* Axis constant: X axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the absolute X screen position of the center of
|
||||
* the touch contact area. The units are display pixels.
|
||||
* - For a touch pad, reports the absolute X surface position of the center of the touch
|
||||
* contact area. The units are device-dependent.
|
||||
* - For a mouse, reports the absolute X screen position of the mouse pointer.
|
||||
* The units are display pixels.
|
||||
* - For a trackball, reports the relative horizontal displacement of the trackball.
|
||||
* The value is normalized to a range from -1.0 (left) to 1.0 (right).
|
||||
* - For a joystick, reports the absolute X position of the joystick.
|
||||
* The value is normalized to a range from -1.0 (left) to 1.0 (right).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_X = 0,
|
||||
/**
|
||||
* Axis constant: Y axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the absolute Y screen position of the center of
|
||||
* the touch contact area. The units are display pixels.
|
||||
* - For a touch pad, reports the absolute Y surface position of the center of the touch
|
||||
* contact area. The units are device-dependent.
|
||||
* - For a mouse, reports the absolute Y screen position of the mouse pointer.
|
||||
* The units are display pixels.
|
||||
* - For a trackball, reports the relative vertical displacement of the trackball.
|
||||
* The value is normalized to a range from -1.0 (up) to 1.0 (down).
|
||||
* - For a joystick, reports the absolute Y position of the joystick.
|
||||
* The value is normalized to a range from -1.0 (up or far) to 1.0 (down or near).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_Y = 1,
|
||||
/**
|
||||
* Axis constant: Pressure axis of a motion event.
|
||||
*
|
||||
* - For a touch screen or touch pad, reports the approximate pressure applied to the surface
|
||||
* by a finger or other tool. The value is normalized to a range from
|
||||
* 0 (no pressure at all) to 1 (normal pressure), although values higher than 1
|
||||
* may be generated depending on the calibration of the input device.
|
||||
* - For a trackball, the value is set to 1 if the trackball button is pressed
|
||||
* or 0 otherwise.
|
||||
* - For a mouse, the value is set to 1 if the primary mouse button is pressed
|
||||
* or 0 otherwise.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_PRESSURE = 2,
|
||||
/**
|
||||
* Axis constant: Size axis of a motion event.
|
||||
*
|
||||
* - For a touch screen or touch pad, reports the approximate size of the contact area in
|
||||
* relation to the maximum detectable size for the device. The value is normalized
|
||||
* to a range from 0 (smallest detectable size) to 1 (largest detectable size),
|
||||
* although it is not a linear scale. This value is of limited use.
|
||||
* To obtain calibrated size information, see
|
||||
* {@link AMOTION_EVENT_AXIS_TOUCH_MAJOR} or {@link AMOTION_EVENT_AXIS_TOOL_MAJOR}.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_SIZE = 3,
|
||||
/**
|
||||
* Axis constant: TouchMajor axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the length of the major axis of an ellipse that
|
||||
* represents the touch area at the point of contact.
|
||||
* The units are display pixels.
|
||||
* - For a touch pad, reports the length of the major axis of an ellipse that
|
||||
* represents the touch area at the point of contact.
|
||||
* The units are device-dependent.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_TOUCH_MAJOR = 4,
|
||||
/**
|
||||
* Axis constant: TouchMinor axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the length of the minor axis of an ellipse that
|
||||
* represents the touch area at the point of contact.
|
||||
* The units are display pixels.
|
||||
* - For a touch pad, reports the length of the minor axis of an ellipse that
|
||||
* represents the touch area at the point of contact.
|
||||
* The units are device-dependent.
|
||||
*
|
||||
* When the touch is circular, the major and minor axis lengths will be equal to one another.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_TOUCH_MINOR = 5,
|
||||
/**
|
||||
* Axis constant: ToolMajor axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the length of the major axis of an ellipse that
|
||||
* represents the size of the approaching finger or tool used to make contact.
|
||||
* - For a touch pad, reports the length of the major axis of an ellipse that
|
||||
* represents the size of the approaching finger or tool used to make contact.
|
||||
* The units are device-dependent.
|
||||
*
|
||||
* When the touch is circular, the major and minor axis lengths will be equal to one another.
|
||||
*
|
||||
* The tool size may be larger than the touch size since the tool may not be fully
|
||||
* in contact with the touch sensor.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_TOOL_MAJOR = 6,
|
||||
/**
|
||||
* Axis constant: ToolMinor axis of a motion event.
|
||||
*
|
||||
* - For a touch screen, reports the length of the minor axis of an ellipse that
|
||||
* represents the size of the approaching finger or tool used to make contact.
|
||||
* - For a touch pad, reports the length of the minor axis of an ellipse that
|
||||
* represents the size of the approaching finger or tool used to make contact.
|
||||
* The units are device-dependent.
|
||||
*
|
||||
* When the touch is circular, the major and minor axis lengths will be equal to one another.
|
||||
*
|
||||
* The tool size may be larger than the touch size since the tool may not be fully
|
||||
* in contact with the touch sensor.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_TOOL_MINOR = 7,
|
||||
/**
|
||||
* Axis constant: Orientation axis of a motion event.
|
||||
*
|
||||
* - For a touch screen or touch pad, reports the orientation of the finger
|
||||
* or tool in radians relative to the vertical plane of the device.
|
||||
* An angle of 0 radians indicates that the major axis of contact is oriented
|
||||
* upwards, is perfectly circular or is of unknown orientation. A positive angle
|
||||
* indicates that the major axis of contact is oriented to the right. A negative angle
|
||||
* indicates that the major axis of contact is oriented to the left.
|
||||
* The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians
|
||||
* (finger pointing fully right).
|
||||
* - For a stylus, the orientation indicates the direction in which the stylus
|
||||
* is pointing in relation to the vertical axis of the current orientation of the screen.
|
||||
* The range is from -PI radians to PI radians, where 0 is pointing up,
|
||||
* -PI/2 radians is pointing left, -PI or PI radians is pointing down, and PI/2 radians
|
||||
* is pointing right. See also {@link AMOTION_EVENT_AXIS_TILT}.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_ORIENTATION = 8,
|
||||
/**
|
||||
* Axis constant: Vertical Scroll axis of a motion event.
|
||||
*
|
||||
* - For a mouse, reports the relative movement of the vertical scroll wheel.
|
||||
* The value is normalized to a range from -1.0 (down) to 1.0 (up).
|
||||
*
|
||||
* This axis should be used to scroll views vertically.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_VSCROLL = 9,
|
||||
/**
|
||||
* Axis constant: Horizontal Scroll axis of a motion event.
|
||||
*
|
||||
* - For a mouse, reports the relative movement of the horizontal scroll wheel.
|
||||
* The value is normalized to a range from -1.0 (left) to 1.0 (right).
|
||||
*
|
||||
* This axis should be used to scroll views horizontally.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_HSCROLL = 10,
|
||||
/**
|
||||
* Axis constant: Z axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute Z position of the joystick.
|
||||
* The value is normalized to a range from -1.0 (high) to 1.0 (low).
|
||||
* <em>On game pads with two analog joysticks, this axis is often reinterpreted
|
||||
* to report the absolute X position of the second joystick instead.</em>
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_Z = 11,
|
||||
/**
|
||||
* Axis constant: X Rotation axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute rotation angle about the X axis.
|
||||
* The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RX = 12,
|
||||
/**
|
||||
* Axis constant: Y Rotation axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute rotation angle about the Y axis.
|
||||
* The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RY = 13,
|
||||
/**
|
||||
* Axis constant: Z Rotation axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute rotation angle about the Z axis.
|
||||
* The value is normalized to a range from -1.0 (counter-clockwise) to 1.0 (clockwise).
|
||||
* On game pads with two analog joysticks, this axis is often reinterpreted
|
||||
* to report the absolute Y position of the second joystick instead.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RZ = 14,
|
||||
/**
|
||||
* Axis constant: Hat X axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute X position of the directional hat control.
|
||||
* The value is normalized to a range from -1.0 (left) to 1.0 (right).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_HAT_X = 15,
|
||||
/**
|
||||
* Axis constant: Hat Y axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute Y position of the directional hat control.
|
||||
* The value is normalized to a range from -1.0 (up) to 1.0 (down).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_HAT_Y = 16,
|
||||
/**
|
||||
* Axis constant: Left Trigger axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the left trigger control.
|
||||
* The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_LTRIGGER = 17,
|
||||
/**
|
||||
* Axis constant: Right Trigger axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the right trigger control.
|
||||
* The value is normalized to a range from 0.0 (released) to 1.0 (fully pressed).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RTRIGGER = 18,
|
||||
/**
|
||||
* Axis constant: Throttle axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the throttle control.
|
||||
* The value is normalized to a range from 0.0 (fully open) to 1.0 (fully closed).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_THROTTLE = 19,
|
||||
/**
|
||||
* Axis constant: Rudder axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the rudder control.
|
||||
* The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RUDDER = 20,
|
||||
/**
|
||||
* Axis constant: Wheel axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the steering wheel control.
|
||||
* The value is normalized to a range from -1.0 (turn left) to 1.0 (turn right).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_WHEEL = 21,
|
||||
/**
|
||||
* Axis constant: Gas axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the gas (accelerator) control.
|
||||
* The value is normalized to a range from 0.0 (no acceleration)
|
||||
* to 1.0 (maximum acceleration).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GAS = 22,
|
||||
/**
|
||||
* Axis constant: Brake axis of a motion event.
|
||||
*
|
||||
* - For a joystick, reports the absolute position of the brake control.
|
||||
* The value is normalized to a range from 0.0 (no braking) to 1.0 (maximum braking).
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_BRAKE = 23,
|
||||
/**
|
||||
* Axis constant: Distance axis of a motion event.
|
||||
*
|
||||
* - For a stylus, reports the distance of the stylus from the screen.
|
||||
* A value of 0.0 indicates direct contact and larger values indicate increasing
|
||||
* distance from the surface.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_DISTANCE = 24,
|
||||
/**
|
||||
* Axis constant: Tilt axis of a motion event.
|
||||
*
|
||||
* - For a stylus, reports the tilt angle of the stylus in radians where
|
||||
* 0 radians indicates that the stylus is being held perpendicular to the
|
||||
* surface, and PI/2 radians indicates that the stylus is being held flat
|
||||
* against the surface.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_TILT = 25,
|
||||
/**
|
||||
* Axis constant: Generic scroll axis of a motion event.
|
||||
*
|
||||
* - This is used for scroll axis motion events that can't be classified as strictly
|
||||
* vertical or horizontal. The movement of a rotating scroller is an example of this.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_SCROLL = 26,
|
||||
/**
|
||||
* Axis constant: The movement of x position of a motion event.
|
||||
*
|
||||
* - For a mouse, reports a difference of x position between the previous position.
|
||||
* This is useful when pointer is captured, in that case the mouse pointer doesn't
|
||||
* change the location but this axis reports the difference which allows the app
|
||||
* to see how the mouse is moved.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RELATIVE_X = 27,
|
||||
/**
|
||||
* Axis constant: The movement of y position of a motion event.
|
||||
*
|
||||
* Same as {@link RELATIVE_X}, but for y position.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_RELATIVE_Y = 28,
|
||||
/**
|
||||
* Axis constant: Generic 1 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_1 = 32,
|
||||
/**
|
||||
* Axis constant: Generic 2 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_2 = 33,
|
||||
/**
|
||||
* Axis constant: Generic 3 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_3 = 34,
|
||||
/**
|
||||
* Axis constant: Generic 4 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_4 = 35,
|
||||
/**
|
||||
* Axis constant: Generic 5 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_5 = 36,
|
||||
/**
|
||||
* Axis constant: Generic 6 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_6 = 37,
|
||||
/**
|
||||
* Axis constant: Generic 7 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_7 = 38,
|
||||
/**
|
||||
* Axis constant: Generic 8 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_8 = 39,
|
||||
/**
|
||||
* Axis constant: Generic 9 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_9 = 40,
|
||||
/**
|
||||
* Axis constant: Generic 10 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_10 = 41,
|
||||
/**
|
||||
* Axis constant: Generic 11 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_11 = 42,
|
||||
/**
|
||||
* Axis constant: Generic 12 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_12 = 43,
|
||||
/**
|
||||
* Axis constant: Generic 13 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_13 = 44,
|
||||
/**
|
||||
* Axis constant: Generic 14 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_14 = 45,
|
||||
/**
|
||||
* Axis constant: Generic 15 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_15 = 46,
|
||||
/**
|
||||
* Axis constant: Generic 16 axis of a motion event.
|
||||
* The interpretation of a generic axis is device-specific.
|
||||
*/
|
||||
AMOTION_EVENT_AXIS_GENERIC_16 = 47,
|
||||
|
||||
// NOTE: If you add a new axis here you must also add it to several other files.
|
||||
// Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.
|
||||
};
|
||||
|
||||
/**
|
||||
* Constants that identify buttons that are associated with motion events.
|
||||
* Refer to the documentation on the MotionEvent class for descriptions of each button.
|
||||
*/
|
||||
enum AndroidMotioneventButtons {
|
||||
/** primary */
|
||||
AMOTION_EVENT_BUTTON_PRIMARY = 1 << 0,
|
||||
/** secondary */
|
||||
AMOTION_EVENT_BUTTON_SECONDARY = 1 << 1,
|
||||
/** tertiary */
|
||||
AMOTION_EVENT_BUTTON_TERTIARY = 1 << 2,
|
||||
/** back */
|
||||
AMOTION_EVENT_BUTTON_BACK = 1 << 3,
|
||||
/** forward */
|
||||
AMOTION_EVENT_BUTTON_FORWARD = 1 << 4,
|
||||
AMOTION_EVENT_BUTTON_STYLUS_PRIMARY = 1 << 5,
|
||||
AMOTION_EVENT_BUTTON_STYLUS_SECONDARY = 1 << 6,
|
||||
};
|
||||
|
||||
/**
|
||||
* Constants that identify tool types.
|
||||
* Refer to the documentation on the MotionEvent class for descriptions of each tool type.
|
||||
*/
|
||||
enum AndroidMotioneventToolType {
|
||||
/** unknown */
|
||||
AMOTION_EVENT_TOOL_TYPE_UNKNOWN = 0,
|
||||
/** finger */
|
||||
AMOTION_EVENT_TOOL_TYPE_FINGER = 1,
|
||||
/** stylus */
|
||||
AMOTION_EVENT_TOOL_TYPE_STYLUS = 2,
|
||||
/** mouse */
|
||||
AMOTION_EVENT_TOOL_TYPE_MOUSE = 3,
|
||||
/** eraser */
|
||||
AMOTION_EVENT_TOOL_TYPE_ERASER = 4,
|
||||
};
|
||||
|
||||
/**
|
||||
* Input source masks.
|
||||
*
|
||||
* Refer to the documentation on android.view.InputDevice for more details about input sources
|
||||
* and their correct interpretation.
|
||||
*/
|
||||
enum AndroidInputSourceClass {
|
||||
/** mask */
|
||||
AINPUT_SOURCE_CLASS_MASK = 0x000000ff,
|
||||
|
||||
/** none */
|
||||
AINPUT_SOURCE_CLASS_NONE = 0x00000000,
|
||||
/** button */
|
||||
AINPUT_SOURCE_CLASS_BUTTON = 0x00000001,
|
||||
/** pointer */
|
||||
AINPUT_SOURCE_CLASS_POINTER = 0x00000002,
|
||||
/** navigation */
|
||||
AINPUT_SOURCE_CLASS_NAVIGATION = 0x00000004,
|
||||
/** position */
|
||||
AINPUT_SOURCE_CLASS_POSITION = 0x00000008,
|
||||
/** joystick */
|
||||
AINPUT_SOURCE_CLASS_JOYSTICK = 0x00000010,
|
||||
};
|
||||
|
||||
/**
|
||||
* Input sources.
|
||||
*/
|
||||
enum AndroidInputSource {
|
||||
/** unknown */
|
||||
AINPUT_SOURCE_UNKNOWN = 0x00000000,
|
||||
|
||||
/** keyboard */
|
||||
AINPUT_SOURCE_KEYBOARD = 0x00000100 | AINPUT_SOURCE_CLASS_BUTTON,
|
||||
/** dpad */
|
||||
AINPUT_SOURCE_DPAD = 0x00000200 | AINPUT_SOURCE_CLASS_BUTTON,
|
||||
/** gamepad */
|
||||
AINPUT_SOURCE_GAMEPAD = 0x00000400 | AINPUT_SOURCE_CLASS_BUTTON,
|
||||
/** touchscreen */
|
||||
AINPUT_SOURCE_TOUCHSCREEN = 0x00001000 | AINPUT_SOURCE_CLASS_POINTER,
|
||||
/** mouse */
|
||||
AINPUT_SOURCE_MOUSE = 0x00002000 | AINPUT_SOURCE_CLASS_POINTER,
|
||||
/** stylus */
|
||||
AINPUT_SOURCE_STYLUS = 0x00004000 | AINPUT_SOURCE_CLASS_POINTER,
|
||||
/** bluetooth stylus */
|
||||
AINPUT_SOURCE_BLUETOOTH_STYLUS = 0x00008000 | AINPUT_SOURCE_STYLUS,
|
||||
/** trackball */
|
||||
AINPUT_SOURCE_TRACKBALL = 0x00010000 | AINPUT_SOURCE_CLASS_NAVIGATION,
|
||||
/** mouse relative */
|
||||
AINPUT_SOURCE_MOUSE_RELATIVE = 0x00020000 | AINPUT_SOURCE_CLASS_NAVIGATION,
|
||||
/** touchpad */
|
||||
AINPUT_SOURCE_TOUCHPAD = 0x00100000 | AINPUT_SOURCE_CLASS_POSITION,
|
||||
/** navigation */
|
||||
AINPUT_SOURCE_TOUCH_NAVIGATION = 0x00200000 | AINPUT_SOURCE_CLASS_NONE,
|
||||
/** joystick */
|
||||
AINPUT_SOURCE_JOYSTICK = 0x01000000 | AINPUT_SOURCE_CLASS_JOYSTICK,
|
||||
/** rotary encoder */
|
||||
AINPUT_SOURCE_ROTARY_ENCODER = 0x00400000 | AINPUT_SOURCE_CLASS_NONE,
|
||||
};
|
||||
|
||||
/**
|
||||
* Keyboard types.
|
||||
*
|
||||
* Refer to the documentation on android.view.InputDevice for more details.
|
||||
*/
|
||||
enum AndroidKeyboardType {
|
||||
/** none */
|
||||
AINPUT_KEYBOARD_TYPE_NONE = 0,
|
||||
/** non alphabetic */
|
||||
AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC = 1,
|
||||
/** alphabetic */
|
||||
AINPUT_KEYBOARD_TYPE_ALPHABETIC = 2,
|
||||
};
|
||||
|
||||
/**
|
||||
* Constants used to retrieve information about the range of motion for a particular
|
||||
* coordinate of a motion event.
|
||||
*
|
||||
* Refer to the documentation on android.view.InputDevice for more details about input sources
|
||||
* and their correct interpretation.
|
||||
*
|
||||
* @deprecated These constants are deprecated. Use {@link AMOTION_EVENT_AXIS AMOTION_EVENT_AXIS_*} constants instead.
|
||||
*/
|
||||
enum AndroidMotionRange {
|
||||
/** x */
|
||||
AINPUT_MOTION_RANGE_X = AMOTION_EVENT_AXIS_X,
|
||||
/** y */
|
||||
AINPUT_MOTION_RANGE_Y = AMOTION_EVENT_AXIS_Y,
|
||||
/** pressure */
|
||||
AINPUT_MOTION_RANGE_PRESSURE = AMOTION_EVENT_AXIS_PRESSURE,
|
||||
/** size */
|
||||
AINPUT_MOTION_RANGE_SIZE = AMOTION_EVENT_AXIS_SIZE,
|
||||
/** touch major */
|
||||
AINPUT_MOTION_RANGE_TOUCH_MAJOR = AMOTION_EVENT_AXIS_TOUCH_MAJOR,
|
||||
/** touch minor */
|
||||
AINPUT_MOTION_RANGE_TOUCH_MINOR = AMOTION_EVENT_AXIS_TOUCH_MINOR,
|
||||
/** tool major */
|
||||
AINPUT_MOTION_RANGE_TOOL_MAJOR = AMOTION_EVENT_AXIS_TOOL_MAJOR,
|
||||
/** tool minor */
|
||||
AINPUT_MOTION_RANGE_TOOL_MINOR = AMOTION_EVENT_AXIS_TOOL_MINOR,
|
||||
/** orientation */
|
||||
AINPUT_MOTION_RANGE_ORIENTATION = AMOTION_EVENT_AXIS_ORIENTATION,
|
||||
};
|
||||
|
||||
#endif // _ANDROID_INPUT_H
|
745
src/android/keycodes.h
Normal file
745
src/android/keycodes.h
Normal file
|
@ -0,0 +1,745 @@
|
|||
// copied from <https://android.googlesource.com/platform/frameworks/native/+/master/include/android/keycodes.h>
|
||||
// blob 2164d6163e1646c22825e364cad4f3c47638effd
|
||||
// (and modified)
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _ANDROID_KEYCODES_H
|
||||
#define _ANDROID_KEYCODES_H
|
||||
|
||||
/**
|
||||
* Key codes.
|
||||
*/
|
||||
enum AndroidKeycode {
|
||||
/** Unknown key code. */
|
||||
AKEYCODE_UNKNOWN = 0,
|
||||
/** Soft Left key.
|
||||
* Usually situated below the display on phones and used as a multi-function
|
||||
* feature key for selecting a software defined function shown on the bottom left
|
||||
* of the display. */
|
||||
AKEYCODE_SOFT_LEFT = 1,
|
||||
/** Soft Right key.
|
||||
* Usually situated below the display on phones and used as a multi-function
|
||||
* feature key for selecting a software defined function shown on the bottom right
|
||||
* of the display. */
|
||||
AKEYCODE_SOFT_RIGHT = 2,
|
||||
/** Home key.
|
||||
* This key is handled by the framework and is never delivered to applications. */
|
||||
AKEYCODE_HOME = 3,
|
||||
/** Back key. */
|
||||
AKEYCODE_BACK = 4,
|
||||
/** Call key. */
|
||||
AKEYCODE_CALL = 5,
|
||||
/** End Call key. */
|
||||
AKEYCODE_ENDCALL = 6,
|
||||
/** '0' key. */
|
||||
AKEYCODE_0 = 7,
|
||||
/** '1' key. */
|
||||
AKEYCODE_1 = 8,
|
||||
/** '2' key. */
|
||||
AKEYCODE_2 = 9,
|
||||
/** '3' key. */
|
||||
AKEYCODE_3 = 10,
|
||||
/** '4' key. */
|
||||
AKEYCODE_4 = 11,
|
||||
/** '5' key. */
|
||||
AKEYCODE_5 = 12,
|
||||
/** '6' key. */
|
||||
AKEYCODE_6 = 13,
|
||||
/** '7' key. */
|
||||
AKEYCODE_7 = 14,
|
||||
/** '8' key. */
|
||||
AKEYCODE_8 = 15,
|
||||
/** '9' key. */
|
||||
AKEYCODE_9 = 16,
|
||||
/** '*' key. */
|
||||
AKEYCODE_STAR = 17,
|
||||
/** '#' key. */
|
||||
AKEYCODE_POUND = 18,
|
||||
/** Directional Pad Up key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
AKEYCODE_DPAD_UP = 19,
|
||||
/** Directional Pad Down key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
AKEYCODE_DPAD_DOWN = 20,
|
||||
/** Directional Pad Left key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
AKEYCODE_DPAD_LEFT = 21,
|
||||
/** Directional Pad Right key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
AKEYCODE_DPAD_RIGHT = 22,
|
||||
/** Directional Pad Center key.
|
||||
* May also be synthesized from trackball motions. */
|
||||
AKEYCODE_DPAD_CENTER = 23,
|
||||
/** Volume Up key.
|
||||
* Adjusts the speaker volume up. */
|
||||
AKEYCODE_VOLUME_UP = 24,
|
||||
/** Volume Down key.
|
||||
* Adjusts the speaker volume down. */
|
||||
AKEYCODE_VOLUME_DOWN = 25,
|
||||
/** Power key. */
|
||||
AKEYCODE_POWER = 26,
|
||||
/** Camera key.
|
||||
* Used to launch a camera application or take pictures. */
|
||||
AKEYCODE_CAMERA = 27,
|
||||
/** Clear key. */
|
||||
AKEYCODE_CLEAR = 28,
|
||||
/** 'A' key. */
|
||||
AKEYCODE_A = 29,
|
||||
/** 'B' key. */
|
||||
AKEYCODE_B = 30,
|
||||
/** 'C' key. */
|
||||
AKEYCODE_C = 31,
|
||||
/** 'D' key. */
|
||||
AKEYCODE_D = 32,
|
||||
/** 'E' key. */
|
||||
AKEYCODE_E = 33,
|
||||
/** 'F' key. */
|
||||
AKEYCODE_F = 34,
|
||||
/** 'G' key. */
|
||||
AKEYCODE_G = 35,
|
||||
/** 'H' key. */
|
||||
AKEYCODE_H = 36,
|
||||
/** 'I' key. */
|
||||
AKEYCODE_I = 37,
|
||||
/** 'J' key. */
|
||||
AKEYCODE_J = 38,
|
||||
/** 'K' key. */
|
||||
AKEYCODE_K = 39,
|
||||
/** 'L' key. */
|
||||
AKEYCODE_L = 40,
|
||||
/** 'M' key. */
|
||||
AKEYCODE_M = 41,
|
||||
/** 'N' key. */
|
||||
AKEYCODE_N = 42,
|
||||
/** 'O' key. */
|
||||
AKEYCODE_O = 43,
|
||||
/** 'P' key. */
|
||||
AKEYCODE_P = 44,
|
||||
/** 'Q' key. */
|
||||
AKEYCODE_Q = 45,
|
||||
/** 'R' key. */
|
||||
AKEYCODE_R = 46,
|
||||
/** 'S' key. */
|
||||
AKEYCODE_S = 47,
|
||||
/** 'T' key. */
|
||||
AKEYCODE_T = 48,
|
||||
/** 'U' key. */
|
||||
AKEYCODE_U = 49,
|
||||
/** 'V' key. */
|
||||
AKEYCODE_V = 50,
|
||||
/** 'W' key. */
|
||||
AKEYCODE_W = 51,
|
||||
/** 'X' key. */
|
||||
AKEYCODE_X = 52,
|
||||
/** 'Y' key. */
|
||||
AKEYCODE_Y = 53,
|
||||
/** 'Z' key. */
|
||||
AKEYCODE_Z = 54,
|
||||
/** ',' key. */
|
||||
AKEYCODE_COMMA = 55,
|
||||
/** '.' key. */
|
||||
AKEYCODE_PERIOD = 56,
|
||||
/** Left Alt modifier key. */
|
||||
AKEYCODE_ALT_LEFT = 57,
|
||||
/** Right Alt modifier key. */
|
||||
AKEYCODE_ALT_RIGHT = 58,
|
||||
/** Left Shift modifier key. */
|
||||
AKEYCODE_SHIFT_LEFT = 59,
|
||||
/** Right Shift modifier key. */
|
||||
AKEYCODE_SHIFT_RIGHT = 60,
|
||||
/** Tab key. */
|
||||
AKEYCODE_TAB = 61,
|
||||
/** Space key. */
|
||||
AKEYCODE_SPACE = 62,
|
||||
/** Symbol modifier key.
|
||||
* Used to enter alternate symbols. */
|
||||
AKEYCODE_SYM = 63,
|
||||
/** Explorer special function key.
|
||||
* Used to launch a browser application. */
|
||||
AKEYCODE_EXPLORER = 64,
|
||||
/** Envelope special function key.
|
||||
* Used to launch a mail application. */
|
||||
AKEYCODE_ENVELOPE = 65,
|
||||
/** Enter key. */
|
||||
AKEYCODE_ENTER = 66,
|
||||
/** Backspace key.
|
||||
* Deletes characters before the insertion point, unlike {@link AKEYCODE_FORWARD_DEL}. */
|
||||
AKEYCODE_DEL = 67,
|
||||
/** '`' (backtick) key. */
|
||||
AKEYCODE_GRAVE = 68,
|
||||
/** '-'. */
|
||||
AKEYCODE_MINUS = 69,
|
||||
/** '=' key. */
|
||||
AKEYCODE_EQUALS = 70,
|
||||
/** '[' key. */
|
||||
AKEYCODE_LEFT_BRACKET = 71,
|
||||
/** ']' key. */
|
||||
AKEYCODE_RIGHT_BRACKET = 72,
|
||||
/** '\' key. */
|
||||
AKEYCODE_BACKSLASH = 73,
|
||||
/** ';' key. */
|
||||
AKEYCODE_SEMICOLON = 74,
|
||||
/** ''' (apostrophe) key. */
|
||||
AKEYCODE_APOSTROPHE = 75,
|
||||
/** '/' key. */
|
||||
AKEYCODE_SLASH = 76,
|
||||
/** '@' key. */
|
||||
AKEYCODE_AT = 77,
|
||||
/** Number modifier key.
|
||||
* Used to enter numeric symbols.
|
||||
* This key is not {@link AKEYCODE_NUM_LOCK}; it is more like {@link AKEYCODE_ALT_LEFT}. */
|
||||
AKEYCODE_NUM = 78,
|
||||
/** Headset Hook key.
|
||||
* Used to hang up calls and stop media. */
|
||||
AKEYCODE_HEADSETHOOK = 79,
|
||||
/** Camera Focus key.
|
||||
* Used to focus the camera. */
|
||||
AKEYCODE_FOCUS = 80,
|
||||
/** '+' key. */
|
||||
AKEYCODE_PLUS = 81,
|
||||
/** Menu key. */
|
||||
AKEYCODE_MENU = 82,
|
||||
/** Notification key. */
|
||||
AKEYCODE_NOTIFICATION = 83,
|
||||
/** Search key. */
|
||||
AKEYCODE_SEARCH = 84,
|
||||
/** Play/Pause media key. */
|
||||
AKEYCODE_MEDIA_PLAY_PAUSE= 85,
|
||||
/** Stop media key. */
|
||||
AKEYCODE_MEDIA_STOP = 86,
|
||||
/** Play Next media key. */
|
||||
AKEYCODE_MEDIA_NEXT = 87,
|
||||
/** Play Previous media key. */
|
||||
AKEYCODE_MEDIA_PREVIOUS = 88,
|
||||
/** Rewind media key. */
|
||||
AKEYCODE_MEDIA_REWIND = 89,
|
||||
/** Fast Forward media key. */
|
||||
AKEYCODE_MEDIA_FAST_FORWARD = 90,
|
||||
/** Mute key.
|
||||
* Mutes the microphone, unlike {@link AKEYCODE_VOLUME_MUTE}. */
|
||||
AKEYCODE_MUTE = 91,
|
||||
/** Page Up key. */
|
||||
AKEYCODE_PAGE_UP = 92,
|
||||
/** Page Down key. */
|
||||
AKEYCODE_PAGE_DOWN = 93,
|
||||
/** Picture Symbols modifier key.
|
||||
* Used to switch symbol sets (Emoji, Kao-moji). */
|
||||
AKEYCODE_PICTSYMBOLS = 94,
|
||||
/** Switch Charset modifier key.
|
||||
* Used to switch character sets (Kanji, Katakana). */
|
||||
AKEYCODE_SWITCH_CHARSET = 95,
|
||||
/** A Button key.
|
||||
* On a game controller, the A button should be either the button labeled A
|
||||
* or the first button on the bottom row of controller buttons. */
|
||||
AKEYCODE_BUTTON_A = 96,
|
||||
/** B Button key.
|
||||
* On a game controller, the B button should be either the button labeled B
|
||||
* or the second button on the bottom row of controller buttons. */
|
||||
AKEYCODE_BUTTON_B = 97,
|
||||
/** C Button key.
|
||||
* On a game controller, the C button should be either the button labeled C
|
||||
* or the third button on the bottom row of controller buttons. */
|
||||
AKEYCODE_BUTTON_C = 98,
|
||||
/** X Button key.
|
||||
* On a game controller, the X button should be either the button labeled X
|
||||
* or the first button on the upper row of controller buttons. */
|
||||
AKEYCODE_BUTTON_X = 99,
|
||||
/** Y Button key.
|
||||
* On a game controller, the Y button should be either the button labeled Y
|
||||
* or the second button on the upper row of controller buttons. */
|
||||
AKEYCODE_BUTTON_Y = 100,
|
||||
/** Z Button key.
|
||||
* On a game controller, the Z button should be either the button labeled Z
|
||||
* or the third button on the upper row of controller buttons. */
|
||||
AKEYCODE_BUTTON_Z = 101,
|
||||
/** L1 Button key.
|
||||
* On a game controller, the L1 button should be either the button labeled L1 (or L)
|
||||
* or the top left trigger button. */
|
||||
AKEYCODE_BUTTON_L1 = 102,
|
||||
/** R1 Button key.
|
||||
* On a game controller, the R1 button should be either the button labeled R1 (or R)
|
||||
* or the top right trigger button. */
|
||||
AKEYCODE_BUTTON_R1 = 103,
|
||||
/** L2 Button key.
|
||||
* On a game controller, the L2 button should be either the button labeled L2
|
||||
* or the bottom left trigger button. */
|
||||
AKEYCODE_BUTTON_L2 = 104,
|
||||
/** R2 Button key.
|
||||
* On a game controller, the R2 button should be either the button labeled R2
|
||||
* or the bottom right trigger button. */
|
||||
AKEYCODE_BUTTON_R2 = 105,
|
||||
/** Left Thumb Button key.
|
||||
* On a game controller, the left thumb button indicates that the left (or only)
|
||||
* joystick is pressed. */
|
||||
AKEYCODE_BUTTON_THUMBL = 106,
|
||||
/** Right Thumb Button key.
|
||||
* On a game controller, the right thumb button indicates that the right
|
||||
* joystick is pressed. */
|
||||
AKEYCODE_BUTTON_THUMBR = 107,
|
||||
/** Start Button key.
|
||||
* On a game controller, the button labeled Start. */
|
||||
AKEYCODE_BUTTON_START = 108,
|
||||
/** Select Button key.
|
||||
* On a game controller, the button labeled Select. */
|
||||
AKEYCODE_BUTTON_SELECT = 109,
|
||||
/** Mode Button key.
|
||||
* On a game controller, the button labeled Mode. */
|
||||
AKEYCODE_BUTTON_MODE = 110,
|
||||
/** Escape key. */
|
||||
AKEYCODE_ESCAPE = 111,
|
||||
/** Forward Delete key.
|
||||
* Deletes characters ahead of the insertion point, unlike {@link AKEYCODE_DEL}. */
|
||||
AKEYCODE_FORWARD_DEL = 112,
|
||||
/** Left Control modifier key. */
|
||||
AKEYCODE_CTRL_LEFT = 113,
|
||||
/** Right Control modifier key. */
|
||||
AKEYCODE_CTRL_RIGHT = 114,
|
||||
/** Caps Lock key. */
|
||||
AKEYCODE_CAPS_LOCK = 115,
|
||||
/** Scroll Lock key. */
|
||||
AKEYCODE_SCROLL_LOCK = 116,
|
||||
/** Left Meta modifier key. */
|
||||
AKEYCODE_META_LEFT = 117,
|
||||
/** Right Meta modifier key. */
|
||||
AKEYCODE_META_RIGHT = 118,
|
||||
/** Function modifier key. */
|
||||
AKEYCODE_FUNCTION = 119,
|
||||
/** System Request / Print Screen key. */
|
||||
AKEYCODE_SYSRQ = 120,
|
||||
/** Break / Pause key. */
|
||||
AKEYCODE_BREAK = 121,
|
||||
/** Home Movement key.
|
||||
* Used for scrolling or moving the cursor around to the start of a line
|
||||
* or to the top of a list. */
|
||||
AKEYCODE_MOVE_HOME = 122,
|
||||
/** End Movement key.
|
||||
* Used for scrolling or moving the cursor around to the end of a line
|
||||
* or to the bottom of a list. */
|
||||
AKEYCODE_MOVE_END = 123,
|
||||
/** Insert key.
|
||||
* Toggles insert / overwrite edit mode. */
|
||||
AKEYCODE_INSERT = 124,
|
||||
/** Forward key.
|
||||
* Navigates forward in the history stack. Complement of {@link AKEYCODE_BACK}. */
|
||||
AKEYCODE_FORWARD = 125,
|
||||
/** Play media key. */
|
||||
AKEYCODE_MEDIA_PLAY = 126,
|
||||
/** Pause media key. */
|
||||
AKEYCODE_MEDIA_PAUSE = 127,
|
||||
/** Close media key.
|
||||
* May be used to close a CD tray, for example. */
|
||||
AKEYCODE_MEDIA_CLOSE = 128,
|
||||
/** Eject media key.
|
||||
* May be used to eject a CD tray, for example. */
|
||||
AKEYCODE_MEDIA_EJECT = 129,
|
||||
/** Record media key. */
|
||||
AKEYCODE_MEDIA_RECORD = 130,
|
||||
/** F1 key. */
|
||||
AKEYCODE_F1 = 131,
|
||||
/** F2 key. */
|
||||
AKEYCODE_F2 = 132,
|
||||
/** F3 key. */
|
||||
AKEYCODE_F3 = 133,
|
||||
/** F4 key. */
|
||||
AKEYCODE_F4 = 134,
|
||||
/** F5 key. */
|
||||
AKEYCODE_F5 = 135,
|
||||
/** F6 key. */
|
||||
AKEYCODE_F6 = 136,
|
||||
/** F7 key. */
|
||||
AKEYCODE_F7 = 137,
|
||||
/** F8 key. */
|
||||
AKEYCODE_F8 = 138,
|
||||
/** F9 key. */
|
||||
AKEYCODE_F9 = 139,
|
||||
/** F10 key. */
|
||||
AKEYCODE_F10 = 140,
|
||||
/** F11 key. */
|
||||
AKEYCODE_F11 = 141,
|
||||
/** F12 key. */
|
||||
AKEYCODE_F12 = 142,
|
||||
/** Num Lock key.
|
||||
* This is the Num Lock key; it is different from {@link AKEYCODE_NUM}.
|
||||
* This key alters the behavior of other keys on the numeric keypad. */
|
||||
AKEYCODE_NUM_LOCK = 143,
|
||||
/** Numeric keypad '0' key. */
|
||||
AKEYCODE_NUMPAD_0 = 144,
|
||||
/** Numeric keypad '1' key. */
|
||||
AKEYCODE_NUMPAD_1 = 145,
|
||||
/** Numeric keypad '2' key. */
|
||||
AKEYCODE_NUMPAD_2 = 146,
|
||||
/** Numeric keypad '3' key. */
|
||||
AKEYCODE_NUMPAD_3 = 147,
|
||||
/** Numeric keypad '4' key. */
|
||||
AKEYCODE_NUMPAD_4 = 148,
|
||||
/** Numeric keypad '5' key. */
|
||||
AKEYCODE_NUMPAD_5 = 149,
|
||||
/** Numeric keypad '6' key. */
|
||||
AKEYCODE_NUMPAD_6 = 150,
|
||||
/** Numeric keypad '7' key. */
|
||||
AKEYCODE_NUMPAD_7 = 151,
|
||||
/** Numeric keypad '8' key. */
|
||||
AKEYCODE_NUMPAD_8 = 152,
|
||||
/** Numeric keypad '9' key. */
|
||||
AKEYCODE_NUMPAD_9 = 153,
|
||||
/** Numeric keypad '/' key (for division). */
|
||||
AKEYCODE_NUMPAD_DIVIDE = 154,
|
||||
/** Numeric keypad '*' key (for multiplication). */
|
||||
AKEYCODE_NUMPAD_MULTIPLY = 155,
|
||||
/** Numeric keypad '-' key (for subtraction). */
|
||||
AKEYCODE_NUMPAD_SUBTRACT = 156,
|
||||
/** Numeric keypad '+' key (for addition). */
|
||||
AKEYCODE_NUMPAD_ADD = 157,
|
||||
/** Numeric keypad '.' key (for decimals or digit grouping). */
|
||||
AKEYCODE_NUMPAD_DOT = 158,
|
||||
/** Numeric keypad ',' key (for decimals or digit grouping). */
|
||||
AKEYCODE_NUMPAD_COMMA = 159,
|
||||
/** Numeric keypad Enter key. */
|
||||
AKEYCODE_NUMPAD_ENTER = 160,
|
||||
/** Numeric keypad '=' key. */
|
||||
AKEYCODE_NUMPAD_EQUALS = 161,
|
||||
/** Numeric keypad '(' key. */
|
||||
AKEYCODE_NUMPAD_LEFT_PAREN = 162,
|
||||
/** Numeric keypad ')' key. */
|
||||
AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
|
||||
/** Volume Mute key.
|
||||
* Mutes the speaker, unlike {@link AKEYCODE_MUTE}.
|
||||
* This key should normally be implemented as a toggle such that the first press
|
||||
* mutes the speaker and the second press restores the original volume. */
|
||||
AKEYCODE_VOLUME_MUTE = 164,
|
||||
/** Info key.
|
||||
* Common on TV remotes to show additional information related to what is
|
||||
* currently being viewed. */
|
||||
AKEYCODE_INFO = 165,
|
||||
/** Channel up key.
|
||||
* On TV remotes, increments the television channel. */
|
||||
AKEYCODE_CHANNEL_UP = 166,
|
||||
/** Channel down key.
|
||||
* On TV remotes, decrements the television channel. */
|
||||
AKEYCODE_CHANNEL_DOWN = 167,
|
||||
/** Zoom in key. */
|
||||
AKEYCODE_ZOOM_IN = 168,
|
||||
/** Zoom out key. */
|
||||
AKEYCODE_ZOOM_OUT = 169,
|
||||
/** TV key.
|
||||
* On TV remotes, switches to viewing live TV. */
|
||||
AKEYCODE_TV = 170,
|
||||
/** Window key.
|
||||
* On TV remotes, toggles picture-in-picture mode or other windowing functions. */
|
||||
AKEYCODE_WINDOW = 171,
|
||||
/** Guide key.
|
||||
* On TV remotes, shows a programming guide. */
|
||||
AKEYCODE_GUIDE = 172,
|
||||
/** DVR key.
|
||||
* On some TV remotes, switches to a DVR mode for recorded shows. */
|
||||
AKEYCODE_DVR = 173,
|
||||
/** Bookmark key.
|
||||
* On some TV remotes, bookmarks content or web pages. */
|
||||
AKEYCODE_BOOKMARK = 174,
|
||||
/** Toggle captions key.
|
||||
* Switches the mode for closed-captioning text, for example during television shows. */
|
||||
AKEYCODE_CAPTIONS = 175,
|
||||
/** Settings key.
|
||||
* Starts the system settings activity. */
|
||||
AKEYCODE_SETTINGS = 176,
|
||||
/** TV power key.
|
||||
* On TV remotes, toggles the power on a television screen. */
|
||||
AKEYCODE_TV_POWER = 177,
|
||||
/** TV input key.
|
||||
* On TV remotes, switches the input on a television screen. */
|
||||
AKEYCODE_TV_INPUT = 178,
|
||||
/** Set-top-box power key.
|
||||
* On TV remotes, toggles the power on an external Set-top-box. */
|
||||
AKEYCODE_STB_POWER = 179,
|
||||
/** Set-top-box input key.
|
||||
* On TV remotes, switches the input mode on an external Set-top-box. */
|
||||
AKEYCODE_STB_INPUT = 180,
|
||||
/** A/V Receiver power key.
|
||||
* On TV remotes, toggles the power on an external A/V Receiver. */
|
||||
AKEYCODE_AVR_POWER = 181,
|
||||
/** A/V Receiver input key.
|
||||
* On TV remotes, switches the input mode on an external A/V Receiver. */
|
||||
AKEYCODE_AVR_INPUT = 182,
|
||||
/** Red "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
AKEYCODE_PROG_RED = 183,
|
||||
/** Green "programmable" key.
|
||||
* On TV remotes, actsas a contextual/programmable key. */
|
||||
AKEYCODE_PROG_GREEN = 184,
|
||||
/** Yellow "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
AKEYCODE_PROG_YELLOW = 185,
|
||||
/** Blue "programmable" key.
|
||||
* On TV remotes, acts as a contextual/programmable key. */
|
||||
AKEYCODE_PROG_BLUE = 186,
|
||||
/** App switch key.
|
||||
* Should bring up the application switcher dialog. */
|
||||
AKEYCODE_APP_SWITCH = 187,
|
||||
/** Generic Game Pad Button #1.*/
|
||||
AKEYCODE_BUTTON_1 = 188,
|
||||
/** Generic Game Pad Button #2.*/
|
||||
AKEYCODE_BUTTON_2 = 189,
|
||||
/** Generic Game Pad Button #3.*/
|
||||
AKEYCODE_BUTTON_3 = 190,
|
||||
/** Generic Game Pad Button #4.*/
|
||||
AKEYCODE_BUTTON_4 = 191,
|
||||
/** Generic Game Pad Button #5.*/
|
||||
AKEYCODE_BUTTON_5 = 192,
|
||||
/** Generic Game Pad Button #6.*/
|
||||
AKEYCODE_BUTTON_6 = 193,
|
||||
/** Generic Game Pad Button #7.*/
|
||||
AKEYCODE_BUTTON_7 = 194,
|
||||
/** Generic Game Pad Button #8.*/
|
||||
AKEYCODE_BUTTON_8 = 195,
|
||||
/** Generic Game Pad Button #9.*/
|
||||
AKEYCODE_BUTTON_9 = 196,
|
||||
/** Generic Game Pad Button #10.*/
|
||||
AKEYCODE_BUTTON_10 = 197,
|
||||
/** Generic Game Pad Button #11.*/
|
||||
AKEYCODE_BUTTON_11 = 198,
|
||||
/** Generic Game Pad Button #12.*/
|
||||
AKEYCODE_BUTTON_12 = 199,
|
||||
/** Generic Game Pad Button #13.*/
|
||||
AKEYCODE_BUTTON_13 = 200,
|
||||
/** Generic Game Pad Button #14.*/
|
||||
AKEYCODE_BUTTON_14 = 201,
|
||||
/** Generic Game Pad Button #15.*/
|
||||
AKEYCODE_BUTTON_15 = 202,
|
||||
/** Generic Game Pad Button #16.*/
|
||||
AKEYCODE_BUTTON_16 = 203,
|
||||
/** Language Switch key.
|
||||
* Toggles the current input language such as switching between English and Japanese on
|
||||
* a QWERTY keyboard. On some devices, the same function may be performed by
|
||||
* pressing Shift+Spacebar. */
|
||||
AKEYCODE_LANGUAGE_SWITCH = 204,
|
||||
/** Manner Mode key.
|
||||
* Toggles silent or vibrate mode on and off to make the device behave more politely
|
||||
* in certain settings such as on a crowded train. On some devices, the key may only
|
||||
* operate when long-pressed. */
|
||||
AKEYCODE_MANNER_MODE = 205,
|
||||
/** 3D Mode key.
|
||||
* Toggles the display between 2D and 3D mode. */
|
||||
AKEYCODE_3D_MODE = 206,
|
||||
/** Contacts special function key.
|
||||
* Used to launch an address book application. */
|
||||
AKEYCODE_CONTACTS = 207,
|
||||
/** Calendar special function key.
|
||||
* Used to launch a calendar application. */
|
||||
AKEYCODE_CALENDAR = 208,
|
||||
/** Music special function key.
|
||||
* Used to launch a music player application. */
|
||||
AKEYCODE_MUSIC = 209,
|
||||
/** Calculator special function key.
|
||||
* Used to launch a calculator application. */
|
||||
AKEYCODE_CALCULATOR = 210,
|
||||
/** Japanese full-width / half-width key. */
|
||||
AKEYCODE_ZENKAKU_HANKAKU = 211,
|
||||
/** Japanese alphanumeric key. */
|
||||
AKEYCODE_EISU = 212,
|
||||
/** Japanese non-conversion key. */
|
||||
AKEYCODE_MUHENKAN = 213,
|
||||
/** Japanese conversion key. */
|
||||
AKEYCODE_HENKAN = 214,
|
||||
/** Japanese katakana / hiragana key. */
|
||||
AKEYCODE_KATAKANA_HIRAGANA = 215,
|
||||
/** Japanese Yen key. */
|
||||
AKEYCODE_YEN = 216,
|
||||
/** Japanese Ro key. */
|
||||
AKEYCODE_RO = 217,
|
||||
/** Japanese kana key. */
|
||||
AKEYCODE_KANA = 218,
|
||||
/** Assist key.
|
||||
* Launches the global assist activity. Not delivered to applications. */
|
||||
AKEYCODE_ASSIST = 219,
|
||||
/** Brightness Down key.
|
||||
* Adjusts the screen brightness down. */
|
||||
AKEYCODE_BRIGHTNESS_DOWN = 220,
|
||||
/** Brightness Up key.
|
||||
* Adjusts the screen brightness up. */
|
||||
AKEYCODE_BRIGHTNESS_UP = 221,
|
||||
/** Audio Track key.
|
||||
* Switches the audio tracks. */
|
||||
AKEYCODE_MEDIA_AUDIO_TRACK = 222,
|
||||
/** Sleep key.
|
||||
* Puts the device to sleep. Behaves somewhat like {@link AKEYCODE_POWER} but it
|
||||
* has no effect if the device is already asleep. */
|
||||
AKEYCODE_SLEEP = 223,
|
||||
/** Wakeup key.
|
||||
* Wakes up the device. Behaves somewhat like {@link AKEYCODE_POWER} but it
|
||||
* has no effect if the device is already awake. */
|
||||
AKEYCODE_WAKEUP = 224,
|
||||
/** Pairing key.
|
||||
* Initiates peripheral pairing mode. Useful for pairing remote control
|
||||
* devices or game controllers, especially if no other input mode is
|
||||
* available. */
|
||||
AKEYCODE_PAIRING = 225,
|
||||
/** Media Top Menu key.
|
||||
* Goes to the top of media menu. */
|
||||
AKEYCODE_MEDIA_TOP_MENU = 226,
|
||||
/** '11' key. */
|
||||
AKEYCODE_11 = 227,
|
||||
/** '12' key. */
|
||||
AKEYCODE_12 = 228,
|
||||
/** Last Channel key.
|
||||
* Goes to the last viewed channel. */
|
||||
AKEYCODE_LAST_CHANNEL = 229,
|
||||
/** TV data service key.
|
||||
* Displays data services like weather, sports. */
|
||||
AKEYCODE_TV_DATA_SERVICE = 230,
|
||||
/** Voice Assist key.
|
||||
* Launches the global voice assist activity. Not delivered to applications. */
|
||||
AKEYCODE_VOICE_ASSIST = 231,
|
||||
/** Radio key.
|
||||
* Toggles TV service / Radio service. */
|
||||
AKEYCODE_TV_RADIO_SERVICE = 232,
|
||||
/** Teletext key.
|
||||
* Displays Teletext service. */
|
||||
AKEYCODE_TV_TELETEXT = 233,
|
||||
/** Number entry key.
|
||||
* Initiates to enter multi-digit channel nubmber when each digit key is assigned
|
||||
* for selecting separate channel. Corresponds to Number Entry Mode (0x1D) of CEC
|
||||
* User Control Code. */
|
||||
AKEYCODE_TV_NUMBER_ENTRY = 234,
|
||||
/** Analog Terrestrial key.
|
||||
* Switches to analog terrestrial broadcast service. */
|
||||
AKEYCODE_TV_TERRESTRIAL_ANALOG = 235,
|
||||
/** Digital Terrestrial key.
|
||||
* Switches to digital terrestrial broadcast service. */
|
||||
AKEYCODE_TV_TERRESTRIAL_DIGITAL = 236,
|
||||
/** Satellite key.
|
||||
* Switches to digital satellite broadcast service. */
|
||||
AKEYCODE_TV_SATELLITE = 237,
|
||||
/** BS key.
|
||||
* Switches to BS digital satellite broadcasting service available in Japan. */
|
||||
AKEYCODE_TV_SATELLITE_BS = 238,
|
||||
/** CS key.
|
||||
* Switches to CS digital satellite broadcasting service available in Japan. */
|
||||
AKEYCODE_TV_SATELLITE_CS = 239,
|
||||
/** BS/CS key.
|
||||
* Toggles between BS and CS digital satellite services. */
|
||||
AKEYCODE_TV_SATELLITE_SERVICE = 240,
|
||||
/** Toggle Network key.
|
||||
* Toggles selecting broacast services. */
|
||||
AKEYCODE_TV_NETWORK = 241,
|
||||
/** Antenna/Cable key.
|
||||
* Toggles broadcast input source between antenna and cable. */
|
||||
AKEYCODE_TV_ANTENNA_CABLE = 242,
|
||||
/** HDMI #1 key.
|
||||
* Switches to HDMI input #1. */
|
||||
AKEYCODE_TV_INPUT_HDMI_1 = 243,
|
||||
/** HDMI #2 key.
|
||||
* Switches to HDMI input #2. */
|
||||
AKEYCODE_TV_INPUT_HDMI_2 = 244,
|
||||
/** HDMI #3 key.
|
||||
* Switches to HDMI input #3. */
|
||||
AKEYCODE_TV_INPUT_HDMI_3 = 245,
|
||||
/** HDMI #4 key.
|
||||
* Switches to HDMI input #4. */
|
||||
AKEYCODE_TV_INPUT_HDMI_4 = 246,
|
||||
/** Composite #1 key.
|
||||
* Switches to composite video input #1. */
|
||||
AKEYCODE_TV_INPUT_COMPOSITE_1 = 247,
|
||||
/** Composite #2 key.
|
||||
* Switches to composite video input #2. */
|
||||
AKEYCODE_TV_INPUT_COMPOSITE_2 = 248,
|
||||
/** Component #1 key.
|
||||
* Switches to component video input #1. */
|
||||
AKEYCODE_TV_INPUT_COMPONENT_1 = 249,
|
||||
/** Component #2 key.
|
||||
* Switches to component video input #2. */
|
||||
AKEYCODE_TV_INPUT_COMPONENT_2 = 250,
|
||||
/** VGA #1 key.
|
||||
* Switches to VGA (analog RGB) input #1. */
|
||||
AKEYCODE_TV_INPUT_VGA_1 = 251,
|
||||
/** Audio description key.
|
||||
* Toggles audio description off / on. */
|
||||
AKEYCODE_TV_AUDIO_DESCRIPTION = 252,
|
||||
/** Audio description mixing volume up key.
|
||||
* Louden audio description volume as compared with normal audio volume. */
|
||||
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253,
|
||||
/** Audio description mixing volume down key.
|
||||
* Lessen audio description volume as compared with normal audio volume. */
|
||||
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
|
||||
/** Zoom mode key.
|
||||
* Changes Zoom mode (Normal, Full, Zoom, Wide-zoom, etc.) */
|
||||
AKEYCODE_TV_ZOOM_MODE = 255,
|
||||
/** Contents menu key.
|
||||
* Goes to the title list. Corresponds to Contents Menu (0x0B) of CEC User Control
|
||||
* Code */
|
||||
AKEYCODE_TV_CONTENTS_MENU = 256,
|
||||
/** Media context menu key.
|
||||
* Goes to the context menu of media contents. Corresponds to Media Context-sensitive
|
||||
* Menu (0x11) of CEC User Control Code. */
|
||||
AKEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
|
||||
/** Timer programming key.
|
||||
* Goes to the timer recording menu. Corresponds to Timer Programming (0x54) of
|
||||
* CEC User Control Code. */
|
||||
AKEYCODE_TV_TIMER_PROGRAMMING = 258,
|
||||
/** Help key. */
|
||||
AKEYCODE_HELP = 259,
|
||||
AKEYCODE_NAVIGATE_PREVIOUS = 260,
|
||||
AKEYCODE_NAVIGATE_NEXT = 261,
|
||||
AKEYCODE_NAVIGATE_IN = 262,
|
||||
AKEYCODE_NAVIGATE_OUT = 263,
|
||||
/** Primary stem key for Wear
|
||||
* Main power/reset button on watch. */
|
||||
AKEYCODE_STEM_PRIMARY = 264,
|
||||
/** Generic stem key 1 for Wear */
|
||||
AKEYCODE_STEM_1 = 265,
|
||||
/** Generic stem key 2 for Wear */
|
||||
AKEYCODE_STEM_2 = 266,
|
||||
/** Generic stem key 3 for Wear */
|
||||
AKEYCODE_STEM_3 = 267,
|
||||
/** Directional Pad Up-Left */
|
||||
AKEYCODE_DPAD_UP_LEFT = 268,
|
||||
/** Directional Pad Down-Left */
|
||||
AKEYCODE_DPAD_DOWN_LEFT = 269,
|
||||
/** Directional Pad Up-Right */
|
||||
AKEYCODE_DPAD_UP_RIGHT = 270,
|
||||
/** Directional Pad Down-Right */
|
||||
AKEYCODE_DPAD_DOWN_RIGHT = 271,
|
||||
/** Skip forward media key */
|
||||
AKEYCODE_MEDIA_SKIP_FORWARD = 272,
|
||||
/** Skip backward media key */
|
||||
AKEYCODE_MEDIA_SKIP_BACKWARD = 273,
|
||||
/** Step forward media key.
|
||||
* Steps media forward one from at a time. */
|
||||
AKEYCODE_MEDIA_STEP_FORWARD = 274,
|
||||
/** Step backward media key.
|
||||
* Steps media backward one from at a time. */
|
||||
AKEYCODE_MEDIA_STEP_BACKWARD = 275,
|
||||
/** Put device to sleep unless a wakelock is held. */
|
||||
AKEYCODE_SOFT_SLEEP = 276,
|
||||
/** Cut key. */
|
||||
AKEYCODE_CUT = 277,
|
||||
/** Copy key. */
|
||||
AKEYCODE_COPY = 278,
|
||||
/** Paste key. */
|
||||
AKEYCODE_PASTE = 279,
|
||||
/** fingerprint navigation key, up. */
|
||||
AKEYCODE_SYSTEM_NAVIGATION_UP = 280,
|
||||
/** fingerprint navigation key, down. */
|
||||
AKEYCODE_SYSTEM_NAVIGATION_DOWN = 281,
|
||||
/** fingerprint navigation key, left. */
|
||||
AKEYCODE_SYSTEM_NAVIGATION_LEFT = 282,
|
||||
/** fingerprint navigation key, right. */
|
||||
AKEYCODE_SYSTEM_NAVIGATION_RIGHT = 283,
|
||||
/** all apps */
|
||||
AKEYCODE_ALL_APPS = 284
|
||||
};
|
||||
|
||||
#endif // _ANDROID_KEYCODES_H
|
110
src/controlevent.cpp
Normal file
110
src/controlevent.cpp
Normal file
|
@ -0,0 +1,110 @@
|
|||
#include <QDebug>
|
||||
|
||||
#include "controlevent.h"
|
||||
|
||||
#define TEXT_MAX_CHARACTER_LENGTH 300
|
||||
|
||||
ControlEvent::ControlEvent(ControlEventType controlEventType)
|
||||
: QScrcpyEvent(Control)
|
||||
{
|
||||
m_data.type = controlEventType;
|
||||
}
|
||||
|
||||
void ControlEvent::setKeycodeEventData(AndroidKeyeventAction action, AndroidKeycode keycode, AndroidMetastate metastate)
|
||||
{
|
||||
m_data.keycodeEvent.action = action;
|
||||
m_data.keycodeEvent.keycode = keycode;
|
||||
m_data.keycodeEvent.metastate = metastate;
|
||||
}
|
||||
|
||||
void ControlEvent::setTextEventData(QString text)
|
||||
{
|
||||
m_data.textEvent.text = text;
|
||||
}
|
||||
|
||||
void ControlEvent::setMouseEventData(AndroidMotioneventAction action, AndroidMotioneventButtons buttons, QRect position)
|
||||
{
|
||||
m_data.mouseEvent.action = action;
|
||||
m_data.mouseEvent.buttons = buttons;
|
||||
m_data.mouseEvent.position = position;
|
||||
}
|
||||
|
||||
void ControlEvent::setScrollEventData(QRect position, qint32 hScroll, qint32 vScroll)
|
||||
{
|
||||
m_data.scrollEvent.position = position;
|
||||
m_data.scrollEvent.hScroll = hScroll;
|
||||
m_data.scrollEvent.vScroll = vScroll;
|
||||
}
|
||||
|
||||
void ControlEvent::setCommandEventData(qint32 action)
|
||||
{
|
||||
m_data.commandEvent.action = action;
|
||||
}
|
||||
|
||||
void ControlEvent::write32(QBuffer &buffer, quint32 value)
|
||||
{
|
||||
buffer.putChar(value >> 24);
|
||||
buffer.putChar(value >> 16);
|
||||
buffer.putChar(value >> 8);
|
||||
buffer.putChar(value);
|
||||
}
|
||||
|
||||
void ControlEvent::write16(QBuffer &buffer, quint32 value)
|
||||
{
|
||||
buffer.putChar(value >> 8);
|
||||
buffer.putChar(value);
|
||||
}
|
||||
|
||||
void ControlEvent::writePosition(QBuffer &buffer, const QRect& value)
|
||||
{
|
||||
write16(buffer, value.left());
|
||||
write16(buffer, value.top());
|
||||
write16(buffer, value.width());
|
||||
write16(buffer, value.height());
|
||||
}
|
||||
|
||||
QByteArray ControlEvent::serializeData()
|
||||
{
|
||||
QByteArray byteArray;
|
||||
QBuffer buffer(&byteArray);
|
||||
buffer.open(QBuffer::WriteOnly);
|
||||
buffer.putChar(m_data.type);
|
||||
|
||||
switch (m_data.type) {
|
||||
case CET_KEYCODE:
|
||||
buffer.putChar(m_data.keycodeEvent.action);
|
||||
write32(buffer, m_data.keycodeEvent.keycode);
|
||||
write32(buffer, m_data.keycodeEvent.metastate);
|
||||
break;
|
||||
case CET_TEXT:
|
||||
{
|
||||
// write length (2 byte) + date (non nul-terminated)
|
||||
if (TEXT_MAX_CHARACTER_LENGTH < m_data.textEvent.text.length()) {
|
||||
// injecting a text takes time, so limit the text length
|
||||
m_data.textEvent.text = m_data.textEvent.text.left(TEXT_MAX_CHARACTER_LENGTH);
|
||||
}
|
||||
QByteArray tmp = m_data.textEvent.text.toUtf8();
|
||||
write16(buffer, tmp.length());
|
||||
buffer.write(tmp.data(), tmp.length());
|
||||
}
|
||||
break;
|
||||
case CET_MOUSE:
|
||||
buffer.putChar(m_data.mouseEvent.action);
|
||||
write32(buffer, m_data.mouseEvent.buttons);
|
||||
writePosition(buffer, m_data.mouseEvent.position);
|
||||
break;
|
||||
case CET_SCROLL:
|
||||
writePosition(buffer, m_data.scrollEvent.position);
|
||||
write32(buffer, m_data.scrollEvent.hScroll);
|
||||
write32(buffer, m_data.scrollEvent.vScroll);
|
||||
break;
|
||||
case CET_COMMAND:
|
||||
buffer.putChar(m_data.commandEvent.action);
|
||||
break;
|
||||
default:
|
||||
qDebug() << "Unknown event type:" << m_data.type;
|
||||
break;
|
||||
}
|
||||
buffer.close();
|
||||
return byteArray;
|
||||
}
|
73
src/controlevent.h
Normal file
73
src/controlevent.h
Normal file
|
@ -0,0 +1,73 @@
|
|||
#ifndef CONTROLEVENT_H
|
||||
#define CONTROLEVENT_H
|
||||
|
||||
#include <QRect>
|
||||
#include <QString>
|
||||
#include <QBuffer>
|
||||
|
||||
#include "qscrcpyevent.h"
|
||||
#include "input.h"
|
||||
#include "keycodes.h"
|
||||
|
||||
// ControlEvent
|
||||
class ControlEvent : public QScrcpyEvent
|
||||
{
|
||||
public:
|
||||
enum ControlEventType {
|
||||
CET_KEYCODE,
|
||||
CET_TEXT,
|
||||
CET_MOUSE,
|
||||
CET_SCROLL,
|
||||
CET_COMMAND,
|
||||
};
|
||||
|
||||
ControlEvent(ControlEventType controlEventType);
|
||||
|
||||
void setKeycodeEventData(AndroidKeyeventAction action, AndroidKeycode keycode, AndroidMetastate metastate);
|
||||
void setTextEventData(QString text);
|
||||
void setMouseEventData(AndroidMotioneventAction action, AndroidMotioneventButtons buttons, QRect position);
|
||||
void setScrollEventData(QRect position, qint32 hScroll, qint32 vScroll);
|
||||
void setCommandEventData(qint32 action);
|
||||
|
||||
QByteArray serializeData();
|
||||
|
||||
private:
|
||||
void write32(QBuffer& buffer, quint32 value);
|
||||
void write16(QBuffer& buffer, quint32 value);
|
||||
void writePosition(QBuffer& buffer, const QRect& value);
|
||||
|
||||
private:
|
||||
struct ControlEventData {
|
||||
ControlEventType type;
|
||||
union {
|
||||
struct {
|
||||
AndroidKeyeventAction action;
|
||||
AndroidKeycode keycode;
|
||||
AndroidMetastate metastate;
|
||||
} keycodeEvent;
|
||||
struct {
|
||||
QString text;
|
||||
} textEvent;
|
||||
struct {
|
||||
AndroidMotioneventAction action;
|
||||
AndroidMotioneventButtons buttons;
|
||||
QRect position;
|
||||
} mouseEvent;
|
||||
struct {
|
||||
QRect position;
|
||||
qint32 hScroll;
|
||||
qint32 vScroll;
|
||||
} scrollEvent;
|
||||
struct {
|
||||
qint32 action;
|
||||
} commandEvent;
|
||||
};
|
||||
|
||||
ControlEventData(){}
|
||||
~ControlEventData(){}
|
||||
};
|
||||
|
||||
ControlEventData m_data;
|
||||
};
|
||||
|
||||
#endif // CONTROLEVENT_H
|
56
src/controller.cpp
Normal file
56
src/controller.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include <QCoreApplication>
|
||||
|
||||
#include "controller.h"
|
||||
#include "devicesocket.h"
|
||||
#include "controlevent.h"
|
||||
|
||||
Controller::Controller(QObject* parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Controller::~Controller()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Controller::setDeviceSocket(DeviceSocket *deviceSocket)
|
||||
{
|
||||
m_deviceSocket = deviceSocket;
|
||||
}
|
||||
|
||||
void Controller::postControlEvent(ControlEvent *controlEvent)
|
||||
{
|
||||
QCoreApplication::postEvent(this, controlEvent);
|
||||
}
|
||||
|
||||
void Controller::test(QRect rc)
|
||||
{
|
||||
ControlEvent* controlEvent = new ControlEvent(ControlEvent::CET_MOUSE);
|
||||
controlEvent->setMouseEventData(AMOTION_EVENT_ACTION_DOWN, AMOTION_EVENT_BUTTON_PRIMARY, rc);
|
||||
postControlEvent(controlEvent);
|
||||
}
|
||||
|
||||
bool Controller::event(QEvent *event)
|
||||
{
|
||||
if (event->type() == ControlEvent::Control) {
|
||||
ControlEvent* controlEvent = dynamic_cast<ControlEvent*>(event);
|
||||
if (controlEvent) {
|
||||
sendControl(controlEvent->serializeData());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return QObject::event(event);
|
||||
}
|
||||
|
||||
bool Controller::sendControl(const QByteArray &buffer)
|
||||
{
|
||||
if (buffer.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
qint32 len = 0;
|
||||
if (m_deviceSocket) {
|
||||
len = m_deviceSocket->write(buffer.data(), buffer.length());
|
||||
}
|
||||
return len == buffer.length() ? true : false;
|
||||
}
|
30
src/controller.h
Normal file
30
src/controller.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
#ifndef CONTROLLER_H
|
||||
#define CONTROLLER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
|
||||
class DeviceSocket;
|
||||
class ControlEvent;
|
||||
class Controller : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Controller(QObject* parent = Q_NULLPTR);
|
||||
virtual ~Controller();
|
||||
|
||||
void setDeviceSocket(DeviceSocket* deviceSocket);
|
||||
void postControlEvent(ControlEvent* controlEvent);
|
||||
void test(QRect rc);
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event);
|
||||
|
||||
private:
|
||||
bool sendControl(const QByteArray& buffer);
|
||||
|
||||
private:
|
||||
QPointer<DeviceSocket> m_deviceSocket;
|
||||
};
|
||||
|
||||
#endif // CONTROLLER_H
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "decoder.h"
|
||||
#include "frames.h"
|
||||
#include "devicesocket.h"
|
||||
|
||||
#define BUFSIZE 0x10000
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
#ifndef DECODER_H
|
||||
#define DECODER_H
|
||||
#include <functional>
|
||||
|
||||
#include <QThread>
|
||||
#include <QPointer>
|
||||
#include <QMutex>
|
||||
|
||||
#include "devicesocket.h"
|
||||
extern "C"
|
||||
{
|
||||
#include "libavcodec/avcodec.h"
|
||||
|
@ -13,7 +12,7 @@ extern "C"
|
|||
}
|
||||
|
||||
class Frames;
|
||||
|
||||
class DeviceSocket;
|
||||
class Decoder : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
|
|
|
@ -24,6 +24,7 @@ void Dialog::on_adbProcess_clicked()
|
|||
{
|
||||
AdbProcess* adb = new AdbProcess();
|
||||
connect(adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
|
||||
Q_UNUSED(processResult);
|
||||
sender()->deleteLater();
|
||||
});
|
||||
adb->execute("", QStringList() << "devices");
|
||||
|
|
|
@ -18,11 +18,4 @@ class DeviceSocketEvent : public QScrcpyEvent
|
|||
public:
|
||||
DeviceSocketEvent() : QScrcpyEvent(DeviceSocket){}
|
||||
};
|
||||
|
||||
// ControlEvent
|
||||
class ControlEvent : public QScrcpyEvent
|
||||
{
|
||||
public:
|
||||
ControlEvent() : QScrcpyEvent(Control){}
|
||||
};
|
||||
#endif // QSCRCPYEVENT_H
|
||||
|
|
|
@ -95,6 +95,11 @@ void QYUVOpenGLWidget::setFrameSize(const QSize &frameSize)
|
|||
}
|
||||
}
|
||||
|
||||
const QSize& QYUVOpenGLWidget::frameSize()
|
||||
{
|
||||
return m_frameSize;
|
||||
}
|
||||
|
||||
void QYUVOpenGLWidget::updateTextures(quint8 *dataY, quint8 *dataU, quint8 *dataV, quint32 linesizeY, quint32 linesizeU, quint32 linesizeV)
|
||||
{
|
||||
if (m_textureInited) {
|
||||
|
|
|
@ -16,6 +16,7 @@ public:
|
|||
QSize sizeHint() const override;
|
||||
|
||||
void setFrameSize(const QSize& frameSize);
|
||||
const QSize& frameSize();
|
||||
void updateTextures(quint8* dataY, quint8* dataU, quint8* dataV, quint32 linesizeY, quint32 linesizeU, quint32 linesizeV);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <QDesktopWidget>
|
||||
#include <QMouseEvent>
|
||||
|
||||
#include "videoform.h"
|
||||
#include "ui_videoform.h"
|
||||
|
@ -34,6 +35,9 @@ VideoForm::VideoForm(QWidget *parent) :
|
|||
// init decode
|
||||
m_decoder.setDeviceSocket(m_server->getDeviceSocket());
|
||||
m_decoder.startDecode();
|
||||
|
||||
// init controller
|
||||
m_controller.setDeviceSocket(m_server->getDeviceSocket());
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -84,3 +88,9 @@ void VideoForm::updateShowSize(const QSize &newSize)
|
|||
resize(showSize);
|
||||
}
|
||||
}
|
||||
|
||||
void VideoForm::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
QRect rc(event->pos(), ui->videoWidget->frameSize());
|
||||
m_controller.test(rc);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "server.h"
|
||||
#include "decoder.h"
|
||||
#include "frames.h"
|
||||
#include "controller.h"
|
||||
|
||||
namespace Ui {
|
||||
class videoForm;
|
||||
|
@ -22,11 +23,15 @@ public:
|
|||
private:
|
||||
void updateShowSize(const QSize &newSize);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
|
||||
private:
|
||||
Ui::videoForm *ui;
|
||||
Server* m_server = Q_NULLPTR;
|
||||
Decoder m_decoder;
|
||||
Frames m_frames;
|
||||
Controller m_controller;
|
||||
};
|
||||
|
||||
#endif // VIDEOFORM_H
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue