diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index ba96e2ac..e64bd5b2 100755 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -24,6 +24,8 @@ target_sources(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/src/gx_binres_language_info_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gx_binres_language_table_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gx_binres_theme_load.c + ${CMAKE_CURRENT_LIST_DIR}/src/gx_binres_pixelmap_load.c + ${CMAKE_CURRENT_LIST_DIR}/src/gx_binres_font_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gx_brush_default.c ${CMAKE_CURRENT_LIST_DIR}/src/gx_brush_define.c ${CMAKE_CURRENT_LIST_DIR}/src/gx_button_background_draw.c @@ -913,6 +915,8 @@ target_sources(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/src/gxe_binres_language_info_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gxe_binres_language_table_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gxe_binres_theme_load.c + ${CMAKE_CURRENT_LIST_DIR}/src/gxe_binres_pixelmap_load.c + ${CMAKE_CURRENT_LIST_DIR}/src/gxe_binres_font_load.c ${CMAKE_CURRENT_LIST_DIR}/src/gxe_brush_default.c ${CMAKE_CURRENT_LIST_DIR}/src/gxe_brush_define.c ${CMAKE_CURRENT_LIST_DIR}/src/gxe_button_create.c diff --git a/common/inc/gx_api.h b/common/inc/gx_api.h index 46c0d38c..34ee9e81 100644 --- a/common/inc/gx_api.h +++ b/common/inc/gx_api.h @@ -24,7 +24,7 @@ /* APPLICATION INTERFACE DEFINITION RELEASE */ /* */ /* gx_api.h PORTABLE C */ -/* 6.2.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -68,7 +68,7 @@ /* added new widget type */ /* GX_GENERIC_SCROLL_WHEEL, */ /* added animation delete API, */ -/* added generic Dave2D */ +/* added generic Dave2D */ /* graphics accelerator */ /* support, */ /* resulting in version 6.1.7 */ @@ -104,6 +104,14 @@ /* 03-08-2023 Ting Zhu Modified comment(s), */ /* updated patch version, */ /* resulting in version 6.2.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added new APIs for loading */ +/* pixelmap and font from */ +/* standalone binary, */ +/* removed unused defines, */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ @@ -126,8 +134,8 @@ extern "C" { #define AZURE_RTOS_GUIX #define GUIX_MAJOR_VERSION 6 -#define GUIX_MINOR_VERSION 2 -#define GUIX_PATCH_VERSION 1 +#define GUIX_MINOR_VERSION 3 +#define GUIX_PATCH_VERSION 0 /* The following symbols are defined for backward compatibility reasons.*/ #define __PRODUCT_GUIX__ @@ -363,7 +371,9 @@ typedef struct GX_STRING_STRUCT #define GX_FALSE 0 #define GX_NULL 0 #define GX_ID_NONE 0 -#define GX_MAGIC_NUMBER 0x4758U +#define GX_MAGIC_NUMBER 0x4758U /* GX */ +#define GX_RESOURCE_TYPE_BINRES_NORMAL 0x4758U /* GX */ +#define GX_RESOURCE_TYPE_BINRES_STANDALONE 0x4753U /* GS */ /* API return values. */ @@ -970,6 +980,7 @@ typedef struct GX_STRING_STRUCT #define GX_CANVAS_VISIBLE 0x04 /* Canvas is visible */ #define GX_CANVAS_MODIFIED 0x08 #define GX_CANVAS_COMPOSITE 0x20 /* Canvas is a buffer for creating composite*/ +#define GX_CANVAS_PARTIAL_FRAME_BUFFER 0x40 /* Define common combinations. */ @@ -1519,6 +1530,10 @@ typedef struct GX_DRAW_CONTEXT_STRUCT GX_RECTANGLE gx_draw_context_dirty; GX_RECTANGLE *gx_draw_context_clip; GX_VALUE gx_draw_context_pitch; +#if defined GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + GX_VALUE gx_draw_context_offset_x; + GX_VALUE gx_draw_context_offset_y; +#endif } GX_DRAW_CONTEXT; /* Define fill map info type. */ @@ -1808,6 +1823,12 @@ typedef struct GX_CANVAS_STRUCT /* Define the canvas memory pointer. */ GX_COLOR *gx_canvas_memory; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + GX_VALUE gx_canvas_memory_width; + GX_VALUE gx_canvas_memory_height; + GX_VALUE gx_canvas_memory_offset_x; + GX_VALUE gx_canvas_memory_offset_y; +#endif /* padded canvas memory buffer, only needed for Win32 */ #ifdef GX_TARGET_WIN32 @@ -1835,7 +1856,6 @@ typedef struct GX_CANVAS_STRUCT GX_UBYTE gx_canvas_alpha; GX_UBYTE gx_canvas_draw_nesting; GX_BYTE gx_canvas_hardware_layer; - } GX_CANVAS; /* Define Theme type */ @@ -1877,7 +1897,6 @@ typedef struct GX_PEN_CONFIGURATION_STRUCT UINT gx_pen_configuration_max_pen_speed_ticks; } GX_PEN_CONFIGURATION; - #define GX_RESOURCE_HEADER_SIZE 20 #define GX_THEME_HEADER_SIZE 114 #define GX_COLOR_HEADER_SIZE 8 @@ -3002,6 +3021,8 @@ typedef struct GX_FIXED_POINT_STRUCT #endif #define gx_binres_language_table_load_ext _gx_binres_language_table_load_ext #define gx_binres_theme_load _gx_binres_theme_load +#define gx_binres_pixelmap_load _gx_binres_pixelmap_load +#define gx_binres_font_load _gx_binres_font_load #define gx_brush_default _gx_brush_default #define gx_brush_define _gx_brush_define @@ -3488,8 +3509,6 @@ typedef struct GX_FIXED_POINT_STRUCT #define gx_text_scroll_wheel_draw _gx_text_scroll_wheel_draw #define gx_text_scroll_wheel_event_process _gx_text_scroll_wheel_event_process -#define gx_transition_window_create(a, b, c, d, e, f) _gx_transition_window_create(a, b, (GX_WIDGET *)c, d, e, f) - #define gx_tree_view_create(a, b, c, d, e, f) _gx_tree_view_create((GX_TREE_VIEW *)a, b, (GX_WIDGET *)c, d, e, f) #define gx_tree_view_draw _gx_tree_view_draw #define gx_tree_view_event_process _gx_tree_view_event_process @@ -3662,6 +3681,8 @@ UINT _gx_binres_language_table_load(GX_UBYTE *root_address, GX_UBYTE ****returne #endif UINT _gx_binres_language_table_load_ext(GX_UBYTE *root_address, GX_STRING ***returned_language_table); UINT _gx_binres_theme_load(GX_UBYTE *root_address, INT theme_id, GX_THEME **returned_theme); +UINT _gx_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap); +UINT _gx_binres_font_load(GX_UBYTE *root_address, UINT font_index, GX_UBYTE *buffer, ULONG *buffer_size); UINT _gx_brush_default(GX_BRUSH *brush); UINT _gx_brush_define(GX_BRUSH *brush, GX_COLOR line_color, GX_COLOR fill_color, UINT style); @@ -4484,6 +4505,8 @@ UINT _gx_window_wallpaper_set(GX_WINDOW *window, GX_RESOURCE_ID wallpaper_id, GX #endif #define gx_binres_language_table_load_ext _gxe_binres_language_table_load_ext #define gx_binres_theme_load _gxe_binres_theme_load +#define gx_binres_pixelmap_load _gxe_binres_pixelmap_load +#define gx_binres_font_load _gxe_binres_font_load #define gx_brush_default _gxe_brush_default #define gx_brush_define _gxe_brush_define @@ -5139,6 +5162,8 @@ UINT _gxe_binres_language_table_load(GX_UBYTE *root_address, GX_UBYTE ****return #endif UINT _gxe_binres_language_table_load_ext(GX_UBYTE *root_address, GX_STRING ***returned_language_table); UINT _gxe_binres_theme_load(GX_UBYTE *root_address, INT theme_id, GX_THEME **returned_theme); +UINT _gxe_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap); +UINT _gxe_binres_font_load(GX_UBYTE *root_address, UINT font_index, GX_UBYTE *buffer, ULONG *buffer_size); UINT _gxe_brush_default(GX_BRUSH *brush); UINT _gxe_brush_define(GX_BRUSH *brush, GX_COLOR line_color, GX_COLOR fill_color, UINT style); diff --git a/common/inc/gx_binres_loader.h b/common/inc/gx_binres_loader.h index b69fb5f1..ef26fafa 100644 --- a/common/inc/gx_binres_loader.h +++ b/common/inc/gx_binres_loader.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* gx_binres_loader.h PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -46,6 +46,9 @@ /* defined macros to read */ /* integer value, */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* declared new prototypes, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ @@ -84,6 +87,13 @@ UINT _gx_binres_resource_header_load(GX_BINRES_DATA_INFO *info, GX_RESOURCE_HEAD UINT _gx_binres_string_header_load(GX_BINRES_DATA_INFO *info, GX_STRING_HEADER *header); UINT _gx_binres_language_header_load(GX_BINRES_DATA_INFO *info, GX_LANGUAGE_HEADER *header); +UINT _gx_binres_one_pixelmap_load(GX_BINRES_DATA_INFO *info, GX_PIXELMAP **returned_pixelmap, USHORT *map_id); +UINT _gx_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap); +UINT _gx_binres_font_buffer_size_get(GX_BINRES_DATA_INFO *info, UINT *buffer_size, GX_BOOL reset_read_offset); +UINT _gx_binres_one_font_load(GX_BINRES_DATA_INFO *info, GX_FONT **return_font); +UINT _gx_binres_font_header_load(GX_BINRES_DATA_INFO *info, GX_FONT_HEADER *header); +UINT _gx_binres_font_load(GX_UBYTE *root_address, UINT font_index, GX_UBYTE *buffer, ULONG *buffer_size); +UINT _gx_binres_standalone_resource_seek(GX_BINRES_DATA_INFO *info, UINT res_index); /* Define error checking shells for API services. These are only referenced by the application. */ @@ -95,6 +105,8 @@ UINT _gxe_binres_language_table_load(GX_UBYTE *root_address, GX_UBYTE ****return #endif UINT _gxe_binres_language_table_load_ext(GX_UBYTE *root_address, GX_STRING ***returned_language_table); UINT _gxe_binres_theme_load(GX_UBYTE *root_address, INT theme_id, GX_THEME **returned_theme); +UINT _gxe_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap); +UINT _gxe_binres_font_load(GX_UBYTE *root_address, UINT res_index, GX_UBYTE *buffer, ULONG *buffer_size); #endif diff --git a/common/inc/gx_display.h b/common/inc/gx_display.h index d47105e3..a31ea4a6 100644 --- a/common/inc/gx_display.h +++ b/common/inc/gx_display.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* gx_display.h PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -60,9 +60,11 @@ /* added language direction */ /* table set declarations, */ /* resulting in version 6.1.10 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed unused prototypes, */ -/* resulting in version 6.x */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ @@ -542,3 +544,13 @@ VOID *_win32_canvas_memory_prepare(GX_CANVAS *canvas, GX_RECTANGLE *dirty); } #endif +#if defined GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER +#define GX_CALCULATE_PUTROW(putrow, xpos, ypos, context)\ + putrow += (ypos - context->gx_draw_context_offset_y) * context->gx_draw_context_pitch;\ + putrow += (xpos - context->gx_draw_context_offset_x) +#else +#define GX_CALCULATE_PUTROW(putrow, xpos, ypos, context)\ + putrow += ypos * context->gx_draw_context_pitch;\ + putrow += xpos +#endif + diff --git a/common/inc/gx_image_reader.h b/common/inc/gx_image_reader.h index 5f366763..1c7669cc 100644 --- a/common/inc/gx_image_reader.h +++ b/common/inc/gx_image_reader.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* gx_image_reader.h PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -52,9 +52,11 @@ /* added definitions for fixed */ /* size table dimensions, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), added */ +/* 10-31-2023 Ting Zhu Modified comment(s), added */ /* support for ARM Helium, */ -/* resulting in version 6.x */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) @@ -133,6 +135,10 @@ typedef struct GX_JPEG_INFO_STRUCT VOID (*gx_jpeg_pixel_write)(struct GX_JPEG_INFO_STRUCT *jpeg_info, GX_UBYTE red, GX_UBYTE green, GX_UBYTE blue); #endif GX_UBYTE *gx_jpeg_output_buffer; +#if defined(GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER) + GX_VALUE gx_jpeg_output_buffer_offset_x; + GX_VALUE gx_jpeg_output_buffer_offset_y; +#endif USHORT gx_jpeg_output_width; USHORT gx_jpeg_output_height; INT gx_jpeg_output_stride; diff --git a/common/inc/gx_user_sample.h b/common/inc/gx_user_sample.h index 77ed1c6c..f8253d91 100644 --- a/common/inc/gx_user_sample.h +++ b/common/inc/gx_user_sample.h @@ -24,7 +24,7 @@ /* APPLICATION INTERFACE DEFINITION RELEASE */ /* */ /* gx_user.h PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -45,10 +45,11 @@ /* 01-31-2022 Kenneth Maxwell Modified comment(s), */ /* fixed typo, */ /* resulting in version 6.1.10 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ -/* added GX_ENABLE_ARM_HELIUM */ -/* definition, */ -/* resulting in version 6.x */ +/* 10-31-2023 Ting Zhu Modified comment(s), added */ +/* GX_ENABLE_ARM_HELIUM and */ +/* partial canvas frame buffer */ +/* support configurations, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ @@ -76,5 +77,18 @@ /* This can be defined to enable the use of ARM Helium intrinsics for JPEG decoding. */ /* #define GX_ENABLE_ARM_HELIUM */ + +/* This can be defined to enable the partial canvas frame buffer feature. */ +/* #define GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER */ + +/* The two following definitions can be used to specify the canvas refresh directions for the partial canvas frame buffer feature. + By default, the canvas refreshes its dirty areas one by one. + If the application requires refreshing the canvas in a specific direction to mitigate tearing effects, one of the following two definitions can be used. + In this scenario, the total dirty area that covers all the dirty areas is calculated, and then the canvas is refreshed in the direction + defined by one of the following two definitions. */ + +/* #define GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL */ +/* #define GX_CANVAS_REFRESH_DIRECTION_VERTICAL */ + #endif diff --git a/common/src/gx_accordion_menu_event_process.c b/common/src/gx_accordion_menu_event_process.c index 5a1a6060..8545ecd1 100644 --- a/common/src/gx_accordion_menu_event_process.c +++ b/common/src/gx_accordion_menu_event_process.c @@ -238,7 +238,7 @@ GX_WIDGET *child; /* FUNCTION RELEASE */ /* */ /* _gx_accordion_menu_close_animation_update PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -276,6 +276,9 @@ GX_WIDGET *child; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added NULL pointer check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_accordion_menu_close_animation_update(GX_ACCORDION_MENU *accordion) @@ -287,6 +290,11 @@ GX_VALUE shift; GX_RECTANGLE size; GX_WIDGET *child; + if (!deselected) + { + return GX_SUCCESS; + } + child = deselected -> gx_menu_list.gx_widget_first_child; /* Calcualte total height of list children. */ @@ -334,7 +342,7 @@ GX_WIDGET *child; /* FUNCTION RELEASE */ /* */ /* _gx_accordion_menu_open_animation_update PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -370,6 +378,9 @@ GX_WIDGET *child; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added NULL pointer check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_accordion_menu_open_animation_update(GX_ACCORDION_MENU *accordion) @@ -381,6 +392,11 @@ GX_VALUE list_children_height = 0; GX_VALUE height = 0; GX_WIDGET *child; + if (!selected) + { + return GX_SUCCESS; + } + child = selected -> gx_menu_list.gx_widget_first_child; /* Calcualte total height of list children. */ diff --git a/common/src/gx_binres_font_load.c b/common/src/gx_binres_font_load.c new file mode 100644 index 00000000..01ad72c4 --- /dev/null +++ b/common/src/gx_binres_font_load.c @@ -0,0 +1,140 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) Microsoft Corporation. All rights reserved. */ +/* */ +/* This software is licensed under the Microsoft Software License */ +/* Terms for Microsoft Azure RTOS. Full text of the license can be */ +/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ +/* and in the root directory of this software. */ +/* */ +/**************************************************************************/ + + +/**************************************************************************/ +/**************************************************************************/ +/** */ +/** GUIX Component */ +/** */ +/** Binres Loader Management (Binres Loader) */ +/** */ +/**************************************************************************/ + +#define GX_SOURCE_CODE + + +/* Include necessary system files. */ + +#include "gx_api.h" +#include "gx_binres_loader.h" +#include "gx_utility.h" + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_binres_font_load PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This service loads a font from a resource data memory. */ +/* */ +/* INPUT */ +/* */ +/* root_address Pointer to the binary data */ +/* memory */ +/* font_index Resource index of the font */ +/* to be loaded */ +/* buffer Pointer to the buffer to */ +/* store the loaded font */ +/* buffer_size Size of the buffer. It will */ +/* be overwritten with the */ +/* required buffer size if the */ +/* input buffer size is */ +/* insufficient */ +/* */ +/* OUTPUT */ +/* */ +/* Status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_standalone_resource_seek Locate the resource data */ +/* _gx_binres_font_buffer_size_get Get the required font buffer */ +/* size */ +/* _gx_binres_one_font_load Load one font */ +/* */ +/* CALLED BY */ +/* */ +/* Application Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +UINT _gx_binres_font_load(GX_UBYTE *root_address, UINT font_index, GX_UBYTE *buffer, ULONG *buffer_size) +{ +UINT status = GX_SUCCESS; +GX_BINRES_DATA_INFO info; +UINT required_size; + + /* file format + +--------+ + | | <-- represents one bytes + +--------+ + + |+========+ + | | <-- represents a variable number of bytes + |+========+ + + |+--------+--------+--------+--------+ + | magic number | resource count | + |+--------+--------+--------+--------+ + |+--------+--------+--------+--------+ + | resource offset | + |+--------+--------+--------+--------+ + |+--------+--------+--------+--------+ + | ... | + |+--------+--------+--------+--------+ + |+===================================+ + | resource data | + |+===================================+ + */ + + memset(&info, 0, sizeof(GX_BINRES_DATA_INFO)); + + info.gx_binres_root_address = (GX_UBYTE *)root_address; + info.gx_binres_buffer = (GX_UBYTE *)buffer; + info.gx_binres_buffer_size = *buffer_size; + + status = _gx_binres_standalone_resource_seek(&info, font_index); + + if (status != GX_SUCCESS) + { + return status; + } + + status = _gx_binres_font_buffer_size_get(&info, &required_size, GX_TRUE); + + if (status != GX_SUCCESS) + { + return status; + } + + if (required_size > *buffer_size) + { + *buffer_size = required_size; + return GX_INVALID_MEMORY_SIZE; + } + + status = _gx_binres_one_font_load(&info, GX_NULL); + + return status; +} + diff --git a/common/src/gx_binres_pixelmap_load.c b/common/src/gx_binres_pixelmap_load.c new file mode 100644 index 00000000..fab2e968 --- /dev/null +++ b/common/src/gx_binres_pixelmap_load.c @@ -0,0 +1,188 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) Microsoft Corporation. All rights reserved. */ +/* */ +/* This software is licensed under the Microsoft Software License */ +/* Terms for Microsoft Azure RTOS. Full text of the license can be */ +/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ +/* and in the root directory of this software. */ +/* */ +/**************************************************************************/ + + +/**************************************************************************/ +/**************************************************************************/ +/** */ +/** GUIX Component */ +/** */ +/** Binres Loader Management (Binres Loader) */ +/** */ +/**************************************************************************/ + +#define GX_SOURCE_CODE + + +/* Include necessary system files. */ + +#include "gx_api.h" +#include "gx_binres_loader.h" +#include "gx_utility.h" + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_binres_standalone_resource_seek PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function locates the resource data in the binary data memory. */ +/* */ +/* INPUT */ +/* */ +/* info Binary resource control block */ +/* res_index The index of the resource to */ +/* be located */ +/* */ +/* OUTPUT */ +/* */ +/* Status Completion status */ +/* */ +/* CALLS */ +/* */ +/* None */ +/* */ +/* CALLED BY */ +/* */ +/* GUIX Internal Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +UINT _gx_binres_standalone_resource_seek(GX_BINRES_DATA_INFO *info, UINT res_index) +{ +USHORT type; +ULONG count; + + GX_BINRES_READ_USHORT(type, info -> gx_binres_root_address + info -> gx_binres_read_offset); + info -> gx_binres_read_offset += sizeof(USHORT); + + if (type != GX_RESOURCE_TYPE_BINRES_STANDALONE) + { + return GX_INVALID_FORMAT; + } + + /* Skip 2 bytes version. */ + info -> gx_binres_read_offset += sizeof(USHORT); + + GX_BINRES_READ_ULONG(count, info -> gx_binres_root_address + info -> gx_binres_read_offset); + info -> gx_binres_read_offset += sizeof(ULONG); + + if ((USHORT)res_index >= count) + { + return GX_NOT_FOUND; + } + + if (count > 1) + { + GX_BINRES_READ_ULONG(info -> gx_binres_read_offset, info -> gx_binres_root_address + info -> gx_binres_read_offset + sizeof(ULONG) * res_index); + } + + return GX_SUCCESS; +} + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_binres_pixelmap_load PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This service loads a pixelmap from a resource data memory. */ +/* */ +/* INPUT */ +/* */ +/* root_address Pointer to the binary data */ +/* memory */ +/* map_index Resource index of the pixelmap*/ +/* to be loaded */ +/* pixelmap Pointer to the returned */ +/* pixelmap */ +/* */ +/* OUTPUT */ +/* */ +/* Status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_standalone_resource_seek Locate the resource data */ +/* _gx_binres_one_pixelmap_load Load one pixelmap */ +/* */ +/* CALLED BY */ +/* */ +/* Application Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +UINT _gx_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap) +{ +UINT status = GX_SUCCESS; +GX_BINRES_DATA_INFO info; + + /* file format + +--------+ + | | <-- represents one bytes + +--------+ + + |+========+ + | | <-- represents a variable number of bytes + |+========+ + + |+--------+--------+--------+--------+ + | magic number | resource count | + |+--------+--------+--------+--------+ + |+--------+--------+--------+--------+ + | resource offset | + |+--------+--------+--------+--------+ + |+--------+--------+--------+--------+ + | ... | + |+--------+--------+--------+--------+ + |+===================================+ + | resource data | + |+===================================+ + */ + + memset(&info, 0, sizeof(GX_BINRES_DATA_INFO)); + + info.gx_binres_root_address = (GX_UBYTE *)root_address; + info.gx_binres_buffer = (GX_UBYTE *)pixelmap; + info.gx_binres_buffer_size = sizeof(GX_PIXELMAP); + + status = _gx_binres_standalone_resource_seek(&info, map_index); + + if (status == GX_SUCCESS) + { + status = _gx_binres_one_pixelmap_load(&info, GX_NULL, GX_NULL); + } + + return status; +} + diff --git a/common/src/gx_binres_theme_load.c b/common/src/gx_binres_theme_load.c index ecd49e00..6e5bbe20 100644 --- a/common/src/gx_binres_theme_load.c +++ b/common/src/gx_binres_theme_load.c @@ -312,7 +312,7 @@ static UINT _gx_binres_palette_header_load(GX_BINRES_DATA_INFO *info, GX_PALETTE /* FUNCTION RELEASE */ /* */ /* _gx_binres_font_header_load PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -346,14 +346,22 @@ static UINT _gx_binres_palette_header_load(GX_BINRES_DATA_INFO *info, GX_PALETTE /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* removed use of memcpy, */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* made the function public, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT -static UINT _gx_binres_font_header_load(GX_BINRES_DATA_INFO *info, GX_FONT_HEADER *header) +UINT _gx_binres_font_header_load(GX_BINRES_DATA_INFO *info, GX_FONT_HEADER *header) { GX_BINRES_READ_USHORT(header -> gx_font_header_magic_number, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); + if(header -> gx_font_header_magic_number != GX_MAGIC_NUMBER) + { + return GX_INVALID_FORMAT; + } + GX_BINRES_READ_USHORT(header -> gx_font_header_index, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); @@ -425,6 +433,11 @@ ULONG read_data = 0; GX_BINRES_READ_USHORT(header -> gx_page_header_magic_number, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); + if(header -> gx_page_header_magic_number != GX_MAGIC_NUMBER) + { + return GX_INVALID_FORMAT; + } + GX_BINRES_READ_USHORT(header -> gx_page_header_index, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); @@ -515,7 +528,7 @@ static UINT _gx_binres_glyph_header_load(GX_BINRES_DATA_INFO *info, GX_GLYPH_HEA GX_BINRES_READ_ULONG(header -> gx_glyph_header_map_offset, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(ULONG); - GX_BINRES_READ_USHORT(header -> gx_glyph_header_index, info -> gx_binres_root_address + info -> gx_binres_read_offset); + GX_BINRES_READ_USHORT(header -> gx_glyph_header_index, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); GX_BINRES_READ_SHORT(header -> gx_glyph_header_ascent, info -> gx_binres_root_address + info -> gx_binres_read_offset); @@ -604,7 +617,7 @@ static UINT _gx_binres_kerning_glyph_header_load(GX_BINRES_DATA_INFO *info, GX_K /* FUNCTION RELEASE */ /* */ /* _gx_binres_pixelmap_header_load PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -638,6 +651,9 @@ static UINT _gx_binres_kerning_glyph_header_load(GX_BINRES_DATA_INFO *info, GX_K /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* removed use of memcpy, */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added magic number check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT @@ -646,6 +662,11 @@ static UINT _gx_binres_pixelmap_header_load(GX_BINRES_DATA_INFO *info, GX_PIXELM GX_BINRES_READ_USHORT(header -> gx_pixelmap_header_magic_number, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); + if (header -> gx_pixelmap_header_magic_number != GX_MAGIC_NUMBER) + { + return GX_INVALID_FORMAT; + } + GX_BINRES_READ_USHORT(header -> gx_pixelmap_header_index, info -> gx_binres_root_address + info -> gx_binres_read_offset); info -> gx_binres_read_offset += sizeof(USHORT); @@ -686,12 +707,156 @@ static UINT _gx_binres_pixelmap_header_load(GX_BINRES_DATA_INFO *info, GX_PIXELM } #endif +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_binres_font_buffer_size_get PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function calculates the required buffer size needed for */ +/* loading the font from the current position. */ +/* */ +/* INPUT */ +/* */ +/* info Binary resource control block */ +/* buffer_size The required buffer size */ +/* */ +/* OUTPUT */ +/* */ +/* Status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_font_header_load Read font header */ +/* _gx_binres_page_header_load Read font page header */ +/* */ +/* CALLED BY */ +/* */ +/* GUIX Internal Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +#ifdef GX_BINARY_RESOURCE_SUPPORT +UINT _gx_binres_font_buffer_size_get(GX_BINRES_DATA_INFO *info, UINT *buffer_size, GX_BOOL reset_read_offset) +{ +UINT status; +GX_FONT_HEADER font_header; +GX_PAGE_HEADER page_header; +USHORT page_index; +UINT glyph_count; +UINT read_offset = 0; +UINT temp; +UINT size = 0; +UINT old_offset; + + if(reset_read_offset) + { + old_offset = info -> gx_binres_read_offset; + } + + status = _gx_binres_font_header_load(info, &font_header); + + if (status != GX_SUCCESS) + { + return status; + } + + if (font_header.gx_font_header_data_offset) + { + /* The font data is not follow the header directly, + the data offset gives the position where the font + data located. */ + + /* Record current data offset. */ + read_offset = info -> gx_binres_read_offset; + + /* Temporarily reset data offset of access font data. */ + info -> gx_binres_read_offset = font_header.gx_font_header_data_offset; + + /* Load font header. */ + _gx_binres_font_header_load(info, &font_header); + } + + for (page_index = 0; page_index < font_header.gx_font_header_page_count; page_index++) + { + /* Load page header. */ + status = _gx_binres_page_header_load(info, &page_header); + + if(status != GX_SUCCESS) + { + return status; + } + + info -> gx_binres_read_offset += page_header.gx_page_header_data_size; + +#if defined(GX_EXTENDED_UNICODE_SUPPORT) + if (page_header.gx_page_header_last_glyph > GX_MAX_GLYPH_CODE) + { + return GX_INVALID_FONT; + } +#endif + + /* Max glyph code is 0x10f000, overflow cannot occur. */ + glyph_count = (UINT)(page_header.gx_page_header_last_glyph - page_header.gx_page_header_first_glyph + 1); + + /* Calculate size for loading font page. */ + temp = sizeof(GX_FONT); + + /* Calculate size for loading glyphs. */ + if (page_header.gx_page_header_format & GX_FONT_FORMAT_COMPRESSED) + { + temp += sizeof(GX_COMPRESSED_GLYPH) * glyph_count; + } +#if defined(GX_FONT_KERNING_SUPPORT) + else if (page_header.gx_page_header_format & GX_FONT_FORMAT_KERNING) + { + temp += sizeof(GX_KERNING_GLYPH) * glyph_count; + } +#endif + else + { + temp += sizeof(GX_GLYPH) * glyph_count; + } + + GX_UTILITY_MATH_UINT_ADD(size, temp, size); + } + + if (read_offset) + { + /* Restore data offset. */ + info -> gx_binres_read_offset = read_offset; + read_offset = 0; + } + + *buffer_size = size; + + if (reset_read_offset) + { + /* Reset offset. */ + info -> gx_binres_read_offset = old_offset; + } + + return GX_SUCCESS; +} +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _gx_binres_theme_table_buffer_allocate PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -715,8 +880,7 @@ static UINT _gx_binres_pixelmap_header_load(GX_BINRES_DATA_INFO *info, GX_PIXELM /* allocation function */ /* _gx_binres_resource_header_load Read resource header */ /* _gx_binres_theme_header_load Read theme header */ -/* _gx_binres_font_header_load Read font header */ -/* _gx_binres_page_header_load Read font page header */ +/* _gx_binres_font_buffer_size_get Get required font buffer size */ /* */ /* CALLED BY */ /* */ @@ -729,20 +893,19 @@ static UINT _gx_binres_pixelmap_header_load(GX_BINRES_DATA_INFO *info, GX_PIXELM /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* improved logic, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT static UINT _gx_binres_theme_buffer_allocate(GX_BINRES_DATA_INFO *info, INT theme_id) { +UINT status = GX_SUCCESS; GX_RESOURCE_HEADER res_header; GX_THEME_HEADER theme_header; -GX_FONT_HEADER font_header; -GX_PAGE_HEADER page_header; USHORT theme_index; USHORT font_index; -USHORT page_index; -UINT glyph_count; -UINT read_offset = 0; UINT temp; /* Read resource header. */ @@ -790,77 +953,14 @@ UINT temp; for (font_index = 0; font_index < theme_header.gx_theme_header_font_count; font_index++) { - _gx_binres_font_header_load(info, &font_header); - - if (font_header.gx_font_header_magic_number != GX_MAGIC_NUMBER) - { - return GX_INVALID_FORMAT; - } - - if (font_header.gx_font_header_data_offset) - { - /* The font data is not follow the header directly, - the data offset gives the position where the font - data located. */ - - /* Record current data offset. */ - read_offset = info -> gx_binres_read_offset; + status = _gx_binres_font_buffer_size_get(info, &temp, GX_FALSE); - /* Temporarily reset data offset of access font data. */ - info -> gx_binres_read_offset = font_header.gx_font_header_data_offset; - - /* Load font header. */ - _gx_binres_font_header_load(info, &font_header); - } - - for (page_index = 0; page_index < font_header.gx_font_header_page_count; page_index++) + if (status != GX_SUCCESS) { - /* Load page header. */ - _gx_binres_page_header_load(info, &page_header); - info -> gx_binres_read_offset += page_header.gx_page_header_data_size; - - if (page_header.gx_page_header_magic_number != GX_MAGIC_NUMBER) - { - return GX_INVALID_FORMAT; - } -#if defined(GX_EXTENDED_UNICODE_SUPPORT) - if (page_header.gx_page_header_last_glyph > GX_MAX_GLYPH_CODE) - { - return GX_INVALID_FONT; - } -#endif - - /* Max glyph code is 0x10f000, overflow cannot occur. */ - glyph_count = (UINT)(page_header.gx_page_header_last_glyph - page_header.gx_page_header_first_glyph + 1); - - /* Calculate size for loading font page. */ - temp = sizeof(GX_FONT); - - /* Calculate size for loading glyphs. */ - if (page_header.gx_page_header_format & GX_FONT_FORMAT_COMPRESSED) - { - temp += sizeof(GX_COMPRESSED_GLYPH) * glyph_count; - } -#if defined(GX_FONT_KERNING_SUPPORT) - else if (page_header.gx_page_header_format & GX_FONT_FORMAT_KERNING) - { - temp += sizeof(GX_KERNING_GLYPH) * glyph_count; - } -#endif - else - { - temp += sizeof(GX_GLYPH) * glyph_count; - } - - GX_UTILITY_MATH_UINT_ADD(info -> gx_binres_buffer_size, temp, info -> gx_binres_buffer_size); + return status; } - if (read_offset) - { - /* Restore data offset. */ - info -> gx_binres_read_offset = read_offset; - read_offset = 0; - } + GX_UTILITY_MATH_UINT_ADD(info -> gx_binres_buffer_size, temp, info -> gx_binres_buffer_size); } } @@ -894,7 +994,10 @@ UINT temp; memset(info -> gx_binres_buffer, 0, info -> gx_binres_buffer_size); info -> gx_binres_buffer_index = 0; - return GX_SUCCESS; + /* Reset read offset. */ + info -> gx_binres_read_offset = 0; + + return status; } #endif @@ -1182,21 +1285,19 @@ USHORT index = 0; /* */ /* FUNCTION RELEASE */ /* */ -/* _gx_binres_font_load PORTABLE C */ -/* 6.1 */ +/* _gx_binres_one_font_load PORTABLE C */ +/* 6.3.0 */ /* AUTHOR */ /* */ -/* Kenneth Maxwell, Microsoft Corporation */ +/* Ting Zhu, Microsoft Corporation */ /* */ /* DESCRIPTION */ /* */ -/* This service loads a font table from a binary data buffer. */ +/* This service loads a font from a binary data buffer. */ /* */ /* INPUT */ /* */ /* info Binary resource control block */ -/* page_count The number of pages that a */ -/* font contains. */ /* return_font Returned font */ /* */ /* OUTPUT */ @@ -1205,6 +1306,7 @@ USHORT index = 0; /* */ /* CALLS */ /* */ +/* _gx_binres_font_header_load Read font header */ /* _gx_binres_page_header_load Read font page header */ /* _gx_binres_compressed_glyphs_read Read compressed glyph data */ /* _gx_binres_glyphs_read Read glyph data */ @@ -1217,77 +1319,136 @@ USHORT index = 0; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ -/* 09-30-2020 Kenneth Maxwell Modified comment(s), */ -/* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT -static UINT _gx_binres_font_load(GX_BINRES_DATA_INFO *info, USHORT page_count, GX_FONT **return_font) +UINT _gx_binres_one_font_load(GX_BINRES_DATA_INFO *info, GX_FONT **return_font) { UINT status = GX_SUCCESS; +GX_FONT_HEADER font_header; GX_PAGE_HEADER header; GX_FONT *font; GX_FONT *head_page = GX_NULL; GX_FONT *pre_page = GX_NULL; USHORT index; USHORT glyph_count; +UINT read_offset = 0; - for (index = 0; index < page_count; index++) - { - /* Read page header. */ - _gx_binres_page_header_load(info, &header); + /* Read font header. */ + status = _gx_binres_font_header_load(info, &font_header); - font = (GX_FONT *)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); - info -> gx_binres_buffer_index += sizeof(GX_FONT); + if (status != GX_SUCCESS) + { + return status; + } - font -> gx_font_baseline = header.gx_page_header_baseline; - font -> gx_font_first_glyph = header.gx_page_header_first_glyph; - font -> gx_font_format = header.gx_page_header_format; - font -> gx_font_last_glyph = header.gx_page_header_last_glyph; - font -> gx_font_line_height = header.gx_page_header_line_height; - font -> gx_font_postspace = header.gx_page_header_postspace; - font -> gx_font_prespace = header.gx_page_header_prespace; + if (font_header.gx_font_header_deault) + { + switch (font_header.gx_font_header_bits) + { + case 1: + head_page = (GX_FONT *)&_gx_system_font_mono; + break; - /* Read glyphs data. */ - glyph_count = (USHORT)(font -> gx_font_last_glyph - font -> gx_font_first_glyph + 1); + case 4: + head_page = (GX_FONT *)&_gx_system_font_4bpp; + break; - if (font -> gx_font_format & GX_FONT_FORMAT_COMPRESSED) - { - status = _gx_binres_compressed_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_compressed_glyphs); - } -#if defined(GX_FONT_KERNING_SUPPORT) - else if (font -> gx_font_format & GX_FONT_FORMAT_KERNING) - { - status = _gx_binres_kerning_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_kerning_glyphs); + case 8: + head_page = (GX_FONT *)&_gx_system_font_8bpp; + break; } -#endif /* GX_FONT_KERNING_SUPPORT */ - else + } + else + { + if (font_header.gx_font_header_data_offset) { - status = _gx_binres_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_normal_glyphs); - } + /* The font data is not follow the header directly, + the data offset gives the position where the font + data located. */ - if (status != GX_SUCCESS) - { - break; - } + /* Record current data offset. */ + read_offset = info -> gx_binres_read_offset; - font -> gx_font_next_page = NULL; + /* Temporarily reset data offset to access font data. */ + info -> gx_binres_read_offset = font_header.gx_font_header_data_offset; - if (!head_page) - { - head_page = font; + /* Read font header. */ + _gx_binres_font_header_load(info, &font_header); } - if (pre_page) + for (index = 0; index < font_header.gx_font_header_page_count; index++) { - pre_page -> gx_font_next_page = font; + /* Read page header. */ + status = _gx_binres_page_header_load(info, &header); + + if (status != GX_SUCCESS) + { + return status; + } + + font = (GX_FONT *)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); + info -> gx_binres_buffer_index += sizeof(GX_FONT); + + font -> gx_font_baseline = header.gx_page_header_baseline; + font -> gx_font_first_glyph = header.gx_page_header_first_glyph; + font -> gx_font_format = header.gx_page_header_format; + font -> gx_font_last_glyph = header.gx_page_header_last_glyph; + font -> gx_font_line_height = header.gx_page_header_line_height; + font -> gx_font_postspace = header.gx_page_header_postspace; + font -> gx_font_prespace = header.gx_page_header_prespace; + + /* Read glyphs data. */ + glyph_count = (USHORT)(font -> gx_font_last_glyph - font -> gx_font_first_glyph + 1); + + if (font -> gx_font_format & GX_FONT_FORMAT_COMPRESSED) + { + status = _gx_binres_compressed_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_compressed_glyphs); + } +#if defined(GX_FONT_KERNING_SUPPORT) + else if (font -> gx_font_format & GX_FONT_FORMAT_KERNING) + { + status = _gx_binres_kerning_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_kerning_glyphs); + } +#endif /* GX_FONT_KERNING_SUPPORT */ + else + { + status = _gx_binres_glyphs_address_get(info, glyph_count, &font -> gx_font_glyphs.gx_font_normal_glyphs); + } + + if (status != GX_SUCCESS) + { + break; + } + + font -> gx_font_next_page = NULL; + + if (!head_page) + { + head_page = font; + } + + if (pre_page) + { + pre_page -> gx_font_next_page = font; + } + + pre_page = font; } + } - pre_page = font; + if (read_offset) + { + /* Restore data offset. */ + info -> gx_binres_read_offset = read_offset; + read_offset = 0; } - *return_font = head_page; + if (return_font) + { + *return_font = head_page; + } return status; } @@ -1435,7 +1596,7 @@ GX_COLOR *palette_table = GX_NULL; /* FUNCTION RELEASE */ /* */ /* _gx_binres_font_table_load PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -1456,8 +1617,7 @@ GX_COLOR *palette_table = GX_NULL; /* */ /* CALLS */ /* */ -/* _gx_binres_font_header_load Read font header */ -/* _gx_binres_font_read Read font data */ +/* _gx_binres_one_font_load Load one font */ /* */ /* CALLED BY */ /* */ @@ -1470,78 +1630,28 @@ GX_COLOR *palette_table = GX_NULL; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* improved logic, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT static UINT _gx_binres_font_table_load(GX_BINRES_DATA_INFO *info, USHORT table_size, GX_FONT ***returned_font_table) { -UINT status = GX_SUCCESS; -GX_FONT_HEADER header; -GX_FONT **font_table = GX_NULL; -USHORT index; -UINT read_offset = 0; - - if (!table_size) - { - return status; - } +UINT status = GX_SUCCESS; +GX_FONT **font_table = GX_NULL; +USHORT index; font_table = (GX_FONT **)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); info -> gx_binres_buffer_index += sizeof(GX_FONT *) * table_size; for (index = 0; index < table_size; index++) { - /* Read font header. */ - _gx_binres_font_header_load(info, &header); - - if (header.gx_font_header_deault) - { - switch (header.gx_font_header_bits) - { - case 1: - font_table[index] = (GX_FONT *)&_gx_system_font_mono; - break; + status = _gx_binres_one_font_load(info, &font_table[index]); - case 4: - font_table[index] = (GX_FONT *)&_gx_system_font_4bpp; - break; - - case 8: - font_table[index] = (GX_FONT *)&_gx_system_font_8bpp; - break; - } - } - else + if (status != GX_SUCCESS) { - if (header.gx_font_header_data_offset) - { - /* The font data is not follow the header directly, - the data offset gives the position where the font - data located. */ - - /* Record current data offset. */ - read_offset = info -> gx_binres_read_offset; - - /* Temporarily reset data offset to access font data. */ - info -> gx_binres_read_offset = header.gx_font_header_data_offset; - - /* Read font header. */ - _gx_binres_font_header_load(info, &header); - } - - status = _gx_binres_font_load(info, header.gx_font_header_page_count, &font_table[index]); - - if (status != GX_SUCCESS) - { - break; - } - - if (read_offset) - { - /* Restore data offset. */ - info -> gx_binres_read_offset = read_offset; - read_offset = 0; - } + return status; } } @@ -1555,21 +1665,21 @@ UINT read_offset = 0; /* */ /* FUNCTION RELEASE */ /* */ -/* _gx_binres_pixelmap_table_load PORTABLE C */ -/* 6.1 */ +/* _gx_binres_one_pixelmap_load PORTABLE C */ +/* 6.3.0 */ /* AUTHOR */ /* */ -/* Kenneth Maxwell, Microsoft Corporation */ +/* Ting Zhu, Microsoft Corporation */ /* */ /* DESCRIPTION */ /* */ -/* This function loads a pixelmap table from resource data memory. */ +/* This function loads one pixelmap from resource data memory. */ /* */ /* INPUT */ /* */ /* info Binary resource control block */ -/* table_size Pixelmap table size */ -/* returned_pixelmp_table Returned pixelmap table */ +/* returned_pixelmap Returned pixelmap table */ +/* map_id Loaded pixelmap ID */ /* */ /* OUTPUT */ /* */ @@ -1587,119 +1697,165 @@ UINT read_offset = 0; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ -/* 09-30-2020 Kenneth Maxwell Modified comment(s), */ -/* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ #ifdef GX_BINARY_RESOURCE_SUPPORT -static UINT _gx_binres_pixelmap_table_load(GX_BINRES_DATA_INFO *info, USHORT table_size, GX_PIXELMAP ***returned_pixelmap_table) +UINT _gx_binres_one_pixelmap_load(GX_BINRES_DATA_INFO *info, GX_PIXELMAP **returned_pixelmap, USHORT *map_id) { UINT status = GX_SUCCESS; GX_PIXELMAP_HEADER header; -GX_PIXELMAP **pixelmap_table = GX_NULL; -USHORT index; ULONG size; -GX_BOOL keep_looping; UINT read_offset = 0; - if (table_size <= 1) +GX_PIXELMAP *pixelmap; + + /* Read pixelmap header. */ + status = _gx_binres_pixelmap_header_load(info, &header); + + if (status) { - return GX_SUCCESS; + return status; } - pixelmap_table = (GX_PIXELMAP **)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); - info -> gx_binres_buffer_index += sizeof(GX_PIXELMAP *) * table_size; - - for (index = 1; index < table_size; index++) + if (header.gx_pixelmap_header_data_offset) { - /* Read pixelmap header. */ + /* The pixelmap data is not follow the header directly, + the data offset gives the position where the pixelmap + data located. */ + + /* Record current data offset. */ + read_offset = info -> gx_binres_read_offset; + + /* Temporarily reset data offset to access pixelmap data. */ + info -> gx_binres_read_offset = header.gx_pixelmap_header_data_offset; + + /* Read pixelmap header. */ _gx_binres_pixelmap_header_load(info, &header); + } - if (header.gx_pixelmap_header_magic_number != GX_MAGIC_NUMBER) - { - return GX_INVALID_FORMAT; - } + /* Allocate memory for pixelmap. */ + pixelmap = (GX_PIXELMAP *)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); + info -> gx_binres_buffer_index += sizeof(GX_PIXELMAP); + + pixelmap -> gx_pixelmap_aux_data_size = header.gx_pixelmap_header_aux_data_size; + pixelmap -> gx_pixelmap_data_size = header.gx_pixelmap_header_map_size; + pixelmap -> gx_pixelmap_flags = header.gx_pixelmap_header_flags; + pixelmap -> gx_pixelmap_format = header.gx_pixelmap_header_format; + pixelmap -> gx_pixelmap_width = (GX_VALUE)header.gx_pixelmap_header_width; + pixelmap -> gx_pixelmap_height = (GX_VALUE)header.gx_pixelmap_header_height; + pixelmap -> gx_pixelmap_transparent_color = header.gx_pixelmap_header_transparent_color; + pixelmap -> gx_pixelmap_version_major = header.gx_pixelmap_header_version_major; + pixelmap -> gx_pixelmap_version_minor = header.gx_pixelmap_header_version_minor; + + /* Skip padding bytes. */ + info -> gx_binres_read_offset = (info -> gx_binres_read_offset + 3) & (~0x03UL); + + /* Read pixelmap data. */ + size = pixelmap -> gx_pixelmap_data_size; + if (size) + { + pixelmap -> gx_pixelmap_data = (GX_UBYTE *)(info -> gx_binres_root_address + info -> gx_binres_read_offset); + info -> gx_binres_read_offset += size; + } - if (header.gx_pixelmap_header_data_offset) - { - /* The pixelmap data is not follow the header directly, - the data offset gives the position where the pixelmap - data located. */ + /* Read pixelmap aux data. */ + size = pixelmap -> gx_pixelmap_aux_data_size; + if (size) + { + pixelmap -> gx_pixelmap_aux_data = (GX_UBYTE *)(info -> gx_binres_root_address + info -> gx_binres_read_offset); + info -> gx_binres_read_offset += size; + } - /* Record current data offset. */ - read_offset = info -> gx_binres_read_offset; + if (read_offset) + { + /* Restore data offset. */ + info -> gx_binres_read_offset = read_offset; + read_offset = 0; + } - /* Temporarily reset data offset to access pixelmap data. */ - info -> gx_binres_read_offset = header.gx_pixelmap_header_data_offset; + if (returned_pixelmap) + { + *returned_pixelmap = pixelmap; + } - /* Read pixelmap header. */ - _gx_binres_pixelmap_header_load(info, &header); - } + if (map_id) + { + *map_id = header.gx_pixelmap_header_index; + } - keep_looping = GX_TRUE; + return status; +} - while (keep_looping) - { - keep_looping = GX_FALSE; - /* Allocate memory for pixelmap. */ - pixelmap_table[index] = (GX_PIXELMAP *)(info -> gx_binres_buffer + info -> gx_binres_buffer_index); - info -> gx_binres_buffer_index += sizeof(GX_PIXELMAP); +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_binres_pixelmap_table_load PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Kenneth Maxwell, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function loads a pixelmap table from resource data memory. */ +/* */ +/* INPUT */ +/* */ +/* info Binary resource control block */ +/* table_size Pixelmap table size */ +/* returned_pixelmp_table Returned pixelmap table */ +/* */ +/* OUTPUT */ +/* */ +/* Status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_one_pixelmap_load Load one pixelmap */ +/* */ +/* CALLED BY */ +/* */ +/* GUIX Internal Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ +/* 09-30-2020 Kenneth Maxwell Modified comment(s), */ +/* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* improved logic, */ +/* resulting in version 6.3.0 */ +/* */ +/**************************************************************************/ +static UINT _gx_binres_pixelmap_table_load(GX_BINRES_DATA_INFO *info, USHORT table_size, GX_PIXELMAP **pixelmap_table) +{ +UINT status = GX_SUCCESS; +USHORT index; +USHORT map_id; +GX_PIXELMAP *pixelmap; - switch (index) - { - case GX_PIXELMAP_RADIO_ON_ID: - case GX_PIXELMAP_RADIO_OFF_ID: - case GX_PIXELMAP_CHECKBOX_ON_ID: - case GX_PIXELMAP_CHECKBOX_OFF_ID: - if (index != header.gx_pixelmap_header_index) - { - pixelmap_table[index++] = GX_NULL; - keep_looping = GX_TRUE; - } - } - } + for (index = 1; index < table_size; index++) + { + status = _gx_binres_one_pixelmap_load(info, &pixelmap, &map_id); - pixelmap_table[index] -> gx_pixelmap_aux_data_size = header.gx_pixelmap_header_aux_data_size; - pixelmap_table[index] -> gx_pixelmap_data_size = header.gx_pixelmap_header_map_size; - pixelmap_table[index] -> gx_pixelmap_flags = header.gx_pixelmap_header_flags; - pixelmap_table[index] -> gx_pixelmap_format = header.gx_pixelmap_header_format; - pixelmap_table[index] -> gx_pixelmap_width = (GX_VALUE)header.gx_pixelmap_header_width; - pixelmap_table[index] -> gx_pixelmap_height = (GX_VALUE)header.gx_pixelmap_header_height; - pixelmap_table[index] -> gx_pixelmap_transparent_color = header.gx_pixelmap_header_transparent_color; - pixelmap_table[index] -> gx_pixelmap_version_major = header.gx_pixelmap_header_version_major; - pixelmap_table[index] -> gx_pixelmap_version_minor = header.gx_pixelmap_header_version_minor; - - /* Skip padding bytes. */ - info -> gx_binres_read_offset = (info -> gx_binres_read_offset + 3) & (~0x03UL); - - /* Read pixelmap data. */ - size = pixelmap_table[index] -> gx_pixelmap_data_size; - if (size) + while (index < map_id) { - pixelmap_table[index] -> gx_pixelmap_data = (GX_UBYTE *)(info -> gx_binres_root_address + info -> gx_binres_read_offset); - info -> gx_binres_read_offset += size; + pixelmap_table[index++] = GX_NULL; } - /* Read pixelmap aux data. */ - size = pixelmap_table[index] -> gx_pixelmap_aux_data_size; - if (size) - { - pixelmap_table[index] -> gx_pixelmap_aux_data = (GX_UBYTE *)(info -> gx_binres_root_address + info -> gx_binres_read_offset); - info -> gx_binres_read_offset += size; - } + pixelmap_table[index] = pixelmap; - if (read_offset) + if (status) { - /* Restore data offset. */ - info -> gx_binres_read_offset = read_offset; - read_offset = 0; + return status; } } - *returned_pixelmap_table = pixelmap_table; - return status; } #endif @@ -1776,7 +1932,6 @@ INT index; if (status == GX_SUCCESS) { - info.gx_binres_read_offset = 0; status = _gx_binres_resource_header_load(&info, &header); } @@ -1817,7 +1972,7 @@ INT index; } /* Read font table. */ - if ((status == GX_SUCCESS) && theme_header.gx_theme_header_font_data_size) + if ((status == GX_SUCCESS) && theme_header.gx_theme_header_font_data_size && theme_header.gx_theme_header_font_count) { status = _gx_binres_font_table_load(&info, theme_header.gx_theme_header_font_count, @@ -1825,11 +1980,16 @@ INT index; } /* Read pixelmap table. */ - if ((status == GX_SUCCESS) && theme_header.gx_theme_header_pixelmap_data_size) + if ((status == GX_SUCCESS) && theme_header.gx_theme_header_pixelmap_data_size && theme_header.gx_theme_header_pixelmap_count) { + /* Allocate pixelmap table size. */ + theme -> theme_pixelmap_table = (GX_PIXELMAP **)(info.gx_binres_buffer + info.gx_binres_buffer_index); + info.gx_binres_buffer_index += sizeof(GX_PIXELMAP *) * (UINT)(theme_header.gx_theme_header_pixelmap_count + 1); + + /* Load pixelmap table. */ status = _gx_binres_pixelmap_table_load(&info, - (USHORT)(theme_header.gx_theme_header_pixelmap_count + 1), - &theme -> theme_pixelmap_table); + theme -> theme_pixelmap_table_size, + theme -> theme_pixelmap_table); } if (status == GX_SUCCESS) diff --git a/common/src/gx_canvas_block_move.c b/common/src/gx_canvas_block_move.c index db4b95b8..18edcaf1 100644 --- a/common/src/gx_canvas_block_move.c +++ b/common/src/gx_canvas_block_move.c @@ -37,7 +37,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_block_move.c PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -78,6 +78,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added canvas status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_canvas_block_move(GX_RECTANGLE *block, GX_VALUE x_shift, GX_VALUE y_shift, GX_RECTANGLE *dirty) @@ -101,7 +104,7 @@ UINT status = GX_FAILURE; display = context -> gx_draw_context_display; /* check to see if this driver supports block move */ - if (!display -> gx_display_driver_block_move) + if (!display -> gx_display_driver_block_move || (context -> gx_draw_context_canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER)) { /* this driver doesn't support block move. If we are partial drawing just mark the caller as dirty so that diff --git a/common/src/gx_canvas_create.c b/common/src/gx_canvas_create.c index de49a985..0070c63d 100644 --- a/common/src/gx_canvas_create.c +++ b/common/src/gx_canvas_create.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_create PORTABLE C */ -/* 6.1.3 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -81,6 +81,10 @@ /* resulting in version 6.1 */ /* 12-31-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1.3 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added initilization to the */ +/* canvas members, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_canvas_create(GX_CANVAS *canvas, GX_CONST GX_CHAR *name, GX_DISPLAY *display, @@ -100,9 +104,13 @@ UINT _gx_canvas_create(GX_CANVAS *canvas, GX_CONST GX_CHAR *name, GX_DISPLAY *d canvas -> gx_canvas_draw_nesting = 0; canvas -> gx_canvas_dirty_count = 0; canvas -> gx_canvas_status = type; - canvas -> gx_canvas_x_resolution = (GX_VALUE) width; - canvas -> gx_canvas_y_resolution = (GX_VALUE) height; - canvas -> gx_canvas_hardware_layer = (GX_BYTE) -1; + canvas -> gx_canvas_x_resolution = (GX_VALUE)width; + canvas -> gx_canvas_y_resolution = (GX_VALUE)height; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + canvas -> gx_canvas_memory_width = (GX_VALUE)width; + canvas -> gx_canvas_memory_height = (GX_VALUE)height; +#endif + canvas -> gx_canvas_hardware_layer = (GX_BYTE)-1; /* Determine if there is a memory area. */ if (memory_area) diff --git a/common/src/gx_canvas_drawing_initiate.c b/common/src/gx_canvas_drawing_initiate.c index d711d3e3..1d435d54 100644 --- a/common/src/gx_canvas_drawing_initiate.c +++ b/common/src/gx_canvas_drawing_initiate.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_drawing_initiate PORTABLE C */ -/* 6.1.5 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -86,6 +86,10 @@ /* 03-02-2021 Kenneth Maxwell Modified comment(s), added */ /* flip rotation support, */ /* resulting in version 6.1.5 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_canvas_drawing_initiate(GX_CANVAS *canvas, GX_WIDGET *who, GX_RECTANGLE *dirty_area) @@ -122,6 +126,21 @@ GX_DISPLAY *display = canvas -> gx_canvas_display; { /* initialize the dirty rectangle */ canvas -> gx_canvas_dirty_area = *dirty_area; + +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + canvas -> gx_canvas_memory_width = (GX_VALUE)(dirty_area -> gx_rectangle_right - dirty_area -> gx_rectangle_left + 1); + canvas -> gx_canvas_memory_width = (GX_VALUE)((canvas -> gx_canvas_memory_width + 3) & 0xFFFC); + canvas -> gx_canvas_memory_height = (GX_VALUE)(canvas -> gx_canvas_memory_size / display -> gx_display_driver_row_pitch_get((USHORT)canvas -> gx_canvas_memory_width)); + if (canvas -> gx_canvas_memory_height < (dirty_area -> gx_rectangle_bottom - dirty_area -> gx_rectangle_top + 1)) + { + return GX_INVALID_MEMORY_SIZE; + } + canvas -> gx_canvas_memory_offset_x = dirty_area -> gx_rectangle_left; + canvas -> gx_canvas_memory_offset_y = dirty_area -> gx_rectangle_top; + } +#endif } /* Are we nested? */ @@ -146,7 +165,23 @@ GX_DISPLAY *display = canvas -> gx_canvas_display; if (new_context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_NONE || new_context -> gx_draw_context_display -> gx_display_rotation_angle == GX_SCREEN_ROTATION_FLIP) { +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + new_context -> gx_draw_context_pitch = canvas -> gx_canvas_memory_width; + new_context -> gx_draw_context_offset_x = canvas -> gx_canvas_memory_offset_x; + new_context -> gx_draw_context_offset_y = canvas -> gx_canvas_memory_offset_y; + } + else + { + new_context -> gx_draw_context_pitch = canvas -> gx_canvas_x_resolution; + new_context -> gx_draw_context_offset_x = 0; + new_context -> gx_draw_context_offset_y = 0; + } + +#else new_context -> gx_draw_context_pitch = canvas -> gx_canvas_x_resolution; +#endif } else { diff --git a/common/src/gx_canvas_line_draw.c b/common/src/gx_canvas_line_draw.c index 8f730ce0..095070e5 100644 --- a/common/src/gx_canvas_line_draw.c +++ b/common/src/gx_canvas_line_draw.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_line_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -87,6 +87,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), fixed a */ +/* pattern line draw issue, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_canvas_line_draw(GX_VALUE x_start, GX_VALUE y_start, GX_VALUE x_end, GX_VALUE y_end) @@ -254,11 +257,30 @@ GX_VALUE brush_width; { if (brush -> gx_brush_line_pattern) { + if (clip_rect.gx_rectangle_left > x_start) + { + width = (GX_VALUE)((clip_rect.gx_rectangle_left - x_start) & 0x1F); + context -> gx_draw_context_brush.gx_brush_pattern_mask >>= width; + } + /* Call display driver's simple horizontal pattern line drawing function. */ display -> gx_display_driver_horizontal_pattern_line_draw(context, clip_rect.gx_rectangle_left, clip_rect.gx_rectangle_right, y_start); + + if (clip_rect.gx_rectangle_right < x_end) + { + width = (GX_VALUE)((x_end - clip_rect.gx_rectangle_right) & 0x1F); + if ((context -> gx_draw_context_brush.gx_brush_pattern_mask >> width) == 0) + { + context -> gx_draw_context_brush.gx_brush_pattern_mask <<= (32 - width); + } + else + { + context -> gx_draw_context_brush.gx_brush_pattern_mask >>= width; + } + } } else { @@ -275,11 +297,30 @@ GX_VALUE brush_width; { if (brush -> gx_brush_line_pattern) { + if (clip_rect.gx_rectangle_top > y_start) + { + width = (GX_VALUE)((clip_rect.gx_rectangle_top - y_start) & 0x1F); + context -> gx_draw_context_brush.gx_brush_pattern_mask >>= width; + } + /* Call display driver's simple vertical line drawing function. */ display -> gx_display_driver_vertical_pattern_line_draw(context, clip_rect.gx_rectangle_top, clip_rect.gx_rectangle_bottom, x_start); + + if (clip_rect.gx_rectangle_bottom < y_end) + { + width = (GX_VALUE)((y_end - clip_rect.gx_rectangle_bottom) & 0x1F); + if ((context -> gx_draw_context_brush.gx_brush_pattern_mask >> width) == 0) + { + context -> gx_draw_context_brush.gx_brush_pattern_mask <<= (32 - width); + } + else + { + context -> gx_draw_context_brush.gx_brush_pattern_mask >>= width; + } + } } else { diff --git a/common/src/gx_canvas_memory_define.c b/common/src/gx_canvas_memory_define.c index 285e49ca..c9cc3a1f 100644 --- a/common/src/gx_canvas_memory_define.c +++ b/common/src/gx_canvas_memory_define.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_memory_define PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -67,15 +67,36 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_canvas_memory_define(GX_CANVAS *canvas, GX_COLOR *memory, ULONG memsize) { +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER +GX_DISPLAY *display = canvas -> gx_canvas_display; +ULONG canvas_size; + + if (!display) + { + return GX_INVALID_DISPLAY; + } + + canvas_size = (ULONG)(display -> gx_display_driver_row_pitch_get((USHORT)canvas -> gx_canvas_x_resolution) * canvas -> gx_canvas_y_resolution); + + if (memsize < canvas_size) + { + canvas -> gx_canvas_status |= GX_CANVAS_PARTIAL_FRAME_BUFFER; + } +#endif + /* change the memory pointer value */ canvas -> gx_canvas_memory = memory; /* change the memory size */ - canvas ->gx_canvas_memory_size = memsize; + canvas -> gx_canvas_memory_size = memsize; /* mark the canvas dirty so that it get refreshed */ _gx_canvas_dirty_mark(canvas, GX_NULL); diff --git a/common/src/gx_canvas_mouse_show.c b/common/src/gx_canvas_mouse_show.c index d255b29f..6e7f2cd9 100644 --- a/common/src/gx_canvas_mouse_show.c +++ b/common/src/gx_canvas_mouse_show.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_canvas_mouse_show PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -65,6 +65,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added canvas status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_MOUSE_SUPPORT) @@ -73,6 +76,14 @@ UINT _gx_canvas_mouse_show(GX_CANVAS *canvas) GX_DISPLAY *display; GX_MOUSE_CURSOR_INFO *mouse_info; +#if defined(GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER) + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + /* Not supported. */ + return GX_FAILURE; + } +#endif + display = canvas -> gx_canvas_display; mouse_info = display -> gx_display_mouse.gx_mouse_cursor_info; diff --git a/common/src/gx_display_driver_1555xrgb_jpeg_draw.c b/common/src/gx_display_driver_1555xrgb_jpeg_draw.c index a9f3d874..c01bd155 100644 --- a/common/src/gx_display_driver_1555xrgb_jpeg_draw.c +++ b/common/src/gx_display_driver_1555xrgb_jpeg_draw.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_dislay_driver_565rgb_jpeg_draw PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -70,10 +70,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed a parameter from */ /* jpeg mcu decode function, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_display_driver_16bpp_block_move.c b/common/src/gx_display_driver_16bpp_block_move.c index 280a54cb..b9fd2f05 100644 --- a/common/src/gx_display_driver_16bpp_block_move.c +++ b/common/src/gx_display_driver_16bpp_block_move.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_block_move PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -69,6 +69,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added canvas status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_block_move(GX_DRAW_CONTEXT *context, @@ -81,6 +84,14 @@ INT width_in_bytes; INT y; INT height; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (context -> gx_draw_context_canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + /* Not supported. */ + return; + } +#endif + if (xshift) { if (xshift > 0) diff --git a/common/src/gx_display_driver_16bpp_canvas_copy.c b/common/src/gx_display_driver_16bpp_canvas_copy.c index 2f706121..07fc2fd5 100644 --- a/common/src/gx_display_driver_16bpp_canvas_copy.c +++ b/common/src/gx_display_driver_16bpp_canvas_copy.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_canvas_copy PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -71,6 +71,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added canvas status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_canvas_copy(GX_CANVAS *canvas, GX_CANVAS *composite) @@ -82,6 +85,14 @@ USHORT *write; INT width; INT row; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + /* Not supported. */ + return; + } +#endif + dirty.gx_rectangle_left = dirty.gx_rectangle_top = 0; dirty.gx_rectangle_right = (GX_VALUE)(canvas -> gx_canvas_x_resolution - (GX_VALUE)1); dirty.gx_rectangle_bottom = (GX_VALUE)(canvas -> gx_canvas_y_resolution - (GX_VALUE)1); diff --git a/common/src/gx_display_driver_16bpp_horizontal_line_draw.c b/common/src/gx_display_driver_16bpp_horizontal_line_draw.c index c0fb79f5..20eb4287 100644 --- a/common/src/gx_display_driver_16bpp_horizontal_line_draw.c +++ b/common/src/gx_display_driver_16bpp_horizontal_line_draw.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_horizontal_line_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -73,6 +73,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_horizontal_line_draw(GX_DRAW_CONTEXT *context, INT xstart, INT xend, INT ypos, INT width, GX_COLOR color) @@ -103,11 +107,8 @@ GX_UBYTE alpha; /* pick up start address of canvas memory */ rowstart = (USHORT *)context -> gx_draw_context_memory; - /* calculate start of row address */ - rowstart += context -> gx_draw_context_pitch * ypos; + GX_CALCULATE_PUTROW(rowstart, xstart, ypos, context); - /* calculate pixel address */ - rowstart += xstart; /* draw 1-pixel hi lines to fill width */ for (row = 0; row < width; row++) { diff --git a/common/src/gx_display_driver_16bpp_horizontal_pattern_line_draw.c b/common/src/gx_display_driver_16bpp_horizontal_pattern_line_draw.c index 521ddc77..5a3b4e0f 100644 --- a/common/src/gx_display_driver_16bpp_horizontal_pattern_line_draw.c +++ b/common/src/gx_display_driver_16bpp_horizontal_pattern_line_draw.c @@ -34,7 +34,7 @@ /* */ /* _gx_display_driver_16bpp_horizontal_pattern_line_draw */ /* PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -69,6 +69,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_horizontal_pattern_line_draw(GX_DRAW_CONTEXT *context, INT xstart, INT xend, INT ypos) @@ -86,11 +90,8 @@ INT len = xend - xstart + 1; /* pick up start address of canvas memory */ rowstart = (USHORT *)context -> gx_draw_context_memory; - /* calculate start of row address */ - rowstart += context -> gx_draw_context_pitch * ypos; + GX_CALCULATE_PUTROW(rowstart, xstart, ypos, context); - /* calculate pixel address */ - rowstart += xstart; /* draw 1-pixel hi lines to fill width */ /* pick up the requested pattern and mask */ diff --git a/common/src/gx_display_driver_16bpp_pixel_write.c b/common/src/gx_display_driver_16bpp_pixel_write.c index bf5a8f46..4d6ef251 100644 --- a/common/src/gx_display_driver_16bpp_pixel_write.c +++ b/common/src/gx_display_driver_16bpp_pixel_write.c @@ -32,7 +32,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_pixel_write PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -67,17 +67,17 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_pixel_write(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLOR color) { USHORT *put = (USHORT *)context -> gx_draw_context_memory; - /* calculate address of scan line */ - put += context -> gx_draw_context_pitch * y; - - /* step in by x coordinate */ - put += x; + GX_CALCULATE_PUTROW(put, x, y, context); /* write the pixel value */ *put = (USHORT)color; diff --git a/common/src/gx_display_driver_16bpp_pixelmap_draw.c b/common/src/gx_display_driver_16bpp_pixelmap_draw.c index c8f05233..304485cb 100644 --- a/common/src/gx_display_driver_16bpp_pixelmap_draw.c +++ b/common/src/gx_display_driver_16bpp_pixelmap_draw.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_565rgb_pixelmap_raw_write PORTABLE C */ -/* 6.1 */ +/* 6.X */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -69,6 +69,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_pixelmap_raw_write(GX_DRAW_CONTEXT *context, @@ -85,8 +89,8 @@ GX_CONST USHORT *get; GX_RECTANGLE *clip = context -> gx_draw_context_clip; putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; + + GX_CALCULATE_PUTROW(putrow, clip->gx_rectangle_left, clip->gx_rectangle_top, context); getrow = (USHORT *)(pixelmap -> gx_pixelmap_data); getrow += pixelmap -> gx_pixelmap_width * (clip -> gx_rectangle_top - ypos); @@ -201,7 +205,7 @@ void (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* */ /* _gx_display_driver_565rgb_pixelmap_compressed_write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.X */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -237,6 +241,10 @@ void (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_pixelmap_compressed_write(GX_DRAW_CONTEXT *context, @@ -281,8 +289,8 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; to the enf of the last visible row */ putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += yval * context -> gx_draw_context_pitch; - putrow += xpos; + + GX_CALCULATE_PUTROW(putrow, xpos, yval, context); while (yval <= clip -> gx_rectangle_bottom) { @@ -534,7 +542,7 @@ void (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_565rgb_palette_pixelmap_raw_write PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -570,6 +578,10 @@ void (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_palette_pixelmap_raw_write(GX_DRAW_CONTEXT *context, @@ -590,8 +602,8 @@ GX_UBYTE b; GX_RECTANGLE *clip = context -> gx_draw_context_clip; putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; + + GX_CALCULATE_PUTROW(putrow, clip->gx_rectangle_left, clip->gx_rectangle_top, context); getrow = (GX_UBYTE *)(pixelmap -> gx_pixelmap_data); getrow += pixelmap -> gx_pixelmap_width * (clip -> gx_rectangle_top - ypos); @@ -624,7 +636,7 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* */ /* _gx_display_driver_565rgb_palette_pixelmap_transparent_raw_write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.X */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -660,6 +672,10 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_palette_pixelmap_transparent_raw_write(GX_DRAW_CONTEXT *context, @@ -679,9 +695,8 @@ GX_UBYTE b; GX_RECTANGLE *clip = context -> gx_draw_context_clip; - putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; + putrow = (USHORT *)context->gx_draw_context_memory; + GX_CALCULATE_PUTROW(putrow, clip->gx_rectangle_left, clip->gx_rectangle_top, context); getrow = (GX_UBYTE *)(pixelmap -> gx_pixelmap_data); getrow += pixelmap -> gx_pixelmap_width * (clip -> gx_rectangle_top - ypos); @@ -720,7 +735,7 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* _gx_display_driver_565rgb_palette_pixelmap_transparent_compressed */ /* _write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -757,6 +772,10 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_palette_pixelmap_transparent_compressed_write(GX_DRAW_CONTEXT *context, @@ -805,8 +824,7 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* Now we are on the first visible row, copy pixels until we get to the end of the last visible row. */ putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += yval * context -> gx_draw_context_pitch; - putrow += xpos; + GX_CALCULATE_PUTROW(putrow, xpos, yval, context); palette = (GX_COLOR *)pixelmap -> gx_pixelmap_aux_data; @@ -923,7 +941,7 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* */ /* _gx_display_driver_565rgb_palette_pixelmap_compressed_write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -959,6 +977,10 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_palette_pixelmap_compressed_write(GX_DRAW_CONTEXT *context, @@ -1006,8 +1028,7 @@ GX_RECTANGLE *clip = context -> gx_draw_context_clip; /* Now we are on the first visible row, copy pixels until we get to the end of the last visible row. */ putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += yval * context -> gx_draw_context_pitch; - putrow += xpos; + GX_CALCULATE_PUTROW(putrow, xpos, yval, context); palette = (GX_COLOR *)pixelmap -> gx_pixelmap_aux_data; diff --git a/common/src/gx_display_driver_16bpp_pixelmap_rotate.c b/common/src/gx_display_driver_16bpp_pixelmap_rotate.c index abdaf8a1..8f26aa75 100644 --- a/common/src/gx_display_driver_16bpp_pixelmap_rotate.c +++ b/common/src/gx_display_driver_16bpp_pixelmap_rotate.c @@ -580,7 +580,7 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLOR col /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_pixelmap_simple_rotate PORTABLE C */ -/* 6.1.7 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -622,6 +622,10 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLOR col /* 06-02-2021 Kenneth Maxwell Modified comment(s), */ /* remove unused assignment, */ /* resulting in version 6.1.7 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_pixelmap_simple_rotate(GX_DRAW_CONTEXT *context, INT xpos, INT ypos, GX_PIXELMAP *pixelmap, @@ -640,6 +644,10 @@ INT newypos; clip = context -> gx_draw_context_clip; + putrow = (USHORT *)context -> gx_draw_context_memory; + + GX_CALCULATE_PUTROW(putrow, clip -> gx_rectangle_left, clip -> gx_rectangle_top, context); + if (angle == 90) { width = pixelmap -> gx_pixelmap_height; @@ -648,10 +656,6 @@ INT newypos; newxpos = xpos + cx - (width - 1 - cy); newypos = ypos + cy - cx; - putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; - for (y = clip -> gx_rectangle_top - newypos; y <= clip -> gx_rectangle_bottom - newypos; y++) { put = putrow; @@ -677,10 +681,6 @@ INT newypos; newxpos = xpos + cx - (width - 1 - cx); newypos = ypos + cy - (height - 1 - cy); - putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; - for (y = clip -> gx_rectangle_top - newypos; y <= clip -> gx_rectangle_bottom - newypos; y++) { put = putrow; @@ -703,10 +703,6 @@ INT newypos; newxpos = xpos + cx - cy; newypos = ypos + cx - (height - 1 - cy); - putrow = (USHORT *)context -> gx_draw_context_memory; - putrow += clip -> gx_rectangle_top * context -> gx_draw_context_pitch; - putrow += clip -> gx_rectangle_left; - for (y = clip -> gx_rectangle_top - newypos; y <= clip -> gx_rectangle_bottom - newypos; y++) { put = putrow; diff --git a/common/src/gx_display_driver_16bpp_simple_line_draw.c b/common/src/gx_display_driver_16bpp_simple_line_draw.c index cef9d1aa..6001e0dc 100644 --- a/common/src/gx_display_driver_16bpp_simple_line_draw.c +++ b/common/src/gx_display_driver_16bpp_simple_line_draw.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_simple_line_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -75,6 +75,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_simple_line_draw(GX_DRAW_CONTEXT *context, INT xstart, INT ystart, INT xend, INT yend) @@ -103,8 +107,9 @@ INT dy = GX_ABS(yend - ystart); GX_RECTANGLE *clip = context -> gx_draw_context_clip; GX_COLOR linecolor = context -> gx_draw_context_brush.gx_brush_line_color; -#if defined GX_BRUSH_ALPHA_SUPPORT -GX_UBYTE alpha; + +#if defined GX_BRUSH_ALPHA_SUPPORT +GX_UBYTE alpha; alpha = context -> gx_draw_context_brush.gx_brush_alpha; if (alpha == 0) @@ -136,8 +141,11 @@ GX_UBYTE alpha; y_increment = 0 - context -> gx_draw_context_pitch; } - put = (USHORT *)(context -> gx_draw_context_memory) + ystart * context -> gx_draw_context_pitch + xstart; - next_put = (USHORT *)(context -> gx_draw_context_memory) + yend * context -> gx_draw_context_pitch + xend; + put = (USHORT *)(context -> gx_draw_context_memory); + GX_CALCULATE_PUTROW(put, xstart, ystart, context); + + next_put = (USHORT *)(context -> gx_draw_context_memory); + GX_CALCULATE_PUTROW(next_put, xend, yend, context); end_point.gx_point_x = (GX_VALUE)xstart; @@ -296,7 +304,7 @@ GX_UBYTE alpha; PIXEL_WRITE(put, linecolor); put += context -> gx_draw_context_pitch; } - } + } } else { @@ -461,3 +469,4 @@ GX_UBYTE alpha; } } } + diff --git a/common/src/gx_display_driver_16bpp_vertical_line_draw.c b/common/src/gx_display_driver_16bpp_vertical_line_draw.c index 128a34ec..48cc81f8 100644 --- a/common/src/gx_display_driver_16bpp_vertical_line_draw.c +++ b/common/src/gx_display_driver_16bpp_vertical_line_draw.c @@ -31,7 +31,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_vertical_line_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -70,6 +70,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_vertical_line_draw(GX_DRAW_CONTEXT *context, INT ystart, INT yend, INT xpos, INT width, GX_COLOR color) @@ -98,11 +102,7 @@ GX_UBYTE alpha; /* pick up starting address of canvas memory */ rowstart = (USHORT *)context -> gx_draw_context_memory; - /* calculate start of scanline */ - rowstart += context -> gx_draw_context_pitch * ystart; - - /* offset into starting pixel */ - rowstart += xpos; + GX_CALCULATE_PUTROW(rowstart, xpos, ystart, context); /* draw line from top to bottom */ for (row = 0; row < len; row++) diff --git a/common/src/gx_display_driver_16bpp_vertical_pattern_line_draw.c b/common/src/gx_display_driver_16bpp_vertical_pattern_line_draw.c index 16404336..c4f092ac 100644 --- a/common/src/gx_display_driver_16bpp_vertical_pattern_line_draw.c +++ b/common/src/gx_display_driver_16bpp_vertical_pattern_line_draw.c @@ -32,7 +32,7 @@ /* */ /* _gx_display_driver_16bpp_vertical_pattern_line_draw */ /* PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -67,6 +67,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_vertical_pattern_line_draw(GX_DRAW_CONTEXT *context, INT ystart, INT yend, INT xpos) @@ -84,11 +88,7 @@ INT len = yend - ystart + 1; /* pick up starting address of canvas memory */ rowstart = (USHORT *)context -> gx_draw_context_memory; - /* calculate start of scanline */ - rowstart += context -> gx_draw_context_pitch * ystart; - - /* offset into starting pixel */ - rowstart += xpos; + GX_CALCULATE_PUTROW(rowstart, xpos, ystart, context); /* pick up the requested pattern and mask */ pattern = context -> gx_draw_context_brush.gx_brush_line_pattern; diff --git a/common/src/gx_display_driver_24xrgb_jpeg_draw.c b/common/src/gx_display_driver_24xrgb_jpeg_draw.c index 7ed13824..042a3a65 100644 --- a/common/src/gx_display_driver_24xrgb_jpeg_draw.c +++ b/common/src/gx_display_driver_24xrgb_jpeg_draw.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_dislay_driver_24xrgb_jpeg_draw PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -70,10 +70,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed a parameter from */ /* jpeg mcu decode function, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_display_driver_24xrgb_rotated_jpeg_draw.c b/common/src/gx_display_driver_24xrgb_rotated_jpeg_draw.c index 45cea5f9..d99e22a3 100644 --- a/common/src/gx_display_driver_24xrgb_rotated_jpeg_draw.c +++ b/common/src/gx_display_driver_24xrgb_rotated_jpeg_draw.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_dislay_driver_24xrgb_rotated_jpeg_draw PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -70,10 +70,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 02-02-2021 Kenneth Maxwell Initial Version 6.1.4 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed a parameter from */ /* jpeg mcu decode function, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_display_driver_565rgb_canvas_blend.c b/common/src/gx_display_driver_565rgb_canvas_blend.c index 353b8100..dabdb603 100644 --- a/common/src/gx_display_driver_565rgb_canvas_blend.c +++ b/common/src/gx_display_driver_565rgb_canvas_blend.c @@ -45,7 +45,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_565rgb_canvas_blend PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -83,7 +83,9 @@ /* */ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ -/* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added canvas status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_565rgb_canvas_blend(GX_CANVAS *canvas, GX_CANVAS *composite) @@ -103,6 +105,14 @@ USHORT bcolor; INT row; INT col; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + /* Not supported. */ + return; + } +#endif + dirty.gx_rectangle_left = dirty.gx_rectangle_top = 0; dirty.gx_rectangle_right = (GX_VALUE)(canvas -> gx_canvas_x_resolution - 1); dirty.gx_rectangle_bottom = (GX_VALUE)(canvas -> gx_canvas_y_resolution - 1); diff --git a/common/src/gx_display_driver_565rgb_glyph_1bit_draw.c b/common/src/gx_display_driver_565rgb_glyph_1bit_draw.c index 2d3c8117..ec8d4294 100644 --- a/common/src/gx_display_driver_565rgb_glyph_1bit_draw.c +++ b/common/src/gx_display_driver_565rgb_glyph_1bit_draw.c @@ -50,7 +50,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_16bpp_glyph_1bit_draw PORTABLE C */ -/* 6.1.11 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -92,6 +92,10 @@ /* 04-25-2022 Ting Zhu Modified comment(s), */ /* fixed access violation bug, */ /* resulting in version 6.1.11 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_16bpp_glyph_1bit_draw(GX_DRAW_CONTEXT *context, GX_RECTANGLE *draw_area, GX_POINT *map_offset, GX_CONST GX_GLYPH *glyph) @@ -188,10 +192,9 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *, INT, INT, GX_COLOR, GX_UBYTE); y_height = (UINT)(draw_area -> gx_rectangle_bottom - draw_area -> gx_rectangle_top + 1); line_start = (USHORT *)context -> gx_draw_context_memory; - line_start += context -> gx_draw_context_pitch * (draw_area -> gx_rectangle_top); - line_start += draw_area -> gx_rectangle_left; + GX_CALCULATE_PUTROW(line_start, draw_area -> gx_rectangle_left, draw_area -> gx_rectangle_top, context); -#if defined (GX_BRUSH_ALPHA_SUPPORT) +#if defined(GX_BRUSH_ALPHA_SUPPORT) if (brush_alpha != 0xff) { yval = draw_area -> gx_rectangle_top; diff --git a/common/src/gx_display_driver_565rgb_horizontal_pixelmap_line_draw.c b/common/src/gx_display_driver_565rgb_horizontal_pixelmap_line_draw.c index f2ab8b4d..b12bb7c2 100644 --- a/common/src/gx_display_driver_565rgb_horizontal_pixelmap_line_draw.c +++ b/common/src/gx_display_driver_565rgb_horizontal_pixelmap_line_draw.c @@ -536,7 +536,7 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* */ /* _gx_display_driver_565rgb_horizontal_pixelmap_line_raw_write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.X */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -573,6 +573,10 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_horizontal_pixelmap_line_raw_write(GX_DRAW_CONTEXT *context, @@ -596,8 +600,7 @@ GX_PIXELMAP *pixelmap; if ((info -> draw) && (xstart <= xend)) { put = (USHORT *)context -> gx_draw_context_memory; - put += y * context -> gx_draw_context_pitch; - put += xstart; + GX_CALCULATE_PUTROW(put, xstart, y, context); /*calculate the offset.*/ offset = (info -> x_offset % pic_width); @@ -723,7 +726,7 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* */ /* _gx_display_driver_565rgb_horizontal_pixelmap_line_compressed_write */ /* PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -760,6 +763,10 @@ VOID (*blend_func)(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLO /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_display_driver_565rgb_horizontal_pixelmap_line_compressed_write(GX_DRAW_CONTEXT *context, @@ -781,7 +788,7 @@ GX_PIXELMAP *pixelmap; start_pos = xstart - (info -> x_offset % pixelmap -> gx_pixelmap_width); put = (USHORT *)context -> gx_draw_context_memory; - put += y * context -> gx_draw_context_pitch + start_pos; + GX_CALCULATE_PUTROW(put, start_pos, y, context); /*Repeat the draw operation to fill the whole dirty area.*/ while (start_pos <= xend) diff --git a/common/src/gx_display_driver_565rgb_jpeg_draw.c b/common/src/gx_display_driver_565rgb_jpeg_draw.c index a226c7da..19c2b415 100644 --- a/common/src/gx_display_driver_565rgb_jpeg_draw.c +++ b/common/src/gx_display_driver_565rgb_jpeg_draw.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_dislay_driver_565rgb_jpeg_draw PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -72,10 +72,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed a parameter from */ /* jpeg mcu decode function, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_display_driver_565rgb_pixel_blend.c b/common/src/gx_display_driver_565rgb_pixel_blend.c index d2a0eac2..dd4bccd2 100644 --- a/common/src/gx_display_driver_565rgb_pixel_blend.c +++ b/common/src/gx_display_driver_565rgb_pixel_blend.c @@ -44,7 +44,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_display_driver_565rgb_pixel_blend PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -83,6 +83,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_display_driver_565rgb_pixel_blend(GX_DRAW_CONTEXT *context, INT x, INT y, GX_COLOR fcolor, GX_UBYTE alpha) @@ -94,14 +98,12 @@ GX_UBYTE balpha; USHORT bcolor; USHORT *put; - /* Is the pixel non-transparent? */ if (alpha > 0) { /* calculate address of pixel */ put = (USHORT *)context -> gx_draw_context_memory; - put += context -> gx_draw_context_pitch * y; - put += x; + GX_CALCULATE_PUTROW(put, x, y, context); /* No need to blend if alpha value is 255. */ if (alpha == 255) diff --git a/common/src/gx_display_driver_565rgb_rotated_jpeg_draw.c b/common/src/gx_display_driver_565rgb_rotated_jpeg_draw.c index beb1dfdc..382ed3c0 100644 --- a/common/src/gx_display_driver_565rgb_rotated_jpeg_draw.c +++ b/common/src/gx_display_driver_565rgb_rotated_jpeg_draw.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_dislay_driver_565rgb_jpeg_draw PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -70,10 +70,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 12-31-2020 Kenneth Maxwell Initial Version 6.1.3 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* removed a parameter from */ /* jpeg mcu decode function, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_display_language_table_set.c b/common/src/gx_display_language_table_set.c index 3f11055a..f3c54837 100644 --- a/common/src/gx_display_language_table_set.c +++ b/common/src/gx_display_language_table_set.c @@ -212,7 +212,7 @@ GX_CONST GX_STRING **old_table = display -> gx_display_language_table; /* FUNCTION RELEASE */ /* */ /* _gx_display_language_direction_table_set_ext PORTABLE C */ -/* 6.1.10 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -224,7 +224,7 @@ GX_CONST GX_STRING **old_table = display -> gx_display_language_table; /* INPUT */ /* */ /* display Pointer to display */ -/* language_direciton_table The language direction table */ +/* language_direction_table The language direction table */ /* to be set */ /* num_languages Number of languages in the */ /* table */ @@ -246,6 +246,8 @@ GX_CONST GX_STRING **old_table = display -> gx_display_language_table; /* DATE NAME DESCRIPTION */ /* */ /* 01-31-2022 Ting Zhu Initial Version 6.1.10 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_DYNAMIC_BIDI_TEXT_SUPPORT) diff --git a/common/src/gx_drop_list_draw.c b/common/src/gx_drop_list_draw.c index 641a9835..66dcc1b4 100644 --- a/common/src/gx_drop_list_draw.c +++ b/common/src/gx_drop_list_draw.c @@ -33,13 +33,114 @@ #include "gx_utility.h" #include "gx_drop_list.h" +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_drop_list_selected_children_draw PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function draws the children of the selected item to the drop */ +/* list client area with the specified shift values. */ +/* */ +/* INPUT */ +/* */ +/* drop_list Pointer to drop list widget */ +/* widget Widget to be drawn */ +/* xshift Shift value in x coordinate */ +/* yshift Shift value in y coordinate */ +/* */ +/* OUTPUT */ +/* */ +/* None */ +/* */ +/* CALLS */ +/* */ +/* _gx_utility_rectangle_shift Shift rectangle */ +/* */ +/* CALLED BY */ +/* */ +/* _gx_drop_list_draw */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +static VOID _gx_drop_list_selected_children_draw(GX_DROP_LIST *drop_list, GX_WIDGET *widget, GX_VALUE xshift, GX_VALUE yshift) +{ +GX_WIDGET *child; +GX_WIDGET *child_child; +GX_RECTANGLE old_size; +GX_RECTANGLE old_clip; +ULONG old_style; + + /* Save the first child. */ + child = widget -> gx_widget_first_child; + + /* Draw the children. */ + while (child) + { + /* Save the widget size. */ + old_size = child -> gx_widget_size; + + /* Save the widget clip size. */ + old_clip = child -> gx_widget_clip; + + /* Save the widget style. */ + old_style = child -> gx_widget_style; + + /* Update the widget style temporarily. */ + if (drop_list -> gx_widget_status & GX_STATUS_HAS_FOCUS) + { + child -> gx_widget_style |= ~GX_STYLE_DRAW_SELECTED; + } + else + { + child -> gx_widget_style &= ~GX_STYLE_DRAW_SELECTED; + } + + /* Shift the widget size and clip with the specified shift values temporarily. */ + _gx_utility_rectangle_shift(&child -> gx_widget_size, xshift, yshift); + _gx_utility_rectangle_shift(&child -> gx_widget_clip, xshift, yshift); + + child_child = child -> gx_widget_first_child; + + /* Set the first child to NULL temporarily. */ + child -> gx_widget_first_child = GX_NULL; + + /* Draw the widget. */ + child -> gx_widget_draw_function(child); + + if (child_child) + { + child -> gx_widget_first_child = child_child; + + _gx_drop_list_selected_children_draw(drop_list, child, xshift, yshift); + } + + /* Recover the widget properties. */ + child -> gx_widget_size = old_size; + child -> gx_widget_clip = old_clip; + child -> gx_widget_style = old_style; + + child = child -> gx_widget_next; + } +} /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _gx_drop_list_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -77,32 +178,79 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* improved drawing of the */ +/* selected item, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_drop_list_draw(GX_DROP_LIST *drop_list) { GX_RECTANGLE client; GX_WIDGET *selected; -GX_WIDGET *widget; -GX_VERTICAL_LIST *list; -GX_RECTANGLE selected_size; -GX_RECTANGLE selected_clip; -ULONG selected_style; +GX_VALUE xshift; +GX_VALUE yshift; +INT selected_index; +GX_VERTICAL_LIST *list = &drop_list -> gx_drop_list_popup.gx_popup_list_list; +GX_RECTANGLE size; +GX_RECTANGLE clip; +ULONG style; +GX_WIDGET *child = GX_NULL; +GX_BOOL reuse_list_item = GX_FALSE; - widget = (GX_WIDGET *)drop_list; + /* Draw the background. */ _gx_drop_list_background_draw(drop_list); - list = (GX_VERTICAL_LIST *)&drop_list -> gx_drop_list_popup.gx_popup_list_list; + /* Pick the selected item. */ _gx_vertical_list_selected_widget_get(list, &selected); + if (!selected && list -> gx_vertical_list_callback) + { + /* If not be able to retrieve the selected widget, its possible that the selcted item + has been reused for displaying the other list items during the scrolling. + In this case, try to get the selected index first, then reuse the list child to draw the selected item. */ + + /* Get the selected index. */ + _gx_vertical_list_selected_index_get(list, &selected_index); + + if((selected_index >= 0) && (selected_index < list -> gx_vertical_list_total_rows)) + { + /* Make the first list child as the selected widget temporarily. */ + selected = _gx_widget_first_client_child_get((GX_WIDGET *)list); + + /* Call the list callback function to create the selected widget. */ + list -> gx_vertical_list_callback(list, selected, selected_index); + + reuse_list_item = GX_TRUE; + } + } + if (selected) { - /* draw the selected widget into my client area: */ - _gx_widget_client_get(widget, -1, &client); - selected_size = selected -> gx_widget_size; - selected_clip = selected -> gx_widget_clip; - selected_style = selected -> gx_widget_style; + _gx_widget_client_get((GX_WIDGET *)drop_list, -1, &client); + + size = selected -> gx_widget_size; + clip = selected -> gx_widget_clip; + + if (selected -> gx_widget_first_child) + { + child = selected -> gx_widget_first_child; + selected -> gx_widget_first_child = GX_NULL; + + /* Calculate the distance from the selected widget to the client area. */ + xshift = (GX_VALUE)(client.gx_rectangle_left - size.gx_rectangle_left); + yshift = (GX_VALUE)((client.gx_rectangle_bottom + client.gx_rectangle_top - size.gx_rectangle_bottom - size.gx_rectangle_top) >> 1); + } + + selected -> gx_widget_size = client; + selected -> gx_widget_clip = client; + + + /* Save the widget style. */ + style = selected -> gx_widget_style; + + /* Update the widget style temporarily. */ if (drop_list -> gx_widget_status & GX_STATUS_HAS_FOCUS) { selected -> gx_widget_style |= ~GX_STYLE_DRAW_SELECTED; @@ -111,14 +259,29 @@ ULONG selected_style; { selected -> gx_widget_style &= ~GX_STYLE_DRAW_SELECTED; } - selected -> gx_widget_size = client; - selected -> gx_widget_clip = client; + selected -> gx_widget_draw_function(selected); - selected -> gx_widget_size = selected_size; - selected -> gx_widget_clip = selected_clip; - selected -> gx_widget_style = selected_style; + + if (child) + { + selected -> gx_widget_first_child = child; + + /* Draw the selected widget into my client area: */ + _gx_drop_list_selected_children_draw(drop_list, selected, xshift, yshift); + } + + selected -> gx_widget_size = size; + selected -> gx_widget_clip = clip; + selected -> gx_widget_style = style; + } + + if (reuse_list_item) + { + /* Call the list callback funtion to create the widget with its original index. */ + list -> gx_vertical_list_callback(list, selected, list -> gx_vertical_list_top_index); } - _gx_widget_children_draw(widget); + /* Draw the children. */ + _gx_widget_children_draw((GX_WIDGET *)drop_list); } diff --git a/common/src/gx_image_reader_image_decode.c b/common/src/gx_image_reader_image_decode.c index 3910e13c..94c193af 100644 --- a/common/src/gx_image_reader_image_decode.c +++ b/common/src/gx_image_reader_image_decode.c @@ -108,7 +108,7 @@ GX_CONST GX_UBYTE *buffer; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_image_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -143,10 +143,10 @@ GX_CONST GX_UBYTE *buffer; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* modified jpeg decode */ /* function parameter list, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_SOFTWARE_DECODER_SUPPORT) diff --git a/common/src/gx_image_reader_jpeg_decode.c b/common/src/gx_image_reader_jpeg_decode.c index 4db1e52e..df0adc8f 100644 --- a/common/src/gx_image_reader_jpeg_decode.c +++ b/common/src/gx_image_reader_jpeg_decode.c @@ -178,7 +178,7 @@ INT index; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_huffcode_find PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -221,9 +221,9 @@ INT index; /* changed bit_count to */ /* GX_VALUE data type, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_huffcode_find(GX_JPEG_INFO *jpeg_info, @@ -266,7 +266,7 @@ GX_HUFFCODE_INFO *code_info; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_huffman_table_set PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -303,9 +303,9 @@ GX_HUFFCODE_INFO *code_info; /* added range test to prevent */ /* underflow, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_huffman_table_set(GX_JPEG_INFO *jpeg_info, UINT segment_len) @@ -554,7 +554,7 @@ INT index; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_dc_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -595,9 +595,9 @@ INT index; /* 10-31-2022 Kenneth Maxwell Modified comment(s), */ /* added range test, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_dc_decode(GX_JPEG_INFO *jpeg_info, UINT i_component) @@ -654,7 +654,7 @@ GX_BOOL negative; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_ac_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -695,9 +695,9 @@ GX_BOOL negative; /* 10-31-2022 Kenneth Maxwell Modified comment(s), */ /* added range test, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_ac_decode(GX_JPEG_INFO *jpeg_info, UINT i_component) @@ -834,7 +834,7 @@ INT negative; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_dequantize_idct PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -891,7 +891,7 @@ INT negative; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_dequantize_idct(INT *block, INT *quant_table, GX_BYTE *out, INT stride) @@ -1099,7 +1099,7 @@ int16_t const *base; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_1d_idct PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -1135,9 +1135,9 @@ int16_t const *base; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_1d_idct(INT *input_data, INT *output_data, INT post_scale, INT round) @@ -1190,7 +1190,7 @@ INT t; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_dequantize_idct PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -1234,9 +1234,9 @@ INT t; /* added range check for */ /* table_index, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_dequantize_idct(INT *block, INT *quant_table, GX_BYTE *out, INT stride) @@ -1291,7 +1291,7 @@ INT row; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_one_block_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -1332,9 +1332,9 @@ INT row; /* returned result of */ /* dequantize_idct, */ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_one_block_decode(GX_JPEG_INFO *jpeg_info, UINT i_component, GX_BYTE *block_data) @@ -1386,7 +1386,7 @@ INT stride; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_24xrgb_pixel_write_helium PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1423,34 +1423,18 @@ INT stride; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_24xrgb_pixel_write_helium(GX_JPEG_INFO *jpeg_info, uint8x16_t vred, uint8x16_t vgreen, uint8x16_t vblue, INT size) { -static uint8x16_t voffset = {0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60}; -static uint8x16_t valpha = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -mve_pred16_t p; +INT index; - if (size == 16) - { - vstrbq_scatter_offset_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vblue); - vstrbq_scatter_offset_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vgreen); - vstrbq_scatter_offset_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vred); - vstrbq_scatter_offset_u8(jpeg_info -> gx_jpeg_putdata++, voffset, valpha); - - jpeg_info -> gx_jpeg_putdata += 60; - } - else + for(index = 0; index < size; index++) { - /* Write the specified size of RGB values to memory. */ - p = 0xffff >> (16 - size); - vstrbq_scatter_offset_p_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vblue, p); - vstrbq_scatter_offset_p_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vgreen, p); - vstrbq_scatter_offset_p_u8(jpeg_info -> gx_jpeg_putdata++, voffset, vred, p); - vstrbq_scatter_offset_p_u8(jpeg_info -> gx_jpeg_putdata++, voffset, valpha, p); + *((GX_COLOR *)jpeg_info -> gx_jpeg_putdata) = 0xff000000 | ((ULONG)vred[index] << 16) | ((ULONG)vgreen[index] << 8) | (ULONG)vblue[index]; - jpeg_info -> gx_jpeg_putdata += ((size - 1) << 2); + jpeg_info -> gx_jpeg_putdata += 4; } } #else @@ -1459,7 +1443,7 @@ mve_pred16_t p; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_1555xrgb_pixel_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1492,7 +1476,7 @@ mve_pred16_t p; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_24xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX_UBYTE red, GX_UBYTE green, GX_UBYTE blue) @@ -1509,7 +1493,7 @@ static VOID _gx_image_reader_jpeg_24xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_24bpp_pixel_write_helium PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1547,7 +1531,7 @@ static VOID _gx_image_reader_jpeg_24xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_24bpp_pixel_write_helium(GX_JPEG_INFO *jpeg_info, uint8x16_t vred, uint8x16_t vgreen, uint8x16_t vblue, INT size) @@ -1578,7 +1562,7 @@ mve_pred16_t p; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_24bpp_pixel_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1611,7 +1595,7 @@ mve_pred16_t p; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_24bpp_pixel_write(GX_JPEG_INFO *jpeg_info, GX_UBYTE red, GX_UBYTE green, GX_UBYTE blue) @@ -1628,7 +1612,7 @@ static VOID _gx_image_reader_jpeg_24bpp_pixel_write(GX_JPEG_INFO *jpeg_info, GX_ /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_565rgb_pixel_write_helium PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1672,7 +1656,7 @@ static VOID _gx_image_reader_jpeg_24bpp_pixel_write(GX_JPEG_INFO *jpeg_info, GX_ /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_565rgb_pixel_write_helium(GX_JPEG_INFO *jpeg_info, uint8x16_t vred, uint8x16_t vgreen, uint8x16_t vblue, INT size) @@ -1729,7 +1713,7 @@ GX_UBYTE blue[16]; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_1555xrgb_pixel_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1762,7 +1746,7 @@ GX_UBYTE blue[16]; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_565rgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX_UBYTE red, GX_UBYTE green, GX_UBYTE blue) @@ -1783,7 +1767,7 @@ static VOID _gx_image_reader_jpeg_565rgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_1555xrgb_pixel_write_helium PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1827,7 +1811,7 @@ static VOID _gx_image_reader_jpeg_565rgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_1555xrgb_pixel_write_helium(GX_JPEG_INFO *jpeg_info, uint8x16_t vred, uint8x16_t vgreen, uint8x16_t vblue, INT size) @@ -1884,7 +1868,7 @@ GX_UBYTE blue[16]; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_1555xrgb_pixel_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1917,7 +1901,7 @@ GX_UBYTE blue[16]; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static VOID _gx_image_reader_jpeg_1555xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, GX_UBYTE red, GX_UBYTE green, GX_UBYTE blue) @@ -1937,7 +1921,7 @@ static VOID _gx_image_reader_jpeg_1555xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_pixel_write_info_set PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -1979,7 +1963,7 @@ static VOID _gx_image_reader_jpeg_1555xrgb_pixel_write(GX_JPEG_INFO *jpeg_info, /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_pixel_write_info_set(GX_JPEG_INFO *jpeg_info) @@ -2063,7 +2047,7 @@ static UINT _gx_image_reader_jpeg_pixel_write_info_set(GX_JPEG_INFO *jpeg_info) /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_one_mcu_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -2103,9 +2087,11 @@ static UINT _gx_image_reader_jpeg_pixel_write_info_set(GX_JPEG_INFO *jpeg_info) /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* added Helium support, */ -/* resulting in version 6.x */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_one_mcu_write(GX_JPEG_INFO *jpeg_info, INT xpos, INT ypos, INT h, INT v) @@ -2162,8 +2148,13 @@ INT blue; } put = (GX_UBYTE *)jpeg_info -> gx_jpeg_output_buffer; +#if defined(GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER) + put += (ypos + ystart - jpeg_info -> gx_jpeg_output_buffer_offset_y) * jpeg_info -> gx_jpeg_output_stride; + put += (xpos + xstart - jpeg_info -> gx_jpeg_output_buffer_offset_x) * jpeg_info -> gx_jpeg_output_bpp; +#else put += (ypos + ystart) * jpeg_info -> gx_jpeg_output_stride; put += (xpos + xstart) * jpeg_info -> gx_jpeg_output_bpp; +#endif #if defined(GX_ENABLE_ARM_HELIUM) index = (h == 1 ? 0 : (h - 1 + (xstart % h))); @@ -2224,7 +2215,7 @@ INT blue; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_one_mcu_rotated_write PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Ting Zhu, Microsoft Corporation */ @@ -2261,7 +2252,7 @@ INT blue; /* */ /* DATE NAME DESCRIPTION */ /* */ -/* xx-xx-xxxx Ting Zhu Initial Version 6.x */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_one_mcu_rotated_write(GX_JPEG_INFO *jpeg_info, INT xpos, INT ypos, INT h, INT v) @@ -2427,7 +2418,7 @@ GX_BYTE sign = 1; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_decompress PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -2465,9 +2456,9 @@ GX_BYTE sign = 1; /* 10-31-2022 Kenneth Maxwell Modified comment(s), */ /* abort if block decode fails,*/ /* resulting in version 6.2.0 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_decompress(GX_JPEG_INFO *jpeg_info) @@ -2542,7 +2533,7 @@ UINT (*one_mcu_write)(GX_JPEG_INFO *jpeg_info, INT xpos, INT ypos, INT h, INT v) /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_decode_blocks PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -2584,9 +2575,9 @@ UINT (*one_mcu_write)(GX_JPEG_INFO *jpeg_info, INT xpos, INT ypos, INT h, INT v) /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), removed */ +/* 10-31-2023 Ting Zhu Modified comment(s), removed */ /* huffman table free logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ static UINT _gx_image_reader_jpeg_decode_blocks(GX_JPEG_INFO *jpeg_info) @@ -2689,7 +2680,7 @@ UINT status = GX_SUCCESS; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -2724,9 +2715,9 @@ UINT status = GX_SUCCESS; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_image_reader_jpeg_decode(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap) @@ -2794,7 +2785,7 @@ GX_JPEG_INFO *jpeg_info; /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_jpeg_mcu_decode PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -2833,9 +2824,9 @@ GX_JPEG_INFO *jpeg_info; /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_image_reader_jpeg_mcu_decode(GX_CONST GX_UBYTE *read_data, ULONG data_size, @@ -2871,8 +2862,15 @@ GX_JPEG_INFO *jpeg_info; jpeg_info -> gx_jpeg_output_color_format = context -> gx_draw_context_display -> gx_display_color_format; jpeg_info -> gx_jpeg_output_rotation_angle = context -> gx_draw_context_display -> gx_display_rotation_angle; jpeg_info -> gx_jpeg_output_buffer = (GX_UBYTE *)context -> gx_draw_context_memory; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + jpeg_info -> gx_jpeg_output_width = (USHORT)context -> gx_draw_context_canvas -> gx_canvas_memory_width; + jpeg_info -> gx_jpeg_output_height = (USHORT)context -> gx_draw_context_canvas -> gx_canvas_memory_height; + jpeg_info -> gx_jpeg_output_buffer_offset_x = context -> gx_draw_context_offset_x; + jpeg_info -> gx_jpeg_output_buffer_offset_y = context -> gx_draw_context_offset_y; +#else jpeg_info -> gx_jpeg_output_width = (USHORT)context -> gx_draw_context_canvas -> gx_canvas_x_resolution; jpeg_info -> gx_jpeg_output_height = (USHORT)context -> gx_draw_context_canvas -> gx_canvas_y_resolution; +#endif jpeg_info -> gx_jpeg_output_clip = *context -> gx_draw_context_clip; diff --git a/common/src/gx_image_reader_start.c b/common/src/gx_image_reader_start.c index 6249909f..e5d5bc63 100644 --- a/common/src/gx_image_reader_start.c +++ b/common/src/gx_image_reader_start.c @@ -292,7 +292,7 @@ static UINT _gx_image_reader_pixelmap_info_set(GX_IMAGE_READER *image_reader, GX /* FUNCTION RELEASE */ /* */ /* _gx_image_reader_start PORTABLE C */ -/* 6.x */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -340,9 +340,9 @@ static UINT _gx_image_reader_pixelmap_info_set(GX_IMAGE_READER *image_reader, GX /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ -/* xx-xx-xxxx Ting Zhu Modified comment(s), */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ /* improved logic, */ -/* resulting in version 6.x */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_image_reader_start(GX_IMAGE_READER *image_reader, GX_PIXELMAP *outmap) diff --git a/common/src/gx_multi_line_text_button_text_set.c b/common/src/gx_multi_line_text_button_text_set.c index 7ec818c2..83837125 100644 --- a/common/src/gx_multi_line_text_button_text_set.c +++ b/common/src/gx_multi_line_text_button_text_set.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_multi_line_text_button_text_set PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -67,14 +67,24 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added return status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ #if defined(GX_ENABLE_DEPRECATED_STRING_API) UINT _gx_multi_line_text_button_text_set(GX_MULTI_LINE_TEXT_BUTTON *button, GX_CONST GX_CHAR *text) { - _gx_text_button_text_set((GX_TEXT_BUTTON *)button, text); - _gx_multi_line_text_button_line_pointers_set(button); - return GX_SUCCESS; +UINT status; + + status = _gx_text_button_text_set((GX_TEXT_BUTTON *)button, text); + + if (status == GX_SUCCESS) + { + _gx_multi_line_text_button_line_pointers_set(button); + } + + return status; } #endif @@ -83,7 +93,7 @@ UINT _gx_multi_line_text_button_text_set(GX_MULTI_LINE_TEXT_BUTTON *button, GX_ /* FUNCTION RELEASE */ /* */ /* _gx_multi_line_text_button_text_set_ext PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -117,11 +127,20 @@ UINT _gx_multi_line_text_button_text_set(GX_MULTI_LINE_TEXT_BUTTON *button, GX_ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added return status check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_multi_line_text_button_text_set_ext(GX_MULTI_LINE_TEXT_BUTTON *button, GX_CONST GX_STRING *text) { - _gx_text_button_text_set_ext((GX_TEXT_BUTTON *)button, text); - _gx_multi_line_text_button_line_pointers_set(button); - return GX_SUCCESS; +UINT status; + + status = _gx_text_button_text_set_ext((GX_TEXT_BUTTON *)button, text); + + if (status == GX_SUCCESS) + { + _gx_multi_line_text_button_line_pointers_set(button); + } + return status; } diff --git a/common/src/gx_scrollbar_draw.c b/common/src/gx_scrollbar_draw.c index 708d6832..ea0c62af 100644 --- a/common/src/gx_scrollbar_draw.c +++ b/common/src/gx_scrollbar_draw.c @@ -37,7 +37,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_scrollbar_draw PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -83,6 +83,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* improved logic, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ VOID _gx_scrollbar_draw(GX_SCROLLBAR *scrollbar) @@ -216,13 +219,15 @@ GX_COLOR fill_color; /* Reset dirty area temporarily to avoid cover the end pixelmap area. */ old_dirty = _gx_system_current_draw_context -> gx_draw_context_dirty; - _gx_utility_rectangle_combine(&old_dirty, &size); - _gx_system_current_draw_context -> gx_draw_context_dirty = size; + if(_gx_utility_rectangle_overlap_detect(&old_dirty, &size, &size) == GX_TRUE) + { + _gx_system_current_draw_context -> gx_draw_context_dirty = size; - _gx_canvas_pixelmap_draw(xpos, ypos, map); + _gx_canvas_pixelmap_draw(xpos, ypos, map); - /* Set dirty area back. */ - _gx_system_current_draw_context -> gx_draw_context_dirty = old_dirty; + /* Set dirty area back. */ + _gx_system_current_draw_context -> gx_draw_context_dirty = old_dirty; + } } } } diff --git a/common/src/gx_system_canvas_refresh.c b/common/src/gx_system_canvas_refresh.c index 70d5b213..d79691de 100644 --- a/common/src/gx_system_canvas_refresh.c +++ b/common/src/gx_system_canvas_refresh.c @@ -30,13 +30,217 @@ #include "gx_widget.h" #include "gx_utility.h" +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gx_system_canvas_draw_partial_canvas PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function draws the dirty area of the specified canvas with */ +/* partial canvas buffer and toggle the dirty area to the display or */ +/* a composite canvas. */ +/* */ +/* INPUT */ +/* */ +/* None */ +/* */ +/* OUTPUT */ +/* */ +/* None */ +/* */ +/* CALLS */ +/* */ +/* _gx_system_dirty_list_trim Trim dirty area list */ +/* _gx_canvas_drawing_initiate Initiate drawing on canvas */ +/* _gx_widget_children_draw Draw widgets children */ +/* [gx_widget_draw_function] Call widget's drawing function*/ +/* _gx_canvas_drawing_complete Complete drawing on canvas */ +/* _gx_system_canvas_toggle Toggle the frame buffer */ +/* _gx_utility_rectangle_shift Shift a rectangle */ +/* */ +/* CALLED BY */ +/* */ +/* _gx_system_canvas_refresh */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER +static UINT _gx_system_canvas_draw_partial_canvas(GX_WINDOW_ROOT *root) +{ +UINT status = GX_SUCCESS; +GX_RECTANGLE dirty_sum; +GX_RECTANGLE dirty_frame; +UINT index; +GX_WIDGET *drawit; +GX_DIRTY_AREA *dirty_list_entry; +GX_CANVAS *canvas = root -> gx_window_root_canvas; +GX_VALUE dirty_width; +GX_VALUE dirty_height; + +#if defined(GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL) || defined(GX_CANVAS_REFRESH_DIRECTION_VERTICAL) +GX_RECTANGLE dirty_mask; + + if (_gx_system_dirty_list_trim(&dirty_sum, root) == GX_FALSE) + { + return GX_SUCCESS; + } + + dirty_mask = dirty_sum; +#endif + + /* Refresh canvas in the dirty area. */ + if (canvas -> gx_canvas_draw_count > 0) + { + _gx_system_dirty_partial_add((GX_WIDGET *)root, &canvas -> gx_canvas_dirty_area); + canvas -> gx_canvas_draw_count = 0; + } + +#if defined(GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL) + dirty_height = (GX_VALUE)(dirty_sum.gx_rectangle_bottom - dirty_sum.gx_rectangle_top + 1); + dirty_width = (GX_VALUE)(canvas -> gx_canvas_memory_size / canvas -> gx_canvas_display -> gx_display_driver_row_pitch_get((USHORT)dirty_height)); + dirty_width = (GX_VALUE)(dirty_width & 0xFFFC); + dirty_mask.gx_rectangle_right = (GX_VALUE)(dirty_mask.gx_rectangle_left + dirty_width - 1); + + while (dirty_mask.gx_rectangle_left <= dirty_sum.gx_rectangle_right) + { + if (dirty_mask.gx_rectangle_right > dirty_sum.gx_rectangle_right) + { + dirty_mask.gx_rectangle_right = dirty_sum.gx_rectangle_right; + } +#elif defined(GX_CANVAS_REFRESH_DIRECTION_VERTICAL) + dirty_width = (GX_VALUE)(dirty_sum.gx_rectangle_right - dirty_sum.gx_rectangle_left + 1); + dirty_height = (GX_VALUE)(canvas -> gx_canvas_memory_size / canvas -> gx_canvas_display -> gx_display_driver_row_pitch_get((USHORT)((dirty_width + 3) & 0xFFFC))); + dirty_mask.gx_rectangle_bottom = (GX_VALUE)(dirty_mask.gx_rectangle_top + dirty_height - 1); + + while (dirty_mask.gx_rectangle_top <= dirty_sum.gx_rectangle_bottom) + { + if (dirty_mask.gx_rectangle_bottom > dirty_sum.gx_rectangle_bottom) + { + dirty_mask.gx_rectangle_bottom = dirty_sum.gx_rectangle_bottom; + } +#endif + + /* Initialize dirty area pointers. */ + dirty_list_entry = canvas -> gx_canvas_dirty_list; + + /* Loop through dirty areas to redraw as needed. */ + for (index = 0; index < canvas -> gx_canvas_dirty_count; index++) + { + /* Pickup widget associated with dirty area. */ + drawit = dirty_list_entry -> gx_dirty_area_widget; + + /* Is the widget pointer valid? */ + + if (drawit && (drawit -> gx_widget_status & GX_STATUS_VISIBLE)) + { + /* if the object is transparent, we need to draw the parent. + This should not happen, because dircty_partial_add checks + for transparency, but just for safety we test again here */ + + if (drawit -> gx_widget_status & GX_STATUS_TRANSPARENT || + drawit -> gx_widget_style & (GX_STYLE_BORDER_RAISED | GX_STYLE_BORDER_RECESSED)) + { + while (drawit -> gx_widget_parent) + { + drawit = drawit -> gx_widget_parent; + + if (!(drawit -> gx_widget_status & GX_STATUS_TRANSPARENT)) + { + /* we need to start drawing at this non-transparent + background widget */ + + drawit -> gx_widget_status |= GX_STATUS_DIRTY; + break; + } + } + } + +#if defined(GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL) || defined(GX_CANVAS_REFRESH_DIRECTION_VERTICAL) + if (_gx_utility_rectangle_overlap_detect(&dirty_list_entry -> gx_dirty_area_rectangle, &dirty_mask, &dirty_frame) == GX_TRUE && + _gx_utility_rectangle_overlap_detect(&dirty_frame, &drawit -> gx_widget_clip, &dirty_frame) == GX_TRUE) + { +#else + dirty_sum = dirty_list_entry -> gx_dirty_area_rectangle; + if (_gx_utility_rectangle_overlap_detect(&dirty_sum, &drawit -> gx_widget_clip, &dirty_sum) == GX_TRUE) + { + dirty_frame = dirty_sum; + + /* Split dirty area into small pieces. */ + dirty_width = (GX_VALUE)(dirty_frame.gx_rectangle_right - dirty_frame.gx_rectangle_left + 1); + dirty_height = (GX_VALUE)(canvas -> gx_canvas_memory_size / canvas -> gx_canvas_display -> gx_display_driver_row_pitch_get((USHORT)((dirty_width + 3) & 0xFFFC))); + dirty_frame.gx_rectangle_bottom = (GX_VALUE)(dirty_frame.gx_rectangle_top + dirty_height - 1); + + while (dirty_frame.gx_rectangle_top <= dirty_sum.gx_rectangle_bottom) + { + if (dirty_frame.gx_rectangle_bottom > dirty_sum.gx_rectangle_bottom) + { + dirty_frame.gx_rectangle_bottom = dirty_sum.gx_rectangle_bottom; + } +#endif + + /* Initiate drawing on this canvas. */ + status = _gx_canvas_drawing_initiate(canvas, drawit, &dirty_frame); + + if (status == GX_NO_VIEWS) + { + /* If we are attempting to draw the root window and it has no views, + just draw the children of the root */ + + if (drawit -> gx_widget_type == GX_TYPE_ROOT_WINDOW) + { + _gx_widget_children_draw(drawit); + } + } + else + { + drawit -> gx_widget_draw_function(drawit); + } + + /* Indicate that drawing on this canvas is complete. */ + _gx_canvas_drawing_complete(canvas, GX_TRUE); + +#if !defined(GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL) && !defined(GX_CANVAS_REFRESH_DIRECTION_VERTICAL) + _gx_utility_rectangle_shift(&dirty_frame, 0, dirty_height); + } +#endif + } + } + + /* Move to the next dirty area. */ + dirty_list_entry++; + } + +#ifdef GX_CANVAS_REFRESH_DIRECTION_HORIZONTAL + _gx_utility_rectangle_shift(&dirty_mask, dirty_width, 0); +} +#elif defined(GX_CANVAS_REFRESH_DIRECTION_VERTICAL) + _gx_utility_rectangle_shift(&dirty_mask, 0, dirty_height); +} +#endif + +canvas -> gx_canvas_dirty_count = 0; + +return GX_SUCCESS; +} +#endif /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _gx_system_canvas_refresh PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -77,6 +281,10 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added partial canvas buffer */ +/* support, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_system_canvas_refresh(VOID) @@ -119,6 +327,15 @@ GX_WINDOW_ROOT *root; /* pick up the canvas pointer */ canvas = root -> gx_window_root_canvas; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + if (canvas -> gx_canvas_status & GX_CANVAS_PARTIAL_FRAME_BUFFER) + { + _gx_system_canvas_draw_partial_canvas(root); + root = (GX_WINDOW_ROOT *)root -> gx_widget_next; + continue; + } +#endif + /* Trim any redundant dirty areas prior to doing the update. */ if (_gx_system_dirty_list_trim(&dirty_sum, root)) { @@ -126,20 +343,20 @@ GX_WINDOW_ROOT *root; _gx_canvas_drawing_initiate(canvas, (GX_WIDGET *)root, &dirty_sum); /* Initialize dirty area pointers. */ - dirty = canvas -> gx_canvas_dirty_list; + dirty = canvas -> gx_canvas_dirty_list; /* Loop through dirty areas to redraw as needed. */ for (index = 0; index < canvas -> gx_canvas_dirty_count; index++) { /* Pickup widget associated with dirty area. */ - drawit = dirty -> gx_dirty_area_widget; + drawit = dirty -> gx_dirty_area_widget; /* Is the widget pointer valid? */ if (drawit) { /* if the object is transparent, we need to draw the parent. - This should not happen, because dircty_partial_add checks + This should not happen, because dircty_partial_add checks for transparency, but just for safety we test again here */ if (drawit -> gx_widget_status & GX_STATUS_TRANSPARENT) @@ -152,7 +369,7 @@ GX_WINDOW_ROOT *root; { /* we need to start drawing at this non-transparent background widget */ - + drawit -> gx_widget_status |= GX_STATUS_DIRTY; break; } @@ -196,7 +413,7 @@ GX_WINDOW_ROOT *root; if (_gx_canvas_composite_create(&canvas)) { - if(canvas -> gx_canvas_draw_count > 0) + if (canvas -> gx_canvas_draw_count > 0) { canvas -> gx_canvas_display -> gx_display_driver_buffer_toggle(canvas, &canvas -> gx_canvas_dirty_area); canvas -> gx_canvas_draw_count = 0; diff --git a/common/src/gx_window_root_create.c b/common/src/gx_window_root_create.c index 83f3c6ec..10ee979e 100644 --- a/common/src/gx_window_root_create.c +++ b/common/src/gx_window_root_create.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _gx_window_root_create PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -74,6 +74,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* updated the link logic, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gx_window_root_create(GX_WINDOW_ROOT *root_window, GX_CONST GX_CHAR *name, @@ -97,15 +100,21 @@ UINT _gx_window_root_create(GX_WINDOW_ROOT *root_window, GX_CONST GX_CHAR *name root_window -> gx_widget_status &= ~GX_STATUS_MOVABLE; root_window -> gx_widget_event_process_function = (UINT (*)(GX_WIDGET *, GX_EVENT *))_gx_window_root_event_process; + GX_ENTER_CRITICAL + if (_gx_system_root_window_created_list) { /* link this root to the one previously created */ root_window -> gx_widget_next = (GX_WIDGET *)_gx_system_root_window_created_list; + + _gx_system_root_window_created_list -> gx_widget_previous = (GX_WIDGET *)root_window; } /* Update the root window pointer */ _gx_system_root_window_created_list = root_window; + GX_EXIT_CRITICAL + /* Return the status from window create. */ return(GX_SUCCESS); } diff --git a/common/src/gxe_animation_start.c b/common/src/gxe_animation_start.c index ef517ccd..aeffe635 100644 --- a/common/src/gxe_animation_start.c +++ b/common/src/gxe_animation_start.c @@ -30,13 +30,15 @@ #include "gx_canvas.h" #include "gx_animation.h" +/* Bring in externs for caller checking code. */ +GX_CALLER_CHECKING_EXTERNS /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _gxe_animation_start PORTABLE C */ -/* 6.1.7 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -74,10 +76,15 @@ /* 06-02-2021 Ting Zhu Modified comment(s), */ /* removed unnecessary check, */ /* resulting in version 6.1.7 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added caller check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gxe_animation_start(GX_ANIMATION *animation, GX_ANIMATION_INFO *info) { + /* Check for appropriate caller. */ + GX_INIT_AND_THREADS_CALLER_CHECKING if (animation == GX_NULL || info == GX_NULL) diff --git a/common/src/gxe_binres_font_load.c b/common/src/gxe_binres_font_load.c new file mode 100644 index 00000000..3dbbf681 --- /dev/null +++ b/common/src/gxe_binres_font_load.c @@ -0,0 +1,89 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) Microsoft Corporation. All rights reserved. */ +/* */ +/* This software is licensed under the Microsoft Software License */ +/* Terms for Microsoft Azure RTOS. Full text of the license can be */ +/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ +/* and in the root directory of this software. */ +/* */ +/**************************************************************************/ + + +/**************************************************************************/ +/**************************************************************************/ +/** */ +/** GUIX Component */ +/** */ +/** Binres Loader Management (Binres Loader) */ +/** */ +/**************************************************************************/ + +#define GX_SOURCE_CODE + + +/* Include necessary system files. */ + +#include "gx_api.h" +#include "gx_binres_loader.h" +#include "gx_system.h" + + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gxe_binres_font_load PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function checks for errors in binres font load function. */ +/* */ +/* INPUT */ +/* */ +/* root_address Pointer to the binary data */ +/* memory */ +/* font_index Resource index of the font */ +/* to be loaded */ +/* buffer Pointer to the buffer to */ +/* store the loaded font */ +/* buffer_size Size of the buffer. It will */ +/* be overwritten with the */ +/* required buffer size if the */ +/* input buffer size is */ +/* insufficient */ +/* */ +/* OUTPUT */ +/* */ +/* status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_font_load The actual binres font load */ +/* function */ +/* */ +/* CALLED BY */ +/* */ +/* Application Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +UINT _gxe_binres_font_load(GX_UBYTE *root_address, UINT font_index, GX_UBYTE *buffer, ULONG *buffer_size) +{ + if (root_address == GX_NULL || buffer == GX_NULL || buffer_size == GX_NULL) + { + return GX_PTR_ERROR; + } + + return _gx_binres_font_load(root_address, font_index, buffer, buffer_size); +} + diff --git a/common/src/gxe_binres_pixelmap_load.c b/common/src/gxe_binres_pixelmap_load.c new file mode 100644 index 00000000..b62a28f9 --- /dev/null +++ b/common/src/gxe_binres_pixelmap_load.c @@ -0,0 +1,84 @@ +/**************************************************************************/ +/* */ +/* Copyright (c) Microsoft Corporation. All rights reserved. */ +/* */ +/* This software is licensed under the Microsoft Software License */ +/* Terms for Microsoft Azure RTOS. Full text of the license can be */ +/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ +/* and in the root directory of this software. */ +/* */ +/**************************************************************************/ + + +/**************************************************************************/ +/**************************************************************************/ +/** */ +/** GUIX Component */ +/** */ +/** Binres Loader Management (Binres Loader) */ +/** */ +/**************************************************************************/ + +#define GX_SOURCE_CODE + + +/* Include necessary system files. */ + +#include "gx_api.h" +#include "gx_binres_loader.h" +#include "gx_system.h" + + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _gxe_binres_pixelmap_load PORTABLE C */ +/* 6.3.0 */ +/* AUTHOR */ +/* */ +/* Ting Zhu, Microsoft Corporation */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function checks for errors in binres pixelmap load function. */ +/* */ +/* INPUT */ +/* */ +/* root_address Pointer to the binary data */ +/* memory */ +/* map_index Resource index of the pixelmap*/ +/* to be loaded */ +/* pixelmap Pointer to the returned */ +/* pixelmap */ +/* */ +/* OUTPUT */ +/* */ +/* status Completion status */ +/* */ +/* CALLS */ +/* */ +/* _gx_binres_pixelmap_load The actual binres pixelmap */ +/* load function */ +/* */ +/* CALLED BY */ +/* */ +/* Application Code */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* 10-31-2023 Ting Zhu Initial Version 6.3.0 */ +/* */ +/**************************************************************************/ +UINT _gxe_binres_pixelmap_load(GX_UBYTE *root_address, UINT map_index, GX_PIXELMAP *pixelmap) +{ + if (root_address == GX_NULL || pixelmap == GX_NULL) + { + return GX_PTR_ERROR; + } + + return _gx_binres_pixelmap_load(root_address, map_index, pixelmap); +} + diff --git a/common/src/gxe_canvas_create.c b/common/src/gxe_canvas_create.c index a949d743..5010dfb4 100644 --- a/common/src/gxe_canvas_create.c +++ b/common/src/gxe_canvas_create.c @@ -38,7 +38,7 @@ GX_CALLER_CHECKING_EXTERNS /* FUNCTION RELEASE */ /* */ /* _gxe_canvas_create PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -80,6 +80,10 @@ GX_CALLER_CHECKING_EXTERNS /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), verify */ +/* the memory size only when */ +/* memory_area is provided, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gxe_canvas_create(GX_CANVAS *canvas, GX_CONST GX_CHAR *name, GX_DISPLAY *display, UINT type, @@ -109,10 +113,13 @@ UINT pitch; return(GX_ALREADY_CREATED); } - pitch = (UINT)(display -> gx_display_driver_row_pitch_get((USHORT)width)); - if (memory_size < pitch * height) + if (memory_area) { - return GX_INVALID_SIZE; + pitch = (UINT)(display -> gx_display_driver_row_pitch_get((USHORT)width)); + if (memory_size < pitch * height) + { + return GX_INVALID_SIZE; + } } if (type & (~((UINT)(GX_CANVAS_SIMPLE | GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE | diff --git a/common/src/gxe_checkbox_pixelmap_set.c b/common/src/gxe_checkbox_pixelmap_set.c index 6b9c2798..77653cce 100644 --- a/common/src/gxe_checkbox_pixelmap_set.c +++ b/common/src/gxe_checkbox_pixelmap_set.c @@ -36,7 +36,7 @@ /* FUNCTION RELEASE */ /* */ /* _gxe_checkbox_pixelmap_set PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -80,6 +80,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added invalid widget check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gxe_checkbox_pixelmap_set(GX_CHECKBOX *checkbox, @@ -96,6 +99,12 @@ UINT status; return(GX_PTR_ERROR); } + /* Check for the invalid widget. */ + if (checkbox -> gx_widget_type == 0) + { + return(GX_INVALID_WIDGET); + } + status = _gx_checkbox_pixelmap_set(checkbox, unchecked_id, checked_id, unchecked_disabled_id, checked_disabled_id); diff --git a/common/src/gxe_scrollbar_reset.c b/common/src/gxe_scrollbar_reset.c index ae5426e2..84b2ba5c 100644 --- a/common/src/gxe_scrollbar_reset.c +++ b/common/src/gxe_scrollbar_reset.c @@ -34,7 +34,7 @@ GX_CALLER_CHECKING_EXTERNS /* FUNCTION RELEASE */ /* */ /* _gxe_scrollbar_reset PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -71,6 +71,8 @@ GX_CALLER_CHECKING_EXTERNS /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gxe_scrollbar_reset(GX_SCROLLBAR *scrollbar, GX_SCROLL_INFO *info) @@ -92,7 +94,7 @@ UINT status; return(GX_INVALID_WIDGET); } - /* Check fro valid scroll info. */ + /* Check for valid scroll info. */ if ((info != GX_NULL) && ((info -> gx_scroll_value > info -> gx_scroll_maximum) || (info -> gx_scroll_value < info -> gx_scroll_minimum))) { diff --git a/common/src/gxe_text_input_cursor_height_set.c b/common/src/gxe_text_input_cursor_height_set.c index 272e01f8..83d23645 100644 --- a/common/src/gxe_text_input_cursor_height_set.c +++ b/common/src/gxe_text_input_cursor_height_set.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _gxe_text_input_cursor_height_set PORTABLE C */ -/* 6.1 */ +/* 6.3.0 */ /* AUTHOR */ /* */ /* Kenneth Maxwell, Microsoft Corporation */ @@ -71,6 +71,9 @@ /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ /* resulting in version 6.1 */ +/* 10-31-2023 Ting Zhu Modified comment(s), */ +/* added invalid height check, */ +/* resulting in version 6.3.0 */ /* */ /**************************************************************************/ UINT _gxe_text_input_cursor_height_set(GX_TEXT_INPUT_CURSOR *cursor_ptr, GX_UBYTE height) @@ -82,6 +85,11 @@ UINT status; return(GX_PTR_ERROR); } + if (height == 0) + { + return(GX_INVALID_VALUE); + } + status = _gx_text_input_cursor_height_set(cursor_ptr, height); return(status); diff --git a/ports/arc_em/metaware/inc/gx_port.h b/ports/arc_em/metaware/inc/gx_port.h index a80e1ae6..92282b6a 100644 --- a/ports/arc_em/metaware/inc/gx_port.h +++ b/ports/arc_em/metaware/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARCv2_EM/MetaWare Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARCv2_EM/MetaWare Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/arc_hs/metaware/inc/gx_port.h b/ports/arc_hs/metaware/inc/gx_port.h index 3ae64ad1..4a607251 100644 --- a/ports/arc_hs/metaware/inc/gx_port.h +++ b/ports/arc_hs/metaware/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARC_HS/MetaWare Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARC_HS/MetaWare Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/arm9/ac5/inc/gx_port.h b/ports/arm9/ac5/inc/gx_port.h index 3e171353..8b6a8e6b 100644 --- a/ports/arm9/ac5/inc/gx_port.h +++ b/ports/arm9/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/arm9/gnu/inc/gx_port.h b/ports/arm9/gnu/inc/gx_port.h index f59db64d..93dbb649 100644 --- a/ports/arm9/gnu/inc/gx_port.h +++ b/ports/arm9/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/arm9/iar/inc/gx_port.h b/ports/arm9/iar/inc/gx_port.h index 13ad7876..1df67e7c 100644 --- a/ports/arm9/iar/inc/gx_port.h +++ b/ports/arm9/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX ARM9/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/c667x/ccs/inc/gx_port.h b/ports/c667x/ccs/inc/gx_port.h index 43a812c9..fa5c4c22 100644 --- a/ports/c667x/ccs/inc/gx_port.h +++ b/ports/c667x/ccs/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX C6xxx/TI Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX C6xxx/TI Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/ccrx/inc/gx_port.h b/ports/ccrx/inc/gx_port.h index 788cc188..344ee7ea 100644 --- a/ports/ccrx/inc/gx_port.h +++ b/ports/ccrx/inc/gx_port.h @@ -146,7 +146,7 @@ typedef unsigned char GX_UCHAR; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a15/gnu/inc/gx_port.h b/ports/cortex_a15/gnu/inc/gx_port.h index 7bb35b1f..470e3829 100644 --- a/ports/cortex_a15/gnu/inc/gx_port.h +++ b/ports/cortex_a15/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A15/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A15/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a5/ac5/inc/gx_port.h b/ports/cortex_a5/ac5/inc/gx_port.h index 99194e7d..04c3ca9f 100644 --- a/ports/cortex_a5/ac5/inc/gx_port.h +++ b/ports/cortex_a5/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a5/gnu/inc/gx_port.h b/ports/cortex_a5/gnu/inc/gx_port.h index e50bacc0..664e9981 100644 --- a/ports/cortex_a5/gnu/inc/gx_port.h +++ b/ports/cortex_a5/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a5/iar/inc/gx_port.h b/ports/cortex_a5/iar/inc/gx_port.h index 23efdd68..c4436803 100644 --- a/ports/cortex_a5/iar/inc/gx_port.h +++ b/ports/cortex_a5/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a5x/ac6/inc/gx_port.h b/ports/cortex_a5x/ac6/inc/gx_port.h index 35a3a048..27144356 100644 --- a/ports/cortex_a5x/ac6/inc/gx_port.h +++ b/ports/cortex_a5x/ac6/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5x/AC6 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A5x/AC6 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a7/ac5/inc/gx_port.h b/ports/cortex_a7/ac5/inc/gx_port.h index 23d4ee4d..5ac2c25b 100644 --- a/ports/cortex_a7/ac5/inc/gx_port.h +++ b/ports/cortex_a7/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a7/gnu/inc/gx_port.h b/ports/cortex_a7/gnu/inc/gx_port.h index 7df4d128..0d735693 100644 --- a/ports/cortex_a7/gnu/inc/gx_port.h +++ b/ports/cortex_a7/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a7/iar/inc/gx_port.h b/ports/cortex_a7/iar/inc/gx_port.h index dd7b45c5..a03361b9 100644 --- a/ports/cortex_a7/iar/inc/gx_port.h +++ b/ports/cortex_a7/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A7/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a8/ac5/inc/gx_port.h b/ports/cortex_a8/ac5/inc/gx_port.h index 4c51b6d2..0d43226f 100644 --- a/ports/cortex_a8/ac5/inc/gx_port.h +++ b/ports/cortex_a8/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a8/gnu/inc/gx_port.h b/ports/cortex_a8/gnu/inc/gx_port.h index c6d16efc..e027fbe6 100644 --- a/ports/cortex_a8/gnu/inc/gx_port.h +++ b/ports/cortex_a8/gnu/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a8/iar/inc/gx_port.h b/ports/cortex_a8/iar/inc/gx_port.h index 45ab7f89..1c3cb53b 100644 --- a/ports/cortex_a8/iar/inc/gx_port.h +++ b/ports/cortex_a8/iar/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A8/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a9/ac5/inc/gx_port.h b/ports/cortex_a9/ac5/inc/gx_port.h index 4bc4a2a5..aa814818 100644 --- a/ports/cortex_a9/ac5/inc/gx_port.h +++ b/ports/cortex_a9/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a9/gnu/inc/gx_port.h b/ports/cortex_a9/gnu/inc/gx_port.h index c82df2f5..8ea10214 100644 --- a/ports/cortex_a9/gnu/inc/gx_port.h +++ b/ports/cortex_a9/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_a9/iar/inc/gx_port.h b/ports/cortex_a9/iar/inc/gx_port.h index 7878d648..6ea07762 100644 --- a/ports/cortex_a9/iar/inc/gx_port.h +++ b/ports/cortex_a9/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-A9/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m0/ac5/inc/gx_port.h b/ports/cortex_m0/ac5/inc/gx_port.h index 54b13553..faeb0141 100644 --- a/ports/cortex_m0/ac5/inc/gx_port.h +++ b/ports/cortex_m0/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m0/gnu/inc/gx_port.h b/ports/cortex_m0/gnu/inc/gx_port.h index 3460afd0..7068a1b8 100644 --- a/ports/cortex_m0/gnu/inc/gx_port.h +++ b/ports/cortex_m0/gnu/inc/gx_port.h @@ -143,7 +143,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m0/iar/inc/gx_port.h b/ports/cortex_m0/iar/inc/gx_port.h index 6c7f4eb5..942afd48 100644 --- a/ports/cortex_m0/iar/inc/gx_port.h +++ b/ports/cortex_m0/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M0/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m3/ac5/inc/gx_port.h b/ports/cortex_m3/ac5/inc/gx_port.h index 1dd8b8fd..67898c48 100644 --- a/ports/cortex_m3/ac5/inc/gx_port.h +++ b/ports/cortex_m3/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m3/gnu/inc/gx_port.h b/ports/cortex_m3/gnu/inc/gx_port.h index 60aba6de..e36048b3 100644 --- a/ports/cortex_m3/gnu/inc/gx_port.h +++ b/ports/cortex_m3/gnu/inc/gx_port.h @@ -143,7 +143,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m3/iar/inc/gx_port.h b/ports/cortex_m3/iar/inc/gx_port.h index 8b57502f..b8927bf0 100644 --- a/ports/cortex_m3/iar/inc/gx_port.h +++ b/ports/cortex_m3/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m3/keil/inc/gx_port.h b/ports/cortex_m3/keil/inc/gx_port.h index 6c1da67c..41d4aa5f 100644 --- a/ports/cortex_m3/keil/inc/gx_port.h +++ b/ports/cortex_m3/keil/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/KEIL Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M3/KEIL Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m4/ac5/inc/gx_port.h b/ports/cortex_m4/ac5/inc/gx_port.h index 1ade5370..00d3ef8e 100644 --- a/ports/cortex_m4/ac5/inc/gx_port.h +++ b/ports/cortex_m4/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m4/gnu/inc/gx_port.h b/ports/cortex_m4/gnu/inc/gx_port.h index adf0a399..563cc1bd 100644 --- a/ports/cortex_m4/gnu/inc/gx_port.h +++ b/ports/cortex_m4/gnu/inc/gx_port.h @@ -143,7 +143,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m4/iar/inc/gx_port.h b/ports/cortex_m4/iar/inc/gx_port.h index 614315ff..90f0f01e 100644 --- a/ports/cortex_m4/iar/inc/gx_port.h +++ b/ports/cortex_m4/iar/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m4/keil/inc/gx_port.h b/ports/cortex_m4/keil/inc/gx_port.h index d0cfc37e..e433661b 100644 --- a/ports/cortex_m4/keil/inc/gx_port.h +++ b/ports/cortex_m4/keil/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/KEIL Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M4/KEIL Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m7/ac5/inc/gx_port.h b/ports/cortex_m7/ac5/inc/gx_port.h index 6a76b93a..569bb005 100644 --- a/ports/cortex_m7/ac5/inc/gx_port.h +++ b/ports/cortex_m7/ac5/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m7/gnu/inc/gx_port.h b/ports/cortex_m7/gnu/inc/gx_port.h index 33d1492b..6f3bd4d3 100644 --- a/ports/cortex_m7/gnu/inc/gx_port.h +++ b/ports/cortex_m7/gnu/inc/gx_port.h @@ -143,7 +143,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_m7/iar/inc/gx_port.h b/ports/cortex_m7/iar/inc/gx_port.h index b2eecebd..99203484 100644 --- a/ports/cortex_m7/iar/inc/gx_port.h +++ b/ports/cortex_m7/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-M7/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r4/ac5/inc/gx_port.h b/ports/cortex_r4/ac5/inc/gx_port.h index 6cbc7b9d..5cbd9ac9 100644 --- a/ports/cortex_r4/ac5/inc/gx_port.h +++ b/ports/cortex_r4/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r4/ac6/inc/gx_port.h b/ports/cortex_r4/ac6/inc/gx_port.h index 41121c99..0a729580 100644 --- a/ports/cortex_r4/ac6/inc/gx_port.h +++ b/ports/cortex_r4/ac6/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/AC6 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/AC6 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r4/gnu/inc/gx_port.h b/ports/cortex_r4/gnu/inc/gx_port.h index 09365eac..8d6a0b79 100644 --- a/ports/cortex_r4/gnu/inc/gx_port.h +++ b/ports/cortex_r4/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r4/iar/inc/gx_port.h b/ports/cortex_r4/iar/inc/gx_port.h index 4d21c965..7402feb7 100644 --- a/ports/cortex_r4/iar/inc/gx_port.h +++ b/ports/cortex_r4/iar/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R4/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r5/ac5/inc/gx_port.h b/ports/cortex_r5/ac5/inc/gx_port.h index ba048c99..05b26b4d 100644 --- a/ports/cortex_r5/ac5/inc/gx_port.h +++ b/ports/cortex_r5/ac5/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/AC5 Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/AC5 Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r5/gnu/inc/gx_port.h b/ports/cortex_r5/gnu/inc/gx_port.h index 6a583a01..ec007c07 100644 --- a/ports/cortex_r5/gnu/inc/gx_port.h +++ b/ports/cortex_r5/gnu/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/cortex_r5/iar/inc/gx_port.h b/ports/cortex_r5/iar/inc/gx_port.h index f77937a7..ab4ba519 100644 --- a/ports/cortex_r5/iar/inc/gx_port.h +++ b/ports/cortex_r5/iar/inc/gx_port.h @@ -139,7 +139,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/IAR Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Cortex-R5/IAR Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/generic/inc/gx_port.h b/ports/generic/inc/gx_port.h index 5842a97a..6a6ad668 100644 --- a/ports/generic/inc/gx_port.h +++ b/ports/generic/inc/gx_port.h @@ -144,7 +144,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/linux/gnu/inc/gx_port.h b/ports/linux/gnu/inc/gx_port.h index fa788f25..dd3f7081 100644 --- a/ports/linux/gnu/inc/gx_port.h +++ b/ports/linux/gnu/inc/gx_port.h @@ -137,7 +137,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Linux/GNU Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Linux/GNU Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/win32/build/vs_2019/guix.vcxproj b/ports/win32/build/vs_2019/guix.vcxproj index 51f153f1..f4070fa7 100644 --- a/ports/win32/build/vs_2019/guix.vcxproj +++ b/ports/win32/build/vs_2019/guix.vcxproj @@ -13,6 +13,14 @@ Debug_GX_DYNAMIC_BIDI_TEXT_SUPPORT Win32 + + Debug_GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + Win32 + + + Debug_GX_EXTENDED_UNICODE_SUPPORT + Win32 + Debug_GX_FONT_KERNING_SUPPORT Win32 @@ -40,6 +48,8 @@ + + @@ -53,6 +63,8 @@ + + @@ -1229,6 +1241,7 @@ + @@ -1422,6 +1435,18 @@ MultiByte v142 + + StaticLibrary + true + MultiByte + v142 + + + StaticLibrary + true + MultiByte + v142 + StaticLibrary true @@ -1477,6 +1502,12 @@ + + + + + + @@ -1506,6 +1537,14 @@ $(ProjectDir)$(Configuration)\ gx + + $(ProjectDir)$(Configuration)\ + gx + + + $(ProjectDir)$(Configuration)\ + gx + $(ProjectDir)$(Configuration)\ gx @@ -1560,6 +1599,50 @@ $(OutDir)$(TargetName).bsc + + + NotUsing + Level3 + Disabled + $(DefineConstants);WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;GX_ANIMATION_POOL_SIZE=16;GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER;%(PreprocessorDefinitions) + ..\..\..\tx;%(AdditionalIncludeDirectories) + false + true + false + ..\..\lib\vs_2019;..\..\inc;..\..\inc\synergy;..\..\..\..\common\inc + true + MultiThreadedDebug + + + Windows + true + + + $(OutDir)$(TargetName).bsc + + + + + NotUsing + Level3 + Disabled + $(DefineConstants);WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;GX_ANIMATION_POOL_SIZE=16;GX_EXTENDED_UNICODE_SUPPORT;%(PreprocessorDefinitions) + ..\..\..\tx;%(AdditionalIncludeDirectories) + false + true + false + ..\..\lib\vs_2019;..\..\inc;..\..\inc\synergy;..\..\..\..\common\inc + true + MultiThreadedDebug + + + Windows + true + + + $(OutDir)$(TargetName).bsc + + NotUsing diff --git a/ports/win32/inc/gx_port.h b/ports/win32/inc/gx_port.h index ea9e1e42..d0a3792d 100644 --- a/ports/win32/inc/gx_port.h +++ b/ports/win32/inc/gx_port.h @@ -170,7 +170,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Win32/Visual Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Win32/Visual Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/ports/win32/lib/vs_2019/tx_port.h b/ports/win32/lib/vs_2019/tx_port.h index 622a52b0..4bfcc8af 100644 --- a/ports/win32/lib/vs_2019/tx_port.h +++ b/ports/win32/lib/vs_2019/tx_port.h @@ -419,7 +419,7 @@ VOID _tx_thread_interrupt_restore(UINT previous_posture); #ifdef TX_THREAD_INIT CHAR _tx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX Win32/Visual Studio Version 6.1.12 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX Win32/Visual Studio Version 6.3.0 *"; #else extern CHAR _tx_version_id[]; #endif diff --git a/ports/win32/src/gx_win32_display_driver.c b/ports/win32/src/gx_win32_display_driver.c index a9810d1b..ffee797c 100644 --- a/ports/win32/src/gx_win32_display_driver.c +++ b/ports/win32/src/gx_win32_display_driver.c @@ -1302,33 +1302,35 @@ VOID *memptr; return; } - /* Driver just becomes ready. So we need to refresh the whole display. */ - if (driver_instance -> win32_driver_ready == 1) - { - gx_utility_rectangle_define(&canvas -> gx_canvas_dirty_area, 0, 0, - canvas -> gx_canvas_x_resolution - 1, - canvas -> gx_canvas_y_resolution - 1); - driver_instance -> win32_driver_ready = 2; - } - gx_utility_rectangle_define(&Limit, 0, 0, canvas -> gx_canvas_x_resolution - 1, canvas -> gx_canvas_y_resolution - 1); - if (gx_utility_rectangle_overlap_detect(&Limit, &canvas -> gx_canvas_dirty_area, &Copy)) + if (gx_utility_rectangle_overlap_detect(&Limit, dirty, &Copy)) { memptr = _win32_canvas_memory_prepare(canvas, &Copy); - INT xsrc = Copy.gx_rectangle_left; - INT ysrc = Copy.gx_rectangle_top; - - gx_utility_rectangle_shift(&Copy, canvas -> gx_canvas_display_offset_x, canvas -> gx_canvas_display_offset_y); + INT xsrc; + INT ysrc; - win_device = GetDC(driver_instance -> win32_driver_winhandle); + win_device = GetDC(driver_instance->win32_driver_winhandle); SetMapMode(win_device, MM_TEXT); - driver_instance -> win32_driver_bmpinfo.gx_bmp_header.biWidth = canvas -> gx_canvas_x_resolution; - driver_instance -> win32_driver_bmpinfo.gx_bmp_header.biHeight = canvas -> gx_canvas_y_resolution; +#ifdef GX_ENABLE_CANVAS_PARTIAL_FRAME_BUFFER + xsrc = Copy.gx_rectangle_left - canvas->gx_canvas_memory_offset_x; + ysrc = Copy.gx_rectangle_top - canvas->gx_canvas_memory_offset_y; + + driver_instance->win32_driver_bmpinfo.gx_bmp_header.biWidth = canvas->gx_canvas_memory_width; + driver_instance->win32_driver_bmpinfo.gx_bmp_header.biHeight = canvas->gx_canvas_memory_height; +#else + xsrc = Copy.gx_rectangle_left; + ysrc = Copy.gx_rectangle_top; + + driver_instance->win32_driver_bmpinfo.gx_bmp_header.biWidth = canvas->gx_canvas_x_resolution; + driver_instance->win32_driver_bmpinfo.gx_bmp_header.biHeight = canvas->gx_canvas_y_resolution; +#endif + + gx_utility_rectangle_shift(&Copy, canvas->gx_canvas_display_offset_x, canvas->gx_canvas_display_offset_y); Top = Copy.gx_rectangle_top; Left = Copy.gx_rectangle_left; diff --git a/ports/win32/vs_2019_standalone/inc/gx_port.h b/ports/win32/vs_2019_standalone/inc/gx_port.h index 6376d664..20aaa4ae 100644 --- a/ports/win32/vs_2019_standalone/inc/gx_port.h +++ b/ports/win32/vs_2019_standalone/inc/gx_port.h @@ -100,7 +100,7 @@ typedef SHORT GX_VALUE; #ifdef GX_SYSTEM_INIT CHAR _gx_version_id[] = - "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Win32/Standalone/Visual Version 6.2.1 *"; + "Copyright (c) Microsoft Corporation. All rights reserved. * GUIX Win32/Standalone/Visual Version 6.3.0 *"; #else extern CHAR _gx_version_id[]; #endif diff --git a/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.sln b/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.sln new file mode 100644 index 00000000..a1ea1127 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29905.134 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "guix", "..\..\..\..\ports\win32\build\vs_2019\guix.vcxproj", "{A3336F4F-7A7B-46D3-A7F0-A2AAED6C08ED}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo_guix_binres_standalone", "demo_guix_binres_standalone.vcxproj", "{10B36C4C-FA91-4491-8B51-EA4F5BABEB6B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A3336F4F-7A7B-46D3-A7F0-A2AAED6C08ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3336F4F-7A7B-46D3-A7F0-A2AAED6C08ED}.Debug|Win32.Build.0 = Debug|Win32 + {A3336F4F-7A7B-46D3-A7F0-A2AAED6C08ED}.Release|Win32.ActiveCfg = Release|Win32 + {A3336F4F-7A7B-46D3-A7F0-A2AAED6C08ED}.Release|Win32.Build.0 = Release|Win32 + {10B36C4C-FA91-4491-8B51-EA4F5BABEB6B}.Debug|Win32.ActiveCfg = Debug|Win32 + {10B36C4C-FA91-4491-8B51-EA4F5BABEB6B}.Debug|Win32.Build.0 = Debug|Win32 + {10B36C4C-FA91-4491-8B51-EA4F5BABEB6B}.Release|Win32.ActiveCfg = Release|Win32 + {10B36C4C-FA91-4491-8B51-EA4F5BABEB6B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2BA427AA-80DB-4588-A3AC-D9AB4C83970D} + EndGlobalSection +EndGlobal diff --git a/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.vcxproj b/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.vcxproj new file mode 100644 index 00000000..11c968dc --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/build/vs_2019/demo_guix_binres_standalone.vcxproj @@ -0,0 +1,103 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + {a3336f4f-7a7b-46d3-a7f0-a2aaed6c08ed} + false + + + + + + + + + + + + + {10B36C4C-FA91-4491-8B51-EA4F5BABEB6B} + Win32Proj + medical + + + + Application + true + Unicode + v142 + + + Application + false + true + Unicode + v142 + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;GX_EXTERNAL_RESOURCE_BUFFER_SIZE=1024;GX_EXTERNAL_RESOURCE_SUPPORT;%(PreprocessorDefinitions) + ..\..\..\..\common\inc;../../../../ports/win32/lib/vs_2019;..\include;..\..\..\..\ports\win32\inc + MultiThreadedDebug + + + Windows + true + ../../../../ports/win32/lib/vs_2019;$(SolutionDir)/../../../../ports/win32/build/vs_2019/$(Configuration) + gx.lib;tx.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + ..\..\..\..\common\inc;../../../../ports/win32/lib/vs_2019;..\include;..\..\..\..\ports\win32\inc + + + Windows + true + true + true + ../../../../ports/win32/lib/vs_2019;$(SolutionDir)/../../../../ports/win32/build/vs_2019/$(Configuration) + gx.lib;tx.lib;%(AdditionalDependencies) + + + + + + \ No newline at end of file diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.c b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.c new file mode 100644 index 00000000..80f32f27 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.c @@ -0,0 +1,231 @@ +/* This is a small demo of the high-performance GUIX graphics framework. */ + +#include +#include +#include "gx_api.h" + +#include "demo_guix_binres_standalone_resources.h" +#include "demo_guix_binres_standalone_specifications.h" + +#define FONT_BUFFER_SIZE 5120 +#define GUIX_POOL_SIZE (640*480) + +/* Define variables. */ +GX_WINDOW_ROOT* root; +TX_THREAD demo_thread; +ULONG demo_thread_stack[1024]; +TX_BYTE_POOL memory_pool; +UCHAR guix_pool_memory[GUIX_POOL_SIZE]; +GX_PIXELMAP pixelmap_red_apple; +GX_UBYTE font_vera_buffer[FONT_BUFFER_SIZE]; +VOID *root_address_pixelmap_red_apple = GX_NULL; +VOID *root_address_font_vera = GX_NULL; + +/* Define prototypes. */ +extern UINT win32_graphics_driver_setup_565rgb(GX_DISPLAY *display); +VOID demo_thread_entry(ULONG thread_input); +VOID *load_binary_resource_data_to_ram(GX_CHAR* pathname); +UINT load_standalone_resources(); + +/************************************************************************************/ +/* Program entry. */ +/************************************************************************************/ +int main(int argc, char ** argv) +{ + tx_kernel_enter(); + return(0); +} + +/************************************************************************************/ +/* User defined memory allocate function. */ +/************************************************************************************/ +VOID* memory_allocate(ULONG size) +{ + VOID* memptr; + + if (tx_byte_allocate(&memory_pool, &memptr, size, TX_NO_WAIT) == TX_SUCCESS) + { + return memptr; + } + + return NULL; +} + +/************************************************************************************/ +/* User defined memory free function. */ +/************************************************************************************/ +VOID memory_free(VOID* mem) +{ + tx_byte_release(mem); +} + +/************************************************************************************/ +/* Define system initialization. */ +/************************************************************************************/ +VOID tx_application_define(void *first_unused_memory) +{ + tx_thread_create(&demo_thread, "Demo Thread", demo_thread_entry, 0, + demo_thread_stack, sizeof(demo_thread_stack), + GX_SYSTEM_THREAD_PRIORITY + 1, + GX_SYSTEM_THREAD_PRIORITY + 1, TX_NO_TIME_SLICE, TX_AUTO_START); +} + +/************************************************************************************/ +/* Demo thread entry. */ +/************************************************************************************/ +VOID demo_thread_entry(ULONG thread_input) +{ + /* Initialize GUIX. */ + gx_system_initialize(); + + /* Create byte pool. */ + tx_byte_pool_create(&memory_pool, "guix_pool_memory", guix_pool_memory, GUIX_POOL_SIZE); + + /* Configure display. */ + gx_studio_display_configure(MAIN_DISPLAY, win32_graphics_driver_setup_565rgb, + LANGUAGE_ENGLISH, MAIN_DISPLAY_THEME_1, &root); + + /* Create the main screen. */ + gx_studio_named_widget_create("main_screen", (GX_WIDGET*)root, GX_NULL); + + /* Load standalone resources. */ + if (load_standalone_resources() != GX_SUCCESS) + { + return; + } + + /* Show the root window to make it and patients screen visible. */ + gx_widget_show(root); + + /* Start GUIX thread. */ + gx_system_start(); +} + +/************************************************************************************/ +/* Load binary resource data into ram. */ +/* This is an example of how an application might load a binary resource data */ +/* file to RAM (or FLASH) from a local filesystem. In this case we are using */ +/* generic ANSI file I/O to read the resource data file. */ +/* */ +/* Note that for a typical embedded target, this step is not required. For most */ +/* targets, the binary resource data has been directly programmed to FLASH rather */ +/* than saved in a filesytem. */ +/************************************************************************************/ +VOID *load_binary_resource_data_to_ram(GX_CHAR *pathname) +{ + UCHAR *address = GX_NULL; + + /* If generated resource is stored in a FAT filesystem, it must be + loaded into memory before it can be used. This memory could be + RAM or FLASH, but for the purpose of this example will simply + read the file to RAM. */ + FILE *p_file; + size_t total_length; + + p_file = fopen(pathname, "rb"); + + if (p_file) + { + fseek(p_file, 0, SEEK_END); + total_length = ftell(p_file); + fseek(p_file, SEEK_SET, SEEK_SET); + + address = memory_allocate(total_length); + + if (address) + { + fread(address, 1, total_length, p_file); + } + + fclose(p_file); + } + + return address; +} + +/************************************************************************************/ +/* Load font and pixelmap resources from standalone binary data. */ +/************************************************************************************/ +UINT load_standalone_resources() +{ + UINT status; + ULONG buffer_size; + + /* Load binary file into ram. */ + root_address_pixelmap_red_apple = load_binary_resource_data_to_ram("..\\..\\pixelmap_red_apple.bin"); + + if (!root_address_pixelmap_red_apple) + { + return GX_FAILURE; + } + + /* Load binary file into ram. */ + root_address_font_vera = load_binary_resource_data_to_ram("..\\..\\font_vera.bin"); + + if (!root_address_font_vera) + { + return GX_FAILURE; + } + + /* Load a pixelmap from the standalone binary data. */ + status = gx_binres_pixelmap_load(root_address_pixelmap_red_apple, 0, &pixelmap_red_apple); + + if (status != GX_SUCCESS) + { + return status; + } + + buffer_size = FONT_BUFFER_SIZE; + + /* Load a font from the standalone binary data. */ + status = gx_binres_font_load(root_address_font_vera, 0, font_vera_buffer, &buffer_size); + + if (status != GX_SUCCESS) + { + return status; + } + + return status; +} + +/************************************************************************************/ +/* Define the custom drawing function for the "pixelmap_window" widget. */ +/************************************************************************************/ +VOID pixelmap_window_draw(GX_WINDOW *window) +{ + GX_RECTANGLE *client = &window->gx_window_client;; + + /* Draw the window's background. */ + gx_window_background_draw(window); + + /* Draw a pixlemap. */ + gx_canvas_pixelmap_draw(client->gx_rectangle_left, client->gx_rectangle_top, &pixelmap_red_apple); +} + +/************************************************************************************/ +/* Define the custom drawing function for the "prompt" widget. */ +/************************************************************************************/ +VOID text_draw(GX_PROMPT *prompt) +{ + GX_BRUSH* brush; + GX_RECTANGLE* size = &prompt->gx_widget_size; + GX_STRING string; + + /* Draw the promt's background. */ + gx_widget_background_draw(prompt); + + /* Retrieve the context brush. */ + gx_context_brush_get(&brush); + + /* Set text font. */ + brush->gx_brush_font = (GX_FONT*)font_vera_buffer; + + /* Set text color. */ + gx_context_line_color_set(GX_COLOR_ID_TEXT); + + /* Get text. */ + gx_context_string_get_ext(prompt->gx_prompt_text_id, &string); + + /* Draw text. */ + gx_canvas_aligned_text_draw(&string, size, GX_STYLE_TEXT_CENTER); +} \ No newline at end of file diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.gxp b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.gxp new file mode 100644 index 00000000..03ef33e7 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone.gxp @@ -0,0 +1,5260 @@ + + + +
+56 +60201 +6020105 +demo_guix_binres_standalone +.\ +.\ +.\ +FALSE +0 +0 +FALSE +FALSE +0 +0 +FALSE +FALSE +FALSE +10 +10 +FALSE +1 +0 +TRUE +FALSE +0 +0 +FALSE +8 +1 +4 +1 + +English +FALSE +FALSE +FALSE +FALSE +TRUE + + +0 +1 +2 +.\ +STRING_EXPORT_TYPE_XLIFF + +
+ +0 +main_display +640 +480 +16 +FALSE +FALSE +FALSE +FALSE +FALSE +FALSE +TRUE +TRUE +None +TRUE + +1 +0 +theme_1 +TRUE +TRUE +TRUE +TRUE +TRUE + + +HEADER +theme_1 + +project_relative + +FALSE +TRUE +FALSE +THEME_HEADER + + +GROUP +Colors + +project_relative + +FALSE +TRUE +FALSE +COLOR_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_COLOR_FOLDER + +COLOR +CANVAS + +project_relative + +TRUE +TRUE +FALSE +4278190080 + + +COLOR +WIDGET_FILL + +project_relative + +TRUE +TRUE +FALSE +4286086264 + + +COLOR +WINDOW_FILL + +project_relative + +TRUE +TRUE +FALSE +4293059298 + + +COLOR +DEFAULT_BORDER + +project_relative + +TRUE +TRUE +FALSE +4288387955 + + +COLOR +WINDOW_BORDER + +project_relative + +TRUE +TRUE +FALSE +4285897130 + + +COLOR +TEXT + +project_relative + +TRUE +TRUE +FALSE +4292467161 + + +COLOR +SELECTED_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +SELECTED_FILL + +project_relative + +TRUE +TRUE +FALSE +4278190264 + + +COLOR +SHADOW + +project_relative + +TRUE +TRUE +FALSE +4286611584 + + +COLOR +SHINE + +project_relative + +TRUE +TRUE +FALSE +4292532954 + + +COLOR +BTN_BORDER + +project_relative + +TRUE +TRUE +FALSE +4292919392 + + +COLOR +BTN_UPPER + +project_relative + +TRUE +TRUE +FALSE +4294506720 + + +COLOR +BTN_LOWER + +project_relative + +TRUE +TRUE +FALSE +4294503600 + + +COLOR +BTN_TEXT + +project_relative + +TRUE +TRUE +FALSE +4278190080 + + +COLOR +SCROLL_FILL + +project_relative + +TRUE +TRUE +FALSE +4293449976 + + +COLOR +SCROLL_BUTTON + +project_relative + +TRUE +TRUE +FALSE +4293446832 + + +COLOR +TEXT_INPUT_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +TEXT_INPUT_FILL + +project_relative + +TRUE +TRUE +FALSE +4293059298 + + +COLOR +SLIDER_TICK + +project_relative + +TRUE +TRUE +FALSE +4278190080 + + +COLOR +SLIDER_GROOVE_TOP + +project_relative + +TRUE +TRUE +FALSE +4290822336 + + +COLOR +SLIDER_GROOVE_BOTTOM + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +SLIDER_NEEDLE_OUTLINE + +project_relative + +TRUE +TRUE +FALSE +4278190080 + + +COLOR +SLIDER_NEEDLE_FILL + +project_relative + +TRUE +TRUE +FALSE +4286611584 + + +COLOR +SLIDER_NEEDLE_LINE1 + +project_relative + +TRUE +TRUE +FALSE +4290822336 + + +COLOR +SLIDER_NEEDLE_LINE2 + +project_relative + +TRUE +TRUE +FALSE +4292919392 + + +COLOR +DISABLED_TEXT + +project_relative + +TRUE +TRUE +FALSE +4288716960 + + +COLOR +DISABLED_FILL + +project_relative + +TRUE +TRUE +FALSE +4286086264 + + +COLOR +READONLY_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +READONLY_FILL + +project_relative + +TRUE +TRUE +FALSE +4286086264 + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_COLOR_FOLDER + +Add New Color + +project_relative + +FALSE +TRUE +FALSE + + +COLOR +BLUE + +project_relative + +FALSE +TRUE +FALSE +4278223103 + + + + +GROUP +Fonts + +project_relative + +FALSE +TRUE +FALSE +FONT_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_FONT_FOLDER + +FONT +SYSTEM + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +BUTTON + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +PROMPT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +TEXT_INPUT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_FONT_FOLDER + +Add New Font + +project_relative + +FALSE +TRUE +FALSE + + +FONT +VERA + +..\..\fonts\verasans\Vera.ttf +project_relative + +FALSE +TRUE +FALSE +20 +8 +FALSE +FALSE +FALSE +TRUE +font_vera +TRUE + +TRUE +32 +126 +FALSE +128 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1536 +1791 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + + + +GROUP +Pixelmaps + +project_relative + +FALSE +TRUE +FALSE +PIXELMAP_GROUP + +FOLDER +System + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_PIXELMAP_FOLDER + +PIXELMAP +RADIO_ON + +project_relative + +TRUE +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +RADIO_OFF + +project_relative + +TRUE +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_ON + +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_OFF + +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_PIXELMAP_FOLDER + +Add New Pixelmap + +project_relative + +FALSE +TRUE +FALSE + + +PIXELMAP +MS_AZURE_LOGO + +graphics\MS-Azure_logo.png +project_relative + +FALSE +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +RED_APPLE + +graphics\red_apple.png +project_relative + +FALSE +TRUE +TRUE +TRUE +FALSE +FALSE +TRUE +pixelmap_red_apple +TRUE +None + + + + +GROUP +Strings + +project_relative + +FALSE +TRUE +FALSE +STRING_GROUP + +Add New String + +project_relative + +FALSE +TRUE +FALSE + + +Add New String + +project_relative + +FALSE +TRUE +FALSE + + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +17170432 + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +33947648 + + + +TRUE + +2 +2 +1 + +STRING_1 +0 +Hello World! + + + +default_folder + +window +main_screen + +0 +0 +639 +479 + + +0 +TRUE +CANVAS +CANVAS +CANVAS + +FALSE + +icon +express_logo + +18 +18 +206 +47 + + +0 +TRUE +WIDGET_FILL +SELECTED_FILL +WIDGET_FILL + +FALSE +MS_AZURE_LOGO + + +window +pixelmap_window + +114 +98 +310 +366 + + +0 +TRUE +WINDOW_FILL +WINDOW_FILL +DISABLED_FILL +pixelmap_window_draw + +FALSE + + +prompt +prompt + +388 +107 +541 +151 + + +0 +TRUE +WIDGET_FILL +SELECTED_FILL +DISABLED_FILL +text_draw + +FALSE +STRING_1 +SYSTEM +TEXT +SELECTED_TEXT +DISABLED_TEXT + + + + + +1 +display_2 +320 +240 +32 +FALSE +FALSE +FALSE +FALSE +FALSE +FALSE +TRUE +FALSE +None +FALSE + +1 +0 +default_theme +TRUE +TRUE +TRUE +FALSE +TRUE + + +HEADER +default_theme + +project_relative + +FALSE +TRUE +FALSE +THEME_HEADER + + +GROUP +Colors + +project_relative + +FALSE +TRUE +FALSE +COLOR_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_COLOR_FOLDER + +COLOR +CANVAS + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +WIDGET_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +WINDOW_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +DEFAULT_BORDER + +project_relative + +TRUE +TRUE +FALSE +10197875 + + +COLOR +WINDOW_BORDER + +project_relative + +TRUE +TRUE +FALSE +7707050 + + +COLOR +TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SELECTED_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SELECTED_FILL + +project_relative + +TRUE +TRUE +FALSE +184 + + +COLOR +SHADOW + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SHINE + +project_relative + +TRUE +TRUE +FALSE +14342874 + + +COLOR +BTN_BORDER + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +BTN_UPPER + +project_relative + +TRUE +TRUE +FALSE +16316640 + + +COLOR +BTN_LOWER + +project_relative + +TRUE +TRUE +FALSE +16313520 + + +COLOR +BTN_TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SCROLL_FILL + +project_relative + +TRUE +TRUE +FALSE +15259896 + + +COLOR +SCROLL_BUTTON + +project_relative + +TRUE +TRUE +FALSE +15256752 + + +COLOR +TEXT_INPUT_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +TEXT_INPUT_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +SLIDER_TICK + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_GROOVE_TOP + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_GROOVE_BOTTOM + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SLIDER_NEEDLE_OUTLINE + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_NEEDLE_FILL + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SLIDER_NEEDLE_LINE1 + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_NEEDLE_LINE2 + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +DISABLED_TEXT + +project_relative + +TRUE +TRUE +FALSE +10526880 + + +COLOR +DISABLED_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +READONLY_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +READONLY_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_COLOR_FOLDER + +Add New Color + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Fonts + +project_relative + +FALSE +TRUE +FALSE +FONT_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_FONT_FOLDER + +FONT +SYSTEM + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +BUTTON + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +PROMPT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +TEXT_INPUT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_FONT_FOLDER + +Add New Font + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Pixelmaps + +project_relative + +FALSE +TRUE +FALSE +PIXELMAP_GROUP + +FOLDER +System + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_PIXELMAP_FOLDER + +PIXELMAP +RADIO_ON + +..\..\graphics\system_png\radiobutton_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +RADIO_OFF + +..\..\graphics\system_png\radiobutton_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_ON + +..\..\graphics\system_png\checkbox_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_OFF + +..\..\graphics\system_png\checkbox_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_PIXELMAP_FOLDER + +Add New Pixelmap + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Strings + +project_relative + +FALSE +TRUE +FALSE +STRING_GROUP + +Add New String + +project_relative + +FALSE +TRUE +FALSE + + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +17170432 + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +33947648 + + + +TRUE + +default_folder + + + +2 +display_3 +320 +240 +32 +FALSE +FALSE +FALSE +FALSE +FALSE +FALSE +TRUE +FALSE +None +FALSE + +1 +0 +default_theme +TRUE +TRUE +TRUE +FALSE +TRUE + + +HEADER +default_theme + +project_relative + +FALSE +TRUE +FALSE +THEME_HEADER + + +GROUP +Colors + +project_relative + +FALSE +TRUE +FALSE +COLOR_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_COLOR_FOLDER + +COLOR +CANVAS + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +WIDGET_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +WINDOW_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +DEFAULT_BORDER + +project_relative + +TRUE +TRUE +FALSE +10197875 + + +COLOR +WINDOW_BORDER + +project_relative + +TRUE +TRUE +FALSE +7707050 + + +COLOR +TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SELECTED_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SELECTED_FILL + +project_relative + +TRUE +TRUE +FALSE +184 + + +COLOR +SHADOW + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SHINE + +project_relative + +TRUE +TRUE +FALSE +14342874 + + +COLOR +BTN_BORDER + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +BTN_UPPER + +project_relative + +TRUE +TRUE +FALSE +16316640 + + +COLOR +BTN_LOWER + +project_relative + +TRUE +TRUE +FALSE +16313520 + + +COLOR +BTN_TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SCROLL_FILL + +project_relative + +TRUE +TRUE +FALSE +15259896 + + +COLOR +SCROLL_BUTTON + +project_relative + +TRUE +TRUE +FALSE +15256752 + + +COLOR +TEXT_INPUT_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +TEXT_INPUT_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +SLIDER_TICK + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_GROOVE_TOP + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_GROOVE_BOTTOM + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SLIDER_NEEDLE_OUTLINE + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_NEEDLE_FILL + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SLIDER_NEEDLE_LINE1 + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_NEEDLE_LINE2 + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +DISABLED_TEXT + +project_relative + +TRUE +TRUE +FALSE +10526880 + + +COLOR +DISABLED_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +READONLY_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +READONLY_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_COLOR_FOLDER + +Add New Color + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Fonts + +project_relative + +FALSE +TRUE +FALSE +FONT_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_FONT_FOLDER + +FONT +SYSTEM + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +BUTTON + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +PROMPT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +TEXT_INPUT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_FONT_FOLDER + +Add New Font + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Pixelmaps + +project_relative + +FALSE +TRUE +FALSE +PIXELMAP_GROUP + +FOLDER +System + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_PIXELMAP_FOLDER + +PIXELMAP +RADIO_ON + +..\..\graphics\system_png\radiobutton_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +RADIO_OFF + +..\..\graphics\system_png\radiobutton_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_ON + +..\..\graphics\system_png\checkbox_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_OFF + +..\..\graphics\system_png\checkbox_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_PIXELMAP_FOLDER + +Add New Pixelmap + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Strings + +project_relative + +FALSE +TRUE +FALSE +STRING_GROUP + +Add New String + +project_relative + +FALSE +TRUE +FALSE + + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +17170432 + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +33947648 + + + +TRUE + +default_folder + + + +3 +display_4 +320 +240 +32 +FALSE +FALSE +FALSE +FALSE +FALSE +FALSE +TRUE +FALSE +None +FALSE + +1 +0 +default_theme +TRUE +TRUE +TRUE +FALSE +TRUE + + +HEADER +default_theme + +project_relative + +FALSE +TRUE +FALSE +THEME_HEADER + + +GROUP +Colors + +project_relative + +FALSE +TRUE +FALSE +COLOR_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_COLOR_FOLDER + +COLOR +CANVAS + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +WIDGET_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +WINDOW_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +DEFAULT_BORDER + +project_relative + +TRUE +TRUE +FALSE +10197875 + + +COLOR +WINDOW_BORDER + +project_relative + +TRUE +TRUE +FALSE +7707050 + + +COLOR +TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SELECTED_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SELECTED_FILL + +project_relative + +TRUE +TRUE +FALSE +184 + + +COLOR +SHADOW + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SHINE + +project_relative + +TRUE +TRUE +FALSE +14342874 + + +COLOR +BTN_BORDER + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +BTN_UPPER + +project_relative + +TRUE +TRUE +FALSE +16316640 + + +COLOR +BTN_LOWER + +project_relative + +TRUE +TRUE +FALSE +16313520 + + +COLOR +BTN_TEXT + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SCROLL_FILL + +project_relative + +TRUE +TRUE +FALSE +15259896 + + +COLOR +SCROLL_BUTTON + +project_relative + +TRUE +TRUE +FALSE +15256752 + + +COLOR +TEXT_INPUT_TEXT + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +TEXT_INPUT_FILL + +project_relative + +TRUE +TRUE +FALSE +14869218 + + +COLOR +SLIDER_TICK + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_GROOVE_TOP + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_GROOVE_BOTTOM + +project_relative + +TRUE +TRUE +FALSE +16777215 + + +COLOR +SLIDER_NEEDLE_OUTLINE + +project_relative + +TRUE +TRUE +FALSE +0 + + +COLOR +SLIDER_NEEDLE_FILL + +project_relative + +TRUE +TRUE +FALSE +8421504 + + +COLOR +SLIDER_NEEDLE_LINE1 + +project_relative + +TRUE +TRUE +FALSE +12632256 + + +COLOR +SLIDER_NEEDLE_LINE2 + +project_relative + +TRUE +TRUE +FALSE +14729312 + + +COLOR +DISABLED_TEXT + +project_relative + +TRUE +TRUE +FALSE +10526880 + + +COLOR +DISABLED_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + +COLOR +READONLY_TEXT + +project_relative + +TRUE +TRUE +FALSE +4294967295 + + +COLOR +READONLY_FILL + +project_relative + +TRUE +TRUE +FALSE +7896184 + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_COLOR_FOLDER + +Add New Color + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Fonts + +project_relative + +FALSE +TRUE +FALSE +FONT_GROUP + +FOLDER +Defaults + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_FONT_FOLDER + +FONT +SYSTEM + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +BUTTON + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +PROMPT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + +FONT +TEXT_INPUT + +project_relative + +TRUE +TRUE +FALSE +18 +8 +FALSE +FALSE +FALSE +FALSE +FALSE + +TRUE +32 +126 +FALSE +256 +383 +FALSE +384 +535 +FALSE +592 +683 +FALSE +688 +745 +FALSE +768 +837 +FALSE +884 +1011 +FALSE +1025 +1273 +FALSE +1329 +1417 +FALSE +1425 +1524 +FALSE +1567 +1785 +FALSE +1792 +1866 +FALSE +1920 +1968 +FALSE +2305 +2416 +FALSE +2433 +2554 +FALSE +2562 +2676 +FALSE +2689 +2799 +FALSE +2817 +2928 +FALSE +2946 +3058 +FALSE +3073 +3183 +FALSE +3202 +3311 +FALSE +3330 +3439 +FALSE +3456 +3572 +FALSE +3585 +3675 +FALSE +3713 +3805 +FALSE +3840 +4025 +FALSE +4096 +4185 +FALSE +4256 +4347 +FALSE +4352 +4601 +FALSE +6144 +6313 +FALSE +7680 +7929 +FALSE +7936 +8190 +FALSE +8192 +8262 +FALSE +8352 +8364 +FALSE +8448 +8504 +FALSE +8531 +8578 +FALSE +8704 +8945 +FALSE +12353 +12446 +FALSE +12449 +12542 +FALSE +12549 +12588 +FALSE +12593 +12686 +FALSE +12688 +12703 +FALSE +13056 +13310 +FALSE +19968 +40880 +FALSE +44032 +55215 +FALSE +63744 +64045 + + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_FONT_FOLDER + +Add New Font + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Pixelmaps + +project_relative + +FALSE +TRUE +FALSE +PIXELMAP_GROUP + +FOLDER +System + +project_relative + +FALSE +TRUE +FALSE +DEFAULT_PIXELMAP_FOLDER + +PIXELMAP +RADIO_ON + +..\..\graphics\system_png\radiobutton_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +RADIO_OFF + +..\..\graphics\system_png\radiobutton_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_ON + +..\..\graphics\system_png\checkbox_on.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + +PIXELMAP +CHECKBOX_OFF + +..\..\graphics\system_png\checkbox_off.png +project_relative + +TRUE +TRUE +TRUE +FALSE +FALSE +FALSE +FALSE +FALSE +None + + + +FOLDER +Custom + +project_relative + +FALSE +TRUE +FALSE +CUSTOM_PIXELMAP_FOLDER + +Add New Pixelmap + +project_relative + +FALSE +TRUE +FALSE + + + + +GROUP +Strings + +project_relative + +FALSE +TRUE +FALSE +STRING_GROUP + +Add New String + +project_relative + +FALSE +TRUE +FALSE + + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +17170432 + + +20 +18 +20 +20 +4 +CANVAS +CANVAS +SCROLL_BUTTON +33947648 + + + +TRUE + +default_folder + + +
diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.c b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.c new file mode 100644 index 00000000..c902ec06 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.c @@ -0,0 +1,765 @@ +/*******************************************************************************/ +/* This file is auto-generated by Azure RTOS GUIX Studio. Do not edit this */ +/* file by hand. Modifications to this file should only be made by running */ +/* the Azure RTOS GUIX Studio application and re-generating the application */ +/* resource file(s). For more information please refer to the Azure RTOS GUIX */ +/* Studio User Guide, or visit our web site at azure.com/rtos */ +/* */ +/* GUIX Studio Revision 6.2.1.5 (Preview Version) */ +/* Date (dd.mm.yyyy): 17. 8.2023 Time (hh:mm): 15:56 */ +/*******************************************************************************/ + + +#include "gx_api.h" +#include "demo_guix_binres_standalone_resources.h" + +/* Color Table */ + +GX_CONST GX_COLOR main_display_theme_1_color_table[] = +{ + 0x00000000, + 0x00007bef, + 0x0000e71c, + 0x00009cce, + 0x000074d5, + 0x0000dedb, + 0x0000ffff, + 0x00000017, + 0x00008410, + 0x0000dedb, + 0x0000e60c, + 0x0000ffdc, + 0x0000ff76, + 0x00000000, + 0x0000eedf, + 0x0000ee76, + 0x0000ffff, + 0x0000e71c, + 0x00000000, + 0x0000c618, + 0x0000ffff, + 0x00000000, + 0x00008410, + 0x0000c618, + 0x0000e60c, + 0x0000a514, + 0x00007bef, + 0x0000ffff, + 0x00007bef, + 0x0000041f +}; + + +/* Font Table */ + + +extern GX_CONST GX_FONT _gx_system_font_8bpp; +GX_CONST GX_FONT *main_display_theme_1_font_table[] = +{ + &_gx_system_font_8bpp, + &_gx_system_font_8bpp, + &_gx_system_font_8bpp, + &_gx_system_font_8bpp +}; + +/* Pixelmap data definitions */ + + +/* THEME_1_RADIO_ON pixelmap data */ + +static GX_CONST USHORT MAIN_DISPLAY_THEME_1_RADIO_ON_pixelmap_data[308] = +{ + 0x0083, 0xffff, 0x8007, 0xf7bf, 0xcc00, 0xae1a, 0xff00, 0x7cd6, 0xff00, 0x6c95, + 0xff00, 0x74b6, 0xff00, 0x8517, 0xa300, 0xb63a, 0x0000, 0xffdf, 0x0083, 0xffff, + 0x0082, 0xffff, 0x8009, 0xd6fc, 0xff00, 0x7496, 0xff00, 0xddf2, 0xff00, 0xfdad, + 0xff00, 0xfd8b, 0xff00, 0xfd8b, 0xff00, 0xfdcd, 0xff00, 0xd5d3, 0xff00, 0x7496, + 0x8000, 0xe73d, 0x0082, 0xffff, 0x000f, 0xffff, 0x0000, 0xffff, 0xcc00, 0xb63a, + 0xff00, 0xb595, 0xff00, 0xfdac, 0xff00, 0xa6c9, 0xff00, 0x7747, 0xff00, 0x4f40, + 0xff00, 0x4f40, 0xff00, 0x7746, 0xff00, 0xa6c8, 0xff00, 0xfdcd, 0xff00, 0x9d35, + 0xcc00, 0xc69b, 0x0000, 0xffff, 0x0000, 0xffff, 0x0004, 0xffff, 0x8000, 0xd6fc, + 0xff00, 0xbdb5, 0xff00, 0xfd8b, 0xff00, 0x7767, 0xff85, 0x4f40, 0xff04, 0x7747, + 0xff00, 0xfd8b, 0xff00, 0x9d56, 0x8000, 0xe75e, 0x0000, 0xffff, 0x3303, 0xf7bf, + 0xff00, 0x7cd6, 0xff00, 0xfdcd, 0xff00, 0x7767, 0xff87, 0x4f40, 0xff03, 0x7747, + 0xff00, 0xfdcd, 0xff00, 0x74b6, 0x0000, 0xffff, 0xcc02, 0xae1a, 0xff00, 0xe613, + 0xff00, 0xa6ea, 0xff89, 0x4f40, 0xff02, 0xfe30, 0xff00, 0xcdf5, 0xa400, 0xcebc, + 0xff02, 0x8d37, 0xff00, 0xfdcd, 0xff00, 0x7767, 0xff89, 0x4f40, 0xff02, 0xa72c, + 0xff00, 0xfe10, 0xff00, 0x9d99, 0xff01, 0x8d37, 0xff00, 0xfdcd, 0xff8b, 0x4f40, + 0xff01, 0xfdcd, 0xff00, 0x8d37, 0xff01, 0x8517, 0xff00, 0xfdcd, 0xff8b, 0x4f40, + 0xff01, 0xfdac, 0xff00, 0x8517, 0xff02, 0x8517, 0xff00, 0xfdcd, 0xff00, 0x7767, + 0xff89, 0x4f40, 0xff02, 0x6743, 0xff00, 0xfe10, 0xff00, 0x9d99, 0xcc02, 0xae1a, + 0xff00, 0xe613, 0xff00, 0x7725, 0xff89, 0x4f40, 0xff02, 0xfe30, 0xff00, 0xcdf5, + 0x8300, 0xcebc, 0x0003, 0xf7bf, 0xff00, 0x7cd6, 0xff00, 0xfdcd, 0xff00, 0x6744, + 0xff87, 0x4f40, 0xff03, 0x7747, 0xff00, 0xfdcd, 0xff00, 0x74b6, 0x0000, 0xffff, + 0x0004, 0xffff, 0xcc00, 0xd6fc, 0xff00, 0xbdb5, 0xff00, 0xfd8b, 0xff00, 0x6743, + 0xff85, 0x4f40, 0xff04, 0x7747, 0xff00, 0xfd8b, 0xff00, 0x9d56, 0x8000, 0xe75e, + 0x0000, 0xffff, 0x000f, 0xffff, 0x0000, 0xffff, 0xcc00, 0xb63a, 0xff00, 0xb595, + 0xff00, 0xfdac, 0xff00, 0xa6c9, 0xff00, 0x7746, 0xff00, 0x4f40, 0xff00, 0x4f40, + 0xff00, 0x7746, 0xff00, 0xfe30, 0xff00, 0xfdac, 0xff00, 0x9d35, 0xcc00, 0xc69b, + 0x0000, 0xffff, 0x0000, 0xffff, 0x0082, 0xffff, 0xcc09, 0xd6fc, 0xff00, 0x7496, + 0xff00, 0xddf2, 0xff00, 0xfdcd, 0xff00, 0xfd8b, 0xff00, 0xfd6a, 0xff00, 0xfdcd, + 0xff00, 0xd5d3, 0xff00, 0x7496, 0x8000, 0xe73d, 0x0082, 0xffff, 0x0083, 0xffff, + 0x3307, 0xf7bf, 0xcc00, 0xae1a, 0xff00, 0x84f7, 0xff00, 0x6c95, 0xff00, 0x74b6, + 0xff00, 0x8517, 0xcc00, 0xb63a, 0x0000, 0xffdf, 0x0083, 0xffff +}; +GX_CONST GX_PIXELMAP MAIN_DISPLAY_THEME_1_RADIO_ON_pixelmap = +{ + 0x00000001, /* major version */ + 0x00000000, /* minor version */ + GX_PIXELMAP_COMPRESSED|GX_PIXELMAP_ALPHA, /* flags */ + GX_COLOR_FORMAT_565RGB, /* Format */ + (GX_UBYTE *) MAIN_DISPLAY_THEME_1_RADIO_ON_pixelmap_data, + sizeof(MAIN_DISPLAY_THEME_1_RADIO_ON_pixelmap_data), /* the size of pixelmap_data*/ + NULL, + 0, /* auxiliary data size */ + 0x00, /* used for transparent iamges */ + 16, /* width in pixel */ + 16 /* height in pixel */ +}; + +/* THEME_1_RADIO_OFF pixelmap data */ + +static GX_CONST USHORT MAIN_DISPLAY_THEME_1_RADIO_OFF_pixelmap_data[308] = +{ + 0x0083, 0xffff, 0xff07, 0xf7bf, 0xb300, 0xae1a, 0xff00, 0x7cd6, 0xff00, 0x6c95, + 0xff00, 0x74b6, 0xff00, 0x8517, 0xb300, 0xb63a, 0x0000, 0xffdf, 0x0083, 0xffff, + 0x0082, 0xffff, 0x8009, 0xd6fc, 0xff00, 0x7496, 0xff00, 0xddf2, 0xff00, 0xfdad, + 0xff00, 0xfd8b, 0xff00, 0xfd8b, 0xff00, 0xfdcd, 0xff00, 0xd5d3, 0xff00, 0x7496, + 0x3300, 0xe73d, 0x0082, 0xffff, 0x000f, 0xffff, 0x0000, 0xffff, 0xb300, 0xb63a, + 0xff00, 0xb595, 0xff00, 0xfdac, 0xff00, 0xfe72, 0xff00, 0xff7b, 0xff00, 0xffff, + 0xff00, 0xffff, 0xff00, 0xff5a, 0xff00, 0xfe51, 0xff00, 0xfdcd, 0xff00, 0x9d35, + 0xb300, 0xc69b, 0x0000, 0xffff, 0x0000, 0xffff, 0x0004, 0xffff, 0x8000, 0xd6fc, + 0xff00, 0xbdb5, 0xff00, 0xfd8b, 0xff00, 0xffbd, 0xff85, 0xffff, 0xff04, 0xff9c, + 0xff00, 0xfd8b, 0xff00, 0x9d56, 0x3300, 0xe75e, 0x0000, 0xffff, 0x3303, 0xf7bf, + 0xff00, 0x7cd6, 0xff00, 0xfdcd, 0xff00, 0xffde, 0xff87, 0xffff, 0xff03, 0xff9c, + 0xff00, 0xfdcd, 0xff00, 0x74b6, 0x0000, 0xffff, 0xb302, 0xae1a, 0xff00, 0xe613, + 0xff00, 0xfeb5, 0xff89, 0xffff, 0xff02, 0xfe30, 0xff00, 0xcdf5, 0x8000, 0xcebc, + 0xff02, 0x8d37, 0xff00, 0xfdcd, 0xff00, 0xffde, 0xff89, 0xffff, 0xff02, 0xff39, + 0xff00, 0xfe10, 0xff00, 0x9d99, 0xff01, 0x8d37, 0xff00, 0xfdcd, 0xff8b, 0xffff, + 0xff01, 0xfdcd, 0xff00, 0x8d37, 0xff01, 0x8517, 0xff00, 0xfdcd, 0xff8b, 0xffff, + 0xff01, 0xfdac, 0xff00, 0x8517, 0xff02, 0x8517, 0xff00, 0xfdcd, 0xff00, 0xffde, + 0xff89, 0xffff, 0xff02, 0xff39, 0xff00, 0xfe10, 0xff00, 0x9d99, 0xb302, 0xae1a, + 0xff00, 0xe613, 0xff00, 0xfeb5, 0xff89, 0xffff, 0xff02, 0xfe30, 0xff00, 0xcdf5, + 0x8000, 0xcebc, 0x0003, 0xf7bf, 0xff00, 0x7cd6, 0xff00, 0xfdcd, 0xff00, 0xffde, + 0xff87, 0xffff, 0xff03, 0xff9c, 0xff00, 0xfdcd, 0xff00, 0x74b6, 0x0000, 0xffff, + 0x0004, 0xffff, 0x8000, 0xd6fc, 0xff00, 0xbdb5, 0xff00, 0xfd8b, 0xff00, 0xffbd, + 0xff85, 0xffff, 0xff04, 0xff9c, 0xff00, 0xfd8b, 0xff00, 0x9d56, 0x3300, 0xe75e, + 0x0000, 0xffff, 0x000f, 0xffff, 0x0000, 0xffff, 0xb300, 0xb63a, 0xff00, 0xb595, + 0xff00, 0xfdac, 0xff00, 0xfe72, 0xff00, 0xff5a, 0xff00, 0xffff, 0xff00, 0xffff, + 0xff00, 0xff39, 0xff00, 0xfe30, 0xff00, 0xfdac, 0xff00, 0x9d35, 0xb300, 0xc69b, + 0x0000, 0xffff, 0x0000, 0xffff, 0x0082, 0xffff, 0x8009, 0xd6fc, 0xff00, 0x7496, + 0xff00, 0xddf2, 0xff00, 0xfdcd, 0xff00, 0xfd8b, 0xff00, 0xfd6a, 0xff00, 0xfdcd, + 0xff00, 0xd5d3, 0xff00, 0x7496, 0x8000, 0xe73d, 0x0082, 0xffff, 0x0083, 0xffff, + 0x3307, 0xf7bf, 0xb300, 0xae1a, 0xff00, 0x84f7, 0xff00, 0x6c95, 0xff00, 0x74b6, + 0xff00, 0x8517, 0xb300, 0xb63a, 0x0000, 0xffdf, 0x0083, 0xffff +}; +GX_CONST GX_PIXELMAP MAIN_DISPLAY_THEME_1_RADIO_OFF_pixelmap = +{ + 0x00000001, /* major version */ + 0x00000000, /* minor version */ + GX_PIXELMAP_COMPRESSED|GX_PIXELMAP_ALPHA, /* flags */ + GX_COLOR_FORMAT_565RGB, /* Format */ + (GX_UBYTE *) MAIN_DISPLAY_THEME_1_RADIO_OFF_pixelmap_data, + sizeof(MAIN_DISPLAY_THEME_1_RADIO_OFF_pixelmap_data), /* the size of pixelmap_data*/ + NULL, + 0, /* auxiliary data size */ + 0x00, /* used for transparent iamges */ + 16, /* width in pixel */ + 16 /* height in pixel */ +}; + +/* THEME_1_CHECKBOX_ON pixelmap data */ + +static GX_CONST USHORT MAIN_DISPLAY_THEME_1_CHECKBOX_ON_pixelmap_data[242] = +{ + 0x800f, 0x1a90, 0x000f, 0x1a90, 0xbe17, 0xe6d8, 0xde97, 0xde75, 0xde74, 0xde53, + 0xde31, 0xd610, 0xde11, 0xde32, 0xde32, 0xd611, 0xde0f, 0xb52d, 0x1a90, 0x000f, + 0x1a90, 0xe6d8, 0xfff9, 0xff97, 0xff55, 0xff33, 0xff11, 0xfef0, 0xfef0, 0xff11, + 0xff33, 0xff76, 0xff54, 0xff10, 0xddee, 0x1a90, 0x000f, 0x1a90, 0xde97, 0xff97, + 0xff57, 0xff58, 0xff57, 0xff36, 0xff16, 0xff36, 0xff58, 0xff9a, 0xb691, 0xded3, + 0xff13, 0xd5cf, 0x1a90, 0x000f, 0x1a90, 0xde96, 0xff97, 0xff9a, 0xffdf, 0xf7df, + 0xf7bf, 0xf7df, 0xffdf, 0xffff, 0xdf7b, 0x2525, 0x9e2d, 0xff55, 0xd5cf, 0x1a90, + 0x000f, 0x1a90, 0xde96, 0xff98, 0xff9b, 0xffdf, 0xffde, 0xf7be, 0xf7be, 0xffff, + 0xdf7b, 0x2504, 0x0ce2, 0xae4f, 0xff34, 0xd5cf, 0x1a90, 0x000f, 0x1a90, 0xde75, + 0xffb9, 0xae91, 0x55aa, 0xffff, 0xffdf, 0xffff, 0xc718, 0x3526, 0x1d03, 0x04a1, + 0xa64e, 0xff34, 0xd5ce, 0x1a90, 0x000f, 0x1a90, 0xde74, 0xffb9, 0xa670, 0x14e2, + 0x760e, 0xffdf, 0xbf17, 0x4588, 0x0cc1, 0x14c2, 0x8e72, 0xe6f5, 0xfef1, 0xd5ad, + 0x1a90, 0x000f, 0x1a90, 0xde53, 0xffb8, 0xa670, 0x04a1, 0x14c2, 0x9eb3, 0x55aa, + 0x04a0, 0x2504, 0x760e, 0xf7df, 0xff57, 0xfe6c, 0xd56b, 0x1a90, 0x000f, 0x1a90, + 0xde33, 0xff97, 0xbeb2, 0x3546, 0x1d03, 0x14e2, 0x14e2, 0x2504, 0x65ec, 0xffff, + 0xffff, 0xfed3, 0xfe08, 0xd549, 0x1a90, 0x000f, 0x1a90, 0xde32, 0xff33, 0xff9a, + 0xdf7b, 0x2504, 0x1d03, 0x14c2, 0x760e, 0xffff, 0xffde, 0xf7df, 0xfe91, 0xfdc6, + 0xd528, 0x1a90, 0x000f, 0x1a90, 0xd5ef, 0xfed0, 0xff37, 0xffff, 0xdf7b, 0x2525, + 0x8651, 0xf7df, 0xffff, 0xf7df, 0xf7ff, 0xfe90, 0xfdc5, 0xd528, 0x1a90, 0x000f, + 0x1a90, 0xd5ce, 0xfe8d, 0xfeb1, 0xff36, 0xff79, 0xb670, 0xe6f5, 0xff57, 0xfed3, + 0xfe91, 0xfe90, 0xfdea, 0xfdc5, 0xd528, 0x1a90, 0x000f, 0x1a90, 0xddcd, 0xfeac, + 0xfe6b, 0xfe8d, 0xfed0, 0xff33, 0xfef1, 0xfe6c, 0xfe08, 0xfdc6, 0xfdc5, 0xfdc5, + 0xfde5, 0xdd27, 0x1a90, 0x0009, 0x1a90, 0xb50d, 0xddac, 0xd58b, 0xd58c, 0xd5ae, + 0xd5ce, 0xd5ad, 0xd56b, 0xd549, 0x8002, 0xd528, 0x0002, 0xdd27, 0xb4a9, 0x1a90, + 0x800f, 0x1a90 +}; +GX_CONST GX_PIXELMAP MAIN_DISPLAY_THEME_1_CHECKBOX_ON_pixelmap = +{ + 0x00000001, /* major version */ + 0x00000000, /* minor version */ + GX_PIXELMAP_COMPRESSED, /* flags */ + GX_COLOR_FORMAT_565RGB, /* Format */ + (GX_UBYTE *) MAIN_DISPLAY_THEME_1_CHECKBOX_ON_pixelmap_data, + sizeof(MAIN_DISPLAY_THEME_1_CHECKBOX_ON_pixelmap_data), /* the size of pixelmap_data*/ + NULL, + 0, /* auxiliary data size */ + 0x00, /* used for transparent iamges */ + 16, /* width in pixel */ + 16 /* height in pixel */ +}; + +/* THEME_1_CHECKBOX_OFF pixelmap data */ + +static GX_CONST USHORT MAIN_DISPLAY_THEME_1_CHECKBOX_OFF_pixelmap_data[217] = +{ + 0x800f, 0x1a90, 0x000f, 0x1a90, 0xbe17, 0xe6d8, 0xde97, 0xde75, 0xde74, 0xde53, + 0xde32, 0xde10, 0xd610, 0xd5ef, 0xd5ef, 0xd5ce, 0xddcd, 0xb50d, 0x1a90, 0x000f, + 0x1a90, 0xe6d8, 0xfff9, 0xff97, 0xff75, 0xff53, 0xff12, 0xfef0, 0xfecf, 0xfece, + 0xfead, 0xfe8c, 0xfe8c, 0xfeac, 0xddac, 0x1a90, 0x000f, 0x1a90, 0xde97, 0xff97, + 0xff37, 0xf737, 0xf716, 0xf6f5, 0xf6f5, 0xf6f4, 0xf6d4, 0xf6d3, 0xf6d3, 0xfe6e, + 0xfe4a, 0xd58b, 0x1a90, 0x0003, 0x1a90, 0xde75, 0xff75, 0xf737, 0x8006, 0xe75d, + 0x0004, 0xe75e, 0xf692, 0xfe29, 0xd56b, 0x1a90, 0x0004, 0x1a90, 0xde74, 0xff53, + 0xf716, 0xe75d, 0x8005, 0xe73c, 0x0004, 0xe75d, 0xf691, 0xfe28, 0xd56a, 0x1a90, + 0x0004, 0x1a90, 0xde53, 0xff12, 0xf6f5, 0xe75d, 0x8005, 0xe73c, 0x0004, 0xe75d, + 0xf670, 0xfe07, 0xd54a, 0x1a90, 0x0004, 0x1a90, 0xde32, 0xfef0, 0xf6f5, 0xe75d, + 0x8005, 0xe73c, 0x0004, 0xe75d, 0xf670, 0xfe07, 0xd549, 0x1a90, 0x0004, 0x1a90, + 0xde10, 0xfecf, 0xf6f4, 0xe75d, 0x8005, 0xe73c, 0x0004, 0xe75d, 0xf670, 0xfde6, + 0xd549, 0x1a90, 0x0004, 0x1a90, 0xd610, 0xfece, 0xf6d4, 0xe75d, 0x8005, 0xe73c, + 0x0004, 0xe75d, 0xf66f, 0xfde6, 0xd529, 0x1a90, 0x0004, 0x1a90, 0xd5ef, 0xfead, + 0xf6d3, 0xe75d, 0x8005, 0xe73c, 0x0004, 0xe75d, 0xf64f, 0xfdc5, 0xd528, 0x1a90, + 0x0004, 0x1a90, 0xd5ef, 0xfe8c, 0xf6d3, 0xe75e, 0x8005, 0xe75d, 0x0004, 0xe77f, + 0xf64f, 0xfdc5, 0xd528, 0x1a90, 0x0005, 0x1a90, 0xd5ce, 0xfe8c, 0xfe6e, 0xf692, + 0xf691, 0x8002, 0xf670, 0x0006, 0xf66f, 0xf64f, 0xf64f, 0xf5ea, 0xfdc5, 0xd528, + 0x1a90, 0x0009, 0x1a90, 0xddcd, 0xfeac, 0xfe4a, 0xfe29, 0xfe28, 0xfe07, 0xfe07, + 0xfde6, 0xfde6, 0x8002, 0xfdc5, 0x0002, 0xfde5, 0xdd27, 0x1a90, 0x0009, 0x1a90, + 0xb50d, 0xddac, 0xd58b, 0xd56b, 0xd56a, 0xd54a, 0xd549, 0xd549, 0xd529, 0x8002, + 0xd528, 0x0002, 0xdd27, 0xb4a9, 0x1a90, 0x800f, 0x1a90 +}; +GX_CONST GX_PIXELMAP MAIN_DISPLAY_THEME_1_CHECKBOX_OFF_pixelmap = +{ + 0x00000001, /* major version */ + 0x00000000, /* minor version */ + GX_PIXELMAP_COMPRESSED, /* flags */ + GX_COLOR_FORMAT_565RGB, /* Format */ + (GX_UBYTE *) MAIN_DISPLAY_THEME_1_CHECKBOX_OFF_pixelmap_data, + sizeof(MAIN_DISPLAY_THEME_1_CHECKBOX_OFF_pixelmap_data), /* the size of pixelmap_data*/ + NULL, + 0, /* auxiliary data size */ + 0x00, /* used for transparent iamges */ + 16, /* width in pixel */ + 16 /* height in pixel */ +}; + +/* THEME_1_MS_AZURE_LOGO pixelmap data */ + +static GX_CONST USHORT MAIN_DISPLAY_THEME_1_MS_AZURE_LOGO_pixelmap_data[4080] = +{ + 0x00ff, 0x0000, 0x00bc, 0x0000, 0x0001, 0x0000, 0xf200, 0xf284, 0xfe89, 0xf284, + 0xff04, 0xf262, 0xf400, 0xf2c7, 0x1c00, 0xff9e, 0x9e00, 0xbed4, 0xff00, 0x75a0, + 0xfe88, 0x7dc0, 0xff02, 0x7dc0, 0xda00, 0x9e2d, 0x0e00, 0xffff, 0x00ff, 0xffff, + 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x00ff, 0xffff, + 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x00ff, 0xffff, + 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x00ff, 0xffff, + 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x00d5, 0xffff, + 0x2a03, 0xffff, 0x6800, 0xffff, 0x7900, 0xffff, 0x4f00, 0xffff, 0x00c3, 0xffff, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, 0xff89, 0xf284, + 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, 0xff00, 0x75a0, + 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x1304, 0xffff, + 0x5300, 0xffff, 0x5400, 0xffff, 0x5600, 0xffff, 0x4200, 0xffff, 0x0087, 0xffff, + 0x020a, 0xffff, 0x4700, 0xffff, 0x5500, 0xffff, 0x5500, 0xffff, 0x4a00, 0xffff, + 0x0600, 0xffff, 0x0000, 0xffff, 0x2400, 0xffff, 0x9c00, 0xffff, 0x8500, 0xffff, + 0x0c00, 0xffff, 0x00b6, 0xffff, 0x7905, 0xffff, 0xf700, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0xdb00, 0xffff, 0x0400, 0xffff, 0x008e, 0xffff, 0x0504, 0xffff, + 0x4c00, 0xffff, 0x5500, 0xffff, 0x5500, 0xffff, 0x1500, 0xffff, 0x00ae, 0xffff, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, 0xff89, 0xf284, + 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, 0xff00, 0x75a0, + 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x3a00, 0xffff, + 0xff82, 0xffff, 0xf501, 0xffff, 0x2600, 0xffff, 0x0086, 0xffff, 0x350a, 0xffff, + 0xfe00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xe800, 0xffff, 0x1200, 0xffff, + 0x0000, 0xffff, 0xb000, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x7300, 0xffff, + 0x00b5, 0xffff, 0x5709, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xef00, 0xffff, + 0xbf00, 0xffff, 0xa900, 0xffff, 0x0300, 0xffff, 0x0000, 0xffff, 0x0f00, 0xffff, + 0x1800, 0xffff, 0x008b, 0xffff, 0x4300, 0xffff, 0xff82, 0xffff, 0x7e00, 0xffff, + 0x00ae, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x3901, 0xffff, 0xfb00, 0xffff, 0xff82, 0xffff, 0x7b00, 0xffff, 0x0086, 0xffff, + 0x9500, 0xffff, 0xff82, 0xffff, 0xe206, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x9500, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x5b00, 0xffff, 0x00b5, 0xffff, + 0xb609, 0xffff, 0xff00, 0xffff, 0xf800, 0xffff, 0x4400, 0xffff, 0x0000, 0xffff, + 0x0200, 0xffff, 0x1800, 0xffff, 0x9700, 0xffff, 0xe500, 0xffff, 0x8500, 0xffff, + 0x008b, 0xffff, 0x9d00, 0xffff, 0xff82, 0xffff, 0xd201, 0xffff, 0x0900, 0xffff, + 0x00ad, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x3901, 0xffff, 0xfb00, 0xffff, 0xff82, 0xffff, 0xd301, 0xffff, 0x0900, 0xffff, + 0x0084, 0xffff, 0x1901, 0xffff, 0xe800, 0xffff, 0xff82, 0xffff, 0xe205, 0xffff, + 0x1200, 0xffff, 0x0000, 0xffff, 0x0900, 0xffff, 0x5a00, 0xffff, 0x4600, 0xffff, + 0x00b5, 0xffff, 0x030a, 0xffff, 0xd100, 0xffff, 0xff00, 0xffff, 0xd600, 0xffff, + 0x0400, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3600, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x8700, 0xffff, 0x008a, 0xffff, 0x1806, 0xffff, 0xe800, 0xffff, + 0xff00, 0xffff, 0xeb00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x4700, 0xffff, + 0x00ad, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, + 0xff89, 0xf284, 0xff04, 0xf262, 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, + 0xff00, 0x75a0, 0xff89, 0x7dc0, 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x3906, 0xffff, 0xfc00, 0xffff, 0xfe00, 0xffff, 0xd000, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x4900, 0xffff, 0x0084, 0xffff, 0x6c0b, 0xffff, 0xff00, 0xffff, + 0xe800, 0xffff, 0xde00, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, + 0x0000, 0xffff, 0x0200, 0xffff, 0x0100, 0xffff, 0x0200, 0xffff, 0x0100, 0xffff, + 0x0084, 0xffff, 0x180d, 0xffff, 0x2f00, 0xffff, 0x3100, 0xffff, 0x1c00, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x0100, 0xffff, 0x0900, 0xffff, 0x0900, 0xffff, + 0x0500, 0xffff, 0x0000, 0xffff, 0x0c00, 0xffff, 0x2300, 0xffff, 0x0d00, 0xffff, + 0x0082, 0xffff, 0x0504, 0xffff, 0x2300, 0xffff, 0x2f00, 0xffff, 0x2900, 0xffff, + 0x0e00, 0xffff, 0x0086, 0xffff, 0x1803, 0xffff, 0x3000, 0xffff, 0x2f00, 0xffff, + 0x1900, 0xffff, 0x0085, 0xffff, 0x1004, 0xffff, 0x2900, 0xffff, 0x2f00, 0xffff, + 0x2200, 0xffff, 0x0300, 0xffff, 0x0082, 0xffff, 0x050e, 0xffff, 0x0e00, 0xffff, + 0xd300, 0xffff, 0xff00, 0xffff, 0xd300, 0xffff, 0x1000, 0xffff, 0x0700, 0xffff, + 0x0300, 0xffff, 0x3c00, 0xffff, 0xfa00, 0xffff, 0xff00, 0xffff, 0x8a00, 0xffff, + 0x0000, 0xffff, 0x0900, 0xffff, 0x0200, 0xffff, 0x0087, 0xffff, 0x6306, 0xffff, + 0xff00, 0xffff, 0xfb00, 0xffff, 0x6400, 0xffff, 0xea00, 0xffff, 0xff00, 0xffff, + 0xa100, 0xffff, 0x0084, 0xffff, 0x0500, 0xffff, 0x0987, 0xffff, 0x0404, 0xffff, + 0x0200, 0xffff, 0x0900, 0xffff, 0x0900, 0xffff, 0x0400, 0xffff, 0x0083, 0xffff, + 0x070c, 0xffff, 0x0900, 0xffff, 0x0800, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0x0500, 0xffff, 0x0900, 0xffff, 0x0900, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0x1e00, 0xffff, 0x1b00, 0xffff, 0x0100, 0xffff, 0x0082, 0xffff, 0x1c03, 0xffff, + 0x2a00, 0xffff, 0x2000, 0xffff, 0x0200, 0xffff, 0x0082, 0xffff, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0xf284, 0xff89, 0xf284, 0xff04, 0xf262, + 0xf500, 0xf2c7, 0x1d00, 0xff9e, 0x9f00, 0xbed4, 0xff00, 0x75a0, 0xff89, 0x7dc0, + 0xdb01, 0x9e2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x3906, 0xffff, 0xfc00, 0xffff, + 0xff00, 0xffff, 0x7a00, 0xffff, 0xe200, 0xffff, 0xff00, 0xffff, 0xa600, 0xffff, + 0x0083, 0xffff, 0x050c, 0xffff, 0xcc00, 0xffff, 0xff00, 0xffff, 0x9800, 0xffff, + 0xbd00, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x6c00, 0xffff, 0xe600, 0xffff, 0xdb00, 0xffff, 0x3600, 0xffff, 0x0082, 0xffff, + 0x3519, 0xffff, 0xb100, 0xffff, 0xeb00, 0xffff, 0xfd00, 0xffff, 0xff00, 0xffff, + 0xf100, 0xffff, 0xa700, 0xffff, 0x0300, 0xffff, 0x1c00, 0xffff, 0xd100, 0xffff, + 0xe600, 0xffff, 0x8200, 0xffff, 0x5400, 0xffff, 0xde00, 0xffff, 0xfb00, 0xffff, + 0x8200, 0xffff, 0x0000, 0xffff, 0x0600, 0xffff, 0x7200, 0xffff, 0xd300, 0xffff, + 0xf400, 0xffff, 0xfd00, 0xffff, 0xf800, 0xffff, 0xe100, 0xffff, 0x9100, 0xffff, + 0x1400, 0xffff, 0x0082, 0xffff, 0x1806, 0xffff, 0x9e00, 0xffff, 0xec00, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xf200, 0xffff, 0x7600, 0xffff, 0x0082, 0xffff, + 0x2218, 0xffff, 0x9d00, 0xffff, 0xe400, 0xffff, 0xf900, 0xffff, 0xfd00, 0xffff, + 0xf300, 0xffff, 0xce00, 0xffff, 0x6200, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0xa000, 0xffff, 0xe300, 0xffff, 0xf900, 0xffff, 0xff00, 0xffff, 0xf900, 0xffff, + 0xdd00, 0xffff, 0xdc00, 0xffff, 0xdc00, 0xffff, 0xe300, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0xef00, 0xffff, 0xdc00, 0xffff, 0xdf00, 0xffff, 0x3900, 0xffff, + 0x0087, 0xffff, 0xbe07, 0xffff, 0xff00, 0xffff, 0xd200, 0xffff, 0x0500, 0xffff, + 0xb200, 0xffff, 0xff00, 0xffff, 0xeb00, 0xffff, 0x1b00, 0xffff, 0x0083, 0xffff, + 0x7a01, 0xffff, 0xe500, 0xffff, 0xdd82, 0xffff, 0xdc82, 0xffff, 0xe605, 0xffff, + 0x7600, 0xffff, 0x3500, 0xffff, 0xe000, 0xffff, 0xe400, 0xffff, 0x6500, 0xffff, + 0x0083, 0xffff, 0xa518, 0xffff, 0xe700, 0xffff, 0xbf00, 0xffff, 0x0d00, 0xffff, + 0x0000, 0xffff, 0x8800, 0xffff, 0xe700, 0xffff, 0xca00, 0xffff, 0x3600, 0xffff, + 0xb000, 0xffff, 0xf400, 0xffff, 0xd900, 0xffff, 0x1300, 0xffff, 0x0000, 0xffff, + 0x3e00, 0xffff, 0xbb00, 0xffff, 0xf000, 0xffff, 0xfc00, 0xffff, 0xf300, 0xffff, + 0xca00, 0xffff, 0x5200, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0xf800, 0xf240, 0xff89, 0xf240, 0xff04, 0xf220, + 0xfa00, 0xf2a5, 0x1d00, 0xff9e, 0xa200, 0xbed4, 0xff00, 0x75a0, 0xff88, 0x7dc0, + 0xff02, 0x75a0, 0xdf00, 0x962c, 0x0f00, 0xffff, 0x0085, 0xffff, 0x3907, 0xffff, + 0xfc00, 0xffff, 0xff00, 0xffff, 0x5700, 0xffff, 0x9500, 0xffff, 0xff00, 0xffff, + 0xee00, 0xffff, 0x2000, 0xffff, 0x0082, 0xffff, 0x4521, 0xffff, 0xff00, 0xffff, + 0xfd00, 0xffff, 0x3d00, 0xffff, 0xc000, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, + 0x1200, 0xffff, 0x0000, 0xffff, 0x7f00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x3f00, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x5000, 0xffff, 0xf500, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0xf500, 0xffff, 0xff00, 0xffff, + 0xec00, 0xffff, 0x0c00, 0xffff, 0x2000, 0xffff, 0xf700, 0xffff, 0xff00, 0xffff, + 0xd500, 0xffff, 0xf600, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x9100, 0xffff, + 0x0000, 0xffff, 0xaf00, 0xffff, 0xff82, 0xffff, 0xf800, 0xffff, 0xff82, 0xffff, + 0xce12, 0xffff, 0x1800, 0xffff, 0x0000, 0xffff, 0x0a00, 0xffff, 0xc500, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xeb00, 0xffff, 0xec00, 0xffff, 0xff00, 0xffff, + 0x9d00, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3200, 0xffff, 0xe500, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xfe00, 0xffff, 0xf900, 0xffff, 0xff82, 0xffff, + 0x8b02, 0xffff, 0x0000, 0xffff, 0xbf00, 0xffff, 0xff8c, 0xffff, 0x4400, 0xffff, + 0x0086, 0xffff, 0x3108, 0xffff, 0xf800, 0xffff, 0xff00, 0xffff, 0x8400, 0xffff, + 0x0000, 0xffff, 0x5f00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x6800, 0xffff, + 0x0083, 0xffff, 0x9000, 0xffff, 0xff87, 0xffff, 0x4c04, 0xffff, 0x4000, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0x7700, 0xffff, 0x0083, 0xffff, 0xc318, 0xffff, + 0xff00, 0xffff, 0xe100, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0x9f00, 0xffff, + 0xff00, 0xffff, 0xf300, 0xffff, 0xd300, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xf300, 0xffff, 0x1000, 0xffff, 0x5100, 0xffff, 0xf900, 0xffff, 0xff00, 0xffff, + 0xfc00, 0xffff, 0xdd00, 0xffff, 0xf500, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x6000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, + 0xcc00, 0xf3cc, 0xd689, 0xf3cc, 0xd804, 0xf3ac, 0xce00, 0xf3ed, 0x1800, 0xff9e, + 0x8600, 0xc6f6, 0xde00, 0x8e0a, 0xd688, 0x962c, 0xda02, 0x962b, 0xb900, 0xae71, + 0x0c00, 0xffff, 0x0085, 0xffff, 0x3907, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, + 0x5700, 0xffff, 0x3400, 0xffff, 0xfe00, 0xffff, 0xff00, 0xffff, 0x7300, 0xffff, + 0x0082, 0xffff, 0xa74f, 0xffff, 0xff00, 0xffff, 0xc200, 0xffff, 0x0500, 0xffff, + 0xc500, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x7d00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0x3e00, 0xffff, 0x0000, 0xffff, + 0x2100, 0xffff, 0xea00, 0xffff, 0xff00, 0xffff, 0xfe00, 0xffff, 0x8d00, 0xffff, + 0x2d00, 0xffff, 0x1d00, 0xffff, 0x4a00, 0xffff, 0x9700, 0xffff, 0x0d00, 0xffff, + 0x2000, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xd900, 0xffff, + 0x6700, 0xffff, 0x6a00, 0xffff, 0x4f00, 0xffff, 0x7c00, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0xc700, 0xffff, 0x4400, 0xffff, 0x2000, 0xffff, 0x3b00, 0xffff, + 0xbb00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xa000, 0xffff, 0x0000, 0xffff, + 0x4f00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x9100, 0xffff, 0x1100, 0xffff, + 0x1600, 0xffff, 0x5600, 0xffff, 0x6100, 0xffff, 0x0000, 0xffff, 0x0b00, 0xffff, + 0xcf00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x9300, 0xffff, 0x2e00, 0xffff, + 0x2200, 0xffff, 0x5e00, 0xffff, 0xe800, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x4c00, 0xffff, 0x2f00, 0xffff, 0x5100, 0xffff, 0xdf00, 0xffff, 0xff00, 0xffff, + 0xdf00, 0xffff, 0x5100, 0xffff, 0x4b00, 0xffff, 0x4800, 0xffff, 0x7000, 0xffff, + 0xfc00, 0xffff, 0xff00, 0xffff, 0xaa00, 0xffff, 0x4600, 0xffff, 0x4d00, 0xffff, + 0x1300, 0xffff, 0x0086, 0xffff, 0x8809, 0xffff, 0xff00, 0xffff, 0xfa00, 0xffff, + 0x3300, 0xffff, 0x0000, 0xffff, 0x1900, 0xffff, 0xea00, 0xffff, 0xff00, 0xffff, + 0xc100, 0xffff, 0x0100, 0xffff, 0x0082, 0xffff, 0x220d, 0xffff, 0x4000, 0xffff, + 0x3e00, 0xffff, 0x3e00, 0xffff, 0x3400, 0xffff, 0x8f00, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x8f00, 0xffff, 0x0000, 0xffff, 0x4600, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x7500, 0xffff, 0x0083, 0xffff, 0xbf05, 0xffff, 0xff00, 0xffff, + 0xdd00, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0x9d00, 0xffff, 0xff82, 0xffff, + 0x900f, 0xffff, 0x5900, 0xffff, 0x7300, 0xffff, 0x3600, 0xffff, 0xec00, 0xffff, + 0xff00, 0xffff, 0xd100, 0xffff, 0x3400, 0xffff, 0x0900, 0xffff, 0x2700, 0xffff, + 0xc800, 0xffff, 0xff00, 0xffff, 0xe300, 0xffff, 0x3100, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0x0d00, 0xffbf, 0x0e8a, 0xffbf, 0x0d02, 0xffbf, + 0x0100, 0xffff, 0x0800, 0xffff, 0x0e8a, 0xffde, 0x0c00, 0xffde, 0x0086, 0xffff, + 0x391c, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0x5d00, 0xffff, 0x0000, 0xffff, + 0xc500, 0xffff, 0xff00, 0xffff, 0xcd00, 0xffff, 0x0500, 0xffff, 0x0000, 0xffff, + 0x2500, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0x6400, 0xffff, 0x0000, 0xffff, + 0xc600, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x7d00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0x3e00, 0xffff, 0x0000, 0xffff, + 0x8600, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x7f00, 0xffff, 0x0085, 0xffff, + 0x220b, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0xef00, 0xffff, 0x2b00, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x1000, 0xffff, 0xe300, 0xffff, 0xff00, 0xffff, + 0xe400, 0xffff, 0x1b00, 0xffff, 0x0082, 0xffff, 0x1008, 0xffff, 0xd900, 0xffff, + 0xff00, 0xffff, 0xf000, 0xffff, 0x1700, 0xffff, 0x6300, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x7300, 0xffff, 0x0084, 0xffff, 0x5503, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0xa200, 0xffff, 0x0083, 0xffff, 0x5008, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0xb000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0xd000, 0xffff, + 0xff00, 0xffff, 0xd100, 0xffff, 0x0082, 0xffff, 0x2f03, 0xffff, 0xfa00, 0xffff, + 0xff00, 0xffff, 0x8300, 0xffff, 0x0088, 0xffff, 0x0d0a, 0xffff, 0xda00, 0xffff, + 0xff00, 0xffff, 0xc400, 0xffff, 0x0100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0xa500, 0xffff, 0xff00, 0xffff, 0xfb00, 0xffff, 0x3500, 0xffff, 0x0086, 0xffff, + 0x2309, 0xffff, 0xe500, 0xffff, 0xff00, 0xffff, 0xc400, 0xffff, 0x0900, 0xffff, + 0x0000, 0xffff, 0x4600, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x7500, 0xffff, + 0x0083, 0xffff, 0xbf08, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, 0x1000, 0xffff, + 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x8800, 0xffff, + 0x0082, 0xffff, 0x8703, 0xffff, 0xff00, 0xffff, 0xf700, 0xffff, 0x2d00, 0xffff, + 0x0082, 0xffff, 0x4205, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xae00, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xcc00, 0x659e, 0xd689, 0x659e, + 0xd804, 0x5d9e, 0xce00, 0x6dbe, 0x1800, 0xefbf, 0x8600, 0xfef6, 0xde00, 0xfe0a, + 0xd688, 0xfe2c, 0xda02, 0xfe0b, 0xb900, 0xfe71, 0x0c00, 0xffff, 0x0085, 0xffff, + 0x391c, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0000, 0xffff, + 0x6500, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x4200, 0xffff, 0x0000, 0xffff, + 0x7f00, 0xffff, 0xff00, 0xffff, 0xe500, 0xffff, 0x1500, 0xffff, 0x0000, 0xffff, + 0xc600, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x7d00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0x3d00, 0xffff, 0x0000, 0xffff, + 0xc700, 0xffff, 0xff00, 0xffff, 0xea00, 0xffff, 0x1800, 0xffff, 0x0085, 0xffff, + 0x2303, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0xb500, 0xffff, 0x0082, 0xffff, + 0x3f03, 0xffff, 0xfe00, 0xffff, 0xff00, 0xffff, 0x9b00, 0xffff, 0x0084, 0xffff, + 0x9009, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x4400, 0xffff, 0x3000, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xf800, 0xffff, 0x9b00, 0xffff, 0x3400, 0xffff, + 0x0082, 0xffff, 0x9203, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x4500, 0xffff, + 0x0083, 0xffff, 0x0c0f, 0xffff, 0xdc00, 0xffff, 0xff00, 0xffff, 0xdc00, 0xffff, + 0x0c00, 0xffff, 0x0300, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, 0xd200, 0xffff, + 0x0700, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3500, 0xffff, 0xfa00, 0xffff, + 0xff00, 0xffff, 0x8700, 0xffff, 0x0088, 0xffff, 0x4f0a, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x7500, 0xffff, 0x0000, 0xffff, 0x0600, 0xffff, 0x0000, 0xffff, + 0x5400, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x8c00, 0xffff, 0x0085, 0xffff, + 0x080a, 0xffff, 0xc400, 0xffff, 0xff00, 0xffff, 0xed00, 0xffff, 0x2b00, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x4600, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x7500, 0xffff, 0x0083, 0xffff, 0xbf18, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, + 0x1000, 0xffff, 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, 0xfa00, 0xffff, + 0x3200, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0100, 0xffff, 0xc500, 0xffff, + 0xff00, 0xffff, 0xe700, 0xffff, 0x7300, 0xffff, 0x6e00, 0xffff, 0x6f00, 0xffff, + 0x6c00, 0xffff, 0x8800, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0xf200, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf800, 0x051d, 0xff8a, 0x051d, + 0xfa03, 0x1d3e, 0x1d00, 0xefbf, 0xa200, 0xfeb4, 0xff00, 0xfda0, 0xff88, 0xfdc0, + 0xff02, 0xfda0, 0xdf00, 0xfe0c, 0x0f00, 0xffff, 0x0085, 0xffff, 0x391c, 0xffff, + 0xfc00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0000, 0xffff, 0x1500, 0xffff, + 0xe400, 0xffff, 0xff00, 0xffff, 0x9c00, 0xffff, 0x0500, 0xffff, 0xd900, 0xffff, + 0xff00, 0xffff, 0x9400, 0xffff, 0x0000, 0xffff, 0x0300, 0xffff, 0xc600, 0xffff, + 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, 0x7d00, 0xffff, + 0xff00, 0xffff, 0xfd00, 0xffff, 0x3c00, 0xffff, 0x0700, 0xffff, 0xdf00, 0xffff, + 0xff00, 0xffff, 0xd100, 0xffff, 0x0300, 0xffff, 0x0085, 0xffff, 0x2303, 0xffff, + 0xf200, 0xffff, 0xff00, 0xffff, 0x9e00, 0xffff, 0x0082, 0xffff, 0x5303, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0x7c00, 0xffff, 0x0084, 0xffff, 0x7405, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0x5b00, 0xffff, 0x0000, 0xffff, 0x8000, 0xffff, + 0xff82, 0xffff, 0xfd07, 0xffff, 0xa800, 0xffff, 0x1700, 0xffff, 0x0000, 0xffff, + 0xab00, 0xffff, 0xff00, 0xffff, 0xf600, 0xffff, 0x2c00, 0xffff, 0x0083, 0xffff, + 0x040f, 0xffff, 0xc600, 0xffff, 0xff00, 0xffff, 0xe600, 0xffff, 0x1600, 0xffff, + 0x0100, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, 0xd200, 0xffff, 0x0700, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x3500, 0xffff, 0xfa00, 0xffff, 0xff00, 0xffff, + 0x8700, 0xffff, 0x0088, 0xffff, 0xaa0b, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xdb00, 0xffff, 0xcf00, 0xffff, 0xd000, 0xffff, 0xcf00, 0xffff, 0xd600, 0xffff, + 0xfe00, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, 0x0e00, 0xffff, 0x0084, 0xffff, + 0x9103, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0082, 0xffff, + 0x4603, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x7500, 0xffff, 0x0083, 0xffff, + 0xbf0c, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, + 0x9d00, 0xffff, 0xff00, 0xffff, 0xef00, 0xffff, 0x2100, 0xffff, 0x0000, 0xffff, + 0x0000, 0xffff, 0x0d00, 0xffff, 0xd700, 0xffff, 0xff89, 0xffff, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, + 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, + 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x391c, 0xffff, 0xfc00, 0xffff, + 0xff00, 0xffff, 0x5e00, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x9000, 0xffff, + 0xff00, 0xffff, 0xe200, 0xffff, 0x7400, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, + 0x3800, 0xffff, 0x0000, 0xffff, 0x0300, 0xffff, 0xc600, 0xffff, 0xff00, 0xffff, + 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, 0x7d00, 0xffff, 0xff00, 0xffff, + 0xfd00, 0xffff, 0x3c00, 0xffff, 0x0700, 0xffff, 0xdf00, 0xffff, 0xff00, 0xffff, + 0xd800, 0xffff, 0x0800, 0xffff, 0x0085, 0xffff, 0x2303, 0xffff, 0xf200, 0xffff, + 0xff00, 0xffff, 0x9d00, 0xffff, 0x0082, 0xffff, 0x5003, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x8400, 0xffff, 0x0084, 0xffff, 0x7d10, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x5100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3e00, 0xffff, + 0xad00, 0xffff, 0xf800, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xb800, 0xffff, + 0x0000, 0xffff, 0xa500, 0xffff, 0xff00, 0xffff, 0xf900, 0xffff, 0x3300, 0xffff, + 0x0083, 0xffff, 0x060f, 0xffff, 0xce00, 0xffff, 0xff00, 0xffff, 0xe000, 0xffff, + 0x1000, 0xffff, 0x0200, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, 0xd200, 0xffff, + 0x0700, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3500, 0xffff, 0xfa00, 0xffff, + 0xff00, 0xffff, 0x8700, 0xffff, 0x0087, 0xffff, 0x2101, 0xffff, 0xef00, 0xffff, + 0xff89, 0xffff, 0x5300, 0xffff, 0x0083, 0xffff, 0x5703, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x9700, 0xffff, 0x0083, 0xffff, 0x4703, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x7400, 0xffff, 0x0083, 0xffff, 0xbf0f, 0xffff, 0xff00, 0xffff, + 0xdd00, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, + 0xef00, 0xffff, 0x2100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0b00, 0xffff, + 0xd500, 0xffff, 0xff00, 0xffff, 0xe100, 0xffff, 0x8200, 0xffff, 0x8485, 0xffff, + 0x8102, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, + 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, + 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x391c, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0000, 0xffff, + 0x0000, 0xffff, 0x3200, 0xffff, 0xf900, 0xffff, 0xff00, 0xffff, 0xf700, 0xffff, + 0xff00, 0xffff, 0xc100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0300, 0xffff, + 0xc600, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, + 0x7d00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0x3d00, 0xffff, 0x0000, 0xffff, + 0xc200, 0xffff, 0xff00, 0xffff, 0xfa00, 0xffff, 0x3600, 0xffff, 0x0085, 0xffff, + 0x2303, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0x9d00, 0xffff, 0x0082, 0xffff, + 0x3203, 0xffff, 0xfa00, 0xffff, 0xff00, 0xffff, 0xbb00, 0xffff, 0x0084, 0xffff, + 0xb303, 0xffff, 0xff00, 0xffff, 0xf900, 0xffff, 0x2c00, 0xffff, 0x0083, 0xffff, + 0x3308, 0xffff, 0xd900, 0xffff, 0xff00, 0xffff, 0xfa00, 0xffff, 0x2700, 0xffff, + 0x7c00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x6700, 0xffff, 0x0083, 0xffff, + 0x220f, 0xffff, 0xf000, 0xffff, 0xff00, 0xffff, 0xc000, 0xffff, 0x0000, 0xffff, + 0x0400, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, 0xd200, 0xffff, 0x0700, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x3600, 0xffff, 0xfa00, 0xffff, 0xff00, 0xffff, + 0x8700, 0xffff, 0x0087, 0xffff, 0x7204, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xa700, 0xffff, 0x6c00, 0xffff, 0x7182, 0xffff, 0x6e04, 0xffff, 0x9100, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xae00, 0xffff, 0x0082, 0xffff, 0x2704, 0xffff, + 0xea00, 0xffff, 0xff00, 0xffff, 0xcb00, 0xffff, 0x0c00, 0xffff, 0x0083, 0xffff, + 0x4303, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x8800, 0xffff, 0x0082, 0xffff, + 0x0809, 0xffff, 0xd500, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, 0x1000, 0xffff, + 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, 0xef00, 0xffff, 0x2100, 0xffff, + 0x0082, 0xffff, 0xbc03, 0xffff, 0xff00, 0xffff, 0xde00, 0xffff, 0x0600, 0xffff, + 0x0086, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, + 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, + 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x3903, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0082, 0xffff, + 0xb800, 0xffff, 0xff82, 0xffff, 0x641b, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0x0300, 0xffff, 0xc600, 0xffff, 0xff00, 0xffff, 0xe200, 0xffff, 0x1200, 0xffff, + 0x0000, 0xffff, 0x7d00, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0x3e00, 0xffff, + 0x0000, 0xffff, 0x7100, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xc700, 0xffff, + 0x2100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0900, 0xffff, 0x4900, 0xffff, + 0x0800, 0xffff, 0x2100, 0xffff, 0xf200, 0xffff, 0xff00, 0xffff, 0x9d00, 0xffff, + 0x0082, 0xffff, 0x0504, 0xffff, 0xc900, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x6600, 0xffff, 0x0082, 0xffff, 0x5a06, 0xffff, 0xfb00, 0xffff, 0xff00, 0xffff, + 0xbf00, 0xffff, 0x0000, 0xffff, 0x3500, 0xffff, 0x3400, 0xffff, 0x0082, 0xffff, + 0x961e, 0xffff, 0xff00, 0xffff, 0xfc00, 0xffff, 0x2e00, 0xffff, 0x3200, 0xffff, + 0xfc00, 0xffff, 0xff00, 0xffff, 0xdd00, 0xffff, 0x2b00, 0xffff, 0x0000, 0xffff, + 0x0000, 0xffff, 0x0600, 0xffff, 0xa100, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x6b00, 0xffff, 0x0000, 0xffff, 0x0500, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, + 0xd200, 0xffff, 0x0700, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x3100, 0xffff, + 0xfa00, 0xffff, 0xff00, 0xffff, 0xb100, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0x0300, 0xffff, 0x0083, 0xffff, 0x0404, 0xffff, 0xca00, 0xffff, 0xff00, 0xffff, + 0xf500, 0xffff, 0x2600, 0xffff, 0x0084, 0xffff, 0x080a, 0xffff, 0xdc00, 0xffff, + 0xff00, 0xffff, 0xf100, 0xffff, 0x2400, 0xffff, 0x0000, 0xffff, 0x0700, 0xffff, + 0xc300, 0xffff, 0xff00, 0xffff, 0xed00, 0xffff, 0x3100, 0xffff, 0x0084, 0xffff, + 0x2a10, 0xffff, 0xf700, 0xffff, 0xff00, 0xffff, 0xd600, 0xffff, 0x1500, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x6900, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xdd00, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, + 0xef00, 0xffff, 0x2100, 0xffff, 0x0082, 0xffff, 0x7403, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x8700, 0xffff, 0x0083, 0xffff, 0x1604, 0xffff, 0x3500, 0xffff, + 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, + 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, + 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, + 0x3903, 0xffff, 0xfc00, 0xffff, 0xff00, 0xffff, 0x5e00, 0xffff, 0x0082, 0xffff, + 0x571f, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xe400, 0xffff, 0x1500, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x0300, 0xffff, 0xc600, 0xffff, 0xff00, 0xffff, + 0xe200, 0xffff, 0x1200, 0xffff, 0x0000, 0xffff, 0x7d00, 0xffff, 0xff00, 0xffff, + 0xfd00, 0xffff, 0x3e00, 0xffff, 0x0000, 0xffff, 0x0a00, 0xffff, 0xc300, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xed00, 0xffff, 0xb100, 0xffff, 0xa300, 0xffff, + 0xd900, 0xffff, 0xe400, 0xffff, 0x0d00, 0xffff, 0x2000, 0xffff, 0xf300, 0xffff, + 0xff00, 0xffff, 0x9e00, 0xffff, 0x0083, 0xffff, 0x462f, 0xffff, 0xfb00, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xc500, 0xffff, 0xa000, 0xffff, 0xbd00, 0xffff, + 0xfc00, 0xffff, 0xff00, 0xffff, 0xf100, 0xffff, 0x3700, 0xffff, 0x0000, 0xffff, + 0x6f00, 0xffff, 0xff00, 0xffff, 0xba00, 0xffff, 0x8b00, 0xffff, 0x9f00, 0xffff, + 0xf100, 0xffff, 0xff00, 0xffff, 0xd000, 0xffff, 0x0900, 0xffff, 0x0000, 0xffff, + 0x9300, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xef00, 0xffff, 0xb000, 0xffff, + 0xa200, 0xffff, 0xd500, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xbc00, 0xffff, + 0x0800, 0xffff, 0x0000, 0xffff, 0x0500, 0xffff, 0xd200, 0xffff, 0xff00, 0xffff, + 0xd200, 0xffff, 0x0700, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x1400, 0xffff, + 0xe500, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0xb900, 0xffff, 0xb500, 0xffff, + 0x3a00, 0xffff, 0x0083, 0xffff, 0x3c03, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xbc00, 0xffff, 0x0086, 0xffff, 0x8d09, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0x7600, 0xffff, 0x0000, 0xffff, 0x8d00, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, + 0xee00, 0xffff, 0xc400, 0xffff, 0xc982, 0xffff, 0xd112, 0xffff, 0x7100, 0xffff, + 0x0000, 0xffff, 0xc000, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xd700, 0xffff, + 0x9400, 0xffff, 0xb300, 0xffff, 0xff00, 0xffff, 0xfd00, 0xffff, 0xff00, 0xffff, + 0xdd00, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0x9d00, 0xffff, 0xff00, 0xffff, + 0xef00, 0xffff, 0x2100, 0xffff, 0x0082, 0xffff, 0x110c, 0xffff, 0xd400, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0xc800, 0xffff, 0x8800, 0xffff, 0x7e00, 0xffff, + 0xa000, 0xffff, 0xed00, 0xffff, 0xa000, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, + 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, + 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x3a03, 0xffff, 0xff00, 0xffff, + 0xff00, 0xffff, 0x6100, 0xffff, 0x0082, 0xffff, 0x0d03, 0xffff, 0xdc00, 0xffff, + 0xff00, 0xffff, 0x9300, 0xffff, 0x0082, 0xffff, 0x030d, 0xffff, 0xcb00, 0xffff, + 0xff00, 0xffff, 0xe800, 0xffff, 0x1300, 0xffff, 0x0000, 0xffff, 0x8000, 0xffff, + 0xff00, 0xffff, 0xff00, 0xffff, 0x4000, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, + 0x1700, 0xffff, 0xb000, 0xffff, 0xff84, 0xffff, 0xd505, 0xffff, 0x0700, 0xffff, + 0x2100, 0xffff, 0xf800, 0xffff, 0xff00, 0xffff, 0xa200, 0xffff, 0x0084, 0xffff, + 0x5101, 0xffff, 0xe100, 0xffff, 0xff84, 0xffff, 0xd604, 0xffff, 0x3f00, 0xffff, + 0x0000, 0xffff, 0x0000, 0xffff, 0x6400, 0xffff, 0xff84, 0xffff, 0xd906, 0xffff, + 0x3400, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0500, 0xffff, 0x8e00, 0xffff, + 0xf700, 0xffff, 0xff84, 0xffff, 0xa908, 0xffff, 0x1400, 0xffff, 0x0000, 0xffff, + 0x0000, 0xffff, 0x0500, 0xffff, 0xd700, 0xffff, 0xff00, 0xffff, 0xd700, 0xffff, + 0x0800, 0xffff, 0x0082, 0xffff, 0x7400, 0xffff, 0xff83, 0xffff, 0x4400, 0xffff, + 0x0083, 0xffff, 0x9c03, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0x6b00, 0xffff, + 0x0086, 0xffff, 0x3a05, 0xffff, 0xff00, 0xffff, 0xff00, 0xffff, 0xd000, 0xffff, + 0x1a00, 0xffff, 0xe900, 0xffff, 0xff87, 0xffff, 0x9903, 0xffff, 0x0000, 0xffff, + 0x2d00, 0xffff, 0xd600, 0xffff, 0xff83, 0xffff, 0x8a09, 0xffff, 0xc700, 0xffff, + 0xff00, 0xffff, 0xe200, 0xffff, 0x1000, 0xffff, 0x0000, 0xffff, 0xa100, 0xffff, + 0xff00, 0xffff, 0xf400, 0xffff, 0x2200, 0xffff, 0x0083, 0xffff, 0x2701, 0xffff, + 0xc800, 0xffff, 0xff85, 0xffff, 0x7a03, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, + 0xf500, 0x355e, 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, + 0xdb01, 0xfe2d, 0x0e00, 0xffff, 0x0085, 0xffff, 0x1103, 0xffff, 0x4e00, 0xffff, + 0x5100, 0xffff, 0x1d00, 0xffff, 0x0083, 0xffff, 0x3302, 0xffff, 0x5400, 0xffff, + 0x1800, 0xffff, 0x0082, 0xffff, 0x0109, 0xffff, 0x3e00, 0xffff, 0x5200, 0xffff, + 0x4600, 0xffff, 0x0500, 0xffff, 0x0000, 0xffff, 0x2700, 0xffff, 0x5200, 0xffff, + 0x4e00, 0xffff, 0x1300, 0xffff, 0x0083, 0xffff, 0x3c0a, 0xffff, 0x7a00, 0xffff, + 0x9400, 0xffff, 0x8b00, 0xffff, 0x6400, 0xffff, 0x2000, 0xffff, 0x0000, 0xffff, + 0x0a00, 0xffff, 0x4b00, 0xffff, 0x5200, 0xffff, 0x3100, 0xffff, 0x0085, 0xffff, + 0x1106, 0xffff, 0x5800, 0xffff, 0x8700, 0xffff, 0x9400, 0xffff, 0x8300, 0xffff, + 0x4f00, 0xffff, 0x0b00, 0xffff, 0x0082, 0xffff, 0x0c06, 0xffff, 0x4b00, 0xffff, + 0x7d00, 0xffff, 0x9400, 0xffff, 0x8800, 0xffff, 0x5800, 0xffff, 0x0e00, 0xffff, + 0x0084, 0xffff, 0x2905, 0xffff, 0x6d00, 0xffff, 0x8f00, 0xffff, 0x9100, 0xffff, + 0x7400, 0xffff, 0x3500, 0xffff, 0x0083, 0xffff, 0x0104, 0xffff, 0x4100, 0xffff, + 0x5200, 0xffff, 0x4100, 0xffff, 0x0200, 0xffff, 0x0083, 0xffff, 0x4404, 0xffff, + 0x8800, 0xffff, 0x9200, 0xffff, 0x6e00, 0xffff, 0x1100, 0xffff, 0x0082, 0xffff, + 0x0104, 0xffff, 0x4000, 0xffff, 0x5100, 0xffff, 0x4f00, 0xffff, 0x1000, 0xffff, + 0x0086, 0xffff, 0x0406, 0xffff, 0x4600, 0xffff, 0x5000, 0xffff, 0x4c00, 0xffff, + 0x1100, 0xffff, 0x4500, 0xffff, 0x5000, 0xffff, 0x4e85, 0xffff, 0x5212, 0xffff, + 0x2d00, 0xffff, 0x0000, 0xffff, 0x0000, 0xffff, 0x0f00, 0xffff, 0x5300, 0xffff, + 0x7400, 0xffff, 0x6900, 0xffff, 0x2e00, 0xffff, 0x0000, 0xffff, 0x3900, 0xffff, + 0x5200, 0xffff, 0x4500, 0xffff, 0x0500, 0xffff, 0x0000, 0xffff, 0x3100, 0xffff, + 0x5200, 0xffff, 0x4a00, 0xffff, 0x0a00, 0xffff, 0x0084, 0xffff, 0x060a, 0xffff, + 0x4a00, 0xffff, 0x8100, 0xffff, 0x9400, 0xffff, 0x8a00, 0xffff, 0x6700, 0xffff, + 0x2d00, 0xffff, 0x0100, 0xffff, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, + 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, + 0x0e00, 0xffff, 0x00ff, 0xffff, 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, + 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, + 0x0e00, 0xffff, 0x00ff, 0xffff, 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, + 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, + 0x0e00, 0xffff, 0x00ff, 0xffff, 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0xf300, 0x053d, 0xff89, 0x053d, 0xff04, 0x051d, 0xf500, 0x355e, + 0x1d00, 0xefbf, 0x9f00, 0xfed4, 0xff00, 0xfda0, 0xff89, 0xfdc0, 0xdb01, 0xfe2d, + 0x0e00, 0xffff, 0x00ff, 0xffff, 0x009d, 0xffff, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0xed00, 0x053d, 0xfa89, 0x053d, 0xfc04, 0x051d, 0xf000, 0x355e, + 0x1c00, 0xefbf, 0x9c00, 0xfed4, 0xff00, 0xfda0, 0xfa88, 0xfdc0, 0xff02, 0xfdc0, + 0xd700, 0xfe2d, 0x0e00, 0xffff, 0x00ff, 0xffff, 0x009d, 0xffff, 0x0001, 0x0000, + 0x0000, 0x0000, 0x00ff, 0x0000, 0x00bc, 0x0000, 0x00ff, 0x0000, 0x00bc, 0x0000 + +}; +GX_CONST GX_PIXELMAP MAIN_DISPLAY_THEME_1_MS_AZURE_LOGO_pixelmap = +{ + 0x00000001, /* major version */ + 0x00000000, /* minor version */ + GX_PIXELMAP_COMPRESSED|GX_PIXELMAP_ALPHA, /* flags */ + GX_COLOR_FORMAT_565RGB, /* Format */ + (GX_UBYTE *) MAIN_DISPLAY_THEME_1_MS_AZURE_LOGO_pixelmap_data, + sizeof(MAIN_DISPLAY_THEME_1_MS_AZURE_LOGO_pixelmap_data), /* the size of pixelmap_data*/ + NULL, + 0, /* auxiliary data size */ + 0x00, /* used for transparent iamges */ + 189, /* width in pixel */ + 30 /* height in pixel */ +}; + +/* Pixelmap Table */ + + +GX_CONST GX_PIXELMAP *main_display_theme_1_pixelmap_table[] = +{ + GX_NULL, + &MAIN_DISPLAY_THEME_1_RADIO_ON_pixelmap, + &MAIN_DISPLAY_THEME_1_RADIO_OFF_pixelmap, + &MAIN_DISPLAY_THEME_1_CHECKBOX_ON_pixelmap, + &MAIN_DISPLAY_THEME_1_CHECKBOX_OFF_pixelmap, + &MAIN_DISPLAY_THEME_1_MS_AZURE_LOGO_pixelmap +}; + +/* String values */ + +GX_CONST GX_UBYTE main_display_STRING_1_English[] = "Hello World!"; + +/* String Table for main_display language English */ + +GX_CONST GX_STRING main_display_English_string_table[2] = +{ + {GX_NULL, 0}, + {(GX_CONST GX_CHAR *)main_display_STRING_1_English, sizeof(main_display_STRING_1_English) - 1} +}; + +/* Language Table */ + + +GX_CONST GX_STRING *main_display_language_table[1] = +{ + main_display_English_string_table, +}; + +GX_THEME main_display_theme_1 = +{ + (GX_COLOR *) main_display_theme_1_color_table, + (GX_FONT **) main_display_theme_1_font_table, + (GX_PIXELMAP **) main_display_theme_1_pixelmap_table, + NULL, + { + 20, /* scroll width */ + 18, /* thumb width */ + 20, /* thumb travel min */ + 20, /* thumb travel max */ + 4, /* thumb border style */ + 0, /* scroll fill pixelmap */ + 0, /* scroll thumb pixelmap */ + 0, /* scroll up pixelmap */ + 0, /* scroll down pixelmap */ + GX_COLOR_ID_CANVAS, /* scroll thumb color */ + GX_COLOR_ID_CANVAS, /* scroll thumb border color */ + GX_COLOR_ID_SCROLL_BUTTON, /* scroll button color */ + }, + { + 20, /* scroll width */ + 18, /* thumb width */ + 20, /* thumb travel min */ + 20, /* thumb travel max */ + 4, /* thumb border style */ + 0, /* scroll fill pixelmap */ + 0, /* scroll thumb pixelmap */ + 0, /* scroll up pixelmap */ + 0, /* scroll down pixelmap */ + GX_COLOR_ID_CANVAS, /* scroll thumb color */ + GX_COLOR_ID_CANVAS, /* scroll thumb border color */ + GX_COLOR_ID_SCROLL_BUTTON, /* scroll button color */ + }, + GX_SCROLLBAR_RELATIVE_THUMB|GX_SCROLLBAR_END_BUTTONS|GX_SCROLLBAR_VERTICAL, + GX_SCROLLBAR_RELATIVE_THUMB|GX_SCROLLBAR_END_BUTTONS|GX_SCROLLBAR_HORIZONTAL, + 30, /* color table size */ + 4, /* font table size */ + 6, /* pixelmap table size */ + 0 /* palette size */ + +}; +GX_CONST GX_THEME *main_display_theme_table[1] = +{ + &main_display_theme_1 +}; + diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.h b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.h new file mode 100644 index 00000000..a247f8a5 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_resources.h @@ -0,0 +1,51 @@ +/*******************************************************************************/ +/* This file is auto-generated by Azure RTOS GUIX Studio. Do not edit this */ +/* file by hand. Modifications to this file should only be made by running */ +/* the Azure RTOS GUIX Studio application and re-generating the application */ +/* resource file(s). For more information please refer to the Azure RTOS GUIX */ +/* Studio User Guide, or visit our web site at azure.com/rtos */ +/* */ +/* GUIX Studio Revision 6.2.1.5 (Preview Version) */ +/* Date (dd.mm.yyyy): 17. 8.2023 Time (hh:mm): 15:56 */ +/*******************************************************************************/ + + +#ifndef _DEMO_GUIX_BINRES_STANDALONE_MAIN_DISPLAY_RESOURCES_H_ +#define _DEMO_GUIX_BINRES_STANDALONE_MAIN_DISPLAY_RESOURCES_H_ + +#include "gx_api.h" + +/* Display and theme definitions */ + +#define MAIN_DISPLAY 0 +#define MAIN_DISPLAY_COLOR_FORMAT GX_COLOR_FORMAT_565RGB +#define MAIN_DISPLAY_X_RESOLUTION 640 +#define MAIN_DISPLAY_Y_RESOLUTION 480 +#define MAIN_DISPLAY_THEME_1 0 +#define MAIN_DISPLAY_THEME_TABLE_SIZE 1 + +/* Language definitions */ + +#define LANGUAGE_ENGLISH 0 +#define MAIN_DISPLAY_LANGUAGE_TABLE_SIZE 1 + +/* Color ID definitions */ + +#define GX_COLOR_ID_BLUE 29 +#define MAIN_DISPLAY_COLOR_TABLE_SIZE 30 + +/* Font ID definitions */ + +#define MAIN_DISPLAY_FONT_TABLE_SIZE 4 + +/* Pixelmap ID definitions */ + +#define GX_PIXELMAP_ID_MS_AZURE_LOGO 5 +#define MAIN_DISPLAY_PIXELMAP_TABLE_SIZE 6 + +/* String Ids */ + +#define GX_STRING_ID_STRING_1 1 +#define MAIN_DISPLAY_STRING_TABLE_SIZE 2 + +#endif /* sentry */ diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.c b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.c new file mode 100644 index 00000000..afa9f30b --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.c @@ -0,0 +1,425 @@ +/*******************************************************************************/ +/* This file is auto-generated by Azure RTOS GUIX Studio. Do not edit this */ +/* file by hand. Modifications to this file should only be made by running */ +/* the Azure RTOS GUIX Studio application and re-generating the application */ +/* specification file(s). For more information please refer to the Azure RTOS */ +/* GUIX Studio User Guide, or visit our web site at azure.com/rtos */ +/* */ +/* GUIX Studio Revision 6.2.1.5 (Preview Version) */ +/* Date (dd.mm.yyyy): 17. 8.2023 Time (hh:mm): 15:56 */ +/*******************************************************************************/ + + +#define GUIX_STUDIO_GENERATED_FILE +#include +#include "demo_guix_binres_standalone_resources.h" +#include "demo_guix_binres_standalone_specifications.h" + +static GX_WIDGET *gx_studio_nested_widget_create(GX_BYTE *control, GX_CONST GX_STUDIO_WIDGET *definition, GX_WIDGET *parent); +MAIN_SCREEN_CONTROL_BLOCK main_screen; +GX_DISPLAY main_display_control_block; +GX_WINDOW_ROOT main_display_root_window; +GX_CANVAS main_display_canvas_control_block; +ULONG main_display_canvas_memory[153600]; + +extern GX_CONST GX_THEME *main_display_theme_table[]; +extern GX_CONST GX_STRING *main_display_language_table[]; + +GX_STUDIO_DISPLAY_INFO demo_guix_binres_standalone_display_table[1] = +{ + { + "main_display", + "main_display_canvas", + main_display_theme_table, + main_display_language_table, + MAIN_DISPLAY_THEME_TABLE_SIZE, + MAIN_DISPLAY_LANGUAGE_TABLE_SIZE, + MAIN_DISPLAY_STRING_TABLE_SIZE, + 640, /* x resolution */ + 480, /* y resolution */ + &main_display_control_block, + &main_display_canvas_control_block, + &main_display_root_window, + main_display_canvas_memory, /* canvas memory area */ + 614400, /* canvas memory size in bytes */ + GX_SCREEN_ROTATION_NONE /* rotation angle */ + } +}; + + +UINT gx_studio_icon_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent) +{ + UINT status; + GX_ICON *icon = (GX_ICON *) control_block; + GX_ICON_PROPERTIES *props = (GX_ICON_PROPERTIES *) info->properties; + status = gx_icon_create(icon, info->widget_name, parent, props->normal_pixelmap_id, info->style, info->widget_id, info->size.gx_rectangle_left, info->size.gx_rectangle_top); + if (props->selected_pixelmap_id) + { + gx_icon_pixelmap_set(icon, props->normal_pixelmap_id, props->selected_pixelmap_id); + } + else + { + gx_widget_resize((GX_WIDGET *)icon, (GX_RECTANGLE *)&info->size); + } + return status; +} + +UINT gx_studio_prompt_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent) +{ + UINT status; + GX_PROMPT *prompt = (GX_PROMPT *) control_block; + GX_PROMPT_PROPERTIES *props = (GX_PROMPT_PROPERTIES *) info->properties; + status = gx_prompt_create(prompt, info->widget_name, parent, props->string_id, info->style, info->widget_id, &info->size); + if (status == GX_SUCCESS) + { + gx_prompt_font_set(prompt, props->font_id); +#if defined(GUIX_5_4_0_COMPATIBILITY) + gx_prompt_text_color_set(prompt, props->normal_text_color_id, props->selected_text_color_id); +#else + gx_prompt_text_color_set(prompt, props->normal_text_color_id, props->selected_text_color_id, props->disabled_text_color_id); +#endif + } + return status; +} + +UINT gx_studio_window_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent) +{ + UINT status; + GX_WINDOW *window = (GX_WINDOW *) control_block; + GX_WINDOW_PROPERTIES *props = (GX_WINDOW_PROPERTIES *) info->properties; + status = gx_window_create(window, info->widget_name, parent, info->style, info->widget_id, &info->size); + if (status == GX_SUCCESS) + { + if (props->wallpaper_id) + { + gx_window_wallpaper_set(window, props->wallpaper_id, info->style & GX_STYLE_TILE_WALLPAPER); + } + } + return status; +} +GX_WINDOW_PROPERTIES main_screen_properties = +{ + 0 /* wallpaper pixelmap id */ +}; +GX_ICON_PROPERTIES main_screen_express_logo_properties = +{ + GX_PIXELMAP_ID_MS_AZURE_LOGO, /* normal pixelmap id */ + 0 /* selected pixelmap id */ +}; +GX_WINDOW_PROPERTIES main_screen_pixelmap_window_properties = +{ + 0 /* wallpaper pixelmap id */ +}; +GX_PROMPT_PROPERTIES main_screen_prompt_properties = +{ + GX_STRING_ID_STRING_1, /* string id */ + GX_FONT_ID_SYSTEM, /* font id */ + GX_COLOR_ID_TEXT, /* normal text color */ + GX_COLOR_ID_SELECTED_TEXT, /* selected text color */ + GX_COLOR_ID_DISABLED_TEXT /* disabled text color */ +}; + +GX_CONST GX_STUDIO_WIDGET main_screen_prompt_define = +{ + "prompt", + GX_TYPE_PROMPT, /* widget type */ + GX_ID_NONE, /* widget id */ + #if defined(GX_WIDGET_USER_DATA) + 0, /* user data */ + #endif + GX_STYLE_BORDER_THIN|GX_STYLE_TRANSPARENT|GX_STYLE_ENABLED|GX_STYLE_TEXT_CENTER, /* style flags */ + GX_STATUS_ACCEPTS_FOCUS, /* status flags */ + sizeof(GX_PROMPT), /* control block size */ + GX_COLOR_ID_WIDGET_FILL, /* normal color id */ + GX_COLOR_ID_SELECTED_FILL, /* selected color id */ + GX_COLOR_ID_DISABLED_FILL, /* disabled color id */ + gx_studio_prompt_create, /* create function */ + (VOID (*)(GX_WIDGET *)) text_draw, /* drawing function override */ + GX_NULL, /* event function override */ + {388, 107, 541, 151}, /* widget size */ + GX_NULL, /* no next widget */ + GX_NULL, /* no child widgets */ + offsetof(MAIN_SCREEN_CONTROL_BLOCK, main_screen_prompt), /* control block */ + (void *) &main_screen_prompt_properties /* extended properties */ +}; + +GX_CONST GX_STUDIO_WIDGET main_screen_pixelmap_window_define = +{ + "pixelmap_window", + GX_TYPE_WINDOW, /* widget type */ + GX_ID_NONE, /* widget id */ + #if defined(GX_WIDGET_USER_DATA) + 0, /* user data */ + #endif + GX_STYLE_BORDER_THIN|GX_STYLE_TRANSPARENT|GX_STYLE_ENABLED, /* style flags */ + GX_STATUS_ACCEPTS_FOCUS, /* status flags */ + sizeof(GX_WINDOW), /* control block size */ + GX_COLOR_ID_WINDOW_FILL, /* normal color id */ + GX_COLOR_ID_WINDOW_FILL, /* selected color id */ + GX_COLOR_ID_DISABLED_FILL, /* disabled color id */ + gx_studio_window_create, /* create function */ + (VOID (*)(GX_WIDGET *)) pixelmap_window_draw, /* drawing function override */ + GX_NULL, /* event function override */ + {114, 98, 310, 366}, /* widget size */ + &main_screen_prompt_define, /* next widget definition */ + GX_NULL, /* no child widgets */ + offsetof(MAIN_SCREEN_CONTROL_BLOCK, main_screen_pixelmap_window), /* control block */ + (void *) &main_screen_pixelmap_window_properties /* extended properties */ +}; + +GX_CONST GX_STUDIO_WIDGET main_screen_express_logo_define = +{ + "express_logo", + GX_TYPE_ICON, /* widget type */ + GX_ID_NONE, /* widget id */ + #if defined(GX_WIDGET_USER_DATA) + 0, /* user data */ + #endif + GX_STYLE_BORDER_NONE|GX_STYLE_TRANSPARENT|GX_STYLE_ENABLED|GX_STYLE_HALIGN_LEFT|GX_STYLE_VALIGN_TOP, /* style flags */ + GX_STATUS_ACCEPTS_FOCUS, /* status flags */ + sizeof(GX_ICON), /* control block size */ + GX_COLOR_ID_WIDGET_FILL, /* normal color id */ + GX_COLOR_ID_SELECTED_FILL, /* selected color id */ + GX_COLOR_ID_WIDGET_FILL, /* disabled color id */ + gx_studio_icon_create, /* create function */ + GX_NULL, /* drawing function override */ + GX_NULL, /* event function override */ + {18, 18, 206, 47}, /* widget size */ + &main_screen_pixelmap_window_define, /* next widget definition */ + GX_NULL, /* no child widgets */ + offsetof(MAIN_SCREEN_CONTROL_BLOCK, main_screen_express_logo), /* control block */ + (void *) &main_screen_express_logo_properties /* extended properties */ +}; + +GX_CONST GX_STUDIO_WIDGET main_screen_define = +{ + "main_screen", + GX_TYPE_WINDOW, /* widget type */ + GX_ID_NONE, /* widget id */ + #if defined(GX_WIDGET_USER_DATA) + 0, /* user data */ + #endif + GX_STYLE_BORDER_NONE, /* style flags */ + GX_STATUS_ACCEPTS_FOCUS, /* status flags */ + sizeof(MAIN_SCREEN_CONTROL_BLOCK), /* control block size */ + GX_COLOR_ID_CANVAS, /* normal color id */ + GX_COLOR_ID_CANVAS, /* selected color id */ + GX_COLOR_ID_CANVAS, /* disabled color id */ + gx_studio_window_create, /* create function */ + GX_NULL, /* drawing function override */ + GX_NULL, /* event function override */ + {0, 0, 639, 479}, /* widget size */ + GX_NULL, /* next widget */ + &main_screen_express_logo_define, /* child widget */ + 0, /* control block */ + (void *) &main_screen_properties /* extended properties */ +}; +GX_CONST GX_STUDIO_WIDGET_ENTRY demo_guix_binres_standalone_widget_table[] = +{ + { &main_screen_define, (GX_WIDGET *) &main_screen }, + {GX_NULL, GX_NULL} +}; + +static GX_WIDGET *gx_studio_nested_widget_create(GX_BYTE *control, GX_CONST GX_STUDIO_WIDGET *definition, GX_WIDGET *parent) +{ + UINT status = GX_SUCCESS; + GX_WIDGET *widget = GX_NULL; + GX_VALUE list_count = 0; + GX_VALUE list_total_count = 0; + + if(parent && (parent->gx_widget_type == GX_TYPE_MENU)) + { + list_total_count = ((GX_MENU *)parent)->gx_menu_list_total_count; + } + + while(definition && status == GX_SUCCESS) + { + if (definition->create_function) + { + if (definition->style & GX_STYLE_DYNAMICALLY_ALLOCATED) + { + status = gx_widget_allocate(&widget, definition->control_block_size); + if (status != GX_SUCCESS) + { + return GX_NULL; + } + } + else + { + if (control == GX_NULL) + { + return GX_NULL; + } + widget = (GX_WIDGET *) (control + definition->control_block_offset); + } + + status = definition->create_function(definition, widget, parent); + + if(list_count < list_total_count) + { + gx_menu_insert((GX_MENU *)parent, widget); + ((GX_MENU *)parent)->gx_menu_list_total_count--; + list_count++; + } + + if (status == GX_SUCCESS) + { + if (definition->widget_type != GX_TYPE_TEMPLATE) + { +#if defined(GUIX_5_4_0_COMPATIBILITY) + gx_widget_fill_color_set(widget, definition->normal_fill_color_id, definition->selected_fill_color_id); +#else + gx_widget_fill_color_set(widget, definition->normal_fill_color_id, definition->selected_fill_color_id, definition->disabled_fill_color_id); +#endif + } + + if (!(definition->status & GX_STATUS_ACCEPTS_FOCUS)) + { + gx_widget_status_remove(widget, GX_STATUS_ACCEPTS_FOCUS); + } + + if (definition->draw_function) + { + gx_widget_draw_set(widget, definition->draw_function); + } + if (definition->event_function) + { + gx_widget_event_process_set(widget, definition->event_function); + } + + #if defined(GX_WIDGET_USER_DATA) + widget->gx_widget_user_data = definition->user_data; + #endif + + if (definition->child_widget) + { + gx_studio_nested_widget_create(control, definition->child_widget, widget); + } + } + definition = definition->next_widget; + } + } + return widget; +} + +GX_WIDGET *gx_studio_widget_create(GX_BYTE *control, GX_CONST GX_STUDIO_WIDGET *definition, GX_WIDGET *parent) +{ + GX_WIDGET *widget; + widget = gx_studio_nested_widget_create(control, definition, GX_NULL); + + if (parent && widget) + { + gx_widget_attach(parent, widget); + } + return widget; +} + +UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget) +{ + UINT status = GX_FAILURE; + GX_CONST GX_STUDIO_WIDGET_ENTRY *entry = demo_guix_binres_standalone_widget_table; + GX_WIDGET *widget = GX_NULL; + + while(entry->widget_information) + { + if (!strcmp(name, entry->widget_information->widget_name)) + { + widget = gx_studio_widget_create((GX_BYTE *) entry->widget, entry->widget_information, parent); + if (widget) + { + status = GX_SUCCESS; + } + break; + } + entry++; + } + + if (new_widget) + { + *new_widget = widget; + } + return status; +} + + +UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *), + GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root) +{ + GX_CONST GX_THEME *theme_ptr; + GX_RECTANGLE size; + + GX_STUDIO_DISPLAY_INFO *display_info = &demo_guix_binres_standalone_display_table[display]; + + +/* create the requested display */ + + gx_display_create(display_info->display, + display_info->name, + driver, + (GX_VALUE) display_info->x_resolution, + (GX_VALUE) display_info->y_resolution); + + +/* install the request theme */ + + if(display_info->theme_table) + { + theme_ptr = display_info->theme_table[theme]; + if(theme_ptr) + { + gx_display_color_table_set(display_info->display, theme_ptr->theme_color_table, theme_ptr->theme_color_table_size); + +/* install the color palette if required */ + if (display_info->display->gx_display_driver_palette_set && + theme_ptr->theme_palette != NULL) + { + display_info->display->gx_display_driver_palette_set(display_info->display, theme_ptr->theme_palette, theme_ptr->theme_palette_size); + } + + gx_display_font_table_set(display_info->display, theme_ptr->theme_font_table, theme_ptr->theme_font_table_size); + gx_display_pixelmap_table_set(display_info->display, theme_ptr->theme_pixelmap_table, theme_ptr->theme_pixelmap_table_size); + gx_system_scroll_appearance_set(theme_ptr->theme_vertical_scroll_style, (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_vertical_scrollbar_appearance); + gx_system_scroll_appearance_set(theme_ptr->theme_horizontal_scroll_style, (GX_SCROLLBAR_APPEARANCE *) &theme_ptr->theme_horizontal_scrollbar_appearance); + } + } + +/* Install the language table. */ + + if(display_info->language_table) + { + gx_display_language_table_set_ext(display_info->display, display_info->language_table, (GX_UBYTE) display_info->language_table_size, display_info->string_table_size); + gx_display_active_language_set(display_info->display, language); + } + +/* Set screen rotation angle. */ + + display_info->display->gx_display_rotation_angle = display_info->rotation_angle; + +/* create the canvas for this display */ + + gx_canvas_create(display_info->canvas, + display_info->canvas_name, + display_info->display, + GX_CANVAS_MANAGED | GX_CANVAS_VISIBLE, + display_info->x_resolution, + display_info->y_resolution, + display_info->canvas_memory, + display_info->canvas_memory_size); + +/* Create the root window for this canvas */ + + gx_utility_rectangle_define(&size, + 0, 0, + (GX_VALUE) (display_info->x_resolution - 1), + (GX_VALUE) (display_info->y_resolution - 1)); + + gx_window_root_create(display_info->root_window, + display_info->name, + display_info->canvas, GX_STYLE_NONE, 0, &size); + if (return_root) + { + *return_root = display_info->root_window; + } + return GX_SUCCESS; +} +#undef GUIX_STUDIO_GENERATED_FILE diff --git a/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.h b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.h new file mode 100644 index 00000000..cf5a70f0 --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/demo_guix_binres_standalone_specifications.h @@ -0,0 +1,150 @@ +/*******************************************************************************/ +/* This file is auto-generated by Azure RTOS GUIX Studio. Do not edit this */ +/* file by hand. Modifications to this file should only be made by running */ +/* the Azure RTOS GUIX Studio application and re-generating the application */ +/* specification file(s). For more information please refer to the Azure RTOS */ +/* GUIX Studio User Guide, or visit our web site at azure.com/rtos */ +/* */ +/* GUIX Studio Revision 6.2.1.5 (Preview Version) */ +/* Date (dd.mm.yyyy): 17. 8.2023 Time (hh:mm): 15:56 */ +/*******************************************************************************/ + + +#ifndef _DEMO_GUIX_BINRES_STANDALONE_SPECIFICATIONS_H_ +#define _DEMO_GUIX_BINRES_STANDALONE_SPECIFICATIONS_H_ + +#include "gx_api.h" + +/* Determine if C++ compiler is being used, if so use standard C. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Define widget ids */ + + + +/* Define animation ids */ + +#define GX_NEXT_ANIMATION_ID 1 + + +/* Define user event ids */ + +#define GX_NEXT_USER_EVENT_ID GX_FIRST_USER_EVENT + + +/* Declare properties structures for each utilized widget type */ + +typedef struct GX_STUDIO_WIDGET_STRUCT +{ + GX_CHAR *widget_name; + USHORT widget_type; + USHORT widget_id; + #if defined(GX_WIDGET_USER_DATA) + INT user_data; + #endif + ULONG style; + ULONG status; + ULONG control_block_size; + GX_RESOURCE_ID normal_fill_color_id; + GX_RESOURCE_ID selected_fill_color_id; + GX_RESOURCE_ID disabled_fill_color_id; + UINT (*create_function) (GX_CONST struct GX_STUDIO_WIDGET_STRUCT *, GX_WIDGET *, GX_WIDGET *); + void (*draw_function) (GX_WIDGET *); + UINT (*event_function) (GX_WIDGET *, GX_EVENT *); + GX_RECTANGLE size; + GX_CONST struct GX_STUDIO_WIDGET_STRUCT *next_widget; + GX_CONST struct GX_STUDIO_WIDGET_STRUCT *child_widget; + ULONG control_block_offset; + GX_CONST void *properties; +} GX_STUDIO_WIDGET; + +typedef struct +{ + GX_CONST GX_STUDIO_WIDGET *widget_information; + GX_WIDGET *widget; +} GX_STUDIO_WIDGET_ENTRY; + +typedef struct +{ + GX_RESOURCE_ID normal_pixelmap_id; + GX_RESOURCE_ID selected_pixelmap_id; +} GX_ICON_PROPERTIES; + +typedef struct +{ + GX_RESOURCE_ID string_id; + GX_RESOURCE_ID font_id; + GX_RESOURCE_ID normal_text_color_id; + GX_RESOURCE_ID selected_text_color_id; + GX_RESOURCE_ID disabled_text_color_id; +} GX_PROMPT_PROPERTIES; + +typedef struct +{ + GX_RESOURCE_ID wallpaper_id; +} GX_WINDOW_PROPERTIES; + + +/* Declare top-level control blocks */ + +typedef struct MAIN_SCREEN_CONTROL_BLOCK_STRUCT +{ + GX_WINDOW_MEMBERS_DECLARE + GX_ICON main_screen_express_logo; + GX_WINDOW main_screen_pixelmap_window; + GX_PROMPT main_screen_prompt; +} MAIN_SCREEN_CONTROL_BLOCK; + + +/* extern statically defined control blocks */ + +#ifndef GUIX_STUDIO_GENERATED_FILE +extern MAIN_SCREEN_CONTROL_BLOCK main_screen; +#endif + +/* Declare event process functions, draw functions, and callback functions */ + +VOID pixelmap_window_draw(GX_WINDOW *widget); +VOID text_draw(GX_PROMPT *widget); + +/* Declare the GX_STUDIO_DISPLAY_INFO structure */ + + +typedef struct GX_STUDIO_DISPLAY_INFO_STRUCT +{ + GX_CONST GX_CHAR *name; + GX_CONST GX_CHAR *canvas_name; + GX_CONST GX_THEME **theme_table; + GX_CONST GX_STRING **language_table; + USHORT theme_table_size; + USHORT language_table_size; + UINT string_table_size; + UINT x_resolution; + UINT y_resolution; + GX_DISPLAY *display; + GX_CANVAS *canvas; + GX_WINDOW_ROOT *root_window; + GX_COLOR *canvas_memory; + ULONG canvas_memory_size; + USHORT rotation_angle; +} GX_STUDIO_DISPLAY_INFO; + + +/* Declare Studio-generated functions for creating top-level widgets */ + +UINT gx_studio_icon_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent); +UINT gx_studio_prompt_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent); +UINT gx_studio_window_create(GX_CONST GX_STUDIO_WIDGET *info, GX_WIDGET *control_block, GX_WIDGET *parent); +GX_WIDGET *gx_studio_widget_create(GX_BYTE *storage, GX_CONST GX_STUDIO_WIDGET *definition, GX_WIDGET *parent); +UINT gx_studio_named_widget_create(char *name, GX_WIDGET *parent, GX_WIDGET **new_widget); +UINT gx_studio_display_configure(USHORT display, UINT (*driver)(GX_DISPLAY *), GX_UBYTE language, USHORT theme, GX_WINDOW_ROOT **return_root); + +/* Determine if a C++ compiler is being used. If so, complete the standard + C conditional started above. */ +#ifdef __cplusplus +} +#endif + +#endif /* sentry */ diff --git a/tutorials/demo_guix_binres_standalone/font_vera.bin b/tutorials/demo_guix_binres_standalone/font_vera.bin new file mode 100644 index 00000000..55d16819 Binary files /dev/null and b/tutorials/demo_guix_binres_standalone/font_vera.bin differ diff --git a/tutorials/demo_guix_binres_standalone/font_vera.xml b/tutorials/demo_guix_binres_standalone/font_vera.xml new file mode 100644 index 00000000..f433d3ae --- /dev/null +++ b/tutorials/demo_guix_binres_standalone/font_vera.xml @@ -0,0 +1,34 @@ + + + +
+font_vera +56 +GUIX Studio +6020105 +60201 +Generic +Generic +FALSE +
+ +GX_COLOR_FORMAT_565RGB +None + + +FONT +VERA + +..\..\fonts\verasans\Vera.ttf +project_relative + +FALSE +20 +8 +FALSE + +32 +126 + + +
diff --git a/tutorials/demo_guix_binres_standalone/graphics/MS-Azure_logo.png b/tutorials/demo_guix_binres_standalone/graphics/MS-Azure_logo.png new file mode 100644 index 00000000..91c1186b Binary files /dev/null and b/tutorials/demo_guix_binres_standalone/graphics/MS-Azure_logo.png differ diff --git a/tutorials/demo_guix_binres_standalone/graphics/red_apple.png b/tutorials/demo_guix_binres_standalone/graphics/red_apple.png new file mode 100644 index 00000000..36b44caf Binary files /dev/null and b/tutorials/demo_guix_binres_standalone/graphics/red_apple.png differ diff --git a/tutorials/demo_guix_binres_standalone/pixelmap_red_apple.bin b/tutorials/demo_guix_binres_standalone/pixelmap_red_apple.bin new file mode 100644 index 00000000..b3ca818f Binary files /dev/null and b/tutorials/demo_guix_binres_standalone/pixelmap_red_apple.bin differ