| 1 | /* |
| 2 | Copyright (C) 2009 Mobile Sorcery AB |
| 3 | |
| 4 | This program is free software; you can redistribute it and/or modify it under |
| 5 | the terms of the GNU General Public License, version 2, as published by |
| 6 | the Free Software Foundation. |
| 7 | |
| 8 | This program is distributed in the hope that it will be useful, |
| 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| 10 | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 11 | for more details. |
| 12 | |
| 13 | You should have received a copy of the GNU General Public License |
| 14 | along with this program; see the file COPYING. If not, write to the Free |
| 15 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 16 | 02111-1307, USA. |
| 17 | */ |
| 18 | |
| 19 | #if !defined(MAAPI_H) |
| 20 | #define MAAPI_H |
| 21 | |
| 22 | #include <stdint.h> |
| 23 | |
| 24 | #define EXTENT_Y(e) ((short)(e)) |
| 25 | #define EXTENT_X(e) ((short)((e) >> 16)) |
| 26 | #define TRANS_NONE 0 |
| 27 | #define FONT_TYPE_SERIF 0 |
| 28 | #define FONT_TYPE_SANS_SERIF 1 |
| 29 | #define FONT_TYPE_MONOSPACE 2 |
| 30 | // same values as tizen enum FontStyle |
| 31 | #define FONT_STYLE_NORMAL 0x0001 |
| 32 | #define FONT_STYLE_BOLD 0x0002 |
| 33 | #define FONT_STYLE_ITALIC 0x0004 |
| 34 | #define HANDLE_LOCAL 0 |
| 35 | #define RES_OUT_OF_MEMORY -1 |
| 36 | #define RES_BAD_INPUT -2 |
| 37 | #define RES_OK 1 |
| 38 | #define HANDLE_SCREEN 0 |
| 39 | #define RES_FONT_OK 1 |
| 40 | #define 293 |
| 41 | #define EVENT_TYPE_POINTER_PRESSED 8 |
| 42 | #define EVENT_TYPE_POINTER_RELEASED 9 |
| 43 | #define EVENT_TYPE_POINTER_DRAGGED 10 |
| 44 | #define EVENT_TYPE_KEY_PRESSED 11 |
| 45 | #define EVENT_TYPE_OPTIONS_BOX_BUTTON_CLICKED 41 |
| 46 | #define EVENT_TYPE_SCREEN_CHANGED 21 |
| 47 | |
| 48 | #ifndef _WCHAR_DEFINED |
| 49 | #define _WCHAR_DEFINED |
| 50 | typedef wchar_t wchar; |
| 51 | #endif //_WCHAR_DEFINED |
| 52 | |
| 53 | #ifndef _SYSV_TYPES_DEFINED |
| 54 | #define _SYSV_TYPES_DEFINED |
| 55 | typedef unsigned short ushort; |
| 56 | typedef unsigned int uint; |
| 57 | #endif //_SYSV_TYPES_DEFINED |
| 58 | |
| 59 | typedef int MAExtent; |
| 60 | typedef void* MAAddress; |
| 61 | typedef intptr_t MAHandle; |
| 62 | |
| 63 | typedef struct MARect { |
| 64 | int left; |
| 65 | int top; |
| 66 | int width; |
| 67 | int height; |
| 68 | } MARect; |
| 69 | |
| 70 | typedef struct MAPoint2d { |
| 71 | int x; |
| 72 | int y; |
| 73 | } MAPoint2d; |
| 74 | |
| 75 | /** |
| 76 | * \brief An event; a message indicating that something has happened, e.g. that a key has been pressed. |
| 77 | */ |
| 78 | typedef struct MAEvent { |
| 79 | /** |
| 80 | * One of the \link #EVENT_TYPE_CLOSE EVENT_TYPE \endlink constants. |
| 81 | */ |
| 82 | int type; |
| 83 | union { |
| 84 | struct { |
| 85 | /** |
| 86 | * In KEY events, this will be one of the \link #MAK_UNKNOWN MAK \endlink constants. |
| 87 | */ |
| 88 | int key; |
| 89 | |
| 90 | /** |
| 91 | * In KEY events, this will be the native keycode. |
| 92 | */ |
| 93 | int nativeKey; |
| 94 | }; |
| 95 | |
| 96 | struct { |
| 97 | /** |
| 98 | * In POINTER events, this will be the location of the pointer. |
| 99 | */ |
| 100 | MAPoint2d point; |
| 101 | }; |
| 102 | |
| 103 | /** |
| 104 | * #EVENT_TYPE_OPTIONS_BOX_BUTTON_CLICKED event, contains the index of the selected option. |
| 105 | */ |
| 106 | int optionsBoxButtonIndex; |
| 107 | }; |
| 108 | } MAEvent; |
| 109 | |
| 110 | /** |
| 111 | * Deletes a loaded font |
| 112 | * \param 'font' A font handle |
| 113 | * \return RES_FONT_OK, RES_FONT_INVALID_HANDLE, or RES_FONT_DELETE_DENIED. |
| 114 | */ |
| 115 | int maFontDelete(MAHandle font); |
| 116 | |
| 117 | /** |
| 118 | * Sets the color used by drawing functions. Returns previous color. Initial color is 0 (black). |
| 119 | * \param rgb A color in RGB8 format (0xRRGGBB). The top byte is ignored. |
| 120 | */ |
| 121 | int maSetColor(int rgb); |
| 122 | |
| 123 | /** |
| 124 | * Sets the clipping rectangle for the current draw target. |
| 125 | * The screen and every drawable image each maintains a clipping rectangle. |
| 126 | * Drawing operations have no effect outside the clipping rectangle. |
| 127 | * The default clipping rectangle covers the entire draw target, so that |
| 128 | * clipping occurs at the draw target's edges. |
| 129 | */ |
| 130 | void maSetClipRect(int left, int top, int width, int height); |
| 131 | |
| 132 | /** |
| 133 | * Draws a single pixel using the current color. |
| 134 | * \see maSetColor() |
| 135 | */ |
| 136 | void maPlot(int posX, int posY); |
| 137 | |
| 138 | /** |
| 139 | * Draws a line using the current color. |
| 140 | * \see maSetColor() |
| 141 | */ |
| 142 | void maLine(int startX, int startY, int endX, int endY); |
| 143 | |
| 144 | /** |
| 145 | * Draws an ellipse using the current color. |
| 146 | * \see maSetColor() |
| 147 | */ |
| 148 | void maEllipse(int xc, int yc, int rx, int ry, int fill); |
| 149 | |
| 150 | /** |
| 151 | * Draws an arc using the current color. |
| 152 | * \see maSetColor() |
| 153 | */ |
| 154 | void maArc(int xc, int yc, double r, double start, double end, double aspect); |
| 155 | |
| 156 | /** |
| 157 | * Draws a filled rectangle using the current color. |
| 158 | * Width and height must be greater than zero. |
| 159 | * \see maSetColor() |
| 160 | */ |
| 161 | void maFillRect(int left, int top, int width, int height); |
| 162 | |
| 163 | /** |
| 164 | * Draws Latin-1 text using the current color. |
| 165 | * The coordinates are the top-left corner of the text's bounding box. |
| 166 | * \see maSetColor() |
| 167 | */ |
| 168 | void maDrawText(int left, int top, const char *str, int length); |
| 169 | |
| 170 | /** |
| 171 | * Copies the back buffer to the physical screen. |
| 172 | */ |
| 173 | void maUpdateScreen(void); |
| 174 | |
| 175 | /** |
| 176 | * Returns the size in pixels of Latin-1 text as it would appear on-screen. |
| 177 | */ |
| 178 | MAExtent maGetTextSize(const char *str); |
| 179 | |
| 180 | /** |
| 181 | * Returns the screen size. |
| 182 | * Returns the screen size. |
| 183 | */ |
| 184 | MAExtent maGetScrSize(void); |
| 185 | |
| 186 | /** |
| 187 | * Returns a handle to one of the default fonts of the device, in the style and size you specify. |
| 188 | * \param 'type' The type of the font, can be FONT_TYPE_[SANS_SERIF,SERIF,MONOSPACE]. |
| 189 | * \param 'style' The style of the font, can be FONT_STYLE_[NORMAL,BOLD,ITALIC]. |
| 190 | * \param 'size' The size of the font. |
| 191 | * \return The handle to the font, RES_FONT_NO_TYPE_STYLE_COMBINATION, or RES_FONT_INVALID_SIZE. |
| 192 | */ |
| 193 | MAHandle maFontLoadDefault(int type, int style, int size); |
| 194 | |
| 195 | /** |
| 196 | * Sets the font to be used with maDrawText and maDrawTextW, and returns the handle |
| 197 | * to the previous font. |
| 198 | * \param 'font' an MAHandle for a font object. |
| 199 | * \return The handle to the previous font, or RES_FONT_INVALID_HANDLE. |
| 200 | */ |
| 201 | MAHandle maFontSetCurrent(MAHandle font); |
| 202 | |
| 203 | /** |
| 204 | * Draws an image. |
| 205 | * The source is an array of ints that represent pixels in ARGB format. |
| 206 | * \param dstPoint The top-left point on the draw target. |
| 207 | * \param src The address to the source image. |
| 208 | * \param srcRect The portion of the source image to be drawn. |
| 209 | * \param opacity |
| 210 | * \param bytesPerLine |
| 211 | */ |
| 212 | void maDrawRGB(const MAPoint2d *dstPoint, const void *src, const MARect *srcRect, int opacity, int bytesPerLine); |
| 213 | |
| 214 | /** |
| 215 | * Draws a portion of an image using a transformation. |
| 216 | * \param image The source image. |
| 217 | * \param srcRect The portion of the source image to be drawn. |
| 218 | * Must not exceed the bounds of the source image. |
| 219 | * \param dstPoint The top-left point on the draw target. |
| 220 | * \param transformMode One of the \link #TRANS_NONE TRANS \endlink constants. |
| 221 | * \see maDrawImage |
| 222 | */ |
| 223 | void maDrawImageRegion(MAHandle image, const MARect *srcRect, const MAPoint2d *dstPoint, int transformMode); |
| 224 | |
| 225 | /** |
| 226 | * Creates a drawable image of the specified size. A drawable image has no alpha channel, |
| 227 | * which is to say, no transparency. |
| 228 | * Its initial contents are undefined, so you should draw onto the entire surface to |
| 229 | * be sure what will happen when you draw this image onto something else. |
| 230 | * \param placeholder The resource handle of the new image. |
| 231 | * \param width Width, in pixels, of the new image. Must be \> 0. |
| 232 | * \param height Height, in pixels, of the new image. Must be \> 0. |
| 233 | * \see maSetDrawTarget() |
| 234 | * \returns #RES_OK if succeded and #RES_OUT_OF_MEMORY if failed. |
| 235 | */ |
| 236 | int maCreateDrawableImage(MAHandle placeholder, int width, int height); |
| 237 | |
| 238 | /** |
| 239 | * Creates a new placeholder and returns the handle to it. |
| 240 | */ |
| 241 | MAHandle maCreatePlaceholder(void); |
| 242 | |
| 243 | /** |
| 244 | * Releases a handle returned by maCreatePlaceholder(). |
| 245 | * If the handle refers to an object, such as an image or a data object, |
| 246 | * that object is destroyed, as if maDestroyObject() had been called. |
| 247 | * |
| 248 | * The released handle may be reused by the system |
| 249 | * and returned by future calls to maCreatePlaceholder(), |
| 250 | * or by other system functions that allocate resources dynamically. |
| 251 | * |
| 252 | * This function is preferred to maDestroyObject(), unless you need |
| 253 | * to reuse the handle. |
| 254 | * |
| 255 | * Attempting to destroy a handle that has already been released, |
| 256 | * or was not returned by maCreatePlaceholder(), will cause a MoSync Panic. |
| 257 | * |
| 258 | * @param handle The handle to be released. |
| 259 | */ |
| 260 | void maDestroyPlaceholder(MAHandle handle); |
| 261 | |
| 262 | /** |
| 263 | * Copies an image into an array of ints that represent pixels in ARGB format. |
| 264 | * The destination rectangle is defined as { 0,0, \a srcRect.width, \a srcRect.height }. |
| 265 | * Parts of the destination array that are outside the destination rectangle are not modified. |
| 266 | * If \a srcRect is outside the bounds of the source image, |
| 267 | * or if \a srcRect.width is greater than \a scanlength, a MoSync Panic is thrown. |
| 268 | * \param image The handle to the source image. |
| 269 | * \param dst The address of the destination array. |
| 270 | * \param scanlength The width of the image, in pixels, represented by the destination array. |
| 271 | * \param srcRect The portion of the source image to be copied. |
| 272 | */ |
| 273 | void maGetImageData(MAHandle image, void *dst, const MARect *srcRect, int scanlength); |
| 274 | |
| 275 | /** |
| 276 | * Sets the current draw target. |
| 277 | * The handle must be a drawable image or #HANDLE_SCREEN, which represents the back buffer. |
| 278 | * The initial draw target is the back buffer. |
| 279 | * If an image is set as draw target, its object handle goes into flux, which prevents |
| 280 | * its destruction or use as a source in maDrawImage. When a different draw target is set, |
| 281 | * the image's handle is restored. Returns the the previously set draw target. |
| 282 | * \see maCreateDrawableImage() |
| 283 | */ |
| 284 | MAHandle maSetDrawTarget(MAHandle image); |
| 285 | |
| 286 | /** |
| 287 | * Returns the number of milliseconds that has passed since some unknown point in time. |
| 288 | * Accuracy is platform-specific, but should be better than 20 ms. |
| 289 | */ |
| 290 | int maGetMilliSecondCount(void); |
| 291 | |
| 292 | /** |
| 293 | * Shows the virtual keyboard. |
| 294 | */ |
| 295 | void maShowVirtualKeyboard(void); |
| 296 | |
| 297 | /** |
| 298 | * Hides the virtual keyboard. |
| 299 | */ |
| 300 | void maHideVirtualKeyboard(void); |
| 301 | |
| 302 | /** |
| 303 | * There is a FIFO buffer that contains up to #EVENT_BUFFER_SIZE events. |
| 304 | * Each event has a type. Some types have additional data. |
| 305 | * |
| 306 | * This function retrieves the next event, unless the queue is empty. |
| 307 | * Use maWait() to wait until more events are available. |
| 308 | * \param event Pointer to an MAEvent struct that will be filled with the next event. |
| 309 | * |
| 310 | * When the \link #EVENT_TYPE_CLOSE Close event \endlink is posted, |
| 311 | * you must call maExit as soon as possible, or |
| 312 | * your program will be forcibly terminated. The timeout is device-dependent, but |
| 313 | * never longer than #EVENT_CLOSE_TIMEOUT milliseconds. |
| 314 | * |
| 315 | * After the Close event has been posted, most syscalls will stop working, |
| 316 | * returning default values and doing nothing. |
| 317 | * Only the following groups of functions are guaranteed to remain operational: |
| 318 | * Memory management, math, Resource management, Store, time, logging, maExit() and maPanic(). |
| 319 | * |
| 320 | * \note Not all platforms have the capability to generate a Close event. |
| 321 | * You must always provide another way for the user to exit your application. |
| 322 | * |
| 323 | * \returns \> 0 on success, or zero if the buffer is empty. |
| 324 | */ |
| 325 | int maGetEvent(MAEvent *event); |
| 326 | |
| 327 | /** |
| 328 | * Suspends execution until there is an event in the buffer, |
| 329 | * or \a timeout milliseconds have passed. A timeout <= 0 is considered infinite. |
| 330 | * Timer accuracy is platform-specific, but should be better than 20 ms. |
| 331 | * |
| 332 | * Use this function rather than idle loops to save CPU/battery power. |
| 333 | * \see maGetEvent() |
| 334 | */ |
| 335 | void maWait(int timeout); |
| 336 | |
| 337 | #endif |
| 338 | |