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

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.  * Filename:
  37.  * ---------
  38.  *  PictureEditorEngine.c
  39.  *
  40.  * Project:
  41.  * --------
  42.  *  MAUI
  43.  *
  44.  * Description:
  45.  * ------------
  46.  *  
  47.  *
  48.  * Author:
  49.  * -------
  50.  *  
  51.  *
  52.  *==============================================================================
  53.  *             HISTORY
  54.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  55.  *------------------------------------------------------------------------------
  56.  * removed!
  57.  *
  58.  * removed!
  59.  * removed!
  60.  * removed!
  61.  *
  62.  * removed!
  63.  * removed!
  64.  * removed!
  65.  *
  66.  * removed!
  67.  * removed!
  68.  * removed!
  69.  *
  70.  * removed!
  71.  * removed!
  72.  * removed!
  73.  *
  74.  * removed!
  75.  * removed!
  76.  * removed!
  77.  *
  78.  * removed!
  79.  * removed!
  80.  * removed!
  81.  *
  82.  * removed!
  83.  * removed!
  84.  * removed!
  85.  *
  86.  * removed!
  87.  * removed!
  88.  * removed!
  89.  *
  90.  * removed!
  91.  * removed!
  92.  * removed!
  93.  *
  94.  * removed!
  95.  * removed!
  96.  * removed!
  97.  *
  98.  * removed!
  99.  * removed!
  100.  * removed!
  101.  *
  102.  * removed!
  103.  * removed!
  104.  * removed!
  105.  *
  106.  * removed!
  107.  * removed!
  108.  * removed!
  109.  *
  110.  * removed!
  111.  * removed!
  112.  * removed!
  113.  *
  114.  * removed!
  115.  * removed!
  116.  * removed!
  117.  *
  118.  * removed!
  119.  * removed!
  120.  * removed!
  121.  *
  122.  * removed!
  123.  * removed!
  124.  * removed!
  125.  *
  126.  *------------------------------------------------------------------------------
  127.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  128.  *==============================================================================
  129.  *******************************************************************************/
  130. /**
  131.  * Copyright Notice
  132.  * ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  133.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  134.  *  (It is illegal to remove this copyright notice from this software or any
  135.  *  portion of it)
  136.  */
  137. /**************************************************************
  138.    FILENAME : PictureEditorEngine.c
  139.    PURPOSE     : Main functions of the Picture Editor Engine Function
  140.    REMARKS     : nil
  141.    AUTHOR      : Yogesh
  142.    DATE     : Jan-21-2004
  143. **************************************************************/
  144. #include "PictureEditorDefs.h"
  145. #include "PictureEditorProts.h"
  146. #include "FileSystemDef.h"
  147. #include "Downloaddefs.h"
  148. #include "GlobalDefs.h"
  149. #include "CommonScreens.h"
  150. #include "SettingProfile.h"
  151. #include "gdi_include.h"
  152. #include "wgui_status_icons.h"
  153. #ifdef __MMI_TOUCH_SCREEN__
  154. #include "Debuginitdef.h"       /* PMT MANISH   20050329 */
  155. #endif /* __MMI_TOUCH_SCREEN */
  156. #ifdef __MMI_PICTURE_EDITOR_SUPPORT__
  157. /* 051605 Calvin modified */
  158. #if defined (__MMI_MAINLCD_240X320__)
  159. const PE_OSD_STRUCT pe_osd = 
  160. {
  161.     {56, 22, 23, 23},   /* color_picter */
  162.     {21, 22, 23, 23},   /* pen_size */
  163.     {91, 22, 23, 23},   /* zoom */
  164.     {196, 22, 23, 23},  /* draw status */
  165.     {126, 22, 23, 23},  /* undo */
  166.     {161, 22, 23, 23}   /* fill */
  167. };
  168. #else /* defined (__MMI_MAINLCD_240X320__) */ 
  169. const PE_OSD_STRUCT pe_osd = 
  170. {
  171.     {25, 2, 23, 23},    /* color_picter */
  172.     {60, 2, 23, 23},    /* pen_size */
  173.     {95, 2, 23, 23},    /* zoom */
  174.     {130, 2, 23, 23}    /* draw status */
  175. };
  176. #endif /* defined (__MMI_MAINLCD_240X320__) */ 
  177. /* Calvin end */
  178. /**********************Defines************************/
  179. #define IM_COL_TXT_POS 2
  180. #define IM_COL_BOX_POS 37
  181. #define IM_PEN_TXT_POS (UI_device_width-65)
  182. #define IM_PEN_VAL_POS (UI_device_width-34)
  183. #define IM_PEN_IMG_POS (UI_device_width-19)
  184. /**********************Local Variables************************/
  185. /**********************Global Variables************************/
  186. PicEditMarkBox gPicEditZoomWindow;
  187. U8 gPEZoomFactor = 4;
  188. /**********************Extern Variables************************/
  189. extern PictureEditorPen *gpPicEditPen;
  190. extern PicEditMarkBox gPicEditMark;
  191. extern U8 *gpPEFileBuff;
  192. extern U8 gPECurrentAction;
  193. extern U16 gPEAttrib;
  194. extern U32 gPEColorRGB[];
  195. extern U8 gPicEditCurrPic;
  196. /* extern U8 gPEImageCount; */
  197. /* 051605 Calvin added */
  198. #if defined(__MMI_MAINLCD_240X320__)
  199. extern U8 *gpPicEditFillColorIndex;
  200. extern U8 gPEBitsPerPixel;
  201. #endif /* defined(__MMI_MAINLCD_240X320__) */ 
  202. /* Calvin end */
  203. /* MTK Elvis for R2L characters */
  204. extern BOOL r2lMMIFlag;
  205. /* MTK end */
  206. /* 051605 Calvin added */
  207. extern gdi_handle wgui_layer_1;
  208. extern gdi_handle wgui_base_layer;
  209. /* Calvin end */
  210. /* PMT VIKAS START 20050707 */
  211. #ifdef __MMI_UI_DALMATIAN_SOFTKEYS__
  212. /*****************************************************************************
  213.  * FUNCTION
  214.  *  shuffle_draw_image_editor_background
  215.  * DESCRIPTION
  216.  *  To Show Softkeys background in imageEditor.
  217.  * PARAMETERS
  218.  *  void
  219.  * RETURNS
  220.  *  void
  221.  *****************************************************************************/
  222. PU8 dbackGround_image;
  223. void shuffle_draw_image_editor_background(void)
  224. {
  225.     /*----------------------------------------------------------------*/
  226.     /* Local Variables                                                */
  227.     /*----------------------------------------------------------------*/
  228.     /*----------------------------------------------------------------*/
  229.     /* Code Body                                                      */
  230.     /*----------------------------------------------------------------*/
  231.     gui_show_transparent_image(0, 0, dbackGround_image, gui_transparent_color(0, 0, 0));
  232. }
  233. #endif /* __MMI_UI_DALMATIAN_SOFTKEYS__ */ 
  234. /* PMT VIKAS END 20050707 */
  235. /*****************************************************************************
  236.  * FUNCTION
  237.  *  ShowCategoryScr4PicEdit
  238.  * DESCRIPTION
  239.  *  Special category screen used for viewing and editing image
  240.  * PARAMETERS
  241.  *  colorStringId           [IN]        String Id for Color
  242.  *  penColor                [IN]        Color value
  243.  *  pixelStringId           [IN]        String Id for Pixel
  244.  *  penPixel                [IN]        Pixel value
  245.  *  penImageId              [IN]        Pen Image Id
  246.  *  left_softkey            [IN]        Left softkey label
  247.  *  left_softkey_icon       [IN]        Icon for the Left softkey
  248.  *  right_softkey           [IN]        Right softkey label
  249.  *  right_softkey_icon      [IN]        Icon for the Right softkey
  250.  *  background_imageid      [IN]        Background image id
  251.  *  imageData               [IN]        Image Data
  252.  * RETURNS
  253.  *  void
  254.  *****************************************************************************/
  255. void ShowCategoryScr4PicEdit(
  256.         U16 colorStringId,
  257.         color penColor,
  258.         U16 pixelStringId,
  259.         U8 penPixel,
  260.         U16 penImageId,
  261.         U16 left_softkey,
  262.         U16 left_softkey_icon,
  263.         U16 right_softkey,
  264.         U16 right_softkey_icon,
  265.         U16 background_imageid,
  266.         U8 *imageData)
  267. {
  268.     /*----------------------------------------------------------------*/
  269.     /* Local Variables                                                */
  270.     /*----------------------------------------------------------------*/
  271.     PU8 backGround_image = (PU8) GetImage(background_imageid);
  272.     /*----------------------------------------------------------------*/
  273.     /* Code Body                                                      */
  274.     /*----------------------------------------------------------------*/
  275. #ifdef __MMI_TOUCH_SCREEN__
  276.     mmi_register_image_editor_pen_handlers();
  277. #endif 
  278.     gui_reset_clip();
  279.     gui_lock_double_buffer();
  280. #if defined(__MMI_MAINLCD_240X320__)
  281. #ifdef __MMI_WALLPAPER_ON_BOTTOM__
  282.     wgui_set_wallpaper_on_bottom(MMI_TRUE);
  283. #endif 
  284.     dm_set_scr_bg_redraw(MMI_TRUE);
  285. #else /* defined(__MMI_MAINLCD_240X320__) */ 
  286.     entry_full_screen();
  287. #endif /* defined(__MMI_MAINLCD_240X320__) */ 
  288.     clear_category_screen_key_handlers();
  289.     gui_set_clip(0, 0, UI_device_width - 1, UI_device_height - 1);
  290. #if defined (__MMI_MAINLCD_240X320__)
  291.     if (gui_is_entry_new_screen() == MMI_TRUE)
  292.     {
  293.         gui_set_entry_new_screen(MMI_FALSE);
  294.         gdi_layer_multi_layer_enable();
  295.         gdi_layer_get_base_handle(&wgui_base_layer);
  296.         gui_layer_transparent(
  297.             wgui_base_layer,
  298.             UI_SUBMENU_OPACITY_BASED_LAYER,
  299.             0,
  300.             0,
  301.             UI_DEVICE_WIDTH - 1,
  302.             UI_DEVICE_HEIGHT - 1);
  303.         if (wgui_layer_1 == GDI_LAYER_EMPTY_HANDLE)
  304.         {
  305.             gdi_layer_create(0, 0, UI_DEVICE_WIDTH, UI_DEVICE_HEIGHT, &wgui_layer_1);
  306.         }
  307.         gdi_layer_set_active(wgui_layer_1);
  308.         gdi_layer_lock_frame_buffer();
  309.         gdi_layer_push_clip();
  310.         gdi_layer_reset_clip();
  311.         gdi_layer_set_opacity(TRUE, 255);
  312.         gdi_image_draw_animation(0, 0, (U8*) backGround_image, NULL);
  313.         gdi_layer_pop_clip();
  314.         gdi_layer_unlock_frame_buffer();
  315.         gdi_layer_restore_base_active();
  316.         gdi_layer_set_blt_layer(wgui_layer_1, wgui_base_layer, 0, 0);
  317.         gdi_layer_blt_previous(0, 0, UI_DEVICE_WIDTH - 1, UI_DEVICE_HEIGHT - 1);
  318.         gdi_layer_set_active(wgui_base_layer);
  319.         gdi_draw_solid_rect(0, 0, UI_DEVICE_WIDTH - 1, UI_DEVICE_HEIGHT - 1, GDI_COLOR_TRANSPARENT);
  320.     }
  321.     else
  322.     {
  323.         gdi_layer_get_base_handle(&wgui_base_layer);
  324.         gui_layer_transparent(
  325.             wgui_base_layer,
  326.             UI_SUBMENU_OPACITY_BASED_LAYER,
  327.             0,
  328.             0,
  329.             UI_DEVICE_WIDTH - 1,
  330.             UI_DEVICE_HEIGHT - 1);
  331.         gdi_layer_set_active(wgui_base_layer);
  332.         gdi_draw_solid_rect(0, 0, UI_DEVICE_WIDTH - 1, UI_DEVICE_HEIGHT - 1, GDI_COLOR_TRANSPARENT);
  333.     }
  334. #else /* defined (__MMI_MAINLCD_240X320__) */ 
  335.     gui_show_transparent_image(0, 0, backGround_image, gui_transparent_color(0, 0, 0));
  336. #endif /* defined (__MMI_MAINLCD_240X320__) */ 
  337.     show_status_icons();
  338.     ShowPicEditTitleBar(colorStringId, penColor, pixelStringId, penPixel, penImageId);
  339.     ShowPicEditImageWindow(imageData);
  340.     clear_category_screen_key_handlers();
  341.     clear_left_softkey();
  342.     clear_right_softkey();
  343.     change_left_softkey(left_softkey, left_softkey_icon);
  344.     change_right_softkey(right_softkey, right_softkey_icon);
  345.     register_left_softkey_handler();
  346.     register_right_softkey_handler();
  347.     register_default_hide_softkeys();
  348. #ifndef __MMI_UI_DALMATIAN_SOFTKEYS__
  349.     disable_softkey_background();
  350. #else /* __MMI_UI_DALMATIAN_SOFTKEYS__ */ 
  351.     dbackGround_image = backGround_image;
  352.     gui_register_button_shuffle(shuffle_draw_image_editor_background);  /* register the background drower */
  353. #endif /* __MMI_UI_DALMATIAN_SOFTKEYS__ */ 
  354.     show_left_softkey();
  355.     show_right_softkey();
  356.     gui_unlock_double_buffer();
  357.     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  358. }
  359. /*****************************************************************************
  360.  * FUNCTION
  361.  *  ShowPicEditTitleBar
  362.  * DESCRIPTION
  363.  *  To Show title bar for  special category screen used for viewing and editing image
  364.  * PARAMETERS
  365.  *  colorStringId       [IN]        String Id for Color
  366.  *  penColor            [IN]        Color value
  367.  *  pixelStringId       [IN]        String Id for Pixel
  368.  *  penPixel            [IN]        Pixel value
  369.  *  penImageId          [IN]        Pen Image Id
  370.  * RETURNS
  371.  *  void
  372.  *****************************************************************************/
  373. void ShowPicEditTitleBar(U16 colorStringId, color penColor, U16 pixelStringId, U8 penPixel, U16 penImageId)
  374. {
  375.     /*----------------------------------------------------------------*/
  376.     /* Local Variables                                                */
  377.     /*----------------------------------------------------------------*/
  378. #ifndef __MMI_TOUCH_SCREEN__
  379.     S32 x, width, height, text_width, text_height;
  380.     PU8 penImage = (PU8) GetImage(penImageId);
  381.     stFontAttribute *f = (UI_font_type) (current_MMI_theme->title_text_font);
  382.     UI_string_type buffer[2];
  383.     S32 w;
  384.     /*----------------------------------------------------------------*/
  385.     /* Code Body                                                      */
  386.     /*----------------------------------------------------------------*/
  387.     gui_set_font(f);
  388.     gui_push_clip();
  389.     /* Pen Color */
  390.     gui_set_clip(0, PIC_EDITOR_TITLE_Y, UI_device_width - 1, PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT - 1);
  391.     x = 2;
  392.     gui_measure_string(get_string(colorStringId), &text_width, &text_height);
  393.     if (r2lMMIFlag)
  394.     {
  395.         gui_move_text_cursor(2 + text_width, PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  396.     }
  397.     else
  398.     {
  399.         gui_move_text_cursor(2, PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  400.     }
  401.     gui_set_text_color(GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  402.     gui_print_text((UI_string_type) GetString(colorStringId));
  403.     x += text_width;
  404.     gui_draw_rectangle(
  405.         x,
  406.         PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1),
  407.         x + 5,
  408.         PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT - ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1),
  409.         GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  410.     gui_fill_rectangle(
  411.         x + 1,
  412.         PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1) + 1,
  413.         x + 4,
  414.         PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT - ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1) - 1,
  415.         penColor);
  416.     /* Pen width */
  417.     gui_measure_string(get_string(pixelStringId), &text_width, &text_height);
  418.     x = UI_device_width - text_width;
  419.     gui_measure_character((UI_character_type) '0', &width, &height);
  420.     x -= (width + 2);
  421.     gui_measure_image((PU8) penImage, &width, &height);
  422.     x -= (width + 2);
  423.     if (r2lMMIFlag)
  424.     {
  425.         gui_move_text_cursor(x + text_width, PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  426.     }
  427.     else
  428.     {
  429.         gui_move_text_cursor(x, PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  430.     }
  431.     gui_print_text((UI_string_type) GetString(pixelStringId));
  432.     gui_itoa(penPixel, (UI_string_type) buffer, 10);
  433.     w = gui_get_string_width((UI_string_type) buffer);
  434.     if (r2lMMIFlag)
  435.     {
  436.         gui_move_text_cursor(
  437.             x + text_width + 1 + w,
  438.             PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  439.     }
  440.     else
  441.     {
  442.         gui_move_text_cursor(x + text_width + 1, PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - text_height) >> 1));
  443.     }
  444.     gui_print_text((UI_string_type) buffer);
  445.     gui_show_transparent_image(
  446.         UI_device_width - width - 1,
  447.         PIC_EDITOR_TITLE_Y + ((PIC_EDITOR_TITLE_HEIGHT - height) >> 1),
  448.         penImage,
  449.         gui_transparent_color(0, 0, 0));
  450.     gui_pop_clip();
  451. #else /* __MMI_TOUCH_SCREEN__ */ 
  452.     PU8 penImage = (PU8) GetImage(penImageId);
  453. #ifdef __MMI_MAINLCD_240X320__  /* 110705 image editor Calvin add */
  454.     stFontAttribute *f = &MMI_small_font;
  455.     U16 RedoUndo_id;
  456. #else /* __MMI_MAINLCD_240X320__ */ 
  457.     stFontAttribute *f = (UI_font_type) (current_MMI_theme->title_text_font);
  458. #endif /* __MMI_MAINLCD_240X320__ */ 
  459.     UI_string_type buffer[2];
  460.     S32 w;
  461.     gui_set_text_color(UI_COLOR_BLACK); /* This line needs to be added */
  462.     gui_set_font(f);
  463.     gdi_layer_push_clip();
  464.     gdi_layer_reset_clip();
  465.     /* Pen color */
  466.     gui_draw_rectangle(
  467.         pe_osd.color_picker.pos_x + 5,
  468.         pe_osd.color_picker.pos_y + pe_osd.color_picker.height + 2,
  469.         pe_osd.color_picker.pos_x + pe_osd.color_picker.width - 5,
  470.         pe_osd.color_picker.pos_y + pe_osd.color_picker.height + 14,
  471.         GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  472.     gui_fill_rectangle(
  473.         pe_osd.color_picker.pos_x + 6,
  474.         pe_osd.color_picker.pos_y + pe_osd.color_picker.height + 3,
  475.         pe_osd.color_picker.pos_x + pe_osd.color_picker.width - 6,
  476.         pe_osd.color_picker.pos_y + pe_osd.color_picker.height + 13,
  477.         penColor);
  478.     /* Pen width */
  479.     gui_itoa(penPixel, (UI_string_type) buffer, 10);
  480.     w = gui_get_string_width((UI_string_type) buffer);
  481.     gui_move_text_cursor(pe_osd.pen_size.pos_x + ((pe_osd.pen_size.width - w) >> 1), pe_osd.color_picker.pos_y + pe_osd.color_picker.height + 2);       /* 051605 Calvin modified */
  482.     gui_print_text((UI_string_type) buffer);
  483.     /* Zoom */
  484.     /* 051605 Calvin mdified */
  485.     w = gui_get_string_width((UI_string_type) L"x1");
  486.     gui_move_text_cursor(
  487.         pe_osd.zoom.pos_x + ((pe_osd.zoom.width - w) >> 1),
  488.         pe_osd.zoom.pos_y + pe_osd.zoom.height + 2);
  489.     if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  490.     {
  491.         gui_print_text((UI_string_type) L"x2");
  492.     }
  493.     else
  494.     {
  495.         gui_print_text((UI_string_type) L"x1");
  496.     }
  497.     /* Draw status */
  498.     w = gui_get_string_width((UI_string_type) L"State");
  499.     gui_move_text_cursor(pe_osd.draw_status.pos_x + ((pe_osd.draw_status.width - w) >> 1), pe_osd.draw_status.pos_y + pe_osd.draw_status.height + 2);   /* 051605 Calvin modified */
  500.     gui_print_text((UI_string_type) L"State");
  501.     gdi_image_draw(pe_osd.draw_status.pos_x, pe_osd.draw_status.pos_y, (U8*) penImage);
  502.     /* Calvin end */
  503.     /* 010306 image editor Calvin Start */
  504. #if defined(__MMI_MAINLCD_240X320__)
  505.     /* Undo */
  506.     if (IS_PE_IMAGE_EDIT(gPEAttrib) && (IS_PE_UNDO_IMAGE(gPEAttrib)))
  507.     {
  508.         RedoUndo_id = STR_PE_EDIT_OPT_REDO;
  509.     }
  510.     else
  511.     {
  512.         RedoUndo_id = STR_PE_EDIT_OPT_UNDO;
  513.     }
  514.     w = gui_get_string_width((UI_string_type) GetString(RedoUndo_id));
  515.     gui_move_text_cursor(
  516.         pe_osd.undo.pos_x + ((pe_osd.undo.width - w) >> 1),
  517.         pe_osd.undo.pos_y + pe_osd.undo.height + 2);
  518.     gui_print_text((UI_string_type) GetString(RedoUndo_id));
  519.     /* Fill */
  520.     gui_draw_rectangle(
  521.         pe_osd.fill_color.pos_x + 5,
  522.         pe_osd.fill_color.pos_y + pe_osd.fill_color.height + 2,
  523.         pe_osd.fill_color.pos_x + pe_osd.fill_color.width - 5,
  524.         pe_osd.fill_color.pos_y + pe_osd.fill_color.height + 14,
  525.         GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  526.     gui_fill_rectangle(
  527.         pe_osd.fill_color.pos_x + 6,
  528.         pe_osd.fill_color.pos_y + pe_osd.fill_color.height + 3,
  529.         pe_osd.fill_color.pos_x + pe_osd.fill_color.width - 6,
  530.         pe_osd.fill_color.pos_y + pe_osd.fill_color.height + 13,
  531.         GetPEColor(gPEColorRGB[*gpPicEditFillColorIndex]));
  532. #endif /* defined(__MMI_MAINLCD_240X320__) */ 
  533.     /* Calvin end */
  534.     gdi_layer_pop_clip();
  535. #endif /* __MMI_TOUCH_SCREEN__ */ 
  536. }
  537. /* [~PMT  MANISH   20050311 Function to Handle Pen Events on Title Bar of Image Editor */
  538. #ifdef __MMI_TOUCH_SCREEN__
  539. /*****************************************************************************
  540.  * FUNCTION
  541.  *  HandleImageEditorTitleEvent
  542.  * DESCRIPTION
  543.  *  To handle Pen events on Image Editor Title
  544.  *  
  545.  *  Identifies the component of Image Editor Title on which pen event comes and changes its value accordingly
  546.  * PARAMETERS
  547.  *  X           [IN]        
  548.  *  Y           [IN]        
  549.  *  x(?)        [IN]        
  550.  *  y(?)        [IN]        
  551.  * RETURNS
  552.  *  void
  553.  *****************************************************************************/
  554. /* 051605 Calvin added */
  555. extern U8 gPECurrentAction;
  556. /* Calvin end */
  557. pBOOL HandleImageEditorTitleEvent(U16 X, U16 Y)
  558. {
  559.     /*----------------------------------------------------------------*/
  560.     /* Local Variables                                                */
  561.     /*----------------------------------------------------------------*/
  562. #if (0)
  563. /* under construction !*/
  564. /* under construction !*/
  565. /* under construction !*/
  566. /* under construction !*/
  567. /* under construction !*/
  568. /* under construction !*/
  569. /* under construction !*/
  570. /* under construction !*/
  571. /* under construction !*/
  572. /* under construction !*/
  573. /* under construction !*/
  574. /* under construction !*/
  575. /* under construction !*/
  576. /* under construction !*/
  577. /* under construction !*/
  578. /* under construction !*/
  579. /* under construction !*/
  580. /* under construction !*/
  581. /* under construction !*/
  582. /* under construction !*/
  583. /* under construction !*/
  584. /* under construction !*/
  585. /* under construction !*/
  586. /* under construction !*/
  587. /* under construction !*/
  588. /* under construction !*/
  589. /* under construction !*/
  590. /* under construction !*/
  591. /* under construction !*/
  592. /* under construction !*/
  593. /* under construction !*/
  594. /* under construction !*/
  595. /* under construction !*/
  596. /* under construction !*/
  597. /* under construction !*/
  598. /* under construction !*/
  599. /* under construction !*/
  600. /* under construction !*/
  601. /* under construction !*/
  602. /* under construction !*/
  603. /* under construction !*/
  604. /* under construction !*/
  605. /* under construction !*/
  606. /* under construction !*/
  607. /* under construction !*/
  608. #else /* (0) */ 
  609.     /*----------------------------------------------------------------*/
  610.     /* Code Body                                                      */
  611.     /*----------------------------------------------------------------*/
  612.     if (PEN_CHECK_BOUND
  613.         (X, Y, pe_osd.color_picker.pos_x, pe_osd.color_picker.pos_y, pe_osd.color_picker.width,
  614.          pe_osd.color_picker.height))
  615.     {
  616.         /* Pen on Color */
  617.         gui_lock_double_buffer();   /* 051605 Calvin added */
  618.         ChangePEPenColor();
  619.         /* 051605 Calvin added */
  620.     #if defined (__MMI_MAINLCD_240X320__)
  621.         ChangePEFillColor();
  622.     #endif 
  623.         /* Calvin end */
  624.         RedrawPicEditTitleBar();
  625.         gui_unlock_double_buffer(); /* 051605 Calvin added */
  626.         gui_BLT_double_buffer(0, PIC_EDITOR_TITLE_Y, UI_device_width - 1, PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT);        /* 051605 Calvin added */
  627.         return MMI_TRUE;
  628.     }
  629.     if (PEN_CHECK_BOUND
  630.         (X, Y, pe_osd.pen_size.pos_x, pe_osd.pen_size.pos_y, pe_osd.pen_size.width, pe_osd.pen_size.height))
  631.     {
  632.         /* Pen on Pen size */
  633.         ChangePEPenSize();
  634.         RedrawPicEditTitleBar();
  635.         return MMI_TRUE;
  636.     }
  637.     if (PEN_CHECK_BOUND(X, Y, pe_osd.zoom.pos_x, pe_osd.zoom.pos_y, pe_osd.zoom.width, pe_osd.zoom.height))
  638.     {
  639.         /* Pen on Zoom */
  640.         if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  641.         {
  642.             UNSET_PE_ZOOM_IMAGE(gPEAttrib);
  643.         }
  644.         else
  645.         {
  646.             SetPicEditZoomWindow(TRUE);
  647.             SET_PE_ZOOM_IMAGE(gPEAttrib);
  648.         }
  649.         RedrawPicEditTitleBar();
  650.         ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  651.         return MMI_TRUE;
  652.     }
  653.     if (PEN_CHECK_BOUND
  654.         (X, Y, pe_osd.draw_status.pos_x, pe_osd.draw_status.pos_y, pe_osd.draw_status.width, pe_osd.draw_status.height))
  655.     {
  656.         /* Pen on Draw Status */
  657.         DrawPicOnKey_5();
  658.         return MMI_TRUE;
  659.     }
  660.     /* 051605 Calvin added */
  661. #if defined (__MMI_MAINLCD_240X320__)
  662.     if (PEN_CHECK_BOUND(X, Y, pe_osd.undo.pos_x, pe_osd.undo.pos_y, pe_osd.undo.width, pe_osd.undo.height))
  663.     {
  664.         /* Pen on Undo */
  665.         gPECurrentAction = SEL_PE_EDIT_OPT_UNDO;
  666.         ExchangePEContext();
  667.         SetPicEditZoomWindow(TRUE);
  668.         RedrawPicEditTitleBar();
  669.         ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  670.         return MMI_TRUE;
  671.     }
  672.     if (PEN_CHECK_BOUND
  673.         (X, Y, pe_osd.fill_color.pos_x, pe_osd.fill_color.pos_y, pe_osd.fill_color.width, pe_osd.fill_color.height))
  674.     {
  675.         /* Pen on Fill color */
  676.         U8 infoPalette[MAX_TYPE_PEN_COLOR * 4];
  677.         GetPaletteInfo(infoPalette);
  678.         gpPicEditPen->penBackgrdColorIndex = *gpPicEditFillColorIndex;
  679.         SavePEContext();
  680.         SET_PE_IMAGE_EDIT(gPEAttrib);
  681.         UNSET_PE_MARK_IMAGE(gPEAttrib);
  682.         UNSET_PE_COPY_IMAGE(gPEAttrib);
  683.         memcpy(&gpPEFileBuff[54], &infoPalette, MAX_TYPE_PEN_COLOR * gPEBitsPerPixel);
  684.         memset(
  685.             &gpPEFileBuff[PIC_EDIT_FILE_HEADER_SIZE],
  686.             ((gpPicEditPen->penBackgrdColorIndex) | (gpPicEditPen->penBackgrdColorIndex << 4)),
  687.             (gpPicEditPen->maxY - gpPicEditPen->minY) * GetImageWidth(gpPicEditPen->minX, gpPicEditPen->maxX));
  688.         RedrawPicEditTitleBar();
  689.         ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  690.         return MMI_TRUE;
  691.     }
  692. #endif /* defined (__MMI_MAINLCD_240X320__) */ 
  693.     /* Calvin end */
  694.     return MMI_FALSE;
  695. #endif /* (0) */ 
  696. }
  697. #endif /* __MMI_TOUCH_SCREEN__ */ 
  698. /* ~] */
  699. /*****************************************************************************
  700.  * FUNCTION
  701.  *  RedrawPicEditTitleBar
  702.  * DESCRIPTION
  703.  *  To redraw title bar for  special category screen used for editing image
  704.  * PARAMETERS
  705.  *  void
  706.  * RETURNS
  707.  *  void
  708.  *****************************************************************************/
  709. void RedrawPicEditTitleBar(void)
  710. {
  711.     /*----------------------------------------------------------------*/
  712.     /* Local Variables                                                */
  713.     /*----------------------------------------------------------------*/
  714.     U16 penImageId;
  715. #if (0)
  716. /* under construction !*/
  717. /* under construction !*/
  718. /* under construction !*/
  719. /* under construction !*/
  720. /* under construction !*/
  721. /* under construction !*/
  722. /* under construction !*/
  723. /* under construction !*/
  724. /* under construction !*/
  725. /* under construction !*/
  726. /* under construction !*/
  727. /* under construction !*/
  728. /* under construction !*/
  729. /* under construction !*/
  730. /* under construction !*/
  731. /* under construction !*/
  732. #else /* (0) */ 
  733.     /*----------------------------------------------------------------*/
  734.     /* Code Body                                                      */
  735.     /*----------------------------------------------------------------*/
  736.     if (IS_PE_PEN_DOWN(gPEAttrib))
  737.     {
  738.         penImageId = IMG_PE_IM_PEN;
  739.     }
  740.     else
  741.     {
  742.         penImageId = 0;
  743.     }
  744.     gui_lock_double_buffer();
  745.     gui_push_clip();
  746.     /* 051605 Calvin modified */
  747.     /* gui_set_clip(0,0,UI_device_width-1,PIC_EDITOR_TITLE_HEIGHT+30); */
  748.     gui_set_clip(0, PIC_EDITOR_TITLE_Y, UI_device_width - 1, PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT);
  749.     if (wgui_is_wallpaper_on_bottom())
  750.     {
  751.         gdi_draw_solid_rect(
  752.             0,
  753.             PIC_EDITOR_TITLE_Y,
  754.             UI_device_width - 1,
  755.             PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT,
  756.             GDI_COLOR_TRANSPARENT);
  757.     }
  758.     else
  759.     {
  760.         gdi_image_draw(0, 0, (U8*) GetImage(IMG_PE_BACKGROUND));
  761.     }
  762.     /* Calvin end */
  763.     ShowPicEditTitleBar(
  764.         STR_PE_TITLE_COLOR_TXT,
  765.         GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]),
  766.         STR_PE_TITLE_PIXEL_TXT,
  767.         gpPicEditPen->penPixel,
  768.         penImageId);
  769.     gui_pop_clip();
  770.     gui_unlock_double_buffer();
  771.     /* 051605 Calvin modified */
  772.     /* gui_BLT_double_buffer(0,0,UI_device_width-1,PIC_EDITOR_TITLE_HEIGHT+30); */
  773.     gui_BLT_double_buffer(0, 0, UI_device_width - 1, PIC_EDITOR_TITLE_Y + PIC_EDITOR_TITLE_HEIGHT);
  774.     /* Calvin end */
  775. #endif /* (0) */ 
  776.     UNSET_PE_CURSOR_TIMER(gPEAttrib);
  777.     gui_start_timer(PE_BLINKING_DURATION, DisplayPECursor);
  778. }
  779. /*****************************************************************************
  780.  * FUNCTION
  781.  *  ShowPicEditImageWindow
  782.  * DESCRIPTION
  783.  *  Shows image passed in the image window of image editor
  784.  * PARAMETERS
  785.  *  imageData       [IN]        
  786.  * RETURNS
  787.  *  void
  788.  *****************************************************************************/
  789. void ShowPicEditImageWindow(U8 *imageData)
  790. {
  791.     /*----------------------------------------------------------------*/
  792.     /* Local Variables                                                */
  793.     /*----------------------------------------------------------------*/
  794.     S32 width = 0, height = 0;
  795.     U16 minX = SET_WINDOW_MINX(PE_SCR_SIZE_MAX);
  796.     U16 minY = SET_WINDOW_MINY(PE_SCR_SIZE_MAX);
  797.     /*----------------------------------------------------------------*/
  798.     /* Code Body                                                      */
  799.     /*----------------------------------------------------------------*/
  800.     gui_set_clip(minX - 1, minY - 1, minX + PE_SCR_SIZE_MAX, minY + PE_SCR_SIZE_MAX);
  801.     gui_fill_rectangle(
  802.         minX - 1,
  803.         minY - 1,
  804.         minX + PE_SCR_SIZE_MAX,
  805.         minY + PE_SCR_SIZE_MAX,
  806.         GetPEColor(gPEColorRGB[PE_COLOR_WHITE]));
  807.     gui_measure_image((PU8) imageData, &width, &height);
  808.     if (width > PE_SCR_SIZE_MAX)
  809.     {
  810.         width = PE_SCR_SIZE_MAX;
  811.     }
  812.     if (height > PE_SCR_SIZE_MAX)
  813.     {
  814.         height = PE_SCR_SIZE_MAX;
  815.     }
  816.     gpPicEditPen->minX = SET_WINDOW_MINX(width);
  817.     gpPicEditPen->maxX = gpPicEditPen->minX + (U16) width;
  818.     gpPicEditPen->minY = SET_WINDOW_MINY(height);
  819.     gpPicEditPen->maxY = gpPicEditPen->minY + (U16) height;
  820.     if (IS_PE_VIEW_IMAGE(gPEAttrib))
  821.     {
  822.         gui_draw_rectangle(
  823.             gpPicEditPen->minX - 1,
  824.             gpPicEditPen->minY - 1,
  825.             gpPicEditPen->maxX,
  826.             gpPicEditPen->maxY,
  827.             GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  828.         gui_set_clip(gpPicEditPen->minX, gpPicEditPen->minY, gpPicEditPen->maxX - 1, gpPicEditPen->maxY - 1);
  829.         gui_show_image(gpPicEditPen->minX, gpPicEditPen->minY, (PU8) imageData);
  830.     }
  831.     else
  832.     {
  833.         if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  834.         {
  835.             U16 minX, minY, maxX, maxY;
  836.             if (((gPicEditZoomWindow.maxX - gPicEditZoomWindow.minX) * gPEZoomFactor) >= PE_SCR_SIZE_MAX)
  837.             {
  838.                 minX = SET_WINDOW_MINX(PE_SCR_SIZE_MAX);
  839.                 maxX = minX + PE_SCR_SIZE_MAX;
  840.             }
  841.             else
  842.             {
  843.                 minX = SET_WINDOW_MINX((gpPicEditPen->maxX - gpPicEditPen->minX) * gPEZoomFactor);
  844.                 maxX = minX + ((gpPicEditPen->maxX - gpPicEditPen->minX) * gPEZoomFactor);
  845.             }
  846.             if (((gPicEditZoomWindow.maxY - gPicEditZoomWindow.minY) * gPEZoomFactor) >= PE_SCR_SIZE_MAX)
  847.             {
  848.                 minY = SET_WINDOW_MINY(PE_SCR_SIZE_MAX);
  849.                 maxY = minY + PE_SCR_SIZE_MAX;
  850.             }
  851.             else
  852.             {
  853.                 minY = SET_WINDOW_MINY((gpPicEditPen->maxY - gpPicEditPen->minY) * gPEZoomFactor);
  854.                 maxY = minY + ((gpPicEditPen->maxY - gpPicEditPen->minY) * gPEZoomFactor);
  855.             }
  856.             gui_draw_rectangle(minX - 1, minY - 1, maxX, maxY, GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  857.             gui_set_clip(minX, minY, maxX - 1, maxY - 1);
  858.             DrawZoomImage(
  859.                 gpPEFileBuff,
  860.                 gPicEditZoomWindow.minX - gpPicEditPen->minX,
  861.                 gPicEditZoomWindow.minY - gpPicEditPen->minY,
  862.                 gPEZoomFactor,
  863.                 minX,
  864.                 minY,
  865.                 maxX - minX,
  866.                 maxY - minY);
  867.             if (gPECurrentAction != SEL_PE_EDIT_OPT_MARK)
  868.             {
  869.                 gui_fill_rectangle(
  870.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  871.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  872.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor + gpPicEditPen->penPixel * gPEZoomFactor - 1,
  873.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor + gpPicEditPen->penPixel * gPEZoomFactor - 1,
  874.                     GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]));
  875.             }
  876.             else
  877.             {
  878.                 gui_fill_rectangle(
  879.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  880.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  881.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  882.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  883.                     GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]));
  884.             }
  885.             if ((gPECurrentAction == SEL_PE_EDIT_OPT_MARK) || (gPECurrentAction == SEL_PE_EDIT_OPT_RESIZE))
  886.             {
  887.                 ShowPicEditMarkBox(minX, minY);
  888.             }
  889.         }
  890.         else
  891.         {
  892.             gui_draw_rectangle(
  893.                 gpPicEditPen->minX - 1,
  894.                 gpPicEditPen->minY - 1,
  895.                 gpPicEditPen->maxX,
  896.                 gpPicEditPen->maxY,
  897.                 GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  898.             gui_set_clip(gpPicEditPen->minX, gpPicEditPen->minY, gpPicEditPen->maxX - 1, gpPicEditPen->maxY - 1);
  899.             gui_show_image(gpPicEditPen->minX, gpPicEditPen->minY, (PU8) imageData);
  900.             if (gPECurrentAction != SEL_PE_EDIT_OPT_MARK)
  901.             {
  902.                 gui_fill_rectangle(
  903.                     gpPicEditPen->penX,
  904.                     gpPicEditPen->penY,
  905.                     gpPicEditPen->penX + gpPicEditPen->penPixel - 1,
  906.                     gpPicEditPen->penY + gpPicEditPen->penPixel - 1,
  907.                     GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]));
  908.             }
  909.             else
  910.             {
  911.                 gui_fill_rectangle(
  912.                     gpPicEditPen->penX,
  913.                     gpPicEditPen->penY,
  914.                     gpPicEditPen->penX,
  915.                     gpPicEditPen->penY,
  916.                     GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]));
  917.             }
  918.             if ((gPECurrentAction == SEL_PE_EDIT_OPT_MARK) || (gPECurrentAction == SEL_PE_EDIT_OPT_RESIZE))
  919.             {
  920.                 ShowPicEditMarkBox(0, 0);
  921.             }
  922.         }
  923.         UNSET_PE_CURSOR_TIMER(gPEAttrib);
  924.         gui_start_timer(PE_BLINKING_DURATION, DisplayPECursor);
  925.     }
  926. }
  927. /*****************************************************************************
  928.  * FUNCTION
  929.  *  ShowPicEditMarkBox
  930.  * DESCRIPTION
  931.  *  Shows mark box when mark option is selected
  932.  * PARAMETERS
  933.  *  scrMinX     [IN]        
  934.  *  scrMinY     [IN]        
  935.  * RETURNS
  936.  *  void
  937.  *****************************************************************************/
  938. void ShowPicEditMarkBox(U16 scrMinX, U16 scrMinY)
  939. {
  940.     /*----------------------------------------------------------------*/
  941.     /* Local Variables                                                */
  942.     /*----------------------------------------------------------------*/
  943.     U16 minX = 0, minY = 0, maxX = 0, maxY = 0;
  944.     /*----------------------------------------------------------------*/
  945.     /* Code Body                                                      */
  946.     /*----------------------------------------------------------------*/
  947.     if (gPECurrentAction == SEL_PE_EDIT_OPT_RESIZE)
  948.     {
  949.         minX = gPicEditMark.maxX - gPicEditMark.minX;
  950.         minY = gPicEditMark.maxY - gPicEditMark.minY;
  951.         gPicEditMark.maxX = maxX = gpPicEditPen->penX + minX;
  952.         gPicEditMark.minX = minX = gpPicEditPen->penX;
  953.         gPicEditMark.maxY = maxY = gpPicEditPen->penY + minY;
  954.         gPicEditMark.minY = minY = gpPicEditPen->penY;
  955.     }
  956.     else
  957.     {
  958.         if (gpPicEditPen->penX <= gPicEditMark.minX)
  959.         {
  960.             minX = gpPicEditPen->penX;
  961.             maxX = gPicEditMark.maxX;
  962.         }
  963.         else
  964.         {
  965.             minX = gPicEditMark.minX;
  966.             maxX = gpPicEditPen->penX;
  967.         }
  968.         if (gpPicEditPen->penY <= gPicEditMark.minY)
  969.         {
  970.             minY = gpPicEditPen->penY;
  971.             maxY = gPicEditMark.maxY;
  972.         }
  973.         else
  974.         {
  975.             minY = gPicEditMark.minY;
  976.             maxY = gpPicEditPen->penY;
  977.         }
  978.     }
  979.     if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  980.     {
  981.         UI_draw_dashed_rectangle(
  982.             scrMinX + (minX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  983.             scrMinY + (minY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  984.             scrMinX + (maxX - gPicEditZoomWindow.minX + 1) * gPEZoomFactor - 1,
  985.             scrMinY + (maxY - gPicEditZoomWindow.minY + 1) * gPEZoomFactor - 1,
  986.             GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  987.     }
  988.     else
  989.     {
  990.         UI_draw_dashed_rectangle(minX, minY, maxX, maxY, GetPEColor(gPEColorRGB[PE_COLOR_BLACK]));
  991.     }
  992. }
  993. /*****************************************************************************
  994.  * FUNCTION
  995.  *  DisplayPECursor
  996.  * DESCRIPTION
  997.  *  To Display blinking cursor
  998.  * PARAMETERS
  999.  *  void
  1000.  * RETURNS
  1001.  *  void
  1002.  *****************************************************************************/
  1003. void DisplayPECursor(void)
  1004. {
  1005.     /*----------------------------------------------------------------*/
  1006.     /* Local Variables                                                */
  1007.     /*----------------------------------------------------------------*/
  1008.     static U8 curColor = PE_COLOR_WHITE;
  1009.     static S32 oldPenpixel;
  1010.     U16 minX = SET_WINDOW_MINX(PE_SCR_SIZE_MAX);
  1011.     U16 minY = SET_WINDOW_MINY(PE_SCR_SIZE_MAX);
  1012.     /*----------------------------------------------------------------*/
  1013.     /* Code Body                                                      */
  1014.     /*----------------------------------------------------------------*/
  1015.     if (IS_PE_CURSOR_TIMER(gPEAttrib))
  1016.     {
  1017.         if (gpPicEditPen->penColorIndex == PE_COLOR_WHITE)
  1018.         {
  1019.             curColor = PE_COLOR_BLACK;
  1020.         }
  1021.         else
  1022.         {
  1023.             curColor = PE_COLOR_WHITE;
  1024.         }
  1025.     }
  1026.     else
  1027.     {
  1028.         curColor = gpPicEditPen->penColorIndex;
  1029.     }
  1030.     TOGGLE_PE_CURSOR_TIMER(gPEAttrib);
  1031.     gui_lock_double_buffer();
  1032.     if (!IS_PE_VIEW_IMAGE(gPEAttrib))
  1033.     {
  1034.         if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  1035.         {
  1036.             U16 maxX, maxY;
  1037.             if (((gPicEditZoomWindow.maxX - gPicEditZoomWindow.minX) * gPEZoomFactor) >= PE_SCR_SIZE_MAX)
  1038.             {
  1039.                 minX = SET_WINDOW_MINX(PE_SCR_SIZE_MAX);
  1040.                 maxX = minX + PE_SCR_SIZE_MAX;
  1041.             }
  1042.             else
  1043.             {
  1044.                 minX = SET_WINDOW_MINX((gpPicEditPen->maxX - gpPicEditPen->minX) * gPEZoomFactor);
  1045.                 maxX = minX + ((gpPicEditPen->maxX - gpPicEditPen->minX) * gPEZoomFactor);
  1046.             }
  1047.             if (((gPicEditZoomWindow.maxY - gPicEditZoomWindow.minY) * gPEZoomFactor) >= PE_SCR_SIZE_MAX)
  1048.             {
  1049.                 minY = SET_WINDOW_MINY(PE_SCR_SIZE_MAX);
  1050.                 maxY = minY + PE_SCR_SIZE_MAX;
  1051.             }
  1052.             else
  1053.             {
  1054.                 minY = SET_WINDOW_MINY((gpPicEditPen->maxY - gpPicEditPen->minY) * gPEZoomFactor);
  1055.                 maxY = minY + ((gpPicEditPen->maxY - gpPicEditPen->minY) * gPEZoomFactor);
  1056.             }
  1057.             gui_set_clip(minX, minY, maxX - 1, maxY - 1);   /* PMT MANISH   20050325 Set Clip Here to view blinking cursor in whole Zoom Window */
  1058.             if (gPECurrentAction != SEL_PE_EDIT_OPT_MARK)
  1059.             {
  1060.                 if (gpPicEditPen->penPixel < oldPenpixel)
  1061.                 {
  1062.                     ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1063.                     gui_unlock_double_buffer();
  1064.                     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  1065.                     oldPenpixel = gpPicEditPen->penPixel;
  1066.                     return; /* Smaller pixel size cursor is already displayed */
  1067.                 }
  1068.                 oldPenpixel = gpPicEditPen->penPixel;
  1069.                 gui_fill_rectangle(
  1070.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  1071.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  1072.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor + gpPicEditPen->penPixel * gPEZoomFactor - 1,
  1073.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor + gpPicEditPen->penPixel * gPEZoomFactor - 1,
  1074.                     GetPEColor(gPEColorRGB[curColor]));
  1075.             }
  1076.             else
  1077.             {
  1078.                 gui_fill_rectangle(
  1079.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  1080.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  1081.                     minX + (gpPicEditPen->penX - gPicEditZoomWindow.minX) * gPEZoomFactor,
  1082.                     minY + (gpPicEditPen->penY - gPicEditZoomWindow.minY) * gPEZoomFactor,
  1083.                     GetPEColor(gPEColorRGB[curColor]));
  1084.             }
  1085.         }
  1086.         else
  1087.         {
  1088.             gui_set_clip(gpPicEditPen->minX, gpPicEditPen->minY, gpPicEditPen->maxX - 1, gpPicEditPen->maxY - 1);       /* PMT MANISH   20050325 Set Clip Here */
  1089.             if (gPECurrentAction != SEL_PE_EDIT_OPT_MARK)
  1090.             {
  1091.                 if (gpPicEditPen->penPixel < oldPenpixel)
  1092.                 {
  1093.                     ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1094.                     gui_unlock_double_buffer();
  1095.                     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  1096.                     oldPenpixel = gpPicEditPen->penPixel;
  1097.                     return; /* Smaller pixel size cursor is already displayed */
  1098.                 }
  1099.                 oldPenpixel = gpPicEditPen->penPixel;
  1100.                 gui_fill_rectangle(
  1101.                     gpPicEditPen->penX,
  1102.                     gpPicEditPen->penY,
  1103.                     gpPicEditPen->penX + gpPicEditPen->penPixel - 1,
  1104.                     gpPicEditPen->penY + gpPicEditPen->penPixel - 1,
  1105.                     GetPEColor(gPEColorRGB[curColor]));
  1106.             }
  1107.             else
  1108.             {
  1109.                 gui_fill_rectangle(
  1110.                     gpPicEditPen->penX,
  1111.                     gpPicEditPen->penY,
  1112.                     gpPicEditPen->penX,
  1113.                     gpPicEditPen->penY,
  1114.                     GetPEColor(gPEColorRGB[curColor]));
  1115.             }
  1116.         }
  1117.     }
  1118. #if(UI_DOUBLE_BUFFER_SUPPORT)
  1119.     gui_unlock_double_buffer();
  1120.     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  1121. #endif /* (UI_DOUBLE_BUFFER_SUPPORT) */ 
  1122.     gui_start_timer(PE_BLINKING_DURATION, DisplayPECursor);
  1123. }
  1124. /*****************************************************************************
  1125.  * FUNCTION
  1126.  *  EntryScr4PicEditShowImage
  1127.  * DESCRIPTION
  1128.  *  Entry function for Image view
  1129.  * PARAMETERS
  1130.  *  void
  1131.  * RETURNS
  1132.  *  void
  1133.  *****************************************************************************/
  1134. void EntryScr4PicEditShowImage(void)
  1135. {
  1136.     /*----------------------------------------------------------------*/
  1137.     /* Local Variables                                                */
  1138.     /*----------------------------------------------------------------*/
  1139.     /*----------------------------------------------------------------*/
  1140.     /* Code Body                                                      */
  1141.     /*----------------------------------------------------------------*/
  1142.     /* ExecuteCurrExitHandler (); */
  1143.     if (GetPicEditCurrentImageId())
  1144.     {
  1145.         if (SetPicEditImageDataBuff(GetPicEditCurrentImageName()) == MMI_FALSE)
  1146.         {
  1147.             DisplayPopupCallBack(
  1148.                 (U8*) GetString(STR_PE_INVALID_FORMAT),
  1149.                 IMG_GLOBAL_UNFINISHED,
  1150.                 0,
  1151.                 1000,
  1152.                 (U8) ERROR_TONE,
  1153.                 EntryScr4PicEditDeleteConfirm);
  1154.             return;
  1155.         }
  1156.     }
  1157.     else
  1158.     {
  1159.         SetPicEditEmptyImageDataBuff();
  1160.     }
  1161.     SET_PE_VIEW_IMAGE(gPEAttrib);
  1162.     EntryNewScreen(SCR_PE_VIEW_PIC, ExitScr4PicEditShowImage, NULL, NULL);
  1163.     /* if (gPicEditCurrPic<gPEImageCount) */
  1164.     ShowCategoryScr4PicEdit(STR_PE_TITLE_COLOR_TXT, GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]),
  1165.                             STR_PE_TITLE_PIXEL_TXT, gpPicEditPen->penPixel,
  1166. #if (0)
  1167. /* under construction !*/
  1168. #else 
  1169.                             0,
  1170. #endif 
  1171.                             STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,
  1172.                             STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
  1173.                             IMG_PE_BACKGROUND, &gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1174.     ChangePicEditShowImageSoftkey();
  1175.     /* Register function for right soft key */
  1176.     SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
  1177.     SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1178.     SetKeyHandler(ShowPicEditPrevImage, KEY_UP_ARROW, KEY_EVENT_DOWN);
  1179.     SetKeyHandler(ShowPicEditNextImage, KEY_DOWN_ARROW, KEY_EVENT_DOWN);
  1180.     /* SetExitHandler (SCR_PE_VIEW_PIC, ExitScr4PicEditShowImage); */
  1181. }
  1182. /*****************************************************************************
  1183.  * FUNCTION
  1184.  *  ExitScr4PicEditShowImage
  1185.  * DESCRIPTION
  1186.  *  Exit function for EntryScr4PicEditShowImage
  1187.  * PARAMETERS
  1188.  *  void
  1189.  * RETURNS
  1190.  *  void
  1191.  *****************************************************************************/
  1192. void ExitScr4PicEditShowImage(void)
  1193. {
  1194.     /*----------------------------------------------------------------*/
  1195.     /* Local Variables                                                */
  1196.     /*----------------------------------------------------------------*/
  1197.     history h;
  1198.     S16 nHistory = 0;
  1199.     /*----------------------------------------------------------------*/
  1200.     /* Code Body                                                      */
  1201.     /*----------------------------------------------------------------*/
  1202.     h.scrnID = SCR_PE_VIEW_PIC;
  1203.     h.entryFuncPtr = EntryScr4PicEditShowImage;
  1204.     pfnUnicodeStrcpy((S8*) h.inputBuffer, (S8*) & nHistory);
  1205.     GetCategoryHistory(h.guiBuffer);
  1206.     AddHistory(h);
  1207.     enable_softkey_background();
  1208.     leave_full_screen();
  1209. }
  1210. /*****************************************************************************
  1211.  * FUNCTION
  1212.  *  ChangePicEditShowImageSoftkey
  1213.  * DESCRIPTION
  1214.  *  Changes Softkey of image editor while viewing image
  1215.  * PARAMETERS
  1216.  *  void
  1217.  * RETURNS
  1218.  *  void
  1219.  *****************************************************************************/
  1220. void ChangePicEditShowImageSoftkey(void)
  1221. {
  1222.     /*----------------------------------------------------------------*/
  1223.     /* Local Variables                                                */
  1224.     /*----------------------------------------------------------------*/
  1225.     /*----------------------------------------------------------------*/
  1226.     /* Code Body                                                      */
  1227.     /*----------------------------------------------------------------*/
  1228.     /* if (gPicEditCurrPic<gPEImageCount) */
  1229.     if (GetPicEditCurrentImageId())
  1230.     {
  1231.         /* Register function for left soft key */
  1232.         ChangeLeftSoftkey(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS);
  1233.         SetLeftSoftkeyFunction(EntryScr4PicEditViewOpt, KEY_EVENT_UP);
  1234.         SetKeyHandler(EntryScr4PicEditViewOpt, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1235.     }
  1236.     else
  1237.     {
  1238.         /* Register function for left soft key */
  1239.         ChangeLeftSoftkey((U16) NULL, (U16) NULL);
  1240.         ClearKeyHandler(KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1241.     }
  1242. }
  1243. /*****************************************************************************
  1244.  * FUNCTION
  1245.  *  EntryScr4PicEditEditImage
  1246.  * DESCRIPTION
  1247.  *  Entry function for Image editing Screen
  1248.  * PARAMETERS
  1249.  *  void
  1250.  * RETURNS
  1251.  *  void
  1252.  *****************************************************************************/
  1253. void EntryScr4PicEditEditImage(void)
  1254. {
  1255.     /*----------------------------------------------------------------*/
  1256.     /* Local Variables                                                */
  1257.     /*----------------------------------------------------------------*/
  1258.     U16 penImageId;
  1259.     /*----------------------------------------------------------------*/
  1260.     /* Code Body                                                      */
  1261.     /*----------------------------------------------------------------*/
  1262.     UNSET_PE_VIEW_IMAGE(gPEAttrib);
  1263.     /* ExecuteCurrExitHandler (); */
  1264.     EntryNewScreen(SCR_PE_EDIT_PIC, ExitScr4PicEditEditImage, NULL, NULL);
  1265. #ifdef __MMI_TOUCH_SCREEN__
  1266.     mmi_pen_config_sampling_period(MMI_PEN_SAMPLING_PERIOD_2, MMI_PEN_SAMPLING_PERIOD_2);
  1267.     mmi_pen_config_move_offset(
  1268.         MMI_PEN_SKIP_STROKE_MOVE_OFFSET,
  1269.         MMI_PEN_SKIP_STROKE_MOVE_OFFSET,
  1270.         MMI_PEN_SKIP_LONGTAP_OFFSET,
  1271.         MMI_PEN_SKIP_STROKE_LONGTAP_OFFSET);
  1272. #endif /* __MMI_TOUCH_SCREEN__ */ 
  1273.     if (IS_PE_PEN_DOWN(gPEAttrib))
  1274.     {
  1275.         penImageId = IMG_PE_IM_PEN;
  1276.     }
  1277.     else
  1278. #if (0)
  1279. /* under construction !*/
  1280. #else /* (0) */ 
  1281.         penImageId = 0;
  1282. #endif /* (0) */ 
  1283.     switch (gPECurrentAction)
  1284.     {
  1285.         case SEL_PE_EDIT_OPT_RESIZE:    /* Resize */
  1286.         case SEL_PE_EDIT_OPT_MARK:      /* Mark */
  1287.             ShowCategoryScr4PicEdit(
  1288.                 STR_PE_TITLE_COLOR_TXT,
  1289.                 GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]),
  1290.                 STR_PE_TITLE_PIXEL_TXT,
  1291.                 gpPicEditPen->penPixel,
  1292.                 penImageId,
  1293.                 STR_GLOBAL_OK,
  1294.                 IMG_GLOBAL_OK,
  1295.                 STR_GLOBAL_CANCEL,
  1296.                 IMG_GLOBAL_NO,
  1297.                 IMG_PE_BACKGROUND,
  1298.                 &gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1299.             break;
  1300.         default:
  1301.             ShowCategoryScr4PicEdit(
  1302.                 STR_PE_TITLE_COLOR_TXT,
  1303.                 GetPEColor(gPEColorRGB[gpPicEditPen->penColorIndex]),
  1304.                 STR_PE_TITLE_PIXEL_TXT,
  1305.                 gpPicEditPen->penPixel,
  1306.                 penImageId,
  1307.                 STR_GLOBAL_OPTIONS,
  1308.                 IMG_GLOBAL_OPTIONS,
  1309.                 STR_GLOBAL_BACK,
  1310.                 IMG_GLOBAL_BACK,
  1311.                 IMG_PE_BACKGROUND,
  1312.                 &gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1313.             break;
  1314.     }
  1315.     InitPicEditKeyHandlers();
  1316.     ChangePicEditEditImageSoftkey();
  1317.     /* SetExitHandler (SCR_PE_EDIT_PIC, ExitScr4PicEditEditImage); */
  1318. }
  1319. /*****************************************************************************
  1320.  * FUNCTION
  1321.  *  ExitScr4PicEditEditImage
  1322.  * DESCRIPTION
  1323.  *  Exit function for EntryScr4PicEditEditImage
  1324.  * PARAMETERS
  1325.  *  void
  1326.  * RETURNS
  1327.  *  void
  1328.  *****************************************************************************/
  1329. void ExitScr4PicEditEditImage(void)
  1330. {
  1331.     /*----------------------------------------------------------------*/
  1332.     /* Local Variables                                                */
  1333.     /*----------------------------------------------------------------*/
  1334.     history h;
  1335.     S16 nHistory = 0;
  1336.     /*----------------------------------------------------------------*/
  1337.     /* Code Body                                                      */
  1338.     /*----------------------------------------------------------------*/
  1339.     gui_cancel_timer(DisplayPECursor);
  1340. #ifdef __MMI_TOUCH_SCREEN__
  1341.     mmi_pen_config_sampling_period(MMI_PEN_SAMPLING_PERIOD_1, MMI_PEN_SAMPLING_PERIOD_2);
  1342.     mmi_pen_config_move_offset(
  1343.         MMI_PEN_SKIP_MOVE_OFFSET,
  1344.         MMI_PEN_SKIP_STROKE_MOVE_OFFSET,
  1345.         MMI_PEN_SKIP_LONGTAP_OFFSET,
  1346.         MMI_PEN_SKIP_STROKE_LONGTAP_OFFSET);
  1347. #endif /* __MMI_TOUCH_SCREEN__ */ 
  1348.     h.scrnID = SCR_PE_EDIT_PIC;
  1349.     h.entryFuncPtr = EntryScr4PicEditEditImage;
  1350.     pfnUnicodeStrcpy((S8*) h.inputBuffer, (S8*) & nHistory);
  1351.     GetCategoryHistory(h.guiBuffer);
  1352.     AddHistory(h);
  1353.     enable_softkey_background();
  1354.     leave_full_screen();
  1355. }
  1356. /*****************************************************************************
  1357.  * FUNCTION
  1358.  *  ChangePicEditEditImageSoftkey
  1359.  * DESCRIPTION
  1360.  *  Changes Softkey while image editing
  1361.  * PARAMETERS
  1362.  *  void
  1363.  * RETURNS
  1364.  *  void
  1365.  *****************************************************************************/
  1366. void ChangePicEditEditImageSoftkey(void)
  1367. {
  1368.     /*----------------------------------------------------------------*/
  1369.     /* Local Variables                                                */
  1370.     /*----------------------------------------------------------------*/
  1371.     /*----------------------------------------------------------------*/
  1372.     /* Code Body                                                      */
  1373.     /*----------------------------------------------------------------*/
  1374.     switch (gPECurrentAction)
  1375.     {
  1376.         case SEL_PE_EDIT_OPT_RESIZE:    /* Resize */
  1377.         case SEL_PE_EDIT_OPT_MARK:      /* Mark */
  1378.             /*
  1379.              * Remove by Leo
  1380.              * ChangeLeftSoftkey(STR_GLOBAL_OK,IMG_GLOBAL_OK);
  1381.              * ChangeRightSoftkey(STR_GLOBAL_CANCEL,IMG_GLOBAL_NO);
  1382.              */
  1383.             /* Register function for left soft key */
  1384.             SetLeftSoftkeyFunction(PECommitLastAction, KEY_EVENT_UP);
  1385.             /* Register function for right soft key */
  1386.             SetRightSoftkeyFunction(PECancelLastAction, KEY_EVENT_UP);
  1387.             ClearKeyHandler(KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1388.             ClearKeyHandler(KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1389.             break;
  1390.         case SEL_PE_EDIT_OPT_SAVE_PIC:      /* Save */
  1391.         case SEL_PE_EDIT_OPT_SAVE_PIC_AS:   /* Save As */
  1392.         case SEL_PE_EDIT_OPT_PEN_SETTING:   /* Pen Setting */
  1393.         case SEL_PE_EDIT_OPT_FILL_PIC:      /* Fill Picture */
  1394.         case SEL_PE_EDIT_OPT_CUT:           /* Cut */
  1395.         case SEL_PE_EDIT_OPT_COPY:          /* Copy */
  1396.         case SEL_PE_EDIT_OPT_PASTE:         /* Paste */
  1397.         case SEL_PE_EDIT_OPT_UNDO:          /* Undo */
  1398.         case SEL_PE_EDIT_OPT_REDO:          /* Redo */
  1399.         case SEL_PE_EDIT_OPT_ZOOM:          /* Zoom */
  1400.         case SEL_PE_EDIT_OPT_FULL_SIZE:     /* FULL Size */
  1401.         case SEL_PE_EDIT_OPT_HELP:          /* Help */
  1402.         default:
  1403.             /* Register function for left soft key */
  1404.             SetLeftSoftkeyFunction(EntryScr4PicEditEditOpt, KEY_EVENT_UP);
  1405.             /* Register function for right soft key */
  1406.             SetRightSoftkeyFunction(GoBackHistory4PicEditEditImage, KEY_EVENT_UP);
  1407.             //              SetKeyHandler(GoBackHistory4PicEditEditImage, KEY_LEFT_ARROW,KEY_EVENT_DOWN);
  1408.             //              SetKeyHandler(EntryScr4PicEditEditOpt,KEY_RIGHT_ARROW,KEY_EVENT_DOWN);
  1409.             break;
  1410.     }
  1411. }
  1412. /*****************************************************************************
  1413.  * FUNCTION
  1414.  *  GoBackHistory4PicEditEditImage
  1415.  * DESCRIPTION
  1416.  *  Go back History function for Image editing screen
  1417.  * PARAMETERS
  1418.  *  void
  1419.  * RETURNS
  1420.  *  void
  1421.  *****************************************************************************/
  1422. void GoBackHistory4PicEditEditImage(void)
  1423. {
  1424.     /*----------------------------------------------------------------*/
  1425.     /* Local Variables                                                */
  1426.     /*----------------------------------------------------------------*/
  1427.     /*----------------------------------------------------------------*/
  1428.     /* Code Body                                                      */
  1429.     /*----------------------------------------------------------------*/
  1430.     if ((!IS_PE_ADD_IMAGE(gPEAttrib)) && (!IS_PE_IMAGE_CHANGED(gPEAttrib)))
  1431.     {
  1432.         GoBackHistory();
  1433.     }
  1434.     else
  1435.     {
  1436.         EntryScr4PicEditSaveImageConfirm();
  1437.     }
  1438. }
  1439. /*****************************************************************************
  1440.  * FUNCTION
  1441.  *  PECommitLastAction
  1442.  * DESCRIPTION
  1443.  *  Commits the last Action when pressed ok of image editing screen
  1444.  * PARAMETERS
  1445.  *  void
  1446.  * RETURNS
  1447.  *  void
  1448.  *****************************************************************************/
  1449. void PECommitLastAction(void)
  1450. {
  1451.     /*----------------------------------------------------------------*/
  1452.     /* Local Variables                                                */
  1453.     /*----------------------------------------------------------------*/
  1454.     /*----------------------------------------------------------------*/
  1455.     /* Code Body                                                      */
  1456.     /*----------------------------------------------------------------*/
  1457.     if (gPECurrentAction == SEL_PE_EDIT_OPT_RESIZE)
  1458.     {
  1459.         SavePEContext();
  1460.         SetPicEditPenBoundary();
  1461.         ResizePicEditImageDataBuff();
  1462.         if (IS_PE_ZOOM_IMAGE(gPEAttrib))
  1463.         {
  1464.             SetPicEditZoomWindow(FALSE);
  1465.         }
  1466.         SET_PE_IMAGE_EDIT(gPEAttrib);
  1467.         UNSET_PE_PEN_DOWN(gPEAttrib);
  1468.         UNSET_PE_MARK_IMAGE(gPEAttrib);
  1469.         DisplayPopup((PU8) GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIVATED, 1, PE_NOTIFYDURATION, SUCCESS_TONE);
  1470.         gPECurrentAction = SEL_PE_EDIT_OPT_SAVE_PIC;
  1471.     }
  1472.     else
  1473.     {
  1474.         /* Leo start 20050720, mark box display error */
  1475.         if (gpPicEditPen->penX <= gPicEditMark.minX)
  1476.         {
  1477.             /* gPicEditMark.maxX=gPicEditMark.minX; */
  1478.             /* Leo end 20050720 */
  1479.             gPicEditMark.minX = gpPicEditPen->penX;
  1480.         }
  1481.         else
  1482.         {
  1483.             gPicEditMark.maxX = gpPicEditPen->penX;
  1484.         }
  1485.         /* Leo start 20050720, mark box display error */
  1486.         if (gpPicEditPen->penY <= gPicEditMark.minY)
  1487.         {
  1488.             /* gPicEditMark.maxY=gPicEditMark.minY; */
  1489.             /* Leo end 20050720 */
  1490.             gPicEditMark.minY = gpPicEditPen->penY;
  1491.         }
  1492.         else
  1493.         {
  1494.             gPicEditMark.maxY = gpPicEditPen->penY;
  1495.         }
  1496.         UNSET_PE_IMAGE_EDIT(gPEAttrib);
  1497.         SET_PE_MARK_IMAGE(gPEAttrib);
  1498.         UNSET_PE_COPY_IMAGE(gPEAttrib);
  1499.         EntryScr4PicEditEditOpt();
  1500.     }
  1501. }
  1502. /*****************************************************************************
  1503.  * FUNCTION
  1504.  *  PECancelLastAction
  1505.  * DESCRIPTION
  1506.  *  Cancels the last Action when pressed Cancel of image editing screen
  1507.  * PARAMETERS
  1508.  *  void
  1509.  * RETURNS
  1510.  *  void
  1511.  *****************************************************************************/
  1512. void PECancelLastAction(void)
  1513. {
  1514.     /*----------------------------------------------------------------*/
  1515.     /* Local Variables                                                */
  1516.     /*----------------------------------------------------------------*/
  1517.     /*----------------------------------------------------------------*/
  1518.     /* Code Body                                                      */
  1519.     /*----------------------------------------------------------------*/
  1520.     if (gPECurrentAction == SEL_PE_EDIT_OPT_RESIZE)
  1521.     {
  1522.         SetCurrentImageParams();
  1523.     }
  1524.     gPECurrentAction = SEL_PE_EDIT_OPT_SAVE_PIC;
  1525.     UNSET_PE_PEN_DOWN(gPEAttrib);
  1526.     UNSET_PE_MARK_IMAGE(gPEAttrib);
  1527.     gui_push_clip();
  1528.     gui_set_clip(0, UI_device_height - MMI_button_bar_height - 1, UI_device_width - 1, UI_device_height - 1);
  1529.     /* 051605 Calvin modified */
  1530.     if (wgui_is_wallpaper_on_bottom())
  1531.     {
  1532.         gdi_draw_solid_rect(
  1533.             0,
  1534.             UI_device_height - MMI_button_bar_height,
  1535.             UI_device_width - 1,
  1536.             UI_device_height - 1,
  1537.             GDI_COLOR_TRANSPARENT);
  1538.     }
  1539.     else
  1540.     {
  1541.         gdi_image_draw(0, 0, (U8*) GetImage(IMG_PE_BACKGROUND));
  1542.     }
  1543.     /* Calvin end */
  1544.     gui_pop_clip();
  1545.     ChangeLeftSoftkey(STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS);
  1546.     ChangeRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_BACK);
  1547.     /* Register function for left soft key */
  1548.     SetLeftSoftkeyFunction(EntryScr4PicEditEditOpt, KEY_EVENT_UP);
  1549.     /* Register function for right soft key */
  1550.     SetRightSoftkeyFunction(GoBackHistory4PicEditEditImage, KEY_EVENT_UP);
  1551.     SetKeyHandler(GoBackHistory4PicEditEditImage, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
  1552.     SetKeyHandler(EntryScr4PicEditEditOpt, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
  1553. #if(UI_DOUBLE_BUFFER_SUPPORT)
  1554.     gui_lock_double_buffer();
  1555. #endif 
  1556.     ShowPicEditImageWindow(&gpPEFileBuff[-MAX_IMAGE_HEADER_LENGTH]);
  1557. #if(UI_DOUBLE_BUFFER_SUPPORT)
  1558.     gui_unlock_double_buffer();
  1559.     gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
  1560. #endif /* (UI_DOUBLE_BUFFER_SUPPORT) */ 
  1561. }
  1562. /*****************************************************************************
  1563.  * FUNCTION
  1564.  *  SetPicEditZoomWindow
  1565.  * DESCRIPTION
  1566.  *  Sets the parameters of zoom window
  1567.  * PARAMETERS
  1568.  *  bFlag       [IN]        
  1569.  * RETURNS
  1570.  *  void
  1571.  *****************************************************************************/
  1572. void SetPicEditZoomWindow(BOOL bFlag)   /* flag FALSE to init gPicEditZoomWindow */
  1573. {
  1574.     /*----------------------------------------------------------------*/
  1575.     /* Local Variables                                                */
  1576.     /*----------------------------------------------------------------*/
  1577.     /*----------------------------------------------------------------*/
  1578.     /* Code Body                                                      */
  1579.     /*----------------------------------------------------------------*/
  1580.     if (((gpPicEditPen->maxX - gpPicEditPen->minX) * gPEZoomFactor) > PE_SCR_SIZE_MAX)
  1581.     {
  1582.         if ((bFlag) || (gpPicEditPen->penX >= gPicEditZoomWindow.maxX) ||
  1583.             (gpPicEditPen->penX < gPicEditZoomWindow.minX))
  1584.         {
  1585.             gPicEditZoomWindow.minX = gpPicEditPen->penX - ((PE_SCR_SIZE_MAX / gPEZoomFactor) >> 1);
  1586.         }
  1587.         if (gPicEditZoomWindow.minX < gpPicEditPen->minX)
  1588.         {
  1589.             gPicEditZoomWindow.minX = gpPicEditPen->minX;
  1590.         }
  1591.         gPicEditZoomWindow.maxX = gPicEditZoomWindow.minX + PE_SCR_SIZE_MAX / gPEZoomFactor;
  1592.         if (gPicEditZoomWindow.maxX > gpPicEditPen->maxX)
  1593.         {
  1594.             gPicEditZoomWindow.maxX = gpPicEditPen->maxX;
  1595.             gPicEditZoomWindow.minX = gPicEditZoomWindow.maxX - PE_SCR_SIZE_MAX / gPEZoomFactor;
  1596.         }
  1597.     }
  1598.     else
  1599.     {
  1600.         gPicEditZoomWindow.minX = gpPicEditPen->minX;
  1601.         gPicEditZoomWindow.maxX = gpPicEditPen->maxX;
  1602.     }
  1603.     if (((gpPicEditPen->maxY - gpPicEditPen->minY) * gPEZoomFactor) > PE_SCR_SIZE_MAX)
  1604.     {
  1605.         if ((bFlag) || (gpPicEditPen->penY >= gPicEditZoomWindow.maxY) ||
  1606.             (gpPicEditPen->penY < gPicEditZoomWindow.minY))
  1607.         {
  1608.             gPicEditZoomWindow.minY = gpPicEditPen->penY - ((PE_SCR_SIZE_MAX / gPEZoomFactor) >> 1);
  1609.         }
  1610.         if (gPicEditZoomWindow.minY < gpPicEditPen->minY)
  1611.         {
  1612.             gPicEditZoomWindow.minY = gpPicEditPen->minY;
  1613.         }
  1614.         gPicEditZoomWindow.maxY = gPicEditZoomWindow.minY + PE_SCR_SIZE_MAX / gPEZoomFactor;
  1615.         if (gPicEditZoomWindow.maxY > gpPicEditPen->maxY)
  1616.         {
  1617.             gPicEditZoomWindow.maxY = gpPicEditPen->maxY;
  1618.             gPicEditZoomWindow.minY = gPicEditZoomWindow.maxY - PE_SCR_SIZE_MAX / gPEZoomFactor;
  1619.         }
  1620.     }
  1621.     else
  1622.     {
  1623.         gPicEditZoomWindow.minY = gpPicEditPen->minY;
  1624.         gPicEditZoomWindow.maxY = gpPicEditPen->maxY;
  1625.     }
  1626. }
  1627. /*
  1628.  * void SetPicEditZoomWindow(BOOL bFlag)//flag FALSE to init gPicEditZoomWindow
  1629.  * {
  1630.  * if (((gpPicEditPen->maxX-gpPicEditPen->minX)*gPEZoomFactor)>PE_SCR_SIZE_MAX)
  1631.  * {
  1632.  * if ((bFlag)||(gpPicEditPen->penX>=gPicEditZoomWindow.maxX))
  1633.  * gPicEditZoomWindow.minX=SET_WINDOW_MINX(gpPicEditPen->penX-PE_SCR_SIZE_MAX/2);
  1634.  * if (gPicEditZoomWindow.minX<gpPicEditPen->minX)
  1635.  * gPicEditZoomWindow.minX=gpPicEditPen->minX;
  1636.  * gPicEditZoomWindow.maxX=gPicEditZoomWindow.minX+PE_SCR_SIZE_MAX;
  1637.  * }
  1638.  * else
  1639.  * {
  1640.  * gPicEditZoomWindow.minX=SET_WINDOW_MINX((gpPicEditPen->maxX-gpPicEditPen->minX)*gPEZoomFactor);
  1641.  * gPicEditZoomWindow.maxX=gPicEditZoomWindow.minX+((gpPicEditPen->maxX-gpPicEditPen->minX)*gPEZoomFactor);
  1642.  * }
  1643.  * 
  1644.  * if (((gpPicEditPen->maxY-gpPicEditPen->minY)*gPEZoomFactor)>PE_SCR_SIZE_MAX)
  1645.  * {
  1646.  * if ((bFlag)||(gpPicEditPen->penY>=gPicEditZoomWindow.maxY))
  1647.  * gPicEditZoomWindow.minY=SET_WINDOW_MINY(gpPicEditPen->penY-PE_SCR_SIZE_MAX/2);
  1648.  * if (gPicEditZoomWindow.minY<gpPicEditPen->minY)
  1649.  * gPicEditZoomWindow.minY=gpPicEditPen->minY;
  1650.  * gPicEditZoomWindow.maxY=gPicEditZoomWindow.minY+PE_SCR_SIZE_MAX;
  1651.  * }
  1652.  * else
  1653.  * {
  1654.  * gPicEditZoomWindow.minY=SET_WINDOW_MINY((gpPicEditPen->maxY-gpPicEditPen->minY)*gPEZoomFactor);
  1655.  * gPicEditZoomWindow.maxY=gPicEditZoomWindow.minY+((gpPicEditPen->maxY-gpPicEditPen->minY)*gPEZoomFactor);
  1656.  * }
  1657.  * }
  1658.  */
  1659. #endif /* __MMI_PICTURE_EDITOR_SUPPORT__ */