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

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_custom_menus.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Customized menu - UI component
  48.  *
  49.  *   [3D circular menu]
  50.  *
  51.  * Author:
  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.  *------------------------------------------------------------------------------
  70.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  71.  *============================================================================
  72.  ****************************************************************************/
  73. /**
  74.  * Copyright Notice
  75.  * ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  76.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  77.  *  (It is illegal to remove this copyright notice from this software or any
  78.  *  portion of it)
  79.  */
  80. /**********************************************************************************
  81.    Filename:      gui_custom_menus.c
  82.    Author:        manju
  83.    Date Created:  Mar-07-2003
  84.    Contains:      PixTel UI routines for custom menus
  85. **********************************************************************************/
  86. #include "MMI_Features.h"
  87. #include "gui_custom_menus.h"
  88. #include "wgui.h"
  89. #include "MainMenuType.h"
  90. #include "CustMenuRes.h"
  91. #include "CustDataRes.h"
  92. #include "MainMenuDef.h"
  93. #if((ENABLE_CIRCULAR_3D_MENU) || (ENABLE_ROTATE_MENU))
  94. extern BOOL r2lMMIFlag;
  95. /* UI 3D circular menu functions */
  96. UI_3D_circular_menu_theme *current_3D_circular_menu_theme = NULL;
  97. /*****************************************************************************
  98.  * FUNCTION
  99.  *  gui_set_3D_circular_menu_current_theme
  100.  * DESCRIPTION
  101.  *  Sets the current theme for the 3D circular menu object
  102.  * PARAMETERS
  103.  *  m       [IN]        Is the 3D circular menu object
  104.  * RETURNS
  105.  *  void
  106.  *****************************************************************************/
  107. void gui_set_3D_circular_menu_current_theme(UI_3D_circular_menu *m)
  108. {   /* set bkg theme color of 3D circular meneu equl to current theme */
  109.     /*----------------------------------------------------------------*/
  110.     /* Local Variables                                                */
  111.     /*----------------------------------------------------------------*/
  112.     /*----------------------------------------------------------------*/
  113.     /* Code Body                                                      */
  114.     /*----------------------------------------------------------------*/
  115.     m->bg_filler = current_3D_circular_menu_theme->bg_filler;
  116.     /* set text border  color of 3D circular meneu equl to current theme */
  117.     m->text_border = current_3D_circular_menu_theme->text_border;
  118.     /* set text   color of 3D circular meneu equl to current theme */
  119.     m->text_color = current_3D_circular_menu_theme->text_color;
  120.     /* set text font of 3D circular meneu equl to current theme */
  121.     m->text_font = current_3D_circular_menu_theme->text_font;
  122.     m->flags |= current_3D_circular_menu_theme->flags;
  123. }
  124. /*****************************************************************************
  125.  * FUNCTION
  126.  *  gui_set_3D_circular_menu_theme
  127.  * DESCRIPTION
  128.  *  Sets the given theme for the 3D circular menu object
  129.  * PARAMETERS
  130.  *  m       [IN]        Is the 3D circular menu object
  131.  *  t       [IN]        Is the 3D circular menu theme
  132.  * RETURNS
  133.  *  void
  134.  *****************************************************************************/
  135. void gui_set_3D_circular_menu_theme(UI_3D_circular_menu *m, UI_3D_circular_menu_theme *t)
  136. {
  137.     /*----------------------------------------------------------------*/
  138.     /* Local Variables                                                */
  139.     /*----------------------------------------------------------------*/
  140.     /*----------------------------------------------------------------*/
  141.     /* Code Body                                                      */
  142.     /*----------------------------------------------------------------*/
  143.     m->bg_filler = t->bg_filler;
  144.     m->text_border = t->text_border;
  145.     m->text_color = t->text_color;
  146.     m->text_font = t->text_font;
  147.     m->flags |= t->flags;
  148. }
  149. /*****************************************************************************
  150.  * FUNCTION
  151.  *  gui_create_3D_circular_menu
  152.  * DESCRIPTION
  153.  *  Creates a 3D circular menu object
  154.  *  
  155.  *  n_displayed_items are the number of items that are displayed
  156.  *  (Number of 3D objects displayed in the menu, including
  157.  *  the two  off-screen objects)
  158.  *  ie, n_displayed_items=Actual number of items being displayed + 2
  159.  *  
  160.  *  item_positions is a list of co-ordinates of the 3D objects
  161.  *  including the transition co-ordinates in the following format:
  162.  *  item_positions[0] = fixed co-ordinates of object 0
  163.  *  item_positions[1] = transition 1 co-ordinates of object 0
  164.  *  item_positions[2] = transition 2 co-ordinates of object 0
  165.  *  item_positions[3] = fixed co-ordinates of object 1
  166.  *  item_positions[4] = transition 1 co-ordinates of object 1
  167.  *  ...
  168.  *  This list has (n_displayed_items * 3) number of items.
  169.  *  
  170.  *  n_item_images  are the number of images per item
  171.  *  (For example: Large frame, middle frame and small frame = 3 n_item_images)
  172.  *  
  173.  *  item_images    is an array of images in the following format:
  174.  *  item_images[0]   = item 0: multi-frame image (n_item_images)
  175.  *  item_images[1]   = item 1: multi-frame image (n_item_images)
  176.  *  ...
  177.  *  item_images[n_items-1]   = (item n_items-1), multi-frame image (n_item_images)
  178.  *  
  179.  *  common_images  is an array of images in the following format:
  180.  *  n = n_displayed_items - n_item_images - 2
  181.  *  Array:         image 0,    (Largest)
  182.  *  image 1,
  183.  *  ...
  184.  *  image (n-1)    (Smallest)
  185.  * PARAMETERS
  186.  *  m                       [IN]        Is the 3D circular menu object
  187.  *  x                       [IN]        Are the co-ordinates
  188.  *  y                       [IN]        Are the co-ordinates
  189.  *  width                   [IN]        Are the dimensions
  190.  *  height                  [IN]        Are the dimensions
  191.  *  n_displayed_items       [IN]        
  192.  *  item_positions          [?]         
  193.  *  n_item_images           [IN]        
  194.  *  item_images             [?]         
  195.  *  common_images           [?]         
  196.  * RETURNS
  197.  *  void
  198.  *****************************************************************************/
  199. extern S32 MMI_current_menu_type;
  200. void gui_create_3D_circular_menu(
  201.         UI_3D_circular_menu *m,
  202.         S32 x,
  203.         S32 y,
  204.         S32 width,
  205.         S32 height,
  206.         S32 n_displayed_items,
  207.         CM3D_item_position *item_positions,
  208.         S32 n_item_images,
  209.         PU8 *item_images,
  210.         PU8 *common_images)
  211. {
  212.     /*----------------------------------------------------------------*/
  213.     /* Local Variables                                                */
  214.     /*----------------------------------------------------------------*/
  215.     /*----------------------------------------------------------------*/
  216.     /* Code Body                                                      */
  217.     /*----------------------------------------------------------------*/
  218.     m->flags = 0;
  219.     m->x = x;                                   /* start x postion of 3d circular menu */
  220.     m->y = y;                                   /* start y postion of 3d circular menu */
  221.     m->width = width;                           /* width of 3D circular menu */
  222.     m->height = height;                         /* heighjt of 3D circular meneu */
  223.     m->n_items = 0;
  224.     m->n_displayed_items = n_displayed_items;   /* number of menu items */
  225.     m->n_item_images = n_item_images;
  226.     m->common_images = common_images;
  227.     m->item_images = item_images;
  228.     m->item_positions = item_positions;
  229.     m->highlighted_item = 0;
  230.     /* set 3d circular menu theme */
  231.     gui_set_3D_circular_menu_current_theme(m);
  232.     /* set hihlighted fun to dunmmy func */
  233.     m->item_highlighted = UI_dummy_function_s32;
  234.     /* set unhighlighted fun to dunmmy func */
  235.     m->item_unhighlighted = UI_dummy_function_s32;
  236. }
  237. /*****************************************************************************
  238.  * FUNCTION
  239.  *  gui_set_3D_circular_menu_items
  240.  * DESCRIPTION
  241.  *  Sets the item strings
  242.  * PARAMETERS
  243.  *  m           [IN]        Is the 3D circular menu object
  244.  *  n_items     [IN]        Is the number of items in the menu
  245.  *  items       [IN]        Is an array of strings. Each string is assigned to one item.
  246.  * RETURNS
  247.  *  void
  248.  *****************************************************************************/
  249. void gui_set_3D_circular_menu_items(UI_3D_circular_menu *m, S32 n_items, UI_string_type *items)
  250. {
  251.     /*----------------------------------------------------------------*/
  252.     /* Local Variables                                                */
  253.     /*----------------------------------------------------------------*/
  254.     /*----------------------------------------------------------------*/
  255.     /* Code Body                                                      */
  256.     /*----------------------------------------------------------------*/
  257.     m->n_items = n_items;
  258.     m->item_strings = items;
  259. }
  260. /*****************************************************************************
  261.  * FUNCTION
  262.  *  gui_resize_3D_circular_menu
  263.  * DESCRIPTION
  264.  *  Resizes a 3D circular menu object
  265.  * PARAMETERS
  266.  *  m           [IN]        Is the 3D circular menu object
  267.  *  width       [IN]        Are the new dimensions
  268.  *  height      [IN]        Are the new dimensions
  269.  * RETURNS
  270.  *  void
  271.  *****************************************************************************/
  272. void gui_resize_3D_circular_menu(UI_3D_circular_menu *m, S32 width, S32 height)
  273. {
  274.     /*----------------------------------------------------------------*/
  275.     /* Local Variables                                                */
  276.     /*----------------------------------------------------------------*/
  277.     /*----------------------------------------------------------------*/
  278.     /* Code Body                                                      */
  279.     /*----------------------------------------------------------------*/
  280.     m->width = width;
  281.     m->height = height;
  282. }
  283. /*****************************************************************************
  284.  * FUNCTION
  285.  *  gui_move_3D_circular_menu
  286.  * DESCRIPTION
  287.  *  Moves a 3D circular menu object
  288.  * PARAMETERS
  289.  *  m       [IN]        Is the 3D circular menu object
  290.  *  x       [IN]        Are the new co-ordinates
  291.  *  y       [IN]        Are the new co-ordinates
  292.  * RETURNS
  293.  *  void
  294.  *****************************************************************************/
  295. void gui_move_3D_circular_menu(UI_3D_circular_menu *m, S32 x, S32 y)
  296. {
  297.     /*----------------------------------------------------------------*/
  298.     /* Local Variables                                                */
  299.     /*----------------------------------------------------------------*/
  300.     /*----------------------------------------------------------------*/
  301.     /* Code Body                                                      */
  302.     /*----------------------------------------------------------------*/
  303.     m->x = x;
  304.     m->y = y;
  305. }
  306. /*****************************************************************************
  307.  * FUNCTION
  308.  *  gui_3D_circular_menu_goto_next_item
  309.  * DESCRIPTION
  310.  *  Highlights the next item
  311.  * PARAMETERS
  312.  *  m       [IN]        Is the 3D circular menu object
  313.  * RETURNS
  314.  *  void
  315.  *****************************************************************************/
  316. void gui_3D_circular_menu_goto_next_item(UI_3D_circular_menu *m)
  317. {
  318.     /*----------------------------------------------------------------*/
  319.     /* Local Variables                                                */
  320.     /*----------------------------------------------------------------*/
  321.     S32 old_highlighted_item = m->highlighted_item; /* store current highlight index */
  322.     /*----------------------------------------------------------------*/
  323.     /* Code Body                                                      */
  324.     /*----------------------------------------------------------------*/
  325.     if (m->highlighted_item == (m->n_items - 1))
  326.     {
  327.         m->highlighted_item = 0;
  328.     }
  329.     else
  330.     {
  331.         m->highlighted_item++;
  332.     }
  333.     /* call unhighligted func */
  334.     m->item_unhighlighted(old_highlighted_item);
  335.     /* call highlighted func */
  336.     m->item_highlighted(m->highlighted_item);
  337. }
  338. /*****************************************************************************
  339.  * FUNCTION
  340.  *  gui_3D_circular_menu_goto_previous_item
  341.  * DESCRIPTION
  342.  *  Highlights the previous item
  343.  * PARAMETERS
  344.  *  m       [IN]        Is the 3D circular menu object
  345.  * RETURNS
  346.  *  void
  347.  *****************************************************************************/
  348. void gui_3D_circular_menu_goto_previous_item(UI_3D_circular_menu *m)
  349. {
  350.     /*----------------------------------------------------------------*/
  351.     /* Local Variables                                                */
  352.     /*----------------------------------------------------------------*/
  353.     S32 old_highlighted_item = m->highlighted_item;
  354.     /*----------------------------------------------------------------*/
  355.     /* Code Body                                                      */
  356.     /*----------------------------------------------------------------*/
  357.     if (m->highlighted_item == 0)
  358.     {
  359.         m->highlighted_item = m->n_items - 1;
  360.     }
  361.     else
  362.     {
  363.         m->highlighted_item--;
  364.     }
  365.     /* call unhighlghted func */
  366.     m->item_unhighlighted(old_highlighted_item);
  367.     /* call highlighted fun c */
  368.     m->item_highlighted(m->highlighted_item);
  369. }
  370. /*****************************************************************************
  371.  * FUNCTION
  372.  *  gui_3D_circular_menu_goto_item
  373.  * DESCRIPTION
  374.  *  Highlights a particular item
  375.  * PARAMETERS
  376.  *  m       [IN]        Is the 3D circular menu object
  377.  *  i       [IN]        Is the zero based index of the item to be highlighted
  378.  * RETURNS
  379.  *  void
  380.  *****************************************************************************/
  381. void gui_3D_circular_menu_goto_item(UI_3D_circular_menu *m, S32 i)
  382. {
  383.     /*----------------------------------------------------------------*/
  384.     /* Local Variables                                                */
  385.     /*----------------------------------------------------------------*/
  386.     S32 old_highlighted_item = m->highlighted_item;
  387.     /*----------------------------------------------------------------*/
  388.     /* Code Body                                                      */
  389.     /*----------------------------------------------------------------*/
  390.     if (i >= 0 && i <= (m->n_items - 1))
  391.     {
  392.         m->highlighted_item = i;
  393.     }
  394.     /* call unhighlighted func */
  395.     m->item_unhighlighted(old_highlighted_item);
  396.     /* call highlighted func */
  397.     if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  398.     {
  399.         m->item_highlighted(m->highlighted_item);
  400.     }
  401.     else
  402.     {
  403.         if (m->highlighted_item == m->n_items - 1)
  404.         {
  405.             m->item_highlighted(0);
  406.         }
  407.         else
  408.         {
  409.             m->item_highlighted(m->highlighted_item + 1);
  410.         }
  411.     }
  412. }
  413. #include "kal_non_specific_general_types.h"
  414. #include "lcd_sw.h"
  415. /*
  416.  * #include "lcd_if.h"
  417.  * #include "gdi_datatype.h"
  418.  * #include "gdi_layer.h"
  419.  */
  420. #include "gdi_include.h"
  421. extern gdi_handle wgui_layer_1;
  422. extern gdi_handle wgui_base_layer;
  423. /*****************************************************************************
  424.  * FUNCTION
  425.  *  gui_show_3D_circular_menu
  426.  * DESCRIPTION
  427.  *  Displays the 3D circular menu object
  428.  * PARAMETERS
  429.  *  m       [IN]        Is the 3D circular menu object
  430.  * RETURNS
  431.  *  void
  432.  *****************************************************************************/
  433. void gui_show_3D_circular_menu(UI_3D_circular_menu *m)
  434. {
  435.     /*----------------------------------------------------------------*/
  436.     /* Local Variables                                                */
  437.     /*----------------------------------------------------------------*/
  438.     S32 x1, y1, x2, y2;
  439.     S32 cx1, cy1, cx2, cy2;
  440.     S32 tx1, ty1, tx2, ty2;
  441.     S32 i, j, n, h, tx, ty, tw, th;
  442.     S32 x, y, nr;
  443.     S32 ni = m->n_item_images;
  444.     U32 flags = m->flags;
  445.     UI_string_type text;
  446.     /*----------------------------------------------------------------*/
  447.     /* Code Body                                                      */
  448.     /*----------------------------------------------------------------*/
  449.     gui_get_clip(&cx1, &cy1, &cx2, &cy2);
  450.     gui_get_text_clip(&tx1, &ty1, &tx2, &ty2);
  451.     x1 = m->x;                  /* start x of 3d circular menu */
  452.     y1 = m->y;                  /* start y position of 3d circular menu */
  453.     x2 = x1 + m->width - 1;     /* end x position of 3d circular menu */
  454.     y2 = y1 + m->height - 1;    /* end y position of 3d circular menu */
  455.     ty = ((y2 - y1) >> 1) + y1;
  456.     gui_set_clip(x1, y1, x2, y2);
  457.     gui_set_text_clip(x1, y1, x2, y2);
  458.     if (!(m->flags & UI_3D_CIRCULAR_MENU_DISABLE_BACKGROUND))
  459.     {   /* gui_draw_filled_area(x1,y1,x2,y2,m->bg_filler);//filled arae with bkg color */
  460.         if ((gui_is_entry_new_screen() == MMI_TRUE) && (gui_get_multilayer_mask() & UI_MUL_BKG_MAINMENU))
  461.         {
  462.             /* 102804 Calvin added for fixed backgroud; originally, only else part */
  463.         #if (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) /* 071705 Calvin modified */
  464.             /* store the current frame number of animation wallppaer */
  465.             extern S32 cat33_frame_number;
  466.             /* store the image id of wallpaper */
  467.             extern U16 idle_screen_wallpaper_ID;
  468.             extern S8 *idle_screen_wallpaper_name;
  469.             /* store the x position of wallpaer of idle screen */
  470.             extern S32 cat33_image_x;
  471.             /* store the y position of wallpaer of idle screen */
  472.             extern S32 cat33_image_y;
  473.         #else /* (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  474.             S32 frame_number = 0;
  475.             PU8 bg_img = NULL;  /* 102804 Calvin added */
  476.         #endif /* (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  477.             gui_set_entry_new_screen(MMI_FALSE);
  478.             /* Enable multilayer */
  479.             gdi_layer_multi_layer_enable();
  480.             gdi_layer_get_base_handle(&wgui_base_layer);
  481.             /* 111204 Calvin modified */
  482.             /* gui_layer_transparent(wgui_base_layer, UI_SUBMENU_OPACITY_BASED_LAYER, x1,y1,x2,y2+1); */
  483.             gui_layer_transparent(wgui_base_layer, UI_SUBMENU_OPACITY_BASED_LAYER, x1, y1, x2, y2);
  484.             /* Create multilayer buffer */
  485.             if (wgui_layer_1 == GDI_LAYER_EMPTY_HANDLE)
  486.             {
  487.                 dm_create_layer(0, 0, UI_device_width, UI_device_height, &wgui_layer_1, DM_LAYER_ACTIVE_TOP);
  488.             }
  489.         #if (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) /* 071705 Calvin modified */
  490.             if (idle_screen_wallpaper_ID != 0)
  491.             {
  492.                 gui_layer_show_animation_ID(
  493.                     wgui_layer_1,
  494.                     UI_SUBMENU_OPACITY_LAYER1,
  495.                     &cat33_frame_number,
  496.                     idle_screen_wallpaper_ID,
  497.                     x1,
  498.                     y1,
  499.                     x2,
  500.                     y2,
  501.                     cat33_image_x,
  502.                     cat33_image_y);
  503.             }
  504.             else
  505.             {
  506.                 gui_layer_show_animation_file(
  507.                     wgui_layer_1,
  508.                     UI_SUBMENU_OPACITY_LAYER1,
  509.                     &cat33_frame_number,
  510.                     idle_screen_wallpaper_name,
  511.                     x1,
  512.                     y1,
  513.                     x2,
  514.                     y2,
  515.                     cat33_image_x,
  516.                     cat33_image_y);
  517.             }
  518.         #else /* (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  519.             bg_img = (PU8) GetImage((U16) IMG_MAIN_MENU_CIRCULAR_BG);
  520.             if (bg_img != NULL)
  521.             {
  522.                 gui_layer_show_animation_ID(
  523.                     wgui_layer_1,
  524.                     UI_SUBMENU_OPACITY_BASED_LAYER,
  525.                     &frame_number,
  526.                     IMG_MAIN_MENU_CIRCULAR_BG,
  527.                     x1,
  528.                     y1,
  529.                     x2,
  530.                     y2,
  531.                     0,
  532.                     0);
  533.             }
  534.             else
  535.             {
  536.             #ifdef __GDI_MEMORY_PROFILE_2__
  537.                 GDI_HANDLE gdi_base_layer_hdlr;
  538.                 gdi_layer_set_active(wgui_layer_1);
  539.                 gdi_layer_lock_frame_buffer();
  540.                 gdi_layer_push_clip();
  541.                 gdi_layer_set_clip(x1, y1, x2, y2);
  542.                 gdi_layer_set_opacity(TRUE, UI_SUBMENU_OPACITY_BASED_LAYER);
  543.                 gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_WHITE);
  544.                 gdi_layer_pop_clip();
  545.                 gdi_layer_unlock_frame_buffer();
  546.                 gdi_layer_restore_base_active();
  547.                 gdi_layer_get_base_handle(&gdi_base_layer_hdlr);
  548.                 gdi_layer_set_blt_layer(wgui_layer_1, gdi_base_layer_hdlr, 0, 0);
  549.                 gdi_layer_blt_previous(x1, y1, x2, y2);
  550.             #endif /* __GDI_MEMORY_PROFILE_2__ */ 
  551.             }
  552.         #endif /* (defined(__MMI_SUBMENU_USE_MM_IMAGE__) || (!defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) && !defined(__MMI_MAINMENU_ROTATE_SUPPORT__)) || !defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  553.             gdi_layer_set_active(wgui_base_layer);
  554.             gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_TRANSPARENT);
  555.         }
  556.         else if (gui_get_multilayer_mask() & UI_MUL_BKG_MAINMENU)
  557.         {
  558.             gdi_layer_get_base_handle(&wgui_base_layer);
  559.             /* 111204 Calvin modified */
  560.             /* gui_layer_transparent(wgui_base_layer, UI_SUBMENU_OPACITY_BASED_LAYER, x1,y1,x2,y2+1); */
  561.             gui_layer_transparent(wgui_base_layer, UI_SUBMENU_OPACITY_BASED_LAYER, x1, y1, x2, y2);
  562.             gdi_layer_set_active(wgui_base_layer);
  563.             gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_TRANSPARENT);
  564.         }
  565.         else
  566.         {
  567.         #if ((defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) || defined (__MMI_MAINMENU_ROTATE_SUPPORT__)) && defined(__MMI_MAINMENU_STYLE_CHANGE_EN__))    /* 071705 Calvin modified */
  568.             PU8 bg_img = NULL;  /* 102804 Calvin added */
  569.             bg_img = (PU8) GetImage((U16) IMG_MAIN_MENU_CIRCULAR_BG);
  570.             if (bg_img != NULL)
  571.             {
  572.                 gui_show_image(x1, y1, bg_img);
  573.             }
  574.             else
  575.             {
  576.                 gui_set_clip(x1, y1, x2, y2);
  577.                 gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_WHITE);
  578.                 /* gui_draw_filled_area(x1, y1, x2, y2,m->bg_filler); */
  579.             }
  580.         #else /* ((defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) || defined (__MMI_MAINMENU_ROTATE_SUPPORT__)) && defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  581.             gui_set_clip(x1, y1, x2, y2);
  582.             gdi_draw_solid_rect(x1, y1, x2, y2, GDI_COLOR_WHITE);
  583.         #endif /* ((defined(__MMI_MAINMENU_CIRCULAR_SUPPORT__) || defined (__MMI_MAINMENU_ROTATE_SUPPORT__)) && defined(__MMI_MAINMENU_STYLE_CHANGE_EN__)) */ 
  584.         }
  585.         /* Calvin end */
  586.     }
  587.     if (m->n_items > 0)
  588.     {                                       /* nr=m->n_displayed_items-ni-2-2; */
  589.         /* 092304 MTK Calvin modified */
  590.         nr = m->n_displayed_items - 2 - ni; /* -2 because of 2 off-screen */
  591.         /* MTK Calvin end */
  592.         /* nr = WGUI_CM3D_N_COMMON_IMAGES; */
  593.         if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L2) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R1))
  594.         {
  595.             j = (m->n_displayed_items - 2) * 3 + 2;
  596.         }
  597.         else if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R2))
  598.         {
  599.             j = (m->n_displayed_items - 2) * 3 + 1;
  600.         }
  601.         else
  602.         {
  603.             j = (m->n_displayed_items - 2) * 3 + 0;
  604.         }
  605.         if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  606.         {
  607.             for (i = (nr - 1); i >= 0; i--)
  608.             {
  609.                 x = m->item_positions[j].x + x1;
  610.                 y = m->item_positions[j].y + y1;
  611.                 /* show transaparent imag e */
  612.                 gui_show_transparent_image(x, y, m->common_images[i], 0);
  613.                 j -= ni;
  614.             }
  615.         }
  616.         else    /* For 3D Rotate Menu */
  617.         {
  618.             for (i = (nr - 1); i >= 0; i--)
  619.             {
  620.                 j -= ni;
  621.             }
  622.         }
  623.         n = ni;
  624.         h = (m->highlighted_item + n - 1) % (m->n_items);
  625.         if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_L2))
  626.         {
  627.             if (h == (m->n_items - 1))
  628.             {
  629.                 h = 0;
  630.             }
  631.             else
  632.             {
  633.                 h++;
  634.             }
  635.         }
  636.         if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L2) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R1))
  637.         {
  638.             x = m->item_positions[j].x + x1;
  639.             y = m->item_positions[j].y + y1;
  640.             /* show transaparent animated  image frame */
  641.             if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  642.             {
  643.                 gui_show_transparent_animated_image_frame(x, y, m->item_images[h], 0, (S16) (0));
  644.             }
  645.             if (h == 0)
  646.             {
  647.                 h = m->n_items - 1;
  648.             }
  649.             else
  650.             {
  651.                 h--;
  652.             }
  653.             j -= ni;
  654.         }
  655.         if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  656.         {
  657.             /* for(i=(ni-1);i>=0;i--) */
  658.             for (i = 0; i < ni; i++)
  659.             {
  660.                 x = m->item_positions[j].x + x1;
  661.                 y = m->item_positions[j].y + y1;
  662.                 /* show transaparent animated  image frame */
  663.                 gui_show_transparent_animated_image_frame(x, y, m->item_images[h], 0, (S16) i);
  664.                 if (h == 0)
  665.                 {
  666.                     h = m->n_items - 1;
  667.                 }
  668.                 else
  669.                 {
  670.                     h--;
  671.                 }
  672.                 j -= ni;
  673.             }
  674.             if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R2))
  675.             {
  676.                 x = m->item_positions[j].x + x1;
  677.                 y = m->item_positions[j].y + y1;
  678.                 /* show transaparent image */
  679.                 gui_show_transparent_image(x, y, m->item_images[h], 0);
  680.             }
  681.         }
  682.         else
  683.         {
  684.             for (i = 0; i < ni; i++)
  685.             {
  686.                 x = m->item_positions[j].x + x1;
  687.                 y = m->item_positions[j].y + y1;
  688.                 /* show transaparent animated  image frame */
  689.                 if (i == 1)
  690.                 {
  691.                     if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R2) ||
  692.                         (flags & UI_3D_CIRCULAR_MENU_TRANSITION_L2) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R1))
  693.                     {
  694.                         gui_show_transparent_animated_image_frame(x, y, m->item_images[h], 0, (S16) 1);
  695.                     }
  696.                     else
  697.                     {
  698.                         gui_show_transparent_animated_image_frame(x, y, m->item_images[h], 0, (S16) 2);
  699.                     }
  700.                 }
  701.                 else
  702.                 {
  703.                     gui_show_transparent_animated_image_frame(x, y, m->item_images[h], 0, (S16) 0);
  704.                 }
  705.                 if (h == 0)
  706.                 {
  707.                     h = m->n_items - 1;
  708.                 }
  709.                 else
  710.                 {
  711.                     h--;
  712.                 }
  713.                 j -= ni;
  714.             }
  715.             if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R2))
  716.             {
  717.                 x = m->item_positions[j].x + x1;
  718.                 y = m->item_positions[j].y + y1;
  719.                 /* show transaparent image */
  720.                 if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  721.                 {
  722.                     gui_show_transparent_image(x, y, m->item_images[h], 0);
  723.                 }
  724.             }
  725.         }
  726.         if (m->item_strings != NULL)
  727.         {
  728.             if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  729.             {
  730.                 text = m->item_strings[(m->highlighted_item)];
  731.             }
  732.             else
  733.             {
  734.                 if (m->highlighted_item == (m->n_items - 1))
  735.                 {
  736.                     text = m->item_strings[0];  /* change the text here PDG1 KM */
  737.                 }
  738.                 else
  739.                 {
  740.                     text = m->item_strings[(m->highlighted_item) + 1];
  741.                 }
  742.             }
  743.             gui_set_font(m->text_font);
  744.             /* get string width */
  745.             tw = gui_get_string_width(text);
  746.             /* get character height */
  747.             th = gui_get_character_height();
  748.             if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  749.             {
  750.                 tx = x2 - tw - 2;
  751.                 ty -= th;
  752.             }
  753.             else
  754.             {
  755.             #ifdef ROTATE_HORI      /* this is center allign */
  756.                 if (tw < UI_device_width)
  757.                 {
  758.                     tx = (UI_device_width - tw) / 2;
  759.                 }
  760.                 else
  761.                 {
  762.                     tx = 0;
  763.                 }
  764.                 ty -= th;
  765.                 ty += 60;
  766.                 if (ty + th > y2)
  767.                 {
  768.                     ty = (UI_device_height - (th + MMI_BUTTON_BAR_HEIGHT)) - 3;
  769.                 }
  770.             #endif /* ROTATE_HORI */ 
  771.             #ifdef ROTATE_VERT      /* for vertical this is right allign */
  772.                 tx = x2 - tw - 2;
  773.                 /* ty-=th; */
  774.                 ty = (UI_device_height - (th + MMI_BUTTON_BAR_HEIGHT)) - 3;
  775.             #endif /* ROTATE_VERT */ 
  776.             #ifdef ROTATE_VERT_CIR  /* for vertical this is right allign */
  777.                 tx = x2 - tw - 2;
  778.                 /* ty-=th; */
  779.                 ty = (UI_device_height - (th + MMI_BUTTON_BAR_HEIGHT)) - 3;
  780.             #endif /* ROTATE_VERT_CIR */ 
  781.             #ifdef ROTATE_VERT_LINE /* for vertical this is central allign */
  782.                 if (tw < UI_device_width)
  783.                 {
  784.                     tx = x2 - tw - 2;
  785.                 }
  786.                 else
  787.                 {
  788.                     tx = 0;
  789.                 }
  790.                 /* ty-=th; */
  791.                 ty = m->item_positions[6].y - th / 2 + 34;
  792.             #endif /* ROTATE_VERT_LINE */ 
  793.             #ifdef ROTATE_VERT_LINE_RIGHT   /* for vertical this is central allign */
  794.                 tx = 2;
  795.                 ty -= th;
  796.             #endif /* ROTATE_VERT_LINE_RIGHT */ 
  797.             }
  798.             /* 111904 Calvin modified for BIDI */
  799.             /* move cursor to x,y position */
  800.             if (!r2lMMIFlag)
  801.             {
  802.                 gui_move_text_cursor(tx, ty);
  803.             }
  804.             else
  805.             {
  806.                 gui_move_text_cursor(tx + tw - 1, ty);
  807.             }
  808.             /* Calvin end */
  809.             /* set text border color */
  810.             gui_set_text_border_color(m->text_border);
  811.             /* set text colrr */
  812.             gui_set_text_color(m->text_color);
  813.             /* print text */
  814.             gui_print_bordered_text(text);
  815.         }
  816.     }
  817.     gui_set_text_clip(tx1, ty1, tx2, ty2);
  818.     gui_set_clip(cx1, cy1, cx2, cy2);
  819. }
  820. #ifdef __MMI_TOUCH_SCREEN__
  821. /*****************************************************************************
  822.  * FUNCTION
  823.  *  gui_3D_circular_menu_translate_pen_event
  824.  * DESCRIPTION
  825.  *  
  826.  * PARAMETERS
  827.  *  m               [?]         
  828.  *  pen_event       [IN]        
  829.  *  x               [IN]        
  830.  *  y               [IN]        
  831.  *  menu_event      [?]         
  832.  * RETURNS
  833.  *  
  834.  *****************************************************************************/
  835. BOOL gui_3D_circular_menu_translate_pen_event(
  836.         UI_3D_circular_menu *m,
  837.         mmi_pen_event_type_enum pen_event,
  838.         S16 x,
  839.         S16 y,
  840.         gui_3D_circular_menu_pen_enum *menu_event)
  841. {
  842.     /*----------------------------------------------------------------*/
  843.     /* Local Variables                                                */
  844.     /*----------------------------------------------------------------*/
  845.     BOOL ret;
  846.     U32 flags;
  847.     /*----------------------------------------------------------------*/
  848.     /* Code Body                                                      */
  849.     /*----------------------------------------------------------------*/
  850.     ret = MMI_TRUE;
  851.     *menu_event = GUI_3D_CIRCULAR_MENU_PEN_NONE;
  852.     flags = m->flags;
  853.     if (pen_event == MMI_PEN_EVENT_DOWN)
  854.     {
  855.         if (PEN_CHECK_BOUND(x, y, m->x, m->y, m->width, m->height))
  856.         {
  857.             S32 center_x1, center_y1;
  858.             S32 iw, ih;
  859.             m->pen_down_on_focused_item = MMI_FALSE;
  860.             gui_measure_image(m->item_images[m->highlighted_item], &iw, &ih);
  861.             if ((flags & UI_3D_CIRCULAR_MENU_TRANSITION_L1) ||
  862.                 (flags & UI_3D_CIRCULAR_MENU_TRANSITION_L2) ||
  863.                 (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R1) || (flags & UI_3D_CIRCULAR_MENU_TRANSITION_R2))
  864.             {
  865.                 /* Discard pen events in animation */
  866.             }
  867.             else if (MMI_current_menu_type == CIRCULAR_3D_MENU)
  868.             {
  869.                 center_x1 = m->x + m->item_positions[3].x;
  870.                 center_y1 = m->y + m->item_positions[3].y;
  871.                 if (PEN_CHECK_BOUND(x, y, center_x1, center_y1, iw, ih))
  872.                 {
  873.                     m->pen_down_on_focused_item = MMI_TRUE;
  874.                 }
  875.                 else if (x - m->x < (m->width >> 1))
  876.                 {
  877.                     *menu_event = GUI_3D_CIRCULAR_MENU_PEN_GOTO_NEXT;
  878.                 }
  879.                 else
  880.                 {
  881.                     *menu_event = GUI_3D_CIRCULAR_MENU_PEN_GOTO_PREVIOUS;
  882.                 }
  883.             }
  884.             else
  885.             {
  886.                 center_x1 = m->x + m->item_positions[6].x;
  887.                 center_y1 = m->y + m->item_positions[6].y;
  888.                 if (PEN_CHECK_BOUND(x, y, center_x1, center_y1, iw, ih))
  889.                 {
  890.                     m->pen_down_on_focused_item = MMI_TRUE;
  891.                 }
  892.             #ifdef ROTATE_HORI
  893.                 else if (x - m->x < (m->width >> 1))
  894.             #else 
  895.                 else if (y - m->y < (m->height >> 1))
  896.             #endif 
  897.                 {
  898.                     *menu_event = GUI_3D_CIRCULAR_MENU_PEN_GOTO_NEXT;
  899.                 }
  900.                 else
  901.                 {
  902.                     *menu_event = GUI_3D_CIRCULAR_MENU_PEN_GOTO_PREVIOUS;
  903.                 }
  904.             }
  905.         }
  906.         else
  907.         {
  908.             ret = MMI_FALSE;
  909.         }
  910.     }
  911.     else if (pen_event == MMI_PEN_EVENT_UP)
  912.     {
  913.         if (m->pen_down_on_focused_item)
  914.         {
  915.             *menu_event = GUI_3D_CIRCULAR_MENU_PEN_ITEM_SELECTED;
  916.         }
  917.     }
  918.     return ret;
  919. }
  920. #endif /* __MMI_TOUCH_SCREEN__ */ 
  921. #endif /* ((ENABLE_CIRCULAR_3D_MENU) || (ENABLE_ROTATE_MENU)) */ /* Enable 3D menu */