NuMaker emWin HMI

Committer:
csyang2
Date:
Mon Mar 04 15:47:41 2024 +0800
Revision:
10:c8165817d92a
Parent:
1:c0f972361605
Support NuMaker-IoT-M467

Who changed what in which revision?

UserRevisionLine numberNew contents of line
csyang2 1:c0f972361605 1 /*********************************************************************
csyang2 1:c0f972361605 2 * SEGGER Software GmbH *
csyang2 1:c0f972361605 3 * Solutions for real time microcontroller applications *
csyang2 1:c0f972361605 4 **********************************************************************
csyang2 1:c0f972361605 5 * *
csyang2 1:c0f972361605 6 * (c) 1996 - 2018 SEGGER Microcontroller GmbH *
csyang2 1:c0f972361605 7 * *
csyang2 1:c0f972361605 8 * Internet: www.segger.com Support: support@segger.com *
csyang2 1:c0f972361605 9 * *
csyang2 1:c0f972361605 10 **********************************************************************
csyang2 1:c0f972361605 11
csyang2 1:c0f972361605 12 ** emWin V5.48 - Graphical user interface for embedded applications **
csyang2 1:c0f972361605 13 All Intellectual Property rights in the Software belongs to SEGGER.
csyang2 1:c0f972361605 14 emWin is protected by international copyright laws. Knowledge of the
csyang2 1:c0f972361605 15 source code may not be used to write a similar product. This file may
csyang2 1:c0f972361605 16 only be used in accordance with the following terms:
csyang2 1:c0f972361605 17
csyang2 1:c0f972361605 18 The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
csyang2 1:c0f972361605 19 for the purposes of creating libraries for its
csyang2 1:c0f972361605 20 Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
csyang2 1:c0f972361605 21 under the terms and conditions of an End User
csyang2 1:c0f972361605 22 License Agreement supplied with the libraries.
csyang2 1:c0f972361605 23 Full source code is available at: www.segger.com
csyang2 1:c0f972361605 24
csyang2 1:c0f972361605 25 We appreciate your understanding and fairness.
csyang2 1:c0f972361605 26 ----------------------------------------------------------------------
csyang2 1:c0f972361605 27 Licensing information
csyang2 1:c0f972361605 28 Licensor: SEGGER Software GmbH
csyang2 1:c0f972361605 29 Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
csyang2 1:c0f972361605 30 Licensed SEGGER software: emWin
csyang2 1:c0f972361605 31 License number: GUI-00735
csyang2 1:c0f972361605 32 License model: emWin License Agreement, signed February 27, 2018
csyang2 1:c0f972361605 33 Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
csyang2 1:c0f972361605 34 ----------------------------------------------------------------------
csyang2 1:c0f972361605 35 Support and Update Agreement (SUA)
csyang2 1:c0f972361605 36 SUA period: 2018-03-26 - 2019-03-27
csyang2 1:c0f972361605 37 Contact to extend SUA: sales@segger.com
csyang2 1:c0f972361605 38 ----------------------------------------------------------------------
csyang2 1:c0f972361605 39 File : WM.h
csyang2 1:c0f972361605 40 Purpose : Windows manager include
csyang2 1:c0f972361605 41 ----------------------------------------------------------------------
csyang2 1:c0f972361605 42 */
csyang2 1:c0f972361605 43
csyang2 1:c0f972361605 44 #ifndef WM_H /* Make sure we only include it once */
csyang2 1:c0f972361605 45 #define WM_H
csyang2 1:c0f972361605 46
csyang2 1:c0f972361605 47
csyang2 1:c0f972361605 48 #include "GUI_ConfDefaults.h"
csyang2 1:c0f972361605 49 #include "GUI_Type.h" /* Needed because of typedefs only */
csyang2 1:c0f972361605 50 #include "WM_GUI.h" /* Some functions needed by GUI routines */
csyang2 1:c0f972361605 51 #include "GUI.h"
csyang2 1:c0f972361605 52
csyang2 1:c0f972361605 53 #if defined(__cplusplus)
csyang2 1:c0f972361605 54 extern "C" { /* Make sure we have C-declarations in C++ programs */
csyang2 1:c0f972361605 55 #endif
csyang2 1:c0f972361605 56
csyang2 1:c0f972361605 57 /* Static memory devices */
csyang2 1:c0f972361605 58 #ifndef WM_SUPPORT_STATIC_MEMDEV
csyang2 1:c0f972361605 59 #define WM_SUPPORT_STATIC_MEMDEV GUI_SUPPORT_MEMDEV
csyang2 1:c0f972361605 60 #endif
csyang2 1:c0f972361605 61
csyang2 1:c0f972361605 62 /* Support for transparency. Switching it off makes Wm smaller and faster */
csyang2 1:c0f972361605 63 #ifndef WM_SUPPORT_TRANSPARENCY
csyang2 1:c0f972361605 64 #define WM_SUPPORT_TRANSPARENCY 1 /* Should be defined outside of GUI_WINSUPPORT because of '#if GUI_WINSUPPORT && WM_SUPPORT_TRANSPARENCY' in some files */
csyang2 1:c0f972361605 65 #endif
csyang2 1:c0f972361605 66
csyang2 1:c0f972361605 67 /* This is for tests only. It will fill the invalid area of a window.
csyang2 1:c0f972361605 68 Can be used for debugging. */
csyang2 1:c0f972361605 69 #ifndef WM_SUPPORT_DIAG
csyang2 1:c0f972361605 70 #ifdef WIN32 /* In simulation */
csyang2 1:c0f972361605 71 #define WM_SUPPORT_DIAG GUI_WINSUPPORT
csyang2 1:c0f972361605 72 #else
csyang2 1:c0f972361605 73 #define WM_SUPPORT_DIAG 0
csyang2 1:c0f972361605 74 #endif
csyang2 1:c0f972361605 75 #endif
csyang2 1:c0f972361605 76
csyang2 1:c0f972361605 77 /* Make sure we actually have configured windows. If we have not,
csyang2 1:c0f972361605 78 there is no point for a windows manager and it will therefor not
csyang2 1:c0f972361605 79 generate any code !
csyang2 1:c0f972361605 80 */
csyang2 1:c0f972361605 81
csyang2 1:c0f972361605 82 #if GUI_WINSUPPORT
csyang2 1:c0f972361605 83
csyang2 1:c0f972361605 84 /*********************************************************************
csyang2 1:c0f972361605 85 *
csyang2 1:c0f972361605 86 * Config defaults
csyang2 1:c0f972361605 87 */
csyang2 1:c0f972361605 88 #ifndef WM_ASSERT
csyang2 1:c0f972361605 89 #define WM_ASSERT(expr) GUI_DEBUG_ASSERT(expr)
csyang2 1:c0f972361605 90 #endif
csyang2 1:c0f972361605 91
csyang2 1:c0f972361605 92 #ifndef WM_SUPPORT_TOUCH
csyang2 1:c0f972361605 93 #define WM_SUPPORT_TOUCH GUI_SUPPORT_TOUCH
csyang2 1:c0f972361605 94 #endif
csyang2 1:c0f972361605 95
csyang2 1:c0f972361605 96 /* Allow older API calls */
csyang2 1:c0f972361605 97 #ifndef WM_COMPATIBLE_MODE
csyang2 1:c0f972361605 98 #define WM_COMPATIBLE_MODE 1
csyang2 1:c0f972361605 99 #endif
csyang2 1:c0f972361605 100
csyang2 1:c0f972361605 101 /* Send a message if visibility of a window has changed */
csyang2 1:c0f972361605 102 #ifndef WM_SUPPORT_NOTIFY_VIS_CHANGED
csyang2 1:c0f972361605 103 #define WM_SUPPORT_NOTIFY_VIS_CHANGED 0
csyang2 1:c0f972361605 104 #endif
csyang2 1:c0f972361605 105
csyang2 1:c0f972361605 106 #ifndef WM_SUPPORT_CPP
csyang2 1:c0f972361605 107 #if defined (_MSC_VER)
csyang2 1:c0f972361605 108 #define WM_SUPPORT_CPP 1
csyang2 1:c0f972361605 109 #else
csyang2 1:c0f972361605 110 #define WM_SUPPORT_CPP 0
csyang2 1:c0f972361605 111 #endif
csyang2 1:c0f972361605 112 #endif
csyang2 1:c0f972361605 113
csyang2 1:c0f972361605 114 /*********************************************************************
csyang2 1:c0f972361605 115 *
csyang2 1:c0f972361605 116 * Locking macros
csyang2 1:c0f972361605 117 */
csyang2 1:c0f972361605 118 #define WM_LOCK() GUI_LOCK()
csyang2 1:c0f972361605 119 #define WM_UNLOCK() GUI_UNLOCK()
csyang2 1:c0f972361605 120
csyang2 1:c0f972361605 121 #define WM_LOCK_H(hWin) (WM_Obj *)GUI_LOCK_H(hWin)
csyang2 1:c0f972361605 122
csyang2 1:c0f972361605 123 /*********************************************************************
csyang2 1:c0f972361605 124 *
csyang2 1:c0f972361605 125 * Data types
csyang2 1:c0f972361605 126 */
csyang2 1:c0f972361605 127 typedef struct WM_WINDOW_INFO WM_WINDOW_INFO;
csyang2 1:c0f972361605 128
csyang2 1:c0f972361605 129 struct WM_WINDOW_INFO {
csyang2 1:c0f972361605 130 GUI_HMEM hWin;
csyang2 1:c0f972361605 131 GUI_HMEM hParent;
csyang2 1:c0f972361605 132 GUI_HMEM hFirstChild;
csyang2 1:c0f972361605 133 GUI_HMEM hNext;
csyang2 1:c0f972361605 134 GUI_RECT Rect;
csyang2 1:c0f972361605 135 U32 Status;
csyang2 1:c0f972361605 136 U32 DebugId;
csyang2 1:c0f972361605 137 WM_WINDOW_INFO * pNext;
csyang2 1:c0f972361605 138 };
csyang2 1:c0f972361605 139
csyang2 1:c0f972361605 140 typedef struct {
csyang2 1:c0f972361605 141 int Key, PressedCnt;
csyang2 1:c0f972361605 142 } WM_KEY_INFO;
csyang2 1:c0f972361605 143
csyang2 1:c0f972361605 144 typedef struct {
csyang2 1:c0f972361605 145 int NumItems, v, PageSize;
csyang2 1:c0f972361605 146 } WM_SCROLL_STATE;
csyang2 1:c0f972361605 147
csyang2 1:c0f972361605 148 typedef struct {
csyang2 1:c0f972361605 149 int Done;
csyang2 1:c0f972361605 150 int ReturnValue;
csyang2 1:c0f972361605 151 } WM_DIALOG_STATUS;
csyang2 1:c0f972361605 152
csyang2 1:c0f972361605 153 typedef struct {
csyang2 1:c0f972361605 154 int x,y;
csyang2 1:c0f972361605 155 U8 State;
csyang2 1:c0f972361605 156 U8 StatePrev;
csyang2 1:c0f972361605 157 } WM_PID_STATE_CHANGED_INFO;
csyang2 1:c0f972361605 158
csyang2 1:c0f972361605 159 typedef struct {
csyang2 1:c0f972361605 160 U8 Cmd;
csyang2 1:c0f972361605 161 U8 FinalMove;
csyang2 1:c0f972361605 162 U8 StopMotion;
csyang2 1:c0f972361605 163 U8 IsDragging;
csyang2 1:c0f972361605 164 int dx, dy, da;
csyang2 1:c0f972361605 165 int xPos, yPos;
csyang2 1:c0f972361605 166 int Period;
csyang2 1:c0f972361605 167 int SnapX;
csyang2 1:c0f972361605 168 int SnapY;
csyang2 1:c0f972361605 169 U8 IsOutside;
csyang2 1:c0f972361605 170 unsigned Overlap;
csyang2 1:c0f972361605 171 U32 Flags;
csyang2 1:c0f972361605 172 GUI_PID_STATE * pState;
csyang2 1:c0f972361605 173 GUI_HMEM hContext;
csyang2 1:c0f972361605 174 } WM_MOTION_INFO;
csyang2 1:c0f972361605 175
csyang2 1:c0f972361605 176 typedef struct {
csyang2 1:c0f972361605 177 I32 FactorMin; // Minimum factor to be used (<< 16)
csyang2 1:c0f972361605 178 I32 FactorMax; // Maximum factor to be used (<< 16)
csyang2 1:c0f972361605 179 U32 xSize; // Native xSize of window to be zoomed in pixels
csyang2 1:c0f972361605 180 U32 ySize; // Native ySize of window to be zoomed in pixels
csyang2 1:c0f972361605 181 U32 xSizeParent; // xSize of parent window
csyang2 1:c0f972361605 182 U32 ySizeParent; // ySize of parent window
csyang2 1:c0f972361605 183 I32 Factor0; // Primary factor when starting zoom gesture (<< 16)
csyang2 1:c0f972361605 184 int xPos0; // Primary window position in x when starting the gesture
csyang2 1:c0f972361605 185 int yPos0; // Primary window position in y when starting the gesture
csyang2 1:c0f972361605 186 GUI_POINT Center0; // Primary center point when starting the gesture
csyang2 1:c0f972361605 187 } WM_ZOOM_INFO;
csyang2 1:c0f972361605 188
csyang2 1:c0f972361605 189 typedef struct {
csyang2 1:c0f972361605 190 int Flags; // Information regarding gesture type
csyang2 1:c0f972361605 191 GUI_POINT Point; // Relative movement
csyang2 1:c0f972361605 192 GUI_POINT Center; // Center point for zooming
csyang2 1:c0f972361605 193 I32 Angle; // Angle between the touch points
csyang2 1:c0f972361605 194 I32 Factor; // Current zoom factor
csyang2 1:c0f972361605 195 WM_ZOOM_INFO * pZoomInfo; // Pointer to WM_ZOOM_INFO structure
csyang2 1:c0f972361605 196 } WM_GESTURE_INFO;
csyang2 1:c0f972361605 197
csyang2 1:c0f972361605 198 typedef struct {
csyang2 1:c0f972361605 199 int dx, dy;
csyang2 1:c0f972361605 200 } WM_MOVE_INFO;
csyang2 1:c0f972361605 201
csyang2 1:c0f972361605 202 /*********************************************************************
csyang2 1:c0f972361605 203 *
csyang2 1:c0f972361605 204 * Gesture flags for multi touch support
csyang2 1:c0f972361605 205 */
csyang2 1:c0f972361605 206 #define WM_GF_BEGIN (1 << 0)
csyang2 1:c0f972361605 207 #define WM_GF_END (1 << 1)
csyang2 1:c0f972361605 208 #define WM_GF_PAN (1 << 2)
csyang2 1:c0f972361605 209 #define WM_GF_ZOOM (1 << 3)
csyang2 1:c0f972361605 210 #define WM_GF_ROTATE (1 << 4)
csyang2 1:c0f972361605 211 #define WM_GF_DTAP (1 << 5)
csyang2 1:c0f972361605 212
csyang2 1:c0f972361605 213 /*********************************************************************
csyang2 1:c0f972361605 214 *
csyang2 1:c0f972361605 215 * Messages Ids
csyang2 1:c0f972361605 216 *
csyang2 1:c0f972361605 217 * The following is the list of windows messages.
csyang2 1:c0f972361605 218 */
csyang2 1:c0f972361605 219 #define WM_CREATE 0x0001 /* The first message received, right after client has actually been created */
csyang2 1:c0f972361605 220 #define WM_MOVE 0x0003 /* window has been moved (Same as WIN32) */
csyang2 1:c0f972361605 221
csyang2 1:c0f972361605 222 #define WM_SIZE 0x0005 /* Is sent to a window after its size has changed (Same as WIN32, do not change !) */
csyang2 1:c0f972361605 223
csyang2 1:c0f972361605 224 #define WM_DELETE 11 /* Delete (Destroy) command: This tells the client to free its data strutures since the window
csyang2 1:c0f972361605 225 it is associates with no longer exists.*/
csyang2 1:c0f972361605 226 #define WM_TOUCH 0x0240 /* Touch screen message */
csyang2 1:c0f972361605 227 #define WM_TOUCH_CHILD 13 /* Touch screen message to ancestors */
csyang2 1:c0f972361605 228 #define WM_KEY 14 /* Key has been pressed */
csyang2 1:c0f972361605 229
csyang2 1:c0f972361605 230 #define WM_PAINT 0x000F /* Repaint window (because content is (partially) invalid */
csyang2 1:c0f972361605 231
csyang2 1:c0f972361605 232 #if GUI_SUPPORT_MOUSE
csyang2 1:c0f972361605 233 #define WM_MOUSEOVER 16 /* Mouse has moved, no key pressed */
csyang2 1:c0f972361605 234 #define WM_MOUSEOVER_END 18 /* Mouse has moved, no key pressed */
csyang2 1:c0f972361605 235 #endif
csyang2 1:c0f972361605 236
csyang2 1:c0f972361605 237 #define WM_PID_STATE_CHANGED 17 /* Pointer input device state has changed */
csyang2 1:c0f972361605 238
csyang2 1:c0f972361605 239 #define WM_GET_INSIDE_RECT 20 /* get inside rectangle: client rectangle minus pixels lost to effect */
csyang2 1:c0f972361605 240 #define WM_GET_ID 21 /* Get id of widget */
csyang2 1:c0f972361605 241 #define WM_SET_ID 22 /* Set id of widget */
csyang2 1:c0f972361605 242 #define WM_GET_CLIENT_WINDOW 23 /* Get window handle of client window. Default is the same as window */
csyang2 1:c0f972361605 243 #define WM_CAPTURE_RELEASED 24 /* Let window know that mouse capture is over */
csyang2 1:c0f972361605 244
csyang2 1:c0f972361605 245 #define WM_INIT_DIALOG 29 /* Inform dialog that it is ready for init */
csyang2 1:c0f972361605 246
csyang2 1:c0f972361605 247 #define WM_SET_FOCUS 30 /* Inform window that it has gotten or lost the focus */
csyang2 1:c0f972361605 248 #define WM_GET_ACCEPT_FOCUS 31 /* Find out if window can accept the focus */
csyang2 1:c0f972361605 249 #define WM_NOTIFY_CHILD_HAS_FOCUS 32 /* Sent to parent when child receives / loses focus */
csyang2 1:c0f972361605 250
csyang2 1:c0f972361605 251 #define WM_NOTIFY_OWNER_KEY 33 /* Some widgets (e.g. listbox) notify owner when receiving key messages */
csyang2 1:c0f972361605 252
csyang2 1:c0f972361605 253 #define WM_GET_BKCOLOR 34 /* Return back ground color (only frame window and similar) */
csyang2 1:c0f972361605 254 #define WM_GET_SCROLL_STATE 35 /* Query state of scroll bar */
csyang2 1:c0f972361605 255
csyang2 1:c0f972361605 256 #define WM_SET_SCROLL_STATE 36 /* Set scroll info ... only effective for scrollbars */
csyang2 1:c0f972361605 257
csyang2 1:c0f972361605 258 #define WM_NOTIFY_CLIENTCHANGE 37 /* Client area may have changed */
csyang2 1:c0f972361605 259 #define WM_NOTIFY_PARENT 38 /* Notify parent. Information is detailed as notification code */
csyang2 1:c0f972361605 260 #define WM_NOTIFY_PARENT_REFLECTION 39 /* Notify parent reflection.
csyang2 1:c0f972361605 261 Sometimes send back as a result of the WM_NOTIFY_PARENT message
csyang2 1:c0f972361605 262 to let child react on behalf of its parent.
csyang2 1:c0f972361605 263 Information is detailed as notification code */
csyang2 1:c0f972361605 264 #define WM_NOTIFY_ENABLE 40 /* Enable or disable widget */
csyang2 1:c0f972361605 265 #define WM_NOTIFY_VIS_CHANGED 41 /* Visibility of a window has or may have changed */
csyang2 1:c0f972361605 266
csyang2 1:c0f972361605 267 #define WM_HANDLE_DIALOG_STATUS 42 /* Set or get dialog status */
csyang2 1:c0f972361605 268 #define WM_GET_RADIOGROUP 43 /* Send to all siblings and children of a radio control when
csyang2 1:c0f972361605 269 selection changed */
csyang2 1:c0f972361605 270 #define WM_MENU 44 /* Send to owner window of menu widget */
csyang2 1:c0f972361605 271 #define WM_SCREENSIZE_CHANGED 45 /* Send to all windows when size of screen has changed */
csyang2 1:c0f972361605 272 #define WM_PRE_PAINT 46 /* Send to a window before it receives a WM_PAINT message */
csyang2 1:c0f972361605 273 #define WM_POST_PAINT 47 /* Send to a window after (the last) WM_PAINT message */
csyang2 1:c0f972361605 274
csyang2 1:c0f972361605 275 #define WM_MOTION 48 /* Automatic motion messages */
csyang2 1:c0f972361605 276
csyang2 1:c0f972361605 277 #define WM_GET_WINDOW_ID 49 /* Return widget type specific Id (DebugId) */
csyang2 1:c0f972361605 278
csyang2 1:c0f972361605 279 #define WM_PRE_BANDING 50 /* Send before starting banding process */
csyang2 1:c0f972361605 280 #define WM_POST_BANDING 51 /* Send after finishing banding process */
csyang2 1:c0f972361605 281
csyang2 1:c0f972361605 282 #define WM_USER_DATA 52 /* Send immediately after setting user data */
csyang2 1:c0f972361605 283 #define WM_SET_CALLBACK 53 /* Send immediately after setting user data */
csyang2 1:c0f972361605 284
csyang2 1:c0f972361605 285 #define WM_GESTURE 0x0119 /* Gesture message */
csyang2 1:c0f972361605 286
csyang2 1:c0f972361605 287 #define WM_TIMER 0x0113 /* Timer has expired (Keep the same as WIN32) */
csyang2 1:c0f972361605 288 #define WM_WIDGET 0x0300 /* 256 messages reserved for Widget messages */
csyang2 1:c0f972361605 289 #define WM_USER 0x0400 /* Reserved for user messages ... (Keep the same as WIN32) */
csyang2 1:c0f972361605 290
csyang2 1:c0f972361605 291 /*********************************************************************
csyang2 1:c0f972361605 292 *
csyang2 1:c0f972361605 293 * Motion messages
csyang2 1:c0f972361605 294 */
csyang2 1:c0f972361605 295 #define WM_MOTION_INIT 0
csyang2 1:c0f972361605 296 #define WM_MOTION_MOVE 1
csyang2 1:c0f972361605 297 #define WM_MOTION_GETPOS 2
csyang2 1:c0f972361605 298 #define WM_MOTION_GETCONTEXT 3
csyang2 1:c0f972361605 299
csyang2 1:c0f972361605 300 /*********************************************************************
csyang2 1:c0f972361605 301 *
csyang2 1:c0f972361605 302 * Motion flags
csyang2 1:c0f972361605 303 */
csyang2 1:c0f972361605 304 #define WM_MOTION_MANAGE_BY_WINDOW (1 << 0) // Window movement is managed by window itself
csyang2 1:c0f972361605 305
csyang2 1:c0f972361605 306 /*********************************************************************
csyang2 1:c0f972361605 307 *
csyang2 1:c0f972361605 308 * Notification codes
csyang2 1:c0f972361605 309 *
csyang2 1:c0f972361605 310 * The following is the list of notification codes send
csyang2 1:c0f972361605 311 * with the WM_NOTIFY_PARENT message
csyang2 1:c0f972361605 312 */
csyang2 1:c0f972361605 313 #define WM_NOTIFICATION_CLICKED 1
csyang2 1:c0f972361605 314 #define WM_NOTIFICATION_RELEASED 2
csyang2 1:c0f972361605 315 #define WM_NOTIFICATION_MOVED_OUT 3
csyang2 1:c0f972361605 316 #define WM_NOTIFICATION_SEL_CHANGED 4
csyang2 1:c0f972361605 317 #define WM_NOTIFICATION_VALUE_CHANGED 5
csyang2 1:c0f972361605 318 #define WM_NOTIFICATION_SCROLLBAR_ADDED 6 /* Scroller added */
csyang2 1:c0f972361605 319 #define WM_NOTIFICATION_CHILD_DELETED 7 /* Inform window that child is about to be deleted */
csyang2 1:c0f972361605 320 #define WM_NOTIFICATION_GOT_FOCUS 8
csyang2 1:c0f972361605 321 #define WM_NOTIFICATION_LOST_FOCUS 9
csyang2 1:c0f972361605 322 #define WM_NOTIFICATION_SCROLL_CHANGED 10
csyang2 1:c0f972361605 323
csyang2 1:c0f972361605 324 #define WM_NOTIFICATION_WIDGET 11 /* Space for widget defined notifications */
csyang2 1:c0f972361605 325 #define WM_NOTIFICATION_USER 16 /* Space for application (user) defined notifications */
csyang2 1:c0f972361605 326
csyang2 1:c0f972361605 327 /*********************************************************************
csyang2 1:c0f972361605 328 *
csyang2 1:c0f972361605 329 * Memory management
csyang2 1:c0f972361605 330 */
csyang2 1:c0f972361605 331 #define WM_HWIN GUI_HWIN
csyang2 1:c0f972361605 332 #define WM_HWIN_NULL GUI_HMEM_NULL
csyang2 1:c0f972361605 333 #define WM_HMEM GUI_HMEM
csyang2 1:c0f972361605 334 #define WM_HMEM_NULL GUI_HMEM_NULL
csyang2 1:c0f972361605 335 #define WM_HTIMER GUI_HMEM
csyang2 1:c0f972361605 336
csyang2 1:c0f972361605 337 /*********************************************************************
csyang2 1:c0f972361605 338 *
csyang2 1:c0f972361605 339 * Window defines
csyang2 1:c0f972361605 340 */
csyang2 1:c0f972361605 341 #define WM_HBKWIN WM_GetDesktopWindow() /* Handle of background window */
csyang2 1:c0f972361605 342 #define WM_UNATTACHED ((WM_HMEM) - 1) /* Do not attach to a window */
csyang2 1:c0f972361605 343
csyang2 1:c0f972361605 344 /*********************************************************************
csyang2 1:c0f972361605 345 *
csyang2 1:c0f972361605 346 * Window create flags.
csyang2 1:c0f972361605 347 *
csyang2 1:c0f972361605 348 * These flags can be passed to the create window
csyang2 1:c0f972361605 349 * function as flag-parameter. The flags are combinable using the
csyang2 1:c0f972361605 350 * binary or operator.
csyang2 1:c0f972361605 351 */
csyang2 1:c0f972361605 352 #define WM_CF_HASTRANS (1UL << 0) /* Has transparency. Needs to be defined for windows which do not fill the entire
csyang2 1:c0f972361605 353 section of their (client) rectangle. */
csyang2 1:c0f972361605 354 #define WM_CF_HIDE (0UL << 1) /* Hide window after creation (default !) */
csyang2 1:c0f972361605 355 #define WM_CF_SHOW (1UL << 1) /* Show window after creation */
csyang2 1:c0f972361605 356 #define WM_CF_MEMDEV (1UL << 2) /* Use memory device for redraws */
csyang2 1:c0f972361605 357 #define WM_CF_STAYONTOP (1UL << 3) /* Stay on top */
csyang2 1:c0f972361605 358 #define WM_CF_DISABLED (1UL << 4) /* Disabled: Does not receive PID (mouse & touch) input */
csyang2 1:c0f972361605 359
csyang2 1:c0f972361605 360 /* Create only flags ... Not available as status flags */
csyang2 1:c0f972361605 361 #define WM_CF_ACTIVATE (1UL << 5) /* If automatic activation upon creation of window is desired */
csyang2 1:c0f972361605 362 #define WM_CF_FGND (0UL << 6) /* Put window in foreground after creation (default !) */
csyang2 1:c0f972361605 363 #define WM_CF_BGND (1UL << 6) /* Put window in background after creation */
csyang2 1:c0f972361605 364
csyang2 1:c0f972361605 365 /* Anchor flags */
csyang2 1:c0f972361605 366 #define WM_CF_ANCHOR_RIGHT (1UL << 7) /* Right anchor ... If parent is resized, distance to right will remain const (left is default) */
csyang2 1:c0f972361605 367 #define WM_CF_ANCHOR_BOTTOM (1UL << 8) /* Bottom anchor ... If parent is resized, distance to bottom will remain const (top is default) */
csyang2 1:c0f972361605 368 #define WM_CF_ANCHOR_LEFT (1UL << 9) /* Left anchor ... If parent is resized, distance to left will remain const (left is default) */
csyang2 1:c0f972361605 369 #define WM_CF_ANCHOR_TOP (1UL << 10) /* Top anchor ... If parent is resized, distance to top will remain const (top is default) */
csyang2 1:c0f972361605 370
csyang2 1:c0f972361605 371 #define WM_CF_CONST_OUTLINE (1UL << 11) /* Constant outline. This is relevant for transparent windows only. If a window is transparent
csyang2 1:c0f972361605 372 and does not have a constant outline, its background is invalided instead of the window itself.
csyang2 1:c0f972361605 373 This causes add. computation time when redrawing. */
csyang2 1:c0f972361605 374 #define WM_CF_LATE_CLIP (1UL << 12)
csyang2 1:c0f972361605 375 #define WM_CF_MEMDEV_ON_REDRAW (1UL << 13)
csyang2 1:c0f972361605 376
csyang2 1:c0f972361605 377 #define WM_SF_INVALID_DRAW (1UL << 14)
csyang2 1:c0f972361605 378 #define WM_SF_DELETE (1UL << 15) /* Marks the window to be deleted within WM_Exec() when no callback routine is executed */
csyang2 1:c0f972361605 379
csyang2 1:c0f972361605 380 #define WM_CF_STATIC (1UL << 16) /* Use static memory device for redraws */
csyang2 1:c0f972361605 381
csyang2 1:c0f972361605 382 #define WM_CF_MOTION_X (1UL << 17) /* Window can be moved automatically in X axis */
csyang2 1:c0f972361605 383 #define WM_CF_MOTION_Y (1UL << 18) /* Window can be moved automatically in Y axis */
csyang2 1:c0f972361605 384
csyang2 1:c0f972361605 385 #define WM_CF_GESTURE (1UL << 19) /* Marks the window to be a able to receive gesture messages */
csyang2 1:c0f972361605 386
csyang2 1:c0f972361605 387 #define WM_CF_ZOOM (1UL << 20) /* Window can be scaled automatically by multi touch gesture input */
csyang2 1:c0f972361605 388
csyang2 1:c0f972361605 389 #define WM_CF_MOTION_R (1UL << 21) // Window can be rotated
csyang2 1:c0f972361605 390
csyang2 1:c0f972361605 391 /*********************************************************************
csyang2 1:c0f972361605 392 *
csyang2 1:c0f972361605 393 * Window manager types
csyang2 1:c0f972361605 394 */
csyang2 1:c0f972361605 395 typedef struct WM_Obj WM_Obj;
csyang2 1:c0f972361605 396 typedef struct WM_MESSAGE WM_MESSAGE;
csyang2 1:c0f972361605 397
csyang2 1:c0f972361605 398 typedef void WM_CALLBACK( WM_MESSAGE * pMsg);
csyang2 1:c0f972361605 399
csyang2 1:c0f972361605 400 struct WM_MESSAGE {
csyang2 1:c0f972361605 401 int MsgId; /* type of message */
csyang2 1:c0f972361605 402 WM_HWIN hWin; /* Destination window */
csyang2 1:c0f972361605 403 WM_HWIN hWinSrc; /* Source window */
csyang2 1:c0f972361605 404 union {
csyang2 1:c0f972361605 405 const void * p; /* Message specific data pointer */
csyang2 1:c0f972361605 406 int v;
csyang2 1:c0f972361605 407 PTR_ADDR u;
csyang2 1:c0f972361605 408 GUI_COLOR Color;
csyang2 1:c0f972361605 409 void (* pFunc)(void);
csyang2 1:c0f972361605 410 } Data;
csyang2 1:c0f972361605 411 };
csyang2 1:c0f972361605 412
csyang2 1:c0f972361605 413 struct WM_Obj {
csyang2 1:c0f972361605 414 GUI_RECT Rect; /* Outer dimensions of window */
csyang2 1:c0f972361605 415 GUI_RECT InvalidRect; /* Invalid rectangle */
csyang2 1:c0f972361605 416 WM_CALLBACK* cb; /* Ptr to notification callback */
csyang2 1:c0f972361605 417 WM_HWIN hNextLin; /* Next window in linear list */
csyang2 1:c0f972361605 418 WM_HWIN hParent;
csyang2 1:c0f972361605 419 WM_HWIN hFirstChild;
csyang2 1:c0f972361605 420 WM_HWIN hNext;
csyang2 1:c0f972361605 421 #if WM_SUPPORT_STATIC_MEMDEV
csyang2 1:c0f972361605 422 GUI_MEMDEV_Handle hMem; /* Static memory device */
csyang2 1:c0f972361605 423 #endif
csyang2 1:c0f972361605 424 U32 Status; /* Status flags */
csyang2 1:c0f972361605 425 #if WM_SUPPORT_CPP
csyang2 1:c0f972361605 426 void * ObjPtr;
csyang2 1:c0f972361605 427 #endif
csyang2 1:c0f972361605 428 };
csyang2 1:c0f972361605 429
csyang2 1:c0f972361605 430 typedef void WM_tfPollPID(void);
csyang2 1:c0f972361605 431 typedef void WM_tfForEach(WM_HWIN hWin, void * pData);
csyang2 1:c0f972361605 432
csyang2 1:c0f972361605 433 typedef void (* WM_tfInvalidateParent) (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
csyang2 1:c0f972361605 434 typedef void (* WM_tfInvalidateDrawFunc)(WM_HWIN hWin);
csyang2 1:c0f972361605 435 typedef void (* WM_tfPaint1Func) (WM_HWIN hWin);
csyang2 1:c0f972361605 436
csyang2 1:c0f972361605 437 typedef struct {
csyang2 1:c0f972361605 438 WM_HMEM hTimer;
csyang2 1:c0f972361605 439 WM_HWIN hWin;
csyang2 1:c0f972361605 440 int UserId;
csyang2 1:c0f972361605 441 } WM_TIMER_OBJ;
csyang2 1:c0f972361605 442
csyang2 1:c0f972361605 443 /*********************************************************************
csyang2 1:c0f972361605 444 *
csyang2 1:c0f972361605 445 * General control routines
csyang2 1:c0f972361605 446 */
csyang2 1:c0f972361605 447 void WM_Activate (void);
csyang2 1:c0f972361605 448 void WM_Deactivate(void);
csyang2 1:c0f972361605 449 void WM_Init (void);
csyang2 1:c0f972361605 450 int WM_Exec (void); /* Execute all jobs ... Return 0 if nothing was done. */
csyang2 1:c0f972361605 451 int WM_Exec1 (void); // Execute only one job
csyang2 1:c0f972361605 452 U32 WM_SetCreateFlags(U32 Flags);
csyang2 1:c0f972361605 453 WM_tfPollPID * WM_SetpfPollPID(WM_tfPollPID * pf);
csyang2 1:c0f972361605 454
csyang2 1:c0f972361605 455 /*********************************************************************
csyang2 1:c0f972361605 456 *
csyang2 1:c0f972361605 457 * Window manager interface
csyang2 1:c0f972361605 458 */
csyang2 1:c0f972361605 459 void WM_AttachWindow (WM_HWIN hWin, WM_HWIN hParent);
csyang2 1:c0f972361605 460 void WM_AttachWindowAt (WM_HWIN hWin, WM_HWIN hParent, int x, int y);
csyang2 1:c0f972361605 461 int WM_CheckScrollPos (WM_SCROLL_STATE * pScrollState, int Pos, int LowerDist, int UpperDist); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 462 void WM_ClrHasTrans (WM_HWIN hWin);
csyang2 1:c0f972361605 463 WM_HWIN WM_CreateWindow (int x0, int y0, int xSize, int ySize, U32 Style, WM_CALLBACK * cb, int NumExtraBytes);
csyang2 1:c0f972361605 464 WM_HWIN WM_CreateWindowAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hWinParent, U32 Style, WM_CALLBACK* cb, int NumExtraBytes);
csyang2 1:c0f972361605 465 void WM_DeleteWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 466 void WM_DetachWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 467 void WM_EnableGestures (WM_HWIN hWin, int OnOff);
csyang2 1:c0f972361605 468 int WM_GetHasTrans (WM_HWIN hWin);
csyang2 1:c0f972361605 469 WM_HWIN WM_GetFocusedWindow (void);
csyang2 1:c0f972361605 470 int WM_GetInvalidRect (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 471 int WM_GetStayOnTop (WM_HWIN hWin);
csyang2 1:c0f972361605 472 void WM_HideWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 473 void WM_InvalidateArea (const GUI_RECT * pRect);
csyang2 1:c0f972361605 474 void WM_InvalidateRect (WM_HWIN hWin, const GUI_RECT * pRect);
csyang2 1:c0f972361605 475 void WM_InvalidateWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 476 void WM_InvalidateWindowAndDescsEx(WM_HWIN hWin, const GUI_RECT * pInvalidRect, U16 Flags);
csyang2 1:c0f972361605 477 void WM_InvalidateWindowAndDescs (WM_HWIN hWin); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 478 int WM_IsEnabled (WM_HWIN hObj);
csyang2 1:c0f972361605 479 char WM_IsCompletelyCovered (WM_HWIN hWin); /* Checks if the window is completely covered by other windows */
csyang2 1:c0f972361605 480 char WM_IsCompletelyVisible (WM_HWIN hWin); /* Is the window completely visible ? */
csyang2 1:c0f972361605 481 int WM_IsFocusable (WM_HWIN hWin);
csyang2 1:c0f972361605 482 int WM_IsVisible (WM_HWIN hWin);
csyang2 1:c0f972361605 483 int WM_IsWindow (WM_HWIN hWin); /* Check validity */
csyang2 1:c0f972361605 484 void WM_Rect2Screen (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 485 void WM_Rect2Client (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 486 void WM_SetAnchor (WM_HWIN hWin, U16 AnchorFlags);
csyang2 1:c0f972361605 487 void WM_SetHasTrans (WM_HWIN hWin);
csyang2 1:c0f972361605 488 void WM_SetId (WM_HWIN hObj, int Id);
csyang2 1:c0f972361605 489 void WM_SetStayOnTop (WM_HWIN hWin, int OnOff);
csyang2 1:c0f972361605 490 void WM_SetTransState (WM_HWIN hWin, unsigned State);
csyang2 1:c0f972361605 491 void WM_ShowWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 492 void WM_ValidateRect (WM_HWIN hWin, const GUI_RECT * pRect);
csyang2 1:c0f972361605 493 void WM_ValidateWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 494 void WM_XY2Screen (WM_HWIN hWin, int * px, int * py);
csyang2 1:c0f972361605 495 void WM_XY2Client (WM_HWIN hWin, int * px, int * py);
csyang2 1:c0f972361605 496
csyang2 1:c0f972361605 497 #define WM_GetFocussedWindow WM_GetFocusedWindow
csyang2 1:c0f972361605 498 #define WM_IsFocussable WM_IsFocusable
csyang2 1:c0f972361605 499
csyang2 1:c0f972361605 500 /* Gesture support */
csyang2 1:c0f972361605 501 void WM_GESTURE_Enable (int OnOff);
csyang2 1:c0f972361605 502 int WM_GESTURE_EnableEx(int OnOff, int MaxFactor);
csyang2 1:c0f972361605 503 void WM_GESTURE_Exec (void);
csyang2 1:c0f972361605 504 I32 WM_GESTURE_SetThresholdAngle(I32 ThresholdAngle);
csyang2 1:c0f972361605 505 I32 WM_GESTURE_SetThresholdDist (I32 ThresholdDist);
csyang2 1:c0f972361605 506
csyang2 1:c0f972361605 507 /* Motion support */
csyang2 1:c0f972361605 508 void WM_MOTION_Enable (int OnOff);
csyang2 1:c0f972361605 509 void WM_MOTION_SetMovement (WM_HWIN hWin, int Axis, I32 Speed, I32 Dist);
csyang2 1:c0f972361605 510 void WM_MOTION_SetMotion (WM_HWIN hWin, int Axis, I32 Speed, I32 Deceleration);
csyang2 1:c0f972361605 511 void WM_MOTION_SetMoveable (WM_HWIN hWin, U32 Flags, int OnOff);
csyang2 1:c0f972361605 512 void WM_MOTION_SetDeceleration (WM_HWIN hWin, int Axis, I32 Deceleration);
csyang2 1:c0f972361605 513 unsigned WM_MOTION_SetDefaultPeriod(unsigned Period);
csyang2 1:c0f972361605 514 void WM_MOTION_SetSpeed (WM_HWIN hWin, int Axis, I32 Velocity);
csyang2 1:c0f972361605 515 void WM_MOTION_SetMinMotion (unsigned MinMotion);
csyang2 1:c0f972361605 516 void WM_MOTION_SetThreshold (unsigned Threshold);
csyang2 1:c0f972361605 517
csyang2 1:c0f972361605 518 /* Motion support, private interface */
csyang2 1:c0f972361605 519 WM_HMEM WM_MOTION__CreateContext(void);
csyang2 1:c0f972361605 520 void WM_MOTION__DeleteContext(WM_HMEM hContext);
csyang2 1:c0f972361605 521
csyang2 1:c0f972361605 522 /* Motion support, private function(s) */
csyang2 1:c0f972361605 523 void WM__SetMotionCallback (void(* cbMotion) (GUI_PID_STATE * pState, void * p));
csyang2 1:c0f972361605 524
csyang2 1:c0f972361605 525 /* Static memory devices */
csyang2 1:c0f972361605 526 #if (GUI_SUPPORT_MEMDEV)
csyang2 1:c0f972361605 527 #define GUI_MEMDEV_EDGE_LEFT 0
csyang2 1:c0f972361605 528 #define GUI_MEMDEV_EDGE_RIGHT 1
csyang2 1:c0f972361605 529 #define GUI_MEMDEV_EDGE_TOP 2
csyang2 1:c0f972361605 530 #define GUI_MEMDEV_EDGE_BOTTOM 3
csyang2 1:c0f972361605 531
csyang2 1:c0f972361605 532 int GUI_MEMDEV_BlendWinBk (WM_HWIN hWin, int Period, U32 BlendColor, U8 BlendIntens);
csyang2 1:c0f972361605 533 int GUI_MEMDEV_BlurAndBlendWinBk(WM_HWIN hWin, int Period, U8 BlurDepth, U32 BlendColor, U8 BlendIntens);
csyang2 1:c0f972361605 534 int GUI_MEMDEV_BlurWinBk (WM_HWIN hWin, int Period, U8 BlurDepth);
csyang2 1:c0f972361605 535 void GUI_MEMDEV_CreateStatic (WM_HWIN hWin);
csyang2 1:c0f972361605 536 GUI_MEMDEV_Handle GUI_MEMDEV_CreateWindowDevice(WM_HWIN hWin);
csyang2 1:c0f972361605 537 int GUI_MEMDEV_FadeInWindow (WM_HWIN hWin, int Period);
csyang2 1:c0f972361605 538 int GUI_MEMDEV_FadeOutWindow (WM_HWIN hWin, int Period);
csyang2 1:c0f972361605 539 GUI_MEMDEV_Handle GUI_MEMDEV_GetStaticDevice (WM_HWIN hWin);
csyang2 1:c0f972361605 540 GUI_MEMDEV_Handle GUI_MEMDEV_GetWindowDevice (WM_HWIN hWin);
csyang2 1:c0f972361605 541 int GUI_MEMDEV_MoveInWindow (WM_HWIN hWin, int x, int y, int a180, int Period);
csyang2 1:c0f972361605 542 int GUI_MEMDEV_MoveOutWindow (WM_HWIN hWin, int x, int y, int a180, int Period);
csyang2 1:c0f972361605 543 void GUI_MEMDEV_Paint1Static (WM_HWIN hWin); /* not to be documented */
csyang2 1:c0f972361605 544 int GUI_MEMDEV_ShiftInWindow (WM_HWIN hWin, int Period, int Direction);
csyang2 1:c0f972361605 545 int GUI_MEMDEV_ShiftOutWindow (WM_HWIN hWin, int Period, int Direction);
csyang2 1:c0f972361605 546 int GUI_MEMDEV_SwapWindow (WM_HWIN hWin, int Period, int Edge);
csyang2 1:c0f972361605 547
csyang2 1:c0f972361605 548 void GUI_MEMDEV__CreateStatic (WM_HWIN hWin);
csyang2 1:c0f972361605 549 #endif
csyang2 1:c0f972361605 550
csyang2 1:c0f972361605 551 /* Move/resize windows */
csyang2 1:c0f972361605 552 void WM_MoveWindow (WM_HWIN hWin, int dx, int dy);
csyang2 1:c0f972361605 553 void WM_ResizeWindow (WM_HWIN hWin, int dx, int dy);
csyang2 1:c0f972361605 554 void WM_MoveTo (WM_HWIN hWin, int x, int y);
csyang2 1:c0f972361605 555 void WM_MoveChildTo (WM_HWIN hWin, int x, int y);
csyang2 1:c0f972361605 556 void WM_SetSize (WM_HWIN hWin, int XSize, int YSize);
csyang2 1:c0f972361605 557 void WM_SetWindowPos (WM_HWIN hWin, int xPos, int yPos, int xSize, int ySize);
csyang2 1:c0f972361605 558 int WM_SetXSize (WM_HWIN hWin, int xSize);
csyang2 1:c0f972361605 559 int WM_SetYSize (WM_HWIN hWin, int ySize);
csyang2 1:c0f972361605 560 int WM_SetScrollbarH (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 561 int WM_SetScrollbarV (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 562
csyang2 1:c0f972361605 563 /* ToolTip support */
csyang2 1:c0f972361605 564 #define WM_TOOLTIP_PI_FIRST 0
csyang2 1:c0f972361605 565 #define WM_TOOLTIP_PI_SHOW 1
csyang2 1:c0f972361605 566 #define WM_TOOLTIP_PI_NEXT 2
csyang2 1:c0f972361605 567
csyang2 1:c0f972361605 568 #define WM_TOOLTIP_CI_BK 0
csyang2 1:c0f972361605 569 #define WM_TOOLTIP_CI_FRAME 1
csyang2 1:c0f972361605 570 #define WM_TOOLTIP_CI_TEXT 2
csyang2 1:c0f972361605 571
csyang2 1:c0f972361605 572 typedef WM_HMEM WM_TOOLTIP_HANDLE;
csyang2 1:c0f972361605 573
csyang2 1:c0f972361605 574 typedef struct {
csyang2 1:c0f972361605 575 int Id;
csyang2 1:c0f972361605 576 const char * pText;
csyang2 1:c0f972361605 577 } TOOLTIP_INFO;
csyang2 1:c0f972361605 578
csyang2 1:c0f972361605 579 int WM_TOOLTIP_AddTool (WM_TOOLTIP_HANDLE hToolTip, WM_HWIN hTool, const char * pText);
csyang2 1:c0f972361605 580 WM_TOOLTIP_HANDLE WM_TOOLTIP_Create (WM_HWIN hDlg, const TOOLTIP_INFO * pInfo, unsigned NumItems);
csyang2 1:c0f972361605 581 void WM_TOOLTIP_Delete (WM_TOOLTIP_HANDLE hToolTip);
csyang2 1:c0f972361605 582 GUI_COLOR WM_TOOLTIP_SetDefaultColor (unsigned Index, GUI_COLOR Color);
csyang2 1:c0f972361605 583 const GUI_FONT * WM_TOOLTIP_SetDefaultFont (const GUI_FONT * pFont);
csyang2 1:c0f972361605 584 unsigned WM_TOOLTIP_SetDefaultPeriod(unsigned Index, unsigned Period);
csyang2 1:c0f972361605 585
csyang2 1:c0f972361605 586 /* ToolTip support, private */
csyang2 1:c0f972361605 587 void WM__SetToolTipCallback(void(* cbToolTip)(GUI_PID_STATE * pState, WM_HWIN));
csyang2 1:c0f972361605 588
csyang2 1:c0f972361605 589 /* Timer */
csyang2 1:c0f972361605 590 #ifdef GUI_X_CREATE_TIMER
csyang2 1:c0f972361605 591 int WM_CreateTimer (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 592 void WM_DeleteTimer (WM_HWIN hWin, int UserId); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 593 #else
csyang2 1:c0f972361605 594 WM_HMEM WM_CreateTimer (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 595 void WM_DeleteTimer (WM_HMEM hTimer); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 596 void WM_RestartTimer(WM_HMEM hTimer, int Period);
csyang2 1:c0f972361605 597 #endif
csyang2 1:c0f972361605 598 int WM_GetTimerId(WM_HTIMER hTimer);
csyang2 1:c0f972361605 599
csyang2 1:c0f972361605 600 /* Diagnostics */
csyang2 1:c0f972361605 601 int WM_GetNumWindows(void);
csyang2 1:c0f972361605 602 int WM_GetNumInvalidWindows(void);
csyang2 1:c0f972361605 603
csyang2 1:c0f972361605 604 /* Scroll state related functions */
csyang2 1:c0f972361605 605 void WM_CheckScrollBounds(WM_SCROLL_STATE * pScrollState); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 606 int WM_GetScrollPosH (WM_HWIN hWin);
csyang2 1:c0f972361605 607 int WM_GetScrollPosV (WM_HWIN hWin);
csyang2 1:c0f972361605 608 void WM_SetScrollPosH (WM_HWIN hWin, unsigned ScrollPos);
csyang2 1:c0f972361605 609 void WM_SetScrollPosV (WM_HWIN hWin, unsigned ScrollPos);
csyang2 1:c0f972361605 610 int WM_SetScrollValue (WM_SCROLL_STATE * pScrollState, int v); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 611
csyang2 1:c0f972361605 612 /* Get / Set (new) callback function */
csyang2 1:c0f972361605 613 WM_CALLBACK * WM_SetCallback(WM_HWIN hWin, WM_CALLBACK * cb);
csyang2 1:c0f972361605 614 WM_CALLBACK * WM_GetCallback(WM_HWIN hWin);
csyang2 1:c0f972361605 615
csyang2 1:c0f972361605 616 /* Get size/origin of a window */
csyang2 1:c0f972361605 617 void WM_GetClientRect (GUI_RECT * pRect);
csyang2 1:c0f972361605 618 void WM_GetClientRectEx (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 619 void WM_GetInsideRect (GUI_RECT * pRect);
csyang2 1:c0f972361605 620 void WM_GetInsideRectEx (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 621 void WM_GetInsideRectExScrollbar(WM_HWIN hWin, GUI_RECT * pRect); /* not to be documented (may change in future version) */
csyang2 1:c0f972361605 622 void WM_GetWindowRect (GUI_RECT * pRect);
csyang2 1:c0f972361605 623 void WM_GetWindowRectEx (WM_HWIN hWin, GUI_RECT * pRect);
csyang2 1:c0f972361605 624 int WM_GetOrgX (void);
csyang2 1:c0f972361605 625 int WM_GetOrgY (void);
csyang2 1:c0f972361605 626 int WM_GetWindowOrgX (WM_HWIN hWin);
csyang2 1:c0f972361605 627 int WM_GetWindowOrgY (WM_HWIN hWin);
csyang2 1:c0f972361605 628 int WM_GetWindowSizeX (WM_HWIN hWin);
csyang2 1:c0f972361605 629 int WM_GetWindowSizeY (WM_HWIN hWin);
csyang2 1:c0f972361605 630 WM_HWIN WM_GetFirstChild (WM_HWIN hWin);
csyang2 1:c0f972361605 631 WM_HWIN WM_GetNextSibling (WM_HWIN hWin);
csyang2 1:c0f972361605 632 WM_HWIN WM_GetParent (WM_HWIN hWin);
csyang2 1:c0f972361605 633 WM_HWIN WM_GetPrevSibling (WM_HWIN hWin);
csyang2 1:c0f972361605 634 int WM_GetId (WM_HWIN hWin);
csyang2 1:c0f972361605 635 WM_HWIN WM_GetScrollbarV (WM_HWIN hWin);
csyang2 1:c0f972361605 636 WM_HWIN WM_GetScrollbarH (WM_HWIN hWin);
csyang2 1:c0f972361605 637 WM_HWIN WM_GetScrollPartner (WM_HWIN hWin);
csyang2 1:c0f972361605 638 WM_HWIN WM_GetClientWindow (WM_HWIN hObj);
csyang2 1:c0f972361605 639 GUI_COLOR WM_GetBkColor (WM_HWIN hObj);
csyang2 1:c0f972361605 640
csyang2 1:c0f972361605 641 /* Change Z-Order of windows */
csyang2 1:c0f972361605 642 void WM_BringToBottom(WM_HWIN hWin);
csyang2 1:c0f972361605 643 void WM_BringToTop(WM_HWIN hWin);
csyang2 1:c0f972361605 644
csyang2 1:c0f972361605 645 GUI_COLOR WM_SetDesktopColor (GUI_COLOR Color);
csyang2 1:c0f972361605 646 GUI_COLOR WM_SetDesktopColorEx(GUI_COLOR Color, unsigned int LayerIndex);
csyang2 1:c0f972361605 647 void WM_SetDesktopColors (GUI_COLOR Color);
csyang2 1:c0f972361605 648
csyang2 1:c0f972361605 649 /* Select window used for drawing operations */
csyang2 1:c0f972361605 650 WM_HWIN WM_SelectWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 651 WM_HWIN WM_GetActiveWindow (void);
csyang2 1:c0f972361605 652 void WM_Paint (WM_HWIN hObj);
csyang2 1:c0f972361605 653 void WM_Update (WM_HWIN hWin);
csyang2 1:c0f972361605 654 void WM_PaintWindowAndDescs (WM_HWIN hWin);
csyang2 1:c0f972361605 655 void WM_UpdateWindowAndDescs (WM_HWIN hWin);
csyang2 1:c0f972361605 656
csyang2 1:c0f972361605 657 /* Get foreground/background windows */
csyang2 1:c0f972361605 658 WM_HWIN WM_GetDesktopWindow (void);
csyang2 1:c0f972361605 659 WM_HWIN WM_GetDesktopWindowEx(unsigned int LayerIndex);
csyang2 1:c0f972361605 660
csyang2 1:c0f972361605 661 /* Reduce clipping area of a window */
csyang2 1:c0f972361605 662 const GUI_RECT * WM_SetUserClipRect(const GUI_RECT * pRect);
csyang2 1:c0f972361605 663 void WM_SetDefault (void);
csyang2 1:c0f972361605 664
csyang2 1:c0f972361605 665 /* Use of memory devices */
csyang2 1:c0f972361605 666 void WM_EnableMemdev (WM_HWIN hWin);
csyang2 1:c0f972361605 667 void WM_DisableMemdev (WM_HWIN hWin);
csyang2 1:c0f972361605 668
csyang2 1:c0f972361605 669 /* Automatic use of multiple buffers */
csyang2 1:c0f972361605 670 int WM_MULTIBUF_Enable (int OnOff);
csyang2 1:c0f972361605 671 int WM_MULTIBUF_EnableEx(int OnOff, U32 LayerMask);
csyang2 1:c0f972361605 672
csyang2 1:c0f972361605 673 extern const GUI_MULTIBUF_API * WM_MULTIBUF__pAPI;
csyang2 1:c0f972361605 674
csyang2 1:c0f972361605 675 typedef void (* T_WM_EXEC_GESTURE)(void);
csyang2 1:c0f972361605 676
csyang2 1:c0f972361605 677 extern T_WM_EXEC_GESTURE WM__pExecGestures;
csyang2 1:c0f972361605 678
csyang2 1:c0f972361605 679 /* ... */
csyang2 1:c0f972361605 680 int WM_OnKey(int Key, int Pressed);
csyang2 1:c0f972361605 681 void WM_MakeModal(WM_HWIN hWin);
csyang2 1:c0f972361605 682 int WM_SetModalLayer(int LayerIndex);
csyang2 1:c0f972361605 683 int WM_GetModalLayer(void);
csyang2 1:c0f972361605 684
csyang2 1:c0f972361605 685 /*********************************************************************
csyang2 1:c0f972361605 686 *
csyang2 1:c0f972361605 687 * Message related functions
csyang2 1:c0f972361605 688 *
csyang2 1:c0f972361605 689 * Please note that some of these functions do not yet show up in the
csyang2 1:c0f972361605 690 * documentation, as they should not be required by application program.
csyang2 1:c0f972361605 691 */
csyang2 1:c0f972361605 692 void WM_NotifyParent (WM_HWIN hWin, int Notification);
csyang2 1:c0f972361605 693 void WM_SendMessage (WM_HWIN hWin, WM_MESSAGE * p);
csyang2 1:c0f972361605 694 void WM_SendMessageNoPara (WM_HWIN hWin, int MsgId); /* not to be documented (may change in future */
csyang2 1:c0f972361605 695 void WM_DefaultProc (WM_MESSAGE * pMsg);
csyang2 1:c0f972361605 696 int WM_BroadcastMessage (WM_MESSAGE * pMsg);
csyang2 1:c0f972361605 697 void WM_SetScrollState (WM_HWIN hWin, const WM_SCROLL_STATE * pState);
csyang2 1:c0f972361605 698 void WM_SetEnableState (WM_HWIN hItem, int State);
csyang2 1:c0f972361605 699 void WM_SendToParent (WM_HWIN hWin, WM_MESSAGE * pMsg);
csyang2 1:c0f972361605 700 int WM_HasFocus (WM_HWIN hWin);
csyang2 1:c0f972361605 701 int WM_SetFocus (WM_HWIN hWin);
csyang2 1:c0f972361605 702 WM_HWIN WM_SetFocusOnNextChild (WM_HWIN hParent); /* Set the focus to the next child */
csyang2 1:c0f972361605 703 WM_HWIN WM_SetFocusOnPrevChild (WM_HWIN hParent); /* Set the focus to the previous child */
csyang2 1:c0f972361605 704 WM_HWIN WM_GetDialogItem (WM_HWIN hWin, int Id);
csyang2 1:c0f972361605 705 void WM_EnableWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 706 void WM_DisableWindow (WM_HWIN hWin);
csyang2 1:c0f972361605 707 void WM_GetScrollState (WM_HWIN hObj, WM_SCROLL_STATE * pScrollState);
csyang2 1:c0f972361605 708
csyang2 1:c0f972361605 709 /*********************************************************************
csyang2 1:c0f972361605 710 *
csyang2 1:c0f972361605 711 * Managing user data
csyang2 1:c0f972361605 712 */
csyang2 1:c0f972361605 713 int WM_GetUserData (WM_HWIN hWin, void * pDest, int SizeOfBuffer);
csyang2 1:c0f972361605 714 int WM_SetUserData (WM_HWIN hWin, const void * pSrc, int SizeOfBuffer);
csyang2 1:c0f972361605 715 int WM__GetUserDataEx(WM_HWIN hWin, void * pDest, int NumBytes, int SizeOfObject);
csyang2 1:c0f972361605 716 int WM__SetUserDataEx(WM_HWIN hWin, const void * pSrc, int NumBytes, int SizeOfObject);
csyang2 1:c0f972361605 717
csyang2 1:c0f972361605 718 /*********************************************************************
csyang2 1:c0f972361605 719 *
csyang2 1:c0f972361605 720 * Capturing input focus
csyang2 1:c0f972361605 721 */
csyang2 1:c0f972361605 722 int WM_HasCaptured (WM_HWIN hWin);
csyang2 1:c0f972361605 723 void WM_SetCapture (WM_HWIN hObj, int AutoRelease);
csyang2 1:c0f972361605 724 void WM_SetCaptureMove(WM_HWIN hWin, const GUI_PID_STATE * pState, int MinVisibility, int LimitTop); /* Not yet documented */
csyang2 1:c0f972361605 725 void WM_ReleaseCapture(void);
csyang2 1:c0f972361605 726
csyang2 1:c0f972361605 727 /*********************************************************************
csyang2 1:c0f972361605 728 *
csyang2 1:c0f972361605 729 * Misc routines
csyang2 1:c0f972361605 730 */
csyang2 1:c0f972361605 731 int WM_HandlePID (void);
csyang2 1:c0f972361605 732 WM_HWIN WM_Screen2hWin (int x, int y);
csyang2 1:c0f972361605 733 WM_HWIN WM_Screen2hWinEx (WM_HWIN hStop, int x, int y);
csyang2 1:c0f972361605 734 void WM_ForEachDesc (WM_HWIN hWin, WM_tfForEach * pcb, void * pData);
csyang2 1:c0f972361605 735 void WM_SetScreenSize (int xSize, int ySize);
csyang2 1:c0f972361605 736 int WM_PollSimMsg (void);
csyang2 1:c0f972361605 737 int WM_GetWindowInfo (WM_WINDOW_INFO * pInfo, int FirstWindow);
csyang2 1:c0f972361605 738
csyang2 1:c0f972361605 739 /*********************************************************************
csyang2 1:c0f972361605 740 *
csyang2 1:c0f972361605 741 * Diagnostics routines
csyang2 1:c0f972361605 742 */
csyang2 1:c0f972361605 743 #if (WM_SUPPORT_DIAG)
csyang2 1:c0f972361605 744 void WM_DIAG_EnableInvalidationColoring(int OnOff);
csyang2 1:c0f972361605 745 #endif
csyang2 1:c0f972361605 746
csyang2 1:c0f972361605 747 /*********************************************************************
csyang2 1:c0f972361605 748 *
csyang2 1:c0f972361605 749 * Macros for compatibility with older versions
csyang2 1:c0f972361605 750 */
csyang2 1:c0f972361605 751 #if WM_COMPATIBLE_MODE
csyang2 1:c0f972361605 752 #define HBWIN WM_HWIN
csyang2 1:c0f972361605 753 #define HBWIN_NULL WM_HWIN_NULL
csyang2 1:c0f972361605 754
csyang2 1:c0f972361605 755 #define WM_HideWin WM_HideWindow
csyang2 1:c0f972361605 756 #define WM_ShowWin WM_ShowWindow
csyang2 1:c0f972361605 757 #define WM_GetKey GUI_GetKey
csyang2 1:c0f972361605 758 #define WM_WaitKey GUI_WaitKey
csyang2 1:c0f972361605 759
csyang2 1:c0f972361605 760 #define WM_ExecIdle WM_Exec
csyang2 1:c0f972361605 761 #define WM_ExecIdle1 WM_Exec1
csyang2 1:c0f972361605 762
csyang2 1:c0f972361605 763 #define WM_Invalidate WM_InvalidateWindow
csyang2 1:c0f972361605 764 #define WM_GetWinRect WM_GetWindowRect
csyang2 1:c0f972361605 765 #define WM_GetWinOrgX WM_GetWindowOrgX
csyang2 1:c0f972361605 766 #define WM_GetWinOrgY WM_GetWindowOrgY
csyang2 1:c0f972361605 767 #define WM_GetWinSizeX WM_GetWindowSizeX
csyang2 1:c0f972361605 768 #define WM_GetWinSizeY WM_GetWindowSizeY
csyang2 1:c0f972361605 769 #define WM_GetXSize WM_GetWindowSizeX
csyang2 1:c0f972361605 770 #define WM_GetYSize WM_GetWindowSizeY
csyang2 1:c0f972361605 771 #define WM_SelWin WM_SelectWindow
csyang2 1:c0f972361605 772 #define WM_GetBackgroundWindow WM_GetDesktopWindow
csyang2 1:c0f972361605 773 #define WM_GetForegroundWindow 0
csyang2 1:c0f972361605 774 #define WM_SetForegroundWindow WM_BringToTop
csyang2 1:c0f972361605 775 #define WM_SetUserClipArea WM_SetUserClipRect
csyang2 1:c0f972361605 776
csyang2 1:c0f972361605 777
csyang2 1:c0f972361605 778 #define WM_Start()
csyang2 1:c0f972361605 779 #define WM_Stop()
csyang2 1:c0f972361605 780 #define WM_SetBkWindowColor(Color) WM_SetDesktopColor(Color)
csyang2 1:c0f972361605 781
csyang2 1:c0f972361605 782 #endif
csyang2 1:c0f972361605 783
csyang2 1:c0f972361605 784
csyang2 1:c0f972361605 785 #endif /* GUI_WINSUPPORT */
csyang2 1:c0f972361605 786
csyang2 1:c0f972361605 787 #if defined(__cplusplus)
csyang2 1:c0f972361605 788 }
csyang2 1:c0f972361605 789 #endif
csyang2 1:c0f972361605 790
csyang2 1:c0f972361605 791 #endif /* WM_H */
csyang2 1:c0f972361605 792
csyang2 1:c0f972361605 793 /*************************** End of file ****************************/