gui.h
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:43k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   gui.h
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Primitive UI variables & wrappers
  48.  *
  49.  * Author:
  50.  * -------
  51.  * -------
  52.  * -------
  53.  * -------
  54.  *
  55.  *==============================================================================
  56.  *             HISTORY
  57.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  58.  *------------------------------------------------------------------------------
  59.  * removed!
  60.  *
  61.  * removed!
  62.  * removed!
  63.  * removed!
  64.  *
  65.  * removed!
  66.  * removed!
  67.  * removed!
  68.  *
  69.  * removed!
  70.  * removed!
  71.  * removed!
  72.  *
  73.  * removed!
  74.  * removed!
  75.  * removed!
  76.  *
  77.  * removed!
  78.  * removed!
  79.  * removed!
  80.  *
  81.  * removed!
  82.  * removed!
  83.  * removed!
  84.  *
  85.  * removed!
  86.  * removed!
  87.  * removed!
  88.  *
  89.  * removed!
  90.  * removed!
  91.  * removed!
  92.  *
  93.  * removed!
  94.  * removed!
  95.  * removed!
  96.  *
  97.  * removed!
  98.  * removed!
  99.  * removed!
  100.  *
  101.  * removed!
  102.  * removed!
  103.  * removed!
  104.  *
  105.  * removed!
  106.  * removed!
  107.  * removed!
  108.  *
  109.  * removed!
  110.  * removed!
  111.  * removed!
  112.  *
  113.  * removed!
  114.  * removed!
  115.  * removed!
  116.  *
  117.  * removed!
  118.  * removed!
  119.  * removed!
  120.  *
  121.  * removed!
  122.  * removed!
  123.  * removed!
  124.  *
  125.  * removed!
  126.  * removed!
  127.  * removed!
  128.  *
  129.  * removed!
  130.  * removed!
  131.  * removed!
  132.  *
  133.  * removed!
  134.  * removed!
  135.  * removed!
  136.  *
  137.  * removed!
  138.  * removed!
  139.  * removed!
  140.  *
  141.  * removed!
  142.  * removed!
  143.  * removed!
  144.  *
  145.  * removed!
  146.  * removed!
  147.  * removed!
  148.  *
  149.  * removed!
  150.  * removed!
  151.  * removed!
  152.  *
  153.  * removed!
  154.  * removed!
  155.  * removed!
  156.  *
  157.  *------------------------------------------------------------------------------
  158.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  159.  *==============================================================================
  160.  *******************************************************************************/
  161. /**
  162.  * Copyright Notice
  163.  * ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  164.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  165.  *  (It is illegal to remove this copyright notice from this software or any
  166.  *  portion of it)
  167.  */
  168. /**********************************************************************************
  169.    Filename:      gui.h
  170.    Author:        manju
  171.    Date Created:  August-13-2002
  172.    Contains:      PixTel UI routines header
  173.                Contains several parts and has been split to multiple
  174.                code files. See other files named gui_*.c and gui_*.h
  175.                This file contains common functions and data (prototypes only).
  176. **********************************************************************************/
  177. #ifndef __GUI_H__
  178. #define __GUI_H__
  179. #include "stdC.h"
  180. #include "CustDataRes.h"
  181. #include "gui_config.h"
  182. #include "CustThemesRes.h"
  183. #include "MMI_features.h"
  184. #include "gdi_const.h"
  185. #include "gdi_datatype.h"
  186. #ifdef __cplusplus
  187. extern "C"
  188. {
  189. #endif /* __cplusplus */ 
  190.     /* global device screen size                    */
  191.     extern S32 UI_device_width;
  192.     extern S32 UI_device_height;
  193.     /* UI globals                                */
  194.     extern S32 UI_clip_x1;
  195.     extern S32 UI_clip_y1;
  196.     extern S32 UI_clip_x2;
  197.     extern S32 UI_clip_y2;
  198.     extern S32 UI_old_clip_x1;
  199.     extern S32 UI_old_clip_y1;
  200.     extern S32 UI_old_clip_x2;
  201.     extern S32 UI_old_clip_y2;
  202.     extern S32 UI_text_x;
  203.     extern S32 UI_text_y;
  204.     extern S32 UI_text_height;
  205.     extern S32 UI_pointer_x;
  206.     extern S32 UI_pointer_y;
  207.     extern color UI_text_color;
  208.     extern color UI_text_border_color;
  209.     extern U8 UI_printf_buffer[];
  210.     /* MACRO:   calculates the percentage              */
  211. #define pixtel_percent(x,p)   ((x)*(p)/(100))
  212.     /* MACRO:   toggles a value                        */
  213. #define pixtel_toggle(x)   x=(U8)((x)?0:1)
  214.     /* MACRO:   divides, adds 1 if there is a remainder      */
  215. #define pixtel_highdivide(x,y)   ((((x)%(y))>0)?(((x)/(y))+1):((x)/(y)))
  216.     /* Base functions required by the UI system:    */
  217.     /* All UI components will use these functions      */
  218.     /* And will not directly use any other OS/system   */
  219.     /* related functions.                        */
  220.     extern void (*gui_putpixel) (S32 x, S32 y, color c);
  221.     extern void (*gui_draw_vertical_line) (S32 y1, S32 y2, S32 x, color c);
  222.     /* MTK ISSUE 30 */
  223.     extern void (*gui_draw_vert_line_type) (S32 y1, S32 y2, S32 x, color c, S32 type_line);
  224.     extern void (*gui_draw_hori_line_type) (S32 x1, S32 x2, S32 y, color c, S32 type_line);
  225.     extern void (*gui_draw_rectangle_type) (S32 x1, S32 y1, S32 x2, S32 y2, color c, S32 type_line);
  226.     /* MTK ISSUE 30 END */
  227.     extern void (*gui_draw_horizontal_line) (S32 x1, S32 x2, S32 y, color c);
  228.     extern void (*gui_line) (S32 x1, S32 y1, S32 x2, S32 y2, color c);
  229.     extern void (*gui_wline) (S32 x1, S32 y1, S32 x2, S32 y2, color c, S32 w);
  230.     extern void (*gui_draw_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c);
  231.     extern void (*gui_fill_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c);
  232.     extern void (*gui_cross_hatch_fill_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c);
  233.     extern void (*gui_hatch_fill_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c);
  234.     extern void (*gui_alternate_cross_hatch_fill_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c1, color c2);
  235.     extern void (*gui_alternate_hatch_fill_rectangle) (S32 x1, S32 y1, S32 x2, S32 y2, color c1, color c2);
  236.     extern void (*gui_set_text_clip) (S32 x1, S32 y1, S32 x2, S32 y2);
  237.     extern void (*gui_get_text_clip) (S32 *x1, S32 *y1, S32 *x2, S32 *y2);
  238.     extern void (*gui_set_text_clip_preset) (S32 x1, S32 y1, S32 x2, S32 y2);
  239.     extern void (*gui_set_clip) (S32 x1, S32 y1, S32 x2, S32 y2);
  240.     extern void (*gui_set_clip_with_bounding_box) (S32 x1, S32 y1, S32 x2, S32 y2, S32 bx1, S32 by1, S32 bx2, S32 by2);
  241.     extern void (*gui_get_clip) (S32 *x1, S32 *y1, S32 *x2, S32 *y2);
  242.     extern void (*gui_set_clip_preset) (S32 x1, S32 y1, S32 x2, S32 y2);
  243.     extern void (*gui_reset_clip) (void);
  244.     extern void (*gui_push_text_clip) (void);
  245.     extern void (*gui_pop_text_clip) (void);
  246.     extern void (*gui_push_clip) (void);
  247.     extern void (*gui_pop_clip) (void);
  248.     extern void (*gui_reset_text_clip) (void);
  249.     extern void (*gui_set_line_height) (S32 height);
  250.     extern void (*gui_move_text_cursor) (S32 x, S32 y);
  251.     extern void (*gui_set_text_color) (color c);
  252.     extern void (*gui_set_text_border_color) (color c);
  253.     extern S32(*gui_printf) (const S8 *format, ...);
  254.     extern S32(*gui_sprintf) (UI_string_type _text, const S8 *format, ...);
  255.     extern void (*gui_print_text) (UI_string_type _text);
  256.     /* MTK add to support print n characters */
  257.     extern void (*gui_print_text_n) (UI_string_type _text, int _n);
  258.     extern void (*gui_print_bordered_text_n) (UI_string_type _text, int _n);
  259.     /* MTK end */
  260.     extern void (*gui_print_bordered_text) (UI_string_type _text);
  261.     extern void (*gui_print_character) (UI_character_type _c);
  262.     //MTK Elvis for Thai
  263.     //MTK Elvis for stacked character
  264.     extern void (*gui_print_stacked_character) (UI_character_type _curCh, UI_character_type _pre2Ch,
  265.                                                 UI_character_type _preCh);
  266.     extern void (*gui_print_bordered_stacked_character) (UI_character_type _curCh, UI_character_type _pre2Ch,
  267.                                                          UI_character_type _preCh);
  268.     /* MTK end */
  269.     /* MTK Leo add */
  270.     extern void (*gui_print_bordered_character) (UI_character_type _c);
  271.     /* MTK Leo end */
  272.     extern U8 gui_print_truncated_text2(S32 x, S32 y, S32 xwidth, UI_string_type *s);
  273.     extern U8 gui_print_truncated_bordered_text2(S32 x, S32 y, S32 xwidth, UI_string_type *s);
  274.     extern void *(*gui_malloc) (size_t size);
  275.     extern void (*gui_free) (void *ptr);
  276.     extern S32(*gui_get_character_width) (UI_character_type c);
  277.     extern void (*gui_measure_character) (UI_character_type c, S32 *width, S32 *height);
  278.     extern S32(*gui_get_character_height) (void);
  279.     extern S32(*gui_get_string_width) (UI_string_type text);
  280.     extern S32(*gui_get_string_width_n) (UI_string_type text, S32 n);
  281.     extern S32(*gui_get_string_width_w) (UI_string_type text, S32 w);
  282.     extern S32(*gui_get_string_width_wn) (UI_string_type text, S32 w, S32 n);
  283.     extern S32(*gui_get_string_height) (UI_string_type text);
  284.     extern void (*gui_measure_string) (UI_string_type text, S32 *width, S32 *height);
  285.     extern void (*gui_measure_string_n) (UI_string_type text, S32 n, S32 *width, S32 *height);
  286.     extern void (*gui_measure_string_w) (UI_string_type text, S32 w, S32 *width, S32 *height);
  287.     extern void (*gui_measure_string_wn) (UI_string_type text, S32 w, S32 n, S32 *width, S32 *height);
  288.     extern void (*gui_set_font) (UI_font_type f);
  289.     extern void (*gui_show_image) (S32 x, S32 y, PU8 i);
  290.     extern void (*gui_show_transparent_image) (S32 x, S32 y, PU8 i, UI_transparent_color_type t);
  291.     extern void (*gui_measure_image) (PU8 i, S32 *width, S32 *height);
  292.     extern S32(*gui_image_n_frames) (PU8 i);
  293.     extern void (*gui_start_timer) (S32 count, void (*callback) (void));
  294.     extern void (*gui_cancel_timer) (void (*callback) (void));
  295.     extern void (*gui_hide_animated_image) (S32 x, S32 y, UI_animated_image_handle i);
  296.     extern void (*gui_register_hide_animation_frame) (UI_animated_image_handle i,
  297.                                                       void (*f) (S32 x1, S32 y1, S32 x2, S32 y2));
  298.     extern U8(*gui_show_transparent_animated_image_frame) (S32 x, S32 y, PU8 i, UI_transparent_color_type t,
  299.                                                            S16 frame_number);
  300.     extern U8(*gui_show_animated_image_frame) (S32 x, S32 y, PU8 i, S16 frame_number);
  301.     extern void (*gui_hide_animations) (void);
  302.     /* extern UI_animated_image_handle              (*gui_show_transparent_animated_image)(S32 x,S32 y,PU8 i,UI_transparent_color_type t); */
  303.     extern UI_animated_image_handle(*gui_show_transparent_animated_image_frames) (S32 x, S32 y, PU8 i,
  304.                                                                                   UI_transparent_color_type t,
  305.                                                                                   S16 start_frame, S16 end_frame);
  306.     /* extern UI_animated_image_handle              (*gui_show_animated_image)(S32 x,S32 y,PU8 i); */
  307.     extern UI_transparent_color_type(*gui_transparent_color) (U8 r, U8 g, U8 b);
  308.     extern color(*gui_color) (U8 r, U8 g, U8 b);
  309.     extern color(*gui_color32) (U8 r, U8 g, U8 b, U8 alpha);
  310.     extern void (*gui_color_RGB) (color c, U8 *r, U8 *g, U8 *b);
  311.     extern UI_string_type(*gui_strcpy) (UI_string_type text1, UI_string_type text2);
  312.     extern UI_string_type(*gui_strncpy) (UI_string_type text1, UI_string_type text2, S32 n);
  313.     extern S32(*gui_strcmp) (UI_string_type text1, UI_string_type text2);
  314.     extern S32(*gui_strlen) (UI_string_type text);
  315.     extern S32(*gui_strncmp) (UI_string_type text1, UI_string_type text2, S32 n);
  316.     extern UI_string_type(*gui_strcat) (UI_string_type text1, UI_string_type text2);
  317.     extern UI_string_type(*gui_itoa) (S32 value, UI_string_type s, S32 radix);
  318.     extern S32(*gui_atoi) (UI_string_type s);
  319.     extern void *(*gui_memcpy) (void *d, const void *s, S32 n);
  320.     extern UI_character_type(*gui_get_next_character) (UI_string_type *s);
  321.     extern UI_character_type(*gui_get_previous_character) (UI_string_type *s);
  322.     /* MTK00612 Bear */
  323. #ifdef MMI_ON_HARDWARE_P
  324.     extern void mtk_animation_cyclic(void);
  325.     extern void mtk_show_animation(S32 x, S32 y, U8 *image);
  326.     extern void mtk_show_animation_frames(S32 x, S32 y, U8 *image, S32 start_frame);
  327. #endif /* MMI_ON_HARDWARE_P */ 
  328.     /* MTK00612 Bear End */
  329. #if(UI_DOUBLE_BUFFER_SUPPORT)
  330.     extern void (*gui_BLT_double_buffer) (S32 x1, S32 y1, S32 x2, S32 y2);
  331.     extern void (*gui_lock_double_buffer) (void);
  332.     extern void (*gui_unlock_double_buffer) (void);
  333. #endif /* (UI_DOUBLE_BUFFER_SUPPORT) */ 
  334.     /* Supported image type */
  335. #define IMAGE_TYPE_INVALID                GDI_IMAGE_TYPE_INVALID
  336. #define IMAGE_TYPE_BMP                    GDI_IMAGE_TYPE_BMP
  337. #define IMAGE_TYPE_BMP_SEQUENCE           GDI_IMAGE_TYPE_BMP_SEQUENCE
  338. #define IMAGE_TYPE_GIF                    GDI_IMAGE_TYPE_GIF
  339. #define IMAGE_TYPE_DEVICE_BITMAP          GDI_IMAGE_TYPE_DEVICE_BITMAP
  340. #define IMAGE_TYPE_DEVICE_BITMAP_SEQUENCE GDI_IMAGE_TYPE_DEVICE_BITMAP_SEQUENCE
  341. #define IMAGE_TYPE_BMP_FILE               GDI_IMAGE_TYPE_BMP_FILE
  342. #define IMAGE_TYPE_GIF_FILE               GDI_IMAGE_TYPE_GIF_FILE
  343. #define IMAGE_TYPE_WBMP_FILE              GDI_IMAGE_TYPE_WBMP_FILE
  344. #define IMAGE_TYPE_JPG                    GDI_IMAGE_TYPE_JPG
  345. #define IMAGE_TYPE_JPG_FILE               GDI_IMAGE_TYPE_JPG_FILE
  346. #define IMAGE_TYPE_WBMP                   GDI_IMAGE_TYPE_WBMP
  347. #define IMAGE_TYPE_AVI                    GDI_IMAGE_TYPE_AVI
  348. #define IMAGE_TYPE_AVI_FILE               GDI_IMAGE_TYPE_AVI_FILE
  349. #define IMAGE_TYPE_3GP                    GDI_IMAGE_TYPE_3GP
  350. #define IMAGE_TYPE_3GP_FILE               GDI_IMAGE_TYPE_3GP_FILE
  351. #define IMAGE_TYPE_MP4                    GDI_IMAGE_TYPE_MP4
  352. #define IMAGE_TYPE_MP4_FILE               GDI_IMAGE_TYPE_MP4_FILE
  353. #define IMAGE_TYPE_JPG_SEQUENCE           GDI_IMAGE_TYPE_JPG_SEQUENCE
  354. #ifdef __MMI_DOWNLOADABLE_THEMES_SUPPORT__
  355. #define IMAGE_TYPE_BMP_FILE_OFFSET        GDI_IMAGE_TYPE_BMP_FILE_OFFSET
  356. #define IMAGE_TYPE_GIF_FILE_OFFSET        GDI_IMAGE_TYPE_GIF_FILE_OFFSET
  357. #endif /* __MMI_DOWNLOADABLE_THEMES_SUPPORT__ */
  358. #define IMAGE_TYPE_PNG                    GDI_IMAGE_TYPE_PNG
  359. #define IMAGE_TYPE_PNG_SEQUENCE           GDI_IMAGE_TYPE_PNG_SEQUENCE
  360. #define IMAGE_TYPE_PPN                    (GDI_IMAGE_TYPE_SUM + 1)//070306 Alpha layer
  361. #define IMAGE_TYPE_M3D                    GDI_IMAGE_TYPE_M3D
  362. #define IMAGE_TYPE_SWFLASH                GDI_IMAGE_TYPE_SWFLASH
  363. #define IMAGE_TYPE_SVG                    GDI_IMAGE_TYPE_SVG//070406 SVG support
  364. #define IMAGE_TYPE_SVG_FILE               GDI_IMAGE_TYPE_SVG_FILE
  365. #ifdef __MMI_RESOURCE_ENFB_SUPPORT__
  366. #define IMAGE_TYPE_ENFB                   255//100206 ENFB support
  367. #endif
  368.     /* 101205 audio resource Calvin Satrt */
  369. #define AUDIO_TYPE_INVALID             0
  370. #define AUDIO_TYPE_MP3                 5
  371. #define AUDIO_TYPE_IMY                 18
  372. #define AUDIO_TYPE_MID                 17
  373. #define AUDIO_TYPE_WAV                 13
  374. #define AUDIO_TYPE_MMF                 20
  375. #define AUDIO_TYPE_PCM                 7
  376. #define AUDIO_TYPE_DVI                 11
  377. #define AUDIO_TYPE_AMR                 3
  378. #define AUDIO_TYPE_AAC                 6
  379. #define AUDIO_TYPE_WMA                 29
  380. #define AUDIO_TYPE_M4A                 25
  381.     /* 101205 audio resource Calvin End */
  382.     /* Some standard functions: Need to be implemented through wrappers.    */
  383.     /* See the character set support functions, gui_get_next_character   */
  384.     /* and gui_get_previous_character                           */
  385.     extern U8 gui_linebreak_character(UI_character_type c);
  386.     extern U8 gui_endofstring_character(UI_character_type c);
  387.     extern color gui_blend_two_color(color c1, color c2, S32 weight1, S32 weight2);
  388. #define  UI_GRADIENT_COLOR_VERTICAL          0x00000100
  389. #define  UI_GRADIENT_COLOR_HORIZONTAL        0x00000000
  390. #define UI_GRADIENT_COLOR_FLIP               0x00000200
  391.     extern void gui_initialize_gradient_color(gradient_color *gc, color *c, U8 *p, U8 n);
  392.     extern void gui_gradient_fill_rectangle(S32 x1, S32 y1, S32 x2, S32 y2, gradient_color *gc, U32 flags);
  393.     /* Filled Area border theme                  */
  394.     typedef struct _UI_filled_area_border_theme
  395.     {
  396.         color filled_area_outer_light_border;
  397.         color filled_area_inner_light_border;
  398.         color filled_area_outer_dark_border;
  399.         color filled_area_inner_dark_border;
  400.     } UI_filled_area_border_theme;
  401.     extern UI_filled_area_border_theme *current_filled_area_border_theme;
  402.     /*
  403.      * UI filled area structure
  404.      * -------------------
  405.      * bits 0-7:         filler types
  406.      * bit    8:            1=vertical filler, 0=horizontal filler (used for gradients and textures)
  407.      * bit  9:           flip filler
  408.      * bit    10:        (reserved)
  409.      * bit  11:       (reserved)
  410.      * bit    12:        border yes/no
  411.      * bit  13:       border size 0=single line, 1=double line
  412.      * bit  14:       3D border
  413.      * bit  15:       rounded border
  414.      * bit    16:        1=elevated border, 0=depressed border
  415.      * bit    17:        1=filled area with shadow
  416.      * bit  18:            1=filled area with double line shadow, 0=single line shadow
  417.      * bit  19:       (reserved)
  418.      * bit  20:       left rounded border
  419.      * bit  21:       right rounded border
  420.      * bit  22:       Draw only horizontal lines in borders
  421.      * bit  24:       transparent color
  422.      */
  423.     /* Bits 0-7: filler type */
  424. #define UI_FILLED_AREA_MASK_TYPE                            0x000000FF
  425.     /* --- */
  426. #define UI_FILLED_AREA_TYPE_COLOR                           0x00000000
  427. #define UI_FILLED_AREA_TYPE_GRADIENT_COLOR                  0x00000001
  428. #define UI_FILLED_AREA_TYPE_TEXTURE                         0x00000002
  429. #define UI_FILLED_AREA_TYPE_BITMAP                          0x00000003
  430. #define UI_FILLED_AREA_TYPE_HATCH_COLOR                     0x00000004
  431. #define UI_FILLED_AREA_TYPE_ALTERNATE_HATCH_COLOR           0x00000005
  432. #define UI_FILLED_AREA_TYPE_CROSS_HATCH_COLOR               0x00000006
  433. #define UI_FILLED_AREA_TYPE_ALTERNATE_CROSS_HATCH_COLOR     0x00000007
  434. #define UI_FILLED_AREA_TYPE_NO_BACKGROUND                   0x00000008
  435. #define UI_FILLED_AREA_TYPE_CUSTOM_FILL_TYPE1               0x00000009  /* Popup description 1 */
  436. #define UI_FILLED_AREA_TYPE_CUSTOM_FILL_TYPE2               0x0000000A  /* Popup description 2 */
  437. #define UI_FILLED_AREA_TYPE_3D_BORDER                       0x0000000B
  438.     /* Bit 8: horiztonal or vertical fill for gradient color */
  439. #define UI_FILLED_AREA_MASK_FILL_DIRECTION                  0x00000100
  440.     /* --- */
  441. #define UI_FILLED_AREA_HORIZONTAL_FILL                      0x00000000
  442. #define UI_FILLED_AREA_VERTICAL_FILL                        0x00000100
  443.     /* Bit 9: flip fill or not */
  444. #define UI_FILLED_AREA_FLIP_FILL                            0x00000200
  445.     /* Bits 12-13: single-double-border */
  446. #define UI_FILLED_AREA_MASK_BORDER_WIDTH                    0x00003000
  447.     /* --- */
  448. #define UI_FILLED_AREA_TYPE_NO_BORDER                       0x00000000
  449. #define UI_FILLED_AREA_BORDER                               0x00001000
  450. #define UI_FILLED_AREA_SINGLE_BORDER                        0x00001000  /* Contain UI_FILLED_AREA_BORDER */
  451. #define UI_FILLED_AREA_DOUBLE_BORDER                        0x00003000  /* Contain UI_FILLED_AREA_BORDER */
  452.     /* Bits 14: 3D border */
  453. #define UI_FILLED_AREA_3D_BORDER                            0x00004000
  454.     /* Bits 15: Rounded border */
  455. #define UI_FILLED_AREA_ROUNDED_BORDER                       0x00008000
  456.     /* Bits 16: Elevated or depressed border */
  457. #define UI_FILLED_AREA_MASK_ELEVATION                       0x00010000
  458.     /* --- */
  459. #define UI_FILLED_AREA_ELEVATED_BORDER                      0x00010000
  460. #define UI_FILLED_AREA_DEPRESSED_BORDER                     0x00000000
  461.     /* Combination of Bit 14 and 16 */
  462. #define UI_FILLED_AREA_3D_ELEVATED_BORDER                   (UI_FILLED_AREA_ELEVATED_BORDER | UI_FILLED_AREA_3D_BORDER)
  463. #define UI_FILLED_AREA_3D_DEPRESSED_BORDER                  (UI_FILLED_AREA_DEPRESSED_BORDER | UI_FILLED_AREA_3D_BORDER)
  464.     /* Bits 17-18: single-double-shadown */
  465. #define UI_FILLED_AREA_MASK_SHADOW                          0x00060000
  466.     /* --- */
  467. #define UI_FILLED_AREA_SHADOW                               0x00020000
  468. #define UI_FILLED_AREA_SHADOW_DOUBLE_LINE                   0x00040000
  469.     /* Bit 20: Left rounded border for Dalmatian style */
  470. #define UI_FILLED_AREA_LEFT_ROUNDED_BORDER                  0x00100000
  471.     /* Bit 21: Right rounded border for Dalmatian style */
  472. #define UI_FILLED_AREA_RIGHT_ROUNDED_BORDER                 0x00200000
  473.     /* Bit 22: Draw only horizontal lines w/o vertical lines in UI_FILLED_AREA_BORDER */
  474. #define UI_FILLED_AREA_NO_VERTICAL_LINE                     0x00400000
  475.     /* Bit 24: Transparent color filler */
  476. #define UI_FILLED_AREA_TYPE_TRANSPARENT_COLOR               0x01000000
  477.     extern UI_filled_area *current_UI_filler;
  478.     //PMT VIKAS START 20050520
  479.     //PMT VIKAS START 20051217
  480. #if defined (__MMI_UI_TRANSPARENT_EFFECT__) || defined (__MMI_UI_LIST_HIGHLIGHT_EFFECTS__) || defined(__MMI_UI_TRANSPARENT_EFFECT_IN_DALMATIAN_CALENDAR__)      /* 072505 Calvin modified */
  481.     /* PMT VIKAS END 20051217 */
  482.     extern void gui_fill_transparent_color(S32 x1, S32 y1, S32 x2, S32 y2, color c);
  483.     extern void gui_transparent_color_filler(S32 x1, S32 y1, S32 x2, S32 y2, color c);
  484.     extern U8 gui_transparent_color_part_value(S32 color_value, S32 opacity_value);
  485.     extern void gui_set_transparent_source_layer(S32);
  486.     extern gdi_handle gui_get_transparent_source_layer(void);   /* 110705 WAP menu Clavin add */
  487.     extern void gui_reset_transparent_source_layer(void);
  488.     /* PMT VIKAS START 20050630 */
  489.     extern S32 gui_is_current_transparency_with_multi_layer(void);
  490.     /* PMT VIKAS END 20050630 */
  491. #endif /* defined (__MMI_UI_TRANSPARENT_EFFECT__) || defined (__MMI_UI_LIST_HIGHLIGHT_EFFECTS__) || defined(__MMI_UI_TRANSPARENT_EFFECT_IN_DALMATIAN_CALENDAR__) */ 
  492.     //PMT VIKAS END
  493.     //PMT VIKAS START 20050707
  494.     extern void gui_fill_left_rounded_border(S32 rx1, S32 ry1, S32 rx2, S32 ry2, UI_filled_area *f);
  495.     extern void gui_fill_right_rounded_border(S32 rx1, S32 ry1, S32 rx2, S32 ry2, UI_filled_area *f);
  496.     /* PMT VIKAS END 20050707 */
  497.     extern void gui_shadow_filled_area(S32 x1, S32 y1, S32 x2, S32 y2, UI_filled_area *f);
  498.     extern void gui_draw_filled_area(S32 x1, S32 y1, S32 x2, S32 y2, UI_filled_area *f);
  499.     /* void gui_greyscale_rectangle(S32 x1,S32 y1,S32 x2,S32 y2, S32 white_value); */
  500.     extern void gui_greyscale_rectangle(S32 x1, S32 y1, S32 x2, S32 y2, S32 white_value, S32 black_value);      /* 102605 greyscale Calvin chnaged */
  501.     /* PMT HIMANSHU START 20050916 */
  502.     typedef enum
  503.     {
  504.         MMI_GRADIENT_RECT_ROUNDED_CORNER_TOP_LEFT = 0,
  505.         MMI_GRADIENT_RECT_ROUNDED_CORNER_TOP_RIGHT,
  506.         MMI_GRADIENT_RECT_ROUNDED_CORNER_BOTTOM_LEFT,
  507.         MMI_GRADIENT_RECT_ROUNDED_CORNER_BOTTOM_RIGHT
  508.     } mmi_gradient_rect_rounded_corner_style_enum;
  509.     extern void gui_draw_rounded_corner(
  510.                     S32 x1,
  511.                     S32 y1,
  512.                     S32 size,
  513.                     color rect_color_start,
  514.                     color rect_color_end,
  515.                     S32 levle,
  516.                     mmi_gradient_rect_rounded_corner_style_enum corner_style);
  517.     extern void gui_draw_gradient_rounded_rectangle(
  518.                     S32 x1,
  519.                     S32 y1,
  520.                     S32 x2,
  521.                     S32 y2,
  522.                     color start_color,
  523.                     color end_color,
  524.                     S32 border_width);
  525.     /* PMT HIMANSHU END 20050916 */
  526.     typedef struct _UI_HLS_color
  527.     {
  528.         /* Hue */
  529.         U16 h;  /* 0-360 */
  530.         /* Lightness */
  531.         U8 l;   /* 0-255 */
  532.         /* Saturation */
  533.         U8 s;   /* 0-255 */
  534.     } UI_HLS_color;
  535.     extern void gui_RGB_to_HLS(color rgb, UI_HLS_color *hls);
  536.     extern void gui_HLS_to_RGB(UI_HLS_color hls, color *rgb);
  537.     /* UI object co-ordinates structure       */
  538.     typedef struct _UI_object_coordinates
  539.     {
  540.         S32 x;
  541.         S32 y;
  542.         S32 width;
  543.         S32 height;
  544.     } UI_object_coordinates;
  545.     /* Dummy functions called by UI elements by default, during events
  546.        Do not remove any of these functions.  */
  547.     extern void UI_dummy_function(void);
  548.     extern void UI_dummy_function_byte(U8 a);
  549.     extern void UI_dummy_function_s32(S32 a);
  550.     extern void UI_dummy_function_character(UI_character_type c);
  551.     /* Functions for switching graphics context  */
  552.     extern void UI_set_main_LCD_graphics_context(void);
  553.     extern void UI_set_sub_LCD_graphics_context(void);
  554.     extern U8 UI_test_sub_LCD_graphics_context(void);
  555.     /* Function to print truncated text */
  556.     extern void gui_print_truncated_text(S32 x, S32 y, S32 xwidth, UI_string_type s);
  557.     /* MTK Leo add */
  558.     extern void gui_print_truncated_borderd_text(S32 x, S32 y, S32 xwidth, UI_string_type s);
  559.     /* MTK Leo end */
  560.     /* PMT START PERSIAN */
  561. #define IS_ARABIC_CHARACTER(c)                                                                                          
  562.    (( ( ((UI_character_type)(c)>=(UI_character_type)0x0600) && ((UI_character_type)(c)<=(UI_character_type)0x06FF) ) || 
  563.    ( ((UI_character_type)(c)>=(UI_character_type)0xFB50) && ((UI_character_type)(c)<=(UI_character_type)0xFDFF) ) ||    
  564.    ( ((UI_character_type)(c)>=(UI_character_type)0xFE70) && ((UI_character_type)(c)<=(UI_character_type)0xFEFF) ) )?(1):(0))
  565.     /* PMT END PERSIAN */
  566.     /* Common string macros */
  567. #ifdef __ASCII
  568. #define UI_STRING_GET_NEXT_CHARACTER(p,c)                                                 
  569.       {                                                                                   
  570.          (c)=*((U8*)(p))++;                                                               
  571.       }
  572. #define UI_STRING_GET_PREVIOUS_CHARACTER(p,c)                                                
  573.       {                                                                                      
  574.          (c)=*(--((U8*)(p)));                                                                
  575.       }
  576. #define UI_STRING_INSERT_CHARACTER(p,c)                                                      
  577.       {                                                                                      
  578.          *((U8*)(p))++=(c);                                                                  
  579.       }
  580. #endif /* __ASCII */ 
  581. #ifdef __UCS2_ENCODING
  582.     /* Warning: Currently, these macros assume Little endian format only */
  583. #define UI_STRING_GET_NEXT_CHARACTER(p,c)                                                    
  584.       {                                                                                      
  585.          c=(UI_character_type)((*((p)+0))|((*((p)+1))<<8));                                  
  586.          (p)+=2;                                                                             
  587.       }
  588. #define UI_STRING_GET_PREVIOUS_CHARACTER(p,c)                                                
  589.       {                                                                                      
  590.          p-=2;                                                                               
  591.          c=(UI_character_type)((*((p)+0))|((*((p)+1))<<8));                                  
  592.       }
  593. #define UI_STRING_INSERT_CHARACTER(p,c)                                                      
  594.       {                                                                                      
  595.          (*((p))++)=(U8)(((c)&0xff));                                                        
  596.          (*((p))++)=(U8)(((c)>>8));                                                          
  597.       }
  598. #endif /* __UCS2_ENCODING */ 
  599. #define UI_TEST_CR_CHARACTER1(c)              (((UI_character_type)(c)==(UI_character_type)0x0D)?(1):(0))
  600. #define UI_TEST_CR_CHARACTER(c)               (((*(UI_character_type*)&(c))==(UI_character_type)0x0D)?(1):(0))
  601. #define UI_TEST_LF_CHARACTER1(c)              (((UI_character_type)(c)==(UI_character_type)0x0A)?(1):(0))
  602. #define UI_TEST_LF_CHARACTER(c)               (((*(UI_character_type*)&(c))==(UI_character_type)0x0A)?(1):(0))
  603. #define UI_TEST_ESC_CHARACTER1(c)             (((UI_character_type)(c)==(UI_character_type)0x1B)?(1):(0))
  604. #define UI_TEST_ESC_CHARACTER(c)              (((*(UI_character_type*)&(c))==(UI_character_type)0x1B)?(1):(0))
  605. #define UI_STRING_LINE_BREAK_CHARACTER1(c)    (((UI_character_type)(c)==(UI_character_type)'n')?(1):(0))
  606. #define UI_STRING_LINE_BREAK_CHARACTER(c)     (((*(UI_character_type*)&(c))==(UI_character_type)'n')?(1):(0))
  607. #define UI_STRING_END_OF_STRING_CHARACTER1(c) (((UI_character_type)(c)==(UI_character_type)'')?(1):(0))
  608. #define UI_STRING_END_OF_STRING_CHARACTER(c)  (((*(UI_character_type*)&(c))==(UI_character_type)'')?(1):(0))
  609. #define UI_STRING_SPACE_CHARACTER1(c)         (((UI_character_type)(c)==(UI_character_type)' ')?(1):(0))
  610. #define UI_STRING_SPACE_CHARACTER(c)          (((*(UI_character_type*)&(c))==(UI_character_type)' ')?(1):(0))
  611. #define UI_TEST_8895_1_CHAR_IN_GSM_DEF_CHAR(c)  (((c)==163 ||(c)==165 || (c)==232 ||(c)==233 ||(c)==249 ||(c)==236 ||(c)==242 ||(c)==199 ||(c)==216 ||(c)==248 ||(c)==197 ||(c)==229 ||(c)==198 ||(c)==230 ||(c)==223 ||(c)==200 ||(c)==164 ||(c)==161 ||(c)==196 ||(c)==214 ||(c)==209 ||(c)==220 ||(c)==167 ||(c)==191 ||(c)==228 ||(c)==246 ||(c)==241 ||(c)==252 ||(c)==224)?(1):(0))
  612. #define UI_TEST_UCS2_CHARACTER(c)            (((c)&0xff80) && ( !UI_TEST_8895_1_CHAR_IN_GSM_DEF_CHAR(c)))?(1):(0)
  613. #define UI_TEST_UCS2_INCREMENT_COUNT(c,count)   if(UI_TEST_UCS2_CHARACTER(c)) ((count)++)
  614. #define UI_TEST_UCS2_DECREMENT_COUNT(c,count)   if(UI_TEST_UCS2_CHARACTER(c) && ((count)>0)) ((count)--)
  615. #define UI_UCS2_STRING_HALF_LENGTH(x)        (((x)&3)?(((x)>>1)+1):((x)>>1))
  616.     /* MTK Terry for Phone Book Name Length */
  617.     // #define UI_UCS2_STRING_HALF_LENGTH_MINUS_ONE(x)      (((x)&3)?(((x)>>1)-1):(((x)>>1)-2))
  618. #define UI_UCS2_STRING_HALF_LENGTH_MINUS_ONE(x) (((x)&3)?(((x)>>1)-1):(((x)>>1)))
  619. #define UI_UCS2_STRING_HALF_LENGTH_MINUS_FORTYFOUR(x) (((x)&3)?(((x)>>1)-87):(((x)>>1)-88))
  620. #define UI_HINDI_CHARACTER_UCS2_RANGE(x)     ( (((U16)(x) > 0x900)&&((U16)(x) < 0x971) || ((U16)(x)>59647 && (U16)(x)<59828))?(1) : (0) )
  621. #define UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH(c,count,allocated_length,length)                   
  622.       {  if(UI_TEST_UCS2_CHARACTER(c))                                                             
  623.          {  if((count)==0) (length)=UI_UCS2_STRING_HALF_LENGTH(allocated_length);                  
  624.             (count)++;                                                                             
  625.          }                                                                                         
  626.       }
  627.     /* Added for n/2-1 Chinese characters input mode   */
  628. #define UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE2(c,count,allocated_length,length)                
  629.       {  if(UI_TEST_UCS2_CHARACTER(c))                                                                
  630.          {  if((count)==0) (length)=UI_UCS2_STRING_HALF_LENGTH_MINUS_ONE(allocated_length);           
  631.             (count)++;                                                                                
  632.          }                                                                                            
  633.       }
  634.     /* Added for n/2-44 Chinese characters input mode  */
  635. #define UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE3(c,count,allocated_length,length)                      
  636.       {  if(UI_TEST_UCS2_CHARACTER(c))                                                                      
  637.          {  if((count)==0) (length)=UI_UCS2_STRING_HALF_LENGTH_MINUS_FORTYFOUR(allocated_length);           
  638.             (count)++;                                                                                      
  639.          }                                                                                                  
  640.       }
  641. #define UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH(c,count,allocated_length,length)                   
  642.       {  if(UI_TEST_UCS2_CHARACTER(c) && ((count)>0))                                              
  643.          {  ((count)--);                                                                           
  644.             if((count)==0) (length)=(allocated_length);                                            
  645.          }                                                                                         
  646.       }
  647. #define UI_TEST_UCS2_CHANGE_COUNT_SET_LENGTH(old_c,c,count,allocated_length,length)                   
  648.       {  UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH(old_c,count,allocated_length,length);                
  649.          UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH(c,count,allocated_length,length);                    
  650.       }
  651.     /* Added for n/2-1 Chinese characters input mode   */
  652. #define UI_TEST_UCS2_CHANGE_COUNT_SET_LENGTH_TYPE2(old_c,c,count,allocated_length,length)             
  653.       {  UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH(old_c,count,allocated_length,length);                
  654.          UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE2(c,count,allocated_length,length);              
  655.       }
  656.     /* Added for n/2-44 Chinese characters input mode  */
  657. #define UI_TEST_UCS2_CHANGE_COUNT_SET_LENGTH_TYPE3(old_c,c,count,allocated_length,length)             
  658.       {  UI_TEST_UCS2_DECREMENT_COUNT_SET_LENGTH(old_c,count,allocated_length,length);                
  659.          UI_TEST_UCS2_INCREMENT_COUNT_SET_LENGTH_TYPE3(c,count,allocated_length,length);              
  660.       }
  661. #define UI_TEST_UCS2_COUNT_SET_LENGTH(count,allocated_length,length)                            
  662.       {  if((count)>0) (length)=UI_UCS2_STRING_HALF_LENGTH(allocated_length);                   
  663.       }
  664.     /* Added for n/2-1 Chinese characters input mode   */
  665. #define UI_TEST_UCS2_COUNT_SET_LENGTH_TYPE2(count,allocated_length,length)                            
  666.       {  if((count)>0) (length)=UI_UCS2_STRING_HALF_LENGTH_MINUS_ONE(allocated_length);               
  667.       }
  668.     /* Added for n/2-44 Chinese characters input mode  */
  669. #define UI_TEST_UCS2_COUNT_SET_LENGTH_TYPE3(count,allocated_length,length)                                  
  670.       {  if((count)>0) (length)=UI_UCS2_STRING_HALF_LENGTH_MINUS_FORTYFOUR(allocated_length);               
  671.       }
  672.     extern void UI_disable_alignment_timers(void);
  673.     extern void UI_enable_alignment_timers(void);
  674.     /* Page break character equivalent needs to be added  */
  675.     /* Euro character equivalent = 0xA2             */
  676. #define UI_TEST_GSM_EXTENDED(c)     
  677. (     (c==0xA2)                     
  678.    || (c=='^')                      
  679.    || (c=='{')                      
  680.    || (c=='}')                      
  681.    || (c=='\')                     
  682.    || (c=='[')                      
  683.    || (c=='~')                      
  684.    || (c==']')                      
  685.    || (c=='|')                      
  686. )                                   
  687.     /* 
  688.      * Painter Component: encapsulates various painting operations with common interface
  689.      */
  690.     /* Custom-defined callback type to draw a rectangle region 
  691.        (x, y) is the left-top corner of drawing
  692.        (clip_x1, clip_y1, clip_x2, clip_y2) is the clipping area. */
  693.     typedef void (*gui_util_painter_callback_type)(
  694.                     S32 x, 
  695.                     S32 y, 
  696.                     S32 clip_x1, 
  697.                     S32 clip_y1, 
  698.                     S32 clip_x2, 
  699.                     S32 clip_y2);
  700.     /* Types of painting operations */
  701.     typedef enum 
  702.     {
  703.         /* Do nothing */
  704.         GUI_UTIL_PAINTER_TYPE_EMPTY = 0,
  705.         /* Fill transparent color */
  706.         GUI_UTIL_PAINTER_TYPE_TRANSPARENT,
  707.         /* Draw an image */
  708.         GUI_UTIL_PAINTER_TYPE_IMAGEID,
  709.         /* Call a custom-defined callback routine */
  710.         GUI_UTIL_PAINTER_TYPE_CALLBACK,
  711.         /* Use a filler */
  712.         GUI_UTIL_PAINTER_TYPE_FILLER,
  713.         /* Last dummy enum type */
  714.         GUI_UTIL_PAINTER_TYPE_END_OF_ENUM
  715.     } gui_util_painter_type_enum;
  716.     /* Painter UI component */
  717.     typedef struct
  718.     {
  719.         gui_util_painter_type_enum type;
  720.         union
  721.         {
  722.             MMI_ID_TYPE imageid;
  723.             gui_util_painter_callback_type callback;
  724.             const UI_filled_area *filler;
  725.         } _u;
  726.     } gui_util_painter_struct;
  727.     extern void gui_util_painter_create_empty(gui_util_painter_struct *p);
  728.     extern void gui_util_painter_create_transparent(gui_util_painter_struct *p);
  729.     extern void gui_util_painter_create_imageid(
  730.                     gui_util_painter_struct *p, 
  731.                     MMI_ID_TYPE imageid);
  732.     extern void gui_util_painter_create_callback(
  733.                     gui_util_painter_struct *p, 
  734.                     gui_util_painter_callback_type callback);
  735.     extern void gui_util_painter_create_filler(
  736.                     gui_util_painter_struct *p, 
  737.                     const UI_filled_area *filler);
  738.     extern void gui_util_painter_show_clipped(
  739.         const gui_util_painter_struct *p, 
  740.         S32 x, 
  741.         S32 y, 
  742.         S32 clip_x1, 
  743.         S32 clip_y1, 
  744.         S32 clip_x2, 
  745.         S32 clip_y2);
  746.         
  747.     extern void gui_util_painter_show(const gui_util_painter_struct *p, S32 x1, S32 y1, S32 x2, S32 y2);
  748.     /* 
  749.      * Clean-up of GUI components 
  750.      * To avoid clean-up each UI component explicitly in WGUI/draw manager/widget, 
  751.      * general cleanup mechanism is provided here.
  752.      */
  753. #define GUI_MAX_CLEANUP_HOOK  16
  754.     typedef void (*gui_cleanup_hook_hdlr) (void);
  755.     extern void gui_add_cleanup_hook(gui_cleanup_hook_hdlr fp);
  756.     extern void gui_remove_cleanup_hook(gui_cleanup_hook_hdlr fp);
  757.     extern void gui_cleanup(void);
  758.     /* PMT VIKAS START 20051209 */
  759.     /* Pre cleanup functions for GUI components */
  760.     typedef void (*gui_pre_cleanup_hook_hdlr) (void);
  761.     extern void gui_add_pre_cleanup_hook(gui_cleanup_hook_hdlr fp);
  762.     extern void gui_remove_pre_cleanup_hook(gui_cleanup_hook_hdlr fp);
  763.     extern void gui_pre_cleanup(void);
  764.     /* PMT VIKAS END 20051209 */
  765.     /* Touch Panel Events */
  766.     typedef enum
  767.     {
  768.         GUI_PEN_EVENT_PARAM_VOID,
  769.         GUI_PEN_EVENT_PARAM_INTEGER,
  770.         GUI_PEN_EVENT_PARAM_INTEGER2,
  771.         GUI_PEN_EVENT_PARAM_INTEGER3,
  772.         GUI_PEN_EVENT_PARAM_POINTER,
  773.         GUI_PEN_EVENT_PARAM_POINTER_INTEGER,
  774.         GUI_PEN_EVENT_PARAM_POINTER_INTEGER2
  775.     } gui_pen_event_param_enum;
  776.     typedef struct _mmi_gui_pen_event_param_struct
  777.     {
  778.         gui_pen_event_param_enum type;
  779.         union
  780.         {
  781.             int i;
  782.             void *p;
  783.         } _u;
  784.         int i2;
  785.         int i3;
  786.     } gui_pen_event_param_struct;
  787. #define GUI_PEN_EVENT_PARAM_SET_VOID(_s) do {_s->type = GUI_PEN_EVENT_PARAM_VOID;} while (0)
  788. #define GUI_PEN_EVENT_PARAM_SET_INTEGER(_s, _i) do {_s->type = GUI_PEN_EVENT_PARAM_INTEGER;  
  789.                                                    _s->_u.i = _i;                            
  790.                                                    } while (0)
  791. #define GUI_PEN_EVENT_PARAM_SET_INTEGER2(_s, _i, _i2) do {_s->type = GUI_PEN_EVENT_PARAM_INTEGER2; 
  792.                                                    _s->_u.i = _i;                                  
  793.                                                    _s->i2 = _i2;                                   
  794.                                                    } while (0)
  795. #define GUI_PEN_EVENT_PARAM_SET_INTEGER3(_s, _i, _i2, _i3) do {_s->type = GUI_PEN_EVENT_PARAM_INTEGER3;  
  796.                                                    _s->_u.i = _i;                                        
  797.                                                    _s->i2 = _i2;                                         
  798.                                                    _s->i3 = _i3;                                         
  799.                                                    } while (0)
  800. #define GUI_PEN_EVENT_PARAM_SET_POINTER(_s, _p) do {_s->type = GUI_PEN_EVENT_PARAM_POINTER;  
  801.                                                    _s->_u.p = _p;                            
  802.                                                    } while (0)
  803. #define GUI_PEN_EVENT_PARAM_SET_POINTER_INTEGER(_s, _p, _i2) do {_s->type = GUI_PEN_EVENT_PARAM_POINTER_INTEGER;  
  804.                                                    _s->_u.p = _p;                                                 
  805.                                                    _s->i2 = _i2;                                                  
  806.                                                    } while (0)
  807. #define GUI_PEN_EVENT_PARAM_SET_POINTER_INTEGER2(_s, _p, _i2, _i3) do {_s->type = GUI_PEN_EVENT_PARAM_POINTER_INTEGER2; 
  808.                                                    _s->_u.p = _p;                                                       
  809.                                                    _s->i2 = _i2;                                                        
  810.                                                    _s->i3 = _i3;                                                        
  811.                                                    } while (0)
  812. #ifdef __cplusplus
  813. }
  814. #endif 
  815. #endif /* __GUI_H__ */