diff --git a/DemoProc/inc/DemoResource_ASCII.h b/DemoProc/inc/DemoResource_ASCII.h
index 3e97689..e2300e4 100644
--- a/DemoProc/inc/DemoResource_ASCII.h
+++ b/DemoProc/inc/DemoResource_ASCII.h
@@ -4,7 +4,7 @@
/* Screen 1: Multiple lines text. */
/* Start screen scroll text. */
#define DEMO_START_NOTICE (\
-"welcom to SimpleGUI demo process, ti will show you how \
+"Welcom to SimpleGUI demo process, it will show you how \
to use GUI to show and deal some user action with HMI \
interfacce.\n\
This program uses a uart port to simulate user interaction. \
diff --git a/DemoProc/src/DemoProc.c b/DemoProc/src/DemoProc.c
index 91640d3..007713e 100644
--- a/DemoProc/src/DemoProc.c
+++ b/DemoProc/src/DemoProc.c
@@ -24,6 +24,7 @@
//= Static variable declaration. =//
//=======================================================================//
SGUI_SCR_DEV g_stDeviceInterface;
+#if 0
HMI_SCREEN_OBJECT* g_arrpstScreenObjs[] =
{
&g_stHMIDemo_ScrollingText,
@@ -33,6 +34,7 @@ HMI_SCREEN_OBJECT* g_arrpstScreenObjs[] =
&g_stHMIDemo_VariableBox,
&g_stHMI_DemoRealtimeGraph,
};
+#endif
HMI_ENGINE_OBJECT g_stDemoEngine;
#ifndef _SIMPLE_GUI_IN_VIRTUAL_SDK_
@@ -82,8 +84,8 @@ HMI_ENGINE_RESULT InitializeHMIEngineObj(void)
SGUI_SystemIF_MemorySet(&g_stDemoEngine, 0x00, sizeof(HMI_ENGINE_OBJECT));
#ifdef _SIMPLE_GUI_IN_VIRTUAL_SDK_
/* Initialize display size. */
- g_stDeviceInterface.stSize.Width = 128;
- g_stDeviceInterface.stSize.Height = 64;
+ g_stDeviceInterface.stSize.iWidth = 128;
+ g_stDeviceInterface.stSize.iHeight = 64;
/* Initialize interface object. */
g_stDeviceInterface.fnSetPixel = SGUI_SDK_SetPixel;
g_stDeviceInterface.fnGetPixel = SGUI_SDK_GetPixel;
@@ -91,15 +93,15 @@ HMI_ENGINE_RESULT InitializeHMIEngineObj(void)
g_stDeviceInterface.fnSyncBuffer = SGUI_SDK_RefreshDisplay;
#else
/* Initialize display size. */
- g_stDeviceInterface.stSize.Width = 128;
- g_stDeviceInterface.stSize.Height = 64;
+ g_stDeviceInterface.stSize.iWidth = 128;
+ g_stDeviceInterface.stSize.iHeight = 64;
/* Initialize interface object. */
g_stDeviceInterface.fnSetPixel = OLED_SetPixel;
g_stDeviceInterface.fnGetPixel = OLED_GetPixel;
g_stDeviceInterface.fnClear = OLED_ClearDisplay;
g_stDeviceInterface.fnSyncBuffer = OLED_RefreshScreen;
#endif
-
+#if 0
do
{
/* Prepare HMI engine object. */
@@ -143,6 +145,9 @@ HMI_ENGINE_RESULT InitializeHMIEngineObj(void)
}while(0);
return eProcessResult;
+#else
+ return HMI_RET_NORMAL;
+#endif
}
#ifdef _SIMPLE_GUI_IN_VIRTUAL_SDK_
@@ -186,6 +191,11 @@ bool CheckEventFlag(ENV_FLAG_INDEX eIndex)
/*****************************************************************************/
void DemoMainProcess(void)
{
+ SGUI_RECT_AREA stDisplayArea = {15, 15, 50, 8};
+ SGUI_POINT stInnerPos = {-4, 0};
+ SGUI_AREA_SIZE stAreaSize;
+ char szTempBuffer[100] = {0x00};
+
/*----------------------------------*/
/* Initialize */
/*----------------------------------*/
@@ -195,8 +205,52 @@ void DemoMainProcess(void)
/*----------------------------------*/
/* Process */
/*----------------------------------*/
+ //SGUI_Basic_DrawLine(&g_stDeviceInterface, 2, 2, 40, 40, SGUI_COLOR_FRGCLR);
+ SGUI_Basic_DrawRectangle(&g_stDeviceInterface, 1, 1, 126, 10, SGUI_COLOR_FRGCLR, SGUI_COLOR_BKGCLR);
+ stDisplayArea.iPosX = 2;
+ stDisplayArea.iPosY = 2;
+ stDisplayArea.iWidth = 124;
+ stDisplayArea.iHeight = 8;
+ stInnerPos.iPosX = 0;
+ stInnerPos.iPosY = 0;
+ SGUI_Text_DrawText(&g_stDeviceInterface, "This is text form SGUI_DEFAULT_FONT_8", &SGUI_DEFAULT_FONT_8, &stDisplayArea, &stInnerPos, SGUI_DRAW_NORMAL);
+
+ SGUI_Basic_DrawRectangle(&g_stDeviceInterface, 1, 12, 126, 14, SGUI_COLOR_FRGCLR, SGUI_COLOR_BKGCLR);
+ stDisplayArea.iPosX = 2;
+ stDisplayArea.iPosY = 13;
+ stDisplayArea.iWidth = 124;
+ stDisplayArea.iHeight = 12;
+ stInnerPos.iPosX = 5;
+ stInnerPos.iPosY = 0;
+ SGUI_Text_GetTextExtent("123ABC", &SGUI_DEFAULT_FONT_12, &stAreaSize);
+ sprintf(szTempBuffer, "Size is (%d, %d).", stAreaSize.iWidth, stAreaSize.iHeight);
+ SGUI_Text_DrawText(&g_stDeviceInterface, szTempBuffer, &SGUI_DEFAULT_FONT_12, &stDisplayArea, &stInnerPos, SGUI_DRAW_NORMAL);
+
+ SGUI_Basic_DrawRectangle(&g_stDeviceInterface, 1, 27, 126, 18, SGUI_COLOR_FRGCLR, SGUI_COLOR_BKGCLR);
+ stDisplayArea.iPosX = 2;
+ stDisplayArea.iPosY = 28;
+ stDisplayArea.iWidth = 124;
+ stDisplayArea.iHeight = 16;
+ stInnerPos.iPosX = 0;
+ stInnerPos.iPosY = 0;
+ SGUI_Text_DrawText(&g_stDeviceInterface, "Pixel 16 font source.", &SGUI_DEFAULT_FONT_16, &stDisplayArea, &stInnerPos, SGUI_DRAW_NORMAL);
+
+ stDisplayArea.iPosX = -10;
+ stDisplayArea.iPosY = 0;
+ stDisplayArea.iWidth = 64;
+ stDisplayArea.iHeight = 64;
+ SGUI_Text_DrawMultipleLinesText(&g_stDeviceInterface, DEMO_START_NOTICE, &SGUI_DEFAULT_FONT_8, &stDisplayArea, -0, SGUI_DRAW_NORMAL);
+
+ stDisplayArea.iPosX = 64;
+ stDisplayArea.iPosY = 0;
+ stDisplayArea.iWidth = 64;
+ stDisplayArea.iHeight = 64;
+ SGUI_Text_DrawMultipleLinesText(&g_stDeviceInterface, DEMO_START_NOTICE, &SGUI_DEFAULT_FONT_8, &stDisplayArea, -0, SGUI_DRAW_NORMAL);
+
+ g_stDeviceInterface.fnSyncBuffer();
while(1)
{
+ /*
// Check and process heart-beat timer event.
if(true == SysTickTimerTriggered())
{
@@ -212,6 +266,7 @@ void DemoMainProcess(void)
{
RTCEventProc();
}
+ */
}
}
diff --git a/DemoProc/src/List.c b/DemoProc/src/List.c
index 38c1eb2..76d5664 100644
--- a/DemoProc/src/List.c
+++ b/DemoProc/src/List.c
@@ -30,7 +30,7 @@ static HMI_ENGINE_RESULT HMI_DemoList_PostProcess(SGUI_SCR_DEV* pstIFObj, HMI_EN
//=======================================================================//
//= Static variable declaration. =//
//=======================================================================//
-static SGUI_CSZSTR s_szListTitle = DEMO_LIST_TITLE;
+static SGUI_CSZSTR s_szListTitle = NULL;//DEMO_LIST_TITLE;
static SGUI_CSZSTR s_arrszNoticeType[] = { DEMO_LIST_ITEM_NOTICE_TEXT, DEMO_LIST_ITEM_NOTICE_TIME};
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
static SGUI_CSZSTR s_arrszEnumedValue[] = { DEMO_LIST_ITEM_ENUM_VALUE1, DEMO_LIST_ITEM_ENUM_VALUE2, DEMO_LIST_ITEM_ENUM_VALUE3};
@@ -87,12 +87,12 @@ HMI_ENGINE_RESULT HMI_DemoList_Initialize(SGUI_SCR_DEV* pstIFObj)
// Initialize list data.
SGUI_SystemIF_MemorySet(&s_stDemoListObject, 0x00, sizeof(SGUI_List_STRUCT));
// Title and font size must set before initialize list object.
- s_stDemoListObject.Data.Rect.PosX = 0;
- s_stDemoListObject.Data.Rect.PosY = 0;
- s_stDemoListObject.Data.Rect.Width = RECT_WIDTH(pstIFObj->stSize);
- s_stDemoListObject.Data.Rect.Height = RECT_HEIGHT(pstIFObj->stSize);
+ s_stDemoListObject.Data.Rect.PosX = 5;
+ s_stDemoListObject.Data.Rect.PosY = 5;
+ s_stDemoListObject.Data.Rect.Width = 96;//RECT_WIDTH(pstIFObj->stSize);
+ s_stDemoListObject.Data.Rect.Height = 48; //RECT_HEIGHT(pstIFObj->stSize);
s_stDemoListObject.Data.Title = s_szListTitle;
- s_stDemoListObject.FontSize = SGUI_FONT_SIZE_H12;
+ s_stDemoListObject.FontRes = &SGUI_DEFAULT_FONT;
#ifdef _SIMPLE_GUI_ENABLE_DYNAMIC_MEMORY_
s_stDemoListObject.Data.Items = NULL;
s_stDemoListObject.Data.Count = 0;
diff --git a/DemoProc/src/RTCNotice.c b/DemoProc/src/RTCNotice.c
index 150930a..4b071eb 100644
--- a/DemoProc/src/RTCNotice.c
+++ b/DemoProc/src/RTCNotice.c
@@ -68,7 +68,7 @@ HMI_ENGINE_RESULT HMI_DemoRTCNotice_RefreshScreen(SGUI_SCR_DEV* pstIFObj, const
sprintf(s_szRTCNoticeText, DEMO_RTC_NOTICE_TEXT_FMT,
stRTCTime.Year, stRTCTime.Month, stRTCTime.Day,
stRTCTime.Hour, stRTCTime.Minute, stRTCTime.Second);
- SGUI_Notice_Repaint(pstIFObj, s_szRTCNoticeText, SGUI_FONT_SIZE_H12, 0, SGUI_ICON_INFORMATION);
+ SGUI_Notice_Repaint(pstIFObj, s_szRTCNoticeText, &SGUI_DEFAULT_FONT, 0, SGUI_ICON_INFORMATION);
return HMI_RET_NORMAL;
}
diff --git a/DemoProc/src/RealtimeGraph.c b/DemoProc/src/RealtimeGraph.c
index 511b85e..a15c68e 100644
--- a/DemoProc/src/RealtimeGraph.c
+++ b/DemoProc/src/RealtimeGraph.c
@@ -78,7 +78,7 @@ HMI_ENGINE_RESULT HMI_DemoRealGraph_RefreshScreen(SGUI_SCR_DEV* pstIFObj, const
stTextDisplayArea.Height = 8;
stTextDataArea.PosX = 0;
stTextDataArea.PosY = 0;
- SGUI_Text_DrawSingleLineText(pstIFObj, "Real-time graph", SGUI_FONT_SIZE_H8, &stTextDisplayArea, &stTextDataArea, SGUI_DRAW_NORMAL);
+ SGUI_Text_DrawSingleLineText(pstIFObj, "Real-time graph", &SGUI_DEFAULT_FONT, &stTextDisplayArea, &stTextDataArea, SGUI_DRAW_NORMAL);
// Paint value.
SGUI_Common_IntegerToString(s_stRealtimeGraph.Data->ValueArray[s_stRealtimeGraph.Data->ValueCount-1], szTextBuffer, 10, -15, ' ');
stTextDisplayArea.PosX = 1;
@@ -87,7 +87,7 @@ HMI_ENGINE_RESULT HMI_DemoRealGraph_RefreshScreen(SGUI_SCR_DEV* pstIFObj, const
stTextDisplayArea.Height = 8;
stTextDataArea.PosX = 0;
stTextDataArea.PosY = 0;
- SGUI_Text_DrawSingleLineText(pstIFObj, szTextBuffer, SGUI_FONT_SIZE_H8, &stTextDisplayArea, &stTextDataArea, SGUI_DRAW_NORMAL);
+ SGUI_Text_DrawSingleLineText(pstIFObj, szTextBuffer, &SGUI_DEFAULT_FONT, &stTextDisplayArea, &stTextDataArea, SGUI_DRAW_NORMAL);
SGUI_RealtimeGraph_Repaint(pstIFObj, &s_stRealtimeGraph);
return HMI_RET_NORMAL;
}
diff --git a/DemoProc/src/ScrollingText.c b/DemoProc/src/ScrollingText.c
index f885a97..516f69d 100644
--- a/DemoProc/src/ScrollingText.c
+++ b/DemoProc/src/ScrollingText.c
@@ -82,7 +82,7 @@ HMI_SCREEN_OBJECT g_stHMIDemo_ScrollingText = {
HMI_ENGINE_RESULT HMI_DemoScrollingText_Initialize(SGUI_SCR_DEV* Interface)
{
s_iTextOffset = HMI_TEXT_DEMO_FRAME_TEXT_HEIGHT(Interface->stSize);
- s_iTextHeight = SGUI_Text_GetMultiLineTextLines(s_szDemoText, (HMI_TEXT_DEMO_FRAME_TEXT_WIDTH(Interface->stSize)/g_stFontSize[SCROLL_TEXT_FONT_SIZE].Width))*g_stFontSize[SCROLL_TEXT_FONT_SIZE].Height;
+ s_iTextHeight = SGUI_Text_GetMultiLineTextLines(s_szDemoText, (HMI_TEXT_DEMO_FRAME_TEXT_WIDTH(Interface->stSize)/SGUI_DEFAULT_FONT.iHalfWidth))*SGUI_DEFAULT_FONT.iHeight;
s_stTextDisplayArea.PosX = HMI_TEXT_DEMO_FRAME_TEXT_POSX;
s_stTextDisplayArea.PosY = HMI_TEXT_DEMO_FRAME_TEXT_POSY;
s_stTextDisplayArea.Width = HMI_TEXT_DEMO_FRAME_TEXT_WIDTH(Interface->stSize);
diff --git a/Documents/How to create font data.md b/Documents/How to create font data.md
index e4b2242..2d17cf7 100644
--- a/Documents/How to create font data.md
+++ b/Documents/How to create font data.md
@@ -50,7 +50,7 @@
### 3.4. Unicode编码
由于ANSI无法表达特定的编码,在跨地域时乱码的问题几乎无可避免,这就催生了Unicoed,这种一个联合编码集,意在使用一个字符集表达世界上所有语言所包含的所有书面符号(甚至是同一汉字的不同写法,如“户”和“戸”等),且每一个符号都有自己唯一的编码,这样一来,乱码的问题就迎刃而解了。
- Unicode码使用3字节的长度表达一个字符,最高字节为平面(Panel)索引,范围为0x00\~0x10(十进制17),低两字节为字符码,表达范围为0\~65535。也就是说,Unicode编码的表达范围为0x000000\~0x10FFFF。
+ Unicode码使用3字节的长度表达一个字符,最高字节为平面(Panel)索引,范围为0x00~0x10(十进制17),低两字节为字符码,表达范围为0~65535。也就是说,Unicode编码的表达范围为0x000000~0x10FFFF。
其他Unicode编码的细节,网上有详细介绍,不作详述。
### 3.5. UTF-8的编码与解码
@@ -261,7 +261,7 @@ SGUI_SIZE SGUI_Text_GetCharacterTableIndex(SGUI_UINT16 uiCharacterCode)
同时,为了方便这个文字提取与重编码的操作,我还编写了一个小工具MinimumFontLib,您可以访问码云上[MinimumFontLib的托管页面](https://gitee.com/Polarix/MinimumFontLib)获取该工具的可执行文件与源码,欢迎您试用和反馈。
### 5. 联系开发者
- 首先,感谢您对SimpleGUI的赏识与支持。
+ 首先,感谢您对SimpleGUI的赏识与支持。
虽然最早仅仅作为一套GUI接口库使用,但我最终希望SimpleGUI能够为您提供一套完整的单色屏GUI及交互设计解决方案,如果您有新的需求、提议亦或想法,欢迎在以下地址留言,或加入[QQ交流群799501887](https://jq.qq.com/?_wv=1027&k=5ahGPvK)留言交流。
>SimpleGUI@开源中国:https://www.oschina.net/p/simplegui
>SimpleGUI@码云:https://gitee.com/Polarix/simplegui
diff --git a/Documents/How to transplant a platform.md b/Documents/How to transplant a platform.md
index e45d685..1444b0d 100644
--- a/Documents/How to transplant a platform.md
+++ b/Documents/How to transplant a platform.md
@@ -1,10 +1,18 @@
-如何移植SimpleGUI
+
目录
+
+* [1. 概述](#1)
+* [2. 向STM32F103平台上移植Demo程序](#2)
+* [3. 从“Hello world”开始](#3)
+* [4. HMI交互模型](#4)
+* [5. 联系开发者](#5)
---
-## 简介
+1. 概述
为了方便大家学习和使用SimpleGUI,我对Demo程序向STM32F103芯片上进行了移植并保留了工程代码,本文将演示如何搭建并使用这个工程。
-## 2. 向STM32F103平台上移植Demo程序。
+<返回到[目录](#0)/[标题](#1)>
+
+2. 向STM32F103平台上移植Demo程序
#### 2.1. 概述。
@@ -14,11 +22,9 @@
#### 2.2. 准备工程模板
- 在移植和使用Demo程序之前,请先依照个人习惯,创建一个空白的STM32F103工程。工程中请不要包含诸如串口重定向等的代码实现,以避免意料之外的错误。
+ 在移植和使用Demo程序之前,请先依照个人习惯,创建一个空白的STM32F103工程。工程中请不要包含诸如串口重定向等的代码实现,以避免不必要的编译错误。
- 由于演示工程中包含GB2312的字库,所以编译后体积较大,请大家在移植时,最好使用STM32F103VE/ZE芯片,以确保Flash资源的充足。
-
- 当然,这并不是硬性需求,如果您确实需要在少资源的芯片中运行,后续将有介绍如何使Demo运行于诸如STM32F103C8这样的资源相对较少的芯片,毕竟SimpleGUI本身对系统资源的消耗并不高。
+ 由于演示工程中包含GB2312的字库,所以编译后体积较大,请大家在移植时,最好使用STM32F103VE/ZE芯片,以确保Flash资源的充足。当然,这并不是硬性需求,如果您确实需要在少资源的芯片中运行,后续将有介绍如何使Demo运行于诸如STM32F103C8这样的资源相对较少的芯片,毕竟SimpleGUI本身对系统资源的消耗并不高。
#### 2.3. 移植Demo程序。
@@ -82,13 +88,13 @@ OLED_RST---------PB10
>
- 由于包含有12像素和16像素的中文字库,所以编译的程序比较大,这也就是为什么选用STM32F103VE/ZE这样的大容量芯片运行Demo的原因了。接下来将程序下载到芯片,下载方式请根据用户自己的硬件设备环境决定,下载完成后,OLED显示屏上就可以看到显示内容了。
+ 由于包含有12像素和16像素的中文字库,所以编译的程序比较大,这也就是为什么选用STM32F103VE/ZE这样的大容量芯片运行Demo的原因了。接下来将程序下载到芯片,下载完成后,OLED显示屏上就可以看到显示内容了。
>
#### 2.4. Demo程序的交互。
- 为了确保所有尝试使用和学习的朋友都能以最快速,最便捷的方式体验和使用SimpleGUI,Demo程序使用串口来模拟键盘进行Demo程序的交互,以此来避免大家在使用不同开发板或最小系统时,因为硬件原因导致交互实现起来困难的尴尬。
+ 为了确保所有尝试使用和学习SimpleGUI的朋友都能以最快速,最便捷的方式体验和使用SimpleGUI,Demo程序使用串口来模拟键盘进行Demo程序的交互,以此来避免在使用不同开发板或最小系统时,因为硬件原因导致交互实现起来困难的尴尬。
完成前文描述的移植操作并成功烧录到芯片中运行,在确保芯片的串口正确连接到电脑后,就可以尝试与SimpleGUI的Demo程序进行交互了。在此之前,请准保好一个您习惯使用的串口调试软件,但此软件需要支持发送十六进制数据。
基于前文的操作,确保芯片硬件系统处于上电运行状态,显示屏上滚动显示关于SimpleGUI的简介内容。此时使用串口发送十六进制数据0x0020模拟空格按键操作,此时何以看到,SimpleGUI的Demo程序已经显示列表画面了。
@@ -146,9 +152,29 @@ OLED_RST---------PB10
>
为了兼容在VirtualSDK中运行、片上全字库运行和片上精简字库运行等多种情况,Demo程序中使用了DemoResource_UTF8.h、DemoResource_GB2312.h和DemoResource_ASCII.h三个文件作为显示用的资源文件,Demo程序中显示的文字均为同名不同内容的宏定义,在不同环境下根据不同的宏开关、引用不同的文件来实现切换不同显示内容的效果。
- 为了避免不同情况下的乱码,在VirtualSDK中运行时,使用的资源文件是DemoResource_UTF8.h,运行时通过iconv转换库将字符串转换为GB2312编码再进行解码和显示。 而由于在芯片上运行全字库时,由于没有足够的资源保存转码库的资源,所以使用DemoResource_GB2312.h文件,此文件本身就以GB2312形式保存无需转码,壳直接解码,而使用精简字库时,由于只有ASCII文字,所以使用DemoResource_ASCII.h文件,使界面显示英语,不使用中文字库。
+ 为了避免不同情况下的乱码,在VirtualSDK中运行时,使用的资源文件是DemoResource_UTF8.h,运行时通过iconv转换库将字符串转换为GB2312编码再进行解码和显示。 而由于在芯片上运行全字库时,由于没有足够的资源保存转码库的资源,所以使用DemoResource_GB2312.h文件,此文件本身就以GB2312形式保存,无需转码。而使用精简字库时,由于只有ASCII文字,所以使用DemoResource_ASCII.h文件,使界面显示英语,不使用中文字库。
+
+<返回到[目录](#0)/[标题](#2)>
+
+3. 从“Hello world”开始
+
+#### 3.1准备驱动程序
+ 由于SimpleGUI本身不提供屏幕设备的驱动程序,而是借助既有的硬件设备接口组织基础的绘制操作,所以在使用SimpleGUI之前,需要开发者自行准备好屏幕设备的驱动函数。至少准备好“初始化”、“读像素”和“写像素”两个函数,函数的原型需要严格按照以下形式声明和定义。
+```
+void OLED_Initialize(void);
+void OLED_SetPixel(int iPosX, int iPosY, int iColor);
+int OLED_GetPixel(int iPosX, int iPosY);
+```
+
+
+<返回到[目录](#0)/[标题](#3)>
+
+4. HMI交互模型
+
+<返回到[目录](#0)/[标题](#4)>
+
+5. 联系开发者
-### 4. 联系开发者
首先,感谢您对SimpleGUI的赏识与支持。
虽然最早仅仅作为一套GUI接口库使用,但我最终希望SimpleGUI能够为您提供一套完整的单色屏GUI及交互设计解决方案,如果您有新的需求、提议亦或想法,欢迎在以下地址留言,或加入[QQ交流群799501887](https://jq.qq.com/?_wv=1027&k=5ahGPvK)留言交流。
>SimpleGUI@开源中国:https://www.oschina.net/p/simplegui
diff --git a/GUI/inc/SGUI_Basic.h b/GUI/inc/SGUI_Basic.h
index 49d25e8..b5f525a 100644
--- a/GUI/inc/SGUI_Basic.h
+++ b/GUI/inc/SGUI_Basic.h
@@ -18,6 +18,7 @@
#define BASIC_FONT_WIDTH (6)
#define BASIC_FONT_CHAR_DATA_SIZE (((BASIC_FONT_HEIGHT-1)/8)+1)*BASIC_FONT_WIDTH
#define BASIC_FONT_DATA (SGUI_BASIC_FONT_H8)
+#define SGUI_USED_BYTE(V) (((V-1)/8)+1)
//Bitmap(include font) data bit operation
#define SGUI_SET_PAGE_BIT(PAGE, Bit) ((PAGE) = (PAGE) | (0x01 << (Bit)))
@@ -39,6 +40,6 @@ void SGUI_Basic_DrawLine(SGUI_SCR_DEV* pstIFObj, SGUI_INT uiStartX, SGUI_INT
void SGUI_Basic_DrawRectangle(SGUI_SCR_DEV* pstIFObj, SGUI_UINT uiStartX, SGUI_UINT uiStartY, SGUI_UINT uiWidth, SGUI_UINT uiHeight, SGUI_COLOR eEdgeColor, SGUI_COLOR eFillColor);
void SGUI_Basic_DrawCircle(SGUI_SCR_DEV* pstIFObj, SGUI_UINT uiCx, SGUI_UINT uiCy, SGUI_UINT uiRadius, SGUI_COLOR eEdgeColor, SGUI_COLOR eFillColor);
void SGUI_Basic_ReverseBlockColor(SGUI_SCR_DEV* pstIFObj, SGUI_UINT uiStartX, SGUI_UINT uiStartY, SGUI_UINT uiWidth, SGUI_UINT uiHeight);
-void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayArea, SGUI_RECT_AREA* pstDataArea, SGUI_FLASH_DATA_SOURCE eDataSource, SGUI_ROM_ADDRESS adDataStartAddr, SGUI_DRAW_MODE eDrawMode);
+void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstDataArea, SGUI_BMP_RES* pstBitmapData, SGUI_DRAW_MODE eDrawMode);
#endif
diff --git a/GUI/inc/SGUI_Common.h b/GUI/inc/SGUI_Common.h
index 31afd98..0315fdb 100644
--- a/GUI/inc/SGUI_Common.h
+++ b/GUI/inc/SGUI_Common.h
@@ -26,6 +26,7 @@
//=======================================================================//
//= Public function declaration. =//
//=======================================================================//
+void SGUI_Common_AdaptDisplayInfo(SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstInnerPos);
SGUI_SIZE SGUI_Common_IntegerToStringWithDecimalPoint(SGUI_INT iInteger, SGUI_UINT uiDecimalPlaces, SGUI_SZSTR pszStringBuffer, SGUI_INT iAlignment, SGUI_CHAR cFillCharacter);
SGUI_SIZE SGUI_Common_IntegerToString(SGUI_INT iInteger, SGUI_SZSTR pszStringBuffer, SGUI_UINT uiBase, SGUI_INT iAlignment, SGUI_CHAR cFillCharacter);
SGUI_UINT SGUI_Common_ConvertStringToUnsignedInteger(SGUI_SZSTR szString, SGUI_CHAR** ppcEndPointer, SGUI_UINT uiBase);
diff --git a/GUI/inc/SGUI_Config.h b/GUI/inc/SGUI_Config.h
index 7f71959..178a15f 100644
--- a/GUI/inc/SGUI_Config.h
+++ b/GUI/inc/SGUI_Config.h
@@ -20,6 +20,6 @@
//=======================================================================//
//= Used for SimpleGUI demo process. =//
//=======================================================================//
-#define _SIMPLE_GUI_NON_ASCII_
+//#define _SIMPLE_GUI_NON_ASCII_
#endif // _INCLUDE_SIMPLE_GUI_CONFIG_H_
diff --git a/GUI/inc/SGUI_FlashData.h b/GUI/inc/SGUI_FlashData.h
index 11a8fc0..9a7ebef 100644
--- a/GUI/inc/SGUI_FlashData.h
+++ b/GUI/inc/SGUI_FlashData.h
@@ -8,11 +8,13 @@
//=======================================================================//
//= Public variable declaration. =//
//=======================================================================//
+extern const SGUI_FONT_RES SGUI_DEFAULT_FONT_8;
+extern const SGUI_FONT_RES SGUI_DEFAULT_FONT_12;
+extern const SGUI_FONT_RES SGUI_DEFAULT_FONT_16;
//#ifdef _SIMPLE_GUI_VIRTUAL_ENVIRONMENT_SIMULATOR_
extern const SGUI_CBYTE SGUI_FONT_H8[];
extern const SGUI_CBYTE SGUI_FONT_H12[];
extern const SGUI_CBYTE SGUI_FONT_H16[];
-extern const SGUI_CBYTE SGUI_FONT_H32[];
extern const SGUI_CBYTE SGUI_NOTICE_ICON_DATA[];
//#endif
diff --git a/GUI/inc/SGUI_Interface.h b/GUI/inc/SGUI_Interface.h
index a4c1712..f18509c 100644
--- a/GUI/inc/SGUI_Interface.h
+++ b/GUI/inc/SGUI_Interface.h
@@ -49,6 +49,5 @@ SGUI_SIZE SGUI_SystemIF_StringLength(SGUI_CSZSTR szString);
SGUI_SZSTR SGUI_SystemIF_StringCopy(SGUI_SZSTR szDest, SGUI_CSZSTR szSrc);
SGUI_SZSTR SGUI_SystemIF_StringLengthCopy(SGUI_SZSTR szDest, SGUI_CSZSTR szSrc, SGUI_SIZE sSize);
void SGUI_SystemIF_GetNowTime(SGUI_TIME* pstTime);
-SGUI_SIZE SGUI_SystemIF_GetFlashData(SGUI_SCR_DEV* pstIFObj, SGUI_FLASH_DATA_SOURCE eDataSource, SGUI_ROM_ADDRESS adStartAddr, SGUI_SIZE sReadSize);
#endif // __INCLUDED_SGUI_INTERFACE_H__
diff --git a/GUI/inc/SGUI_List.h b/GUI/inc/SGUI_List.h
index 517328b..e79a9dc 100644
--- a/GUI/inc/SGUI_List.h
+++ b/GUI/inc/SGUI_List.h
@@ -74,7 +74,7 @@ typedef struct
SGUI_List_DATA Data;
SGUI_List_CONTROL ControlVariable;
SGUI_List_SUBELEMENT SubElement;
- SGUI_FONT_SIZE FontSize;
+ const SGUI_FONT_RES* FontRes;
}SGUI_List_STRUCT;
//=======================================================================//
diff --git a/GUI/inc/SGUI_Notice.h b/GUI/inc/SGUI_Notice.h
index c6dbad4..a329565 100644
--- a/GUI/inc/SGUI_Notice.h
+++ b/GUI/inc/SGUI_Notice.h
@@ -15,18 +15,10 @@
//=======================================================================//
//= Data type definition. =//
//=======================================================================//
-typedef enum
-{
- SGUI_ICON_ERROR = 0,
- SGUI_ICON_INFORMATION,
- SGUI_ICON_QUESTION,
- SGUI_ICON_WARNING,
- SGUI_ICON_NONE,
-}SGUI_NOTICE_ICON_IDX;
//=======================================================================//
//= Public function declaration. =//
//=======================================================================//
-SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText, SGUI_FONT_SIZE iFontSize, SGUI_INT uiTextOffset, SGUI_NOTICE_ICON_IDX eIcon);
+SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText, const SGUI_FONT_RES* pstFontRes, SGUI_INT uiTextOffset, SGUI_NOTICE_ICON_IDX eIcon);
#endif // __INCLUDE_GUI_NOTICE_H__
diff --git a/GUI/inc/SGUI_Text.h b/GUI/inc/SGUI_Text.h
index 6b2648a..e3e97b4 100644
--- a/GUI/inc/SGUI_Text.h
+++ b/GUI/inc/SGUI_Text.h
@@ -10,47 +10,27 @@
//= User Macro definition. =//
//=======================================================================//
#define FONT_LIB_ADDR 0X00000
-#define FONT_LIB_OFFSET_ASCII (-32)
-#define FONT_LIB_OFFSET_GB2312_SYMBOL (95)
-#define FONT_LIB_OFFSET_GB2312_CHARL1 (659)
// Max font size is 64 pix, maximum of font data size is 64 * 8 = 512 Bytes.
-#define FONT_DATA_BUFFER_SIZE (512)
#define TEXT_NUMBER_STR_LENGTH_MAX (12)
#define TEXT_PLACEHOLDER_CHARACTER ('*')
+#define SGUI_IS_VISIBLE_CHAR(C) ((C>0x1F) && (C<0x7F))
//=======================================================================//
//= Data type definition. =//
//=======================================================================//
-typedef struct
-{
- const SGUI_UINT16 Size;
- const SGUI_UINT16 Width;
- const SGUI_UINT16 Height;
- const SGUI_UINT16 HalfCharDataSize;
-}SGUI_FONT_SIZE_STRUCT;
-
-typedef enum
-{
- SGUI_FONT_SIZE_H6 = 0,
- SGUI_FONT_SIZE_H8,
- SGUI_FONT_SIZE_H12,
- SGUI_FONT_SIZE_H16,
- SGUI_FONT_SIZE_H24,
- SGUI_FONT_SIZE_H32,
- SGUI_FONT_SIZE_MAX,
-}SGUI_FONT_SIZE;
//=======================================================================//
//= Public variable declaration. =//
//=======================================================================//
-extern const SGUI_FONT_SIZE_STRUCT g_stFontSize[];
//=======================================================================//
//= Public function declaration. =//
//=======================================================================//
-void SGUI_Text_DrawSingleLineText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szTextBuffer, SGUI_FONT_SIZE eFontSize, SGUI_RECT_AREA* pstDisplayArea, SGUI_RECT_AREA* pstStringDataArea, SGUI_DRAW_MODE eFontMode);
-SGUI_SIZE SGUI_Text_DrawMultipleLinesText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szTextBuffer, SGUI_FONT_SIZE eFontSize, SGUI_RECT_AREA* pstDisplayArea, SGUI_INT iTopOffset, SGUI_DRAW_MODE eFontMode);
-SGUI_SIZE SGUI_Text_GetTextGraphicsWidth(SGUI_CSZSTR szText, SGUI_FONT_SIZE eFontSize);
-SGUI_SIZE SGUI_Text_GetMultiLineTextLines(SGUI_CSZSTR szNoticeText, SGUI_SIZE uiHalfWidthCharInLine);
+void SGUI_Text_GetTextExtent(SGUI_CSZSTR cszTextBuffer, const SGUI_FONT_RES* pstFontRes, SGUI_AREA_SIZE* pstTextExtent);
+void SGUI_Text_DrawText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR cszTextBuffer, const SGUI_FONT_RES* pstFontRes, SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstInnerPos, SGUI_DRAW_MODE eFontMode);
+SGUI_SIZE SGUI_Text_DrawMultipleLinesText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szTextBuffer, const SGUI_FONT_RES* pstFontRes, SGUI_RECT_AREA* pstDisplayArea, SGUI_INT iTopOffset, SGUI_DRAW_MODE eFontMode);
+SGUI_SIZE SGUI_Text_GetTextGraphicsWidth(SGUI_CSZSTR szText, const SGUI_FONT_RES* pstFontRes);
+SGUI_SIZE SGUI_Text_GetMultiLineTextLines(SGUI_CSZSTR cszText, const SGUI_FONT_RES* pstFontRes, SGUI_SIZE uiDisplayAreaWidth);
+SGUI_SIZE SGUI_Text_GetCharacterData(const SGUI_FONT_RES* pstFontRes, SGUI_UINT32 uiCode, SGUI_BYTE* pDataBuffer, SGUI_SIZE sBufferSize);
#endif
diff --git a/GUI/inc/SGUI_Typedef.h b/GUI/inc/SGUI_Typedef.h
index a706975..0f9754a 100644
--- a/GUI/inc/SGUI_Typedef.h
+++ b/GUI/inc/SGUI_Typedef.h
@@ -10,14 +10,14 @@
//=======================================================================//
//= User Macro definition. =//
//=======================================================================//
-#define RECT_X_START(ST) ((ST).PosX)
-#define RECT_X_END(ST) (((ST).PosX + (ST).Width - 1))
-#define RECT_Y_START(ST) ((ST).PosY)
-#define RECT_Y_END(ST) (((ST).PosY + (ST).Height - 1))
-#define RECT_WIDTH(ST) ((ST).Width)
-#define RECT_HEIGHT(ST) ((ST).Height)
-#define RECT_VALID_WIDTH(ST) ((RECT_X_START(ST)>0)?RECT_WIDTH(ST):(RECT_WIDTH(ST)+RECT_X_START(ST)))
-#define RECT_VALID_HEIGHT(ST) ((RECT_Y_START(ST)>0)?RECT_HEIGHT(ST):(RECT_HEIGHT(ST)+RECT_Y_START(ST)))
+#define RECT_X_START(ST) ((ST).iPosX)
+#define RECT_X_END(RC, POS) (((POS).iPosX + (RC).iWidth - 1))
+#define RECT_Y_START(ST) ((ST).iPosY)
+#define RECT_Y_END(RC, POS) (((POS).iPosY + (RC).iHeight - 1))
+#define RECT_WIDTH(ST) ((ST).iWidth)
+#define RECT_HEIGHT(ST) ((ST).iHeight)
+#define RECT_VALID_WIDTH(DATA, POS) ((RECT_X_START(POS)>0)?RECT_WIDTH(DATA):(RECT_WIDTH(DATA)+RECT_X_START(POS)))
+#define RECT_VALID_HEIGHT(DATA, POS) ((RECT_Y_START(POS)>0)?RECT_HEIGHT(DATA):(RECT_HEIGHT(DATA)+RECT_Y_START(POS)))
#define SGUI_DEVPF_IF_DEFINE(R, FN, PARAM) typedef R(*FN)PARAM
#define SGUI_BMP_DATA_BUFFER_SIZE (512)
@@ -57,22 +57,22 @@ typedef SGUI_UINT32 SGUI_ROM_ADDRESS;
typedef struct
{
- SGUI_INT PosX;
- SGUI_INT PosY;
- SGUI_INT Width;
- SGUI_INT Height;
+ SGUI_INT iPosX;
+ SGUI_INT iPosY;
+ SGUI_INT iWidth;
+ SGUI_INT iHeight;
}SGUI_RECT_AREA;
typedef struct
{
- SGUI_INT Width;
- SGUI_INT Height;
+ SGUI_INT iWidth;
+ SGUI_INT iHeight;
}SGUI_AREA_SIZE;
typedef struct
{
- SGUI_INT PosX;
- SGUI_INT PosY;
+ SGUI_INT iPosX;
+ SGUI_INT iPosY;
}SGUI_POINT;
typedef struct
@@ -98,25 +98,6 @@ typedef enum
SGUI_DRAW_REVERSE = 1,
}SGUI_DRAW_MODE;
-// Declare data source flag here.
-typedef enum
-{
- SGUI_FONT_SRC_NONE = 0,
- SGUI_FONT_SRC_H6,
- SGUI_FONT_SRC_H8,
- SGUI_FONT_SRC_H12,
- SGUI_FONT_SRC_H16,
- SGUI_NOTICE_ICON,
- SGUI_FONT_SRC_UNKNOWN,
-}SGUI_FLASH_DATA_SOURCE;
-
-typedef struct
-{
- SGUI_FLASH_DATA_SOURCE Source;
- SGUI_ROM_ADDRESS StartAddr;
- SGUI_SIZE Length;
-}SGUI_BMP_DATA;
-
// Screen device operation interface type declare.
SGUI_DEVPF_IF_DEFINE(SGUI_INT, SGUI_FN_IF_INITIALIZE, (void));
SGUI_DEVPF_IF_DEFINE(void, SGUI_FN_IF_CLEAR, (void));
@@ -128,8 +109,10 @@ SGUI_DEVPF_IF_DEFINE(void, SGUI_FN_IF_REFRESH, (void));
// System function interface type declare.
SGUI_DEVPF_IF_DEFINE(void, SGUI_FN_IF_GET_RTC, (SGUI_INT iYear, SGUI_INT iMounth, SGUI_INT iDay, SGUI_INT iWeekDay, SGUI_INT iHour, SGUI_INT iMinute, SGUI_INT iSecond));
-SGUI_DEVPF_IF_DEFINE(SGUI_SIZE, SGUI_FN_IF_READ_FLASH, (SGUI_INT iSourceID, SGUI_ROM_ADDRESS adStartAddr, SGUI_SIZE sReadSize, SGUI_BYTE* pOutputBuffer));
-SGUI_DEVPF_IF_DEFINE(SGUI_INT, SGUI_FN_IF_GET_CHAR_INDEX, (SGUI_CSZSTR cszSrc));
+SGUI_DEVPF_IF_DEFINE(SGUI_INT, SGUI_FN_IF_GET_CHAR_INDEX, (SGUI_UINT32 uiCode));
+SGUI_DEVPF_IF_DEFINE(SGUI_CSZSTR, SGUI_FN_IF_STEP_NEXT, (SGUI_CSZSTR cszSrc, SGUI_UINT32* puiCode));
+SGUI_DEVPF_IF_DEFINE(SGUI_SIZE, SGUI_FN_IF_GET_DATA, (SGUI_SIZE sStartAddr, SGUI_BYTE* pDataBuffer, SGUI_SIZE sReadSize));
+SGUI_DEVPF_IF_DEFINE(SGUI_BOOL, SGUI_FN_IF_IS_FULL_WIDTH, (SGUI_UINT32 uiCode));
typedef struct
{
@@ -149,4 +132,24 @@ typedef struct
SGUI_FN_IF_REFRESH fnSyncBuffer;
}SGUI_SCR_DEV;
+typedef struct
+{
+ SGUI_INT iHeight;
+ SGUI_INT iHalfWidth;
+ SGUI_INT iFullWidth;
+ //SGUI_INT iHorizontalSpacing;
+ //SGUI_INT iVerticalSpacing;
+ SGUI_FN_IF_GET_CHAR_INDEX fnGetIndex;
+ SGUI_FN_IF_GET_DATA fnGetData;
+ SGUI_FN_IF_STEP_NEXT fnStepNext;
+ SGUI_FN_IF_IS_FULL_WIDTH fnIsFullWidth;
+}SGUI_FONT_RES;
+
+typedef struct
+{
+ SGUI_INT iHeight;
+ SGUI_INT iWidth;
+ SGUI_BYTE* pData;
+}SGUI_BMP_RES;
+
#endif // _INCLUDE_GUI_TYPEDEF_H_
diff --git a/GUI/src/SGUI_Basic.c b/GUI/src/SGUI_Basic.c
index 35d384e..02a5104 100644
--- a/GUI/src/SGUI_Basic.c
+++ b/GUI/src/SGUI_Basic.c
@@ -153,6 +153,7 @@ void SGUI_Basic_ClearScreen(SGUI_SCR_DEV* pstIFObj)
}
else
{
+ /* Draw a blank rectangle for clean screen when clean function is not supposed. */
SGUI_Basic_DrawRectangle(pstIFObj, 0, 0, RECT_WIDTH(pstIFObj->stSize), RECT_HEIGHT(pstIFObj->stSize), SGUI_COLOR_BKGCLR, SGUI_COLOR_BKGCLR);
}
}
@@ -439,13 +440,13 @@ void SGUI_Basic_ReverseBlockColor(SGUI_SCR_DEV* pstIFObj, SGUI_UINT uiStartX, SG
/** Params: **/
/** @ pstIFObj[in]: SimpleGUI object pointer. **/
/** @ pstDisplayArea[in]: Display area position and size. **/
-/** @ pstDataArea[in]: Data area size and display offset. **/
-/** @ pDataBuffer[in]: Bit map data buffer. **/
+/** @ pstInnerPos[in]: Data area size and display offset. **/
+/** @ pstBitmapData[in]: Bitmap object, include size and data. **/
/** @ eDrawMode[in] Bit map display mode(normal or reverse color). **/
/** Return: None. **/
/** Notice: None. **/
/*************************************************************************/
-void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayArea, SGUI_RECT_AREA* pstDataArea, SGUI_FLASH_DATA_SOURCE eDataSource, SGUI_ROM_ADDRESS adDataStartAddr, SGUI_DRAW_MODE eDrawMode)
+void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstInnerPos, SGUI_BMP_RES* pstBitmapData, SGUI_DRAW_MODE eDrawMode)
{
/*----------------------------------*/
/* Variable Declaration */
@@ -454,8 +455,7 @@ void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayAre
SGUI_INT iBmpPixX, iBmpPixY;
SGUI_UINT uiDrawnWidthIndex, uiDrawnHeightIndex;
SGUI_UINT uiPixIndex;
- SGUI_BYTE* pData;
- SGUI_SIZE sBitmapDataSize;
+ SGUI_BYTE* pData;
/*----------------------------------*/
/* Initialize */
@@ -468,66 +468,51 @@ void SGUI_Basic_DrawBitMap(SGUI_SCR_DEV* pstIFObj, SGUI_RECT_AREA* pstDisplayAre
/*----------------------------------*/
// Only draw in visible area of screen.
if( (RECT_X_START(*pstDisplayArea) < RECT_WIDTH(pstIFObj->stSize)) && (RECT_Y_START(*pstDisplayArea) < RECT_HEIGHT(pstIFObj->stSize)) &&
- (RECT_X_END(*pstDisplayArea) > 0) && (RECT_Y_END(*pstDisplayArea) > 0))
+ (RECT_X_END(*pstDisplayArea, *pstDisplayArea) > 0) && (RECT_Y_END(*pstDisplayArea, *pstDisplayArea) > 0))
{
- // Recalculate display area and data area.
- if(RECT_X_START(*pstDisplayArea) < 0)
- {
- RECT_X_START(*pstDataArea) += RECT_X_START(*pstDisplayArea);
- RECT_WIDTH(*pstDisplayArea) += RECT_X_START(*pstDisplayArea);
- RECT_X_START(*pstDisplayArea) = 0;
- }
- if(RECT_Y_START(*pstDisplayArea) < 0)
- {
- RECT_Y_START(*pstDataArea) += RECT_Y_START(*pstDisplayArea);
- RECT_HEIGHT(*pstDisplayArea) += RECT_Y_START(*pstDisplayArea);
- RECT_Y_START(*pstDisplayArea) = 0;
- }
+ // Adapt text display area and data area.
+ SGUI_Common_AdaptDisplayInfo(pstDisplayArea, pstInnerPos);
// Only process drawing when valid display data existed
- if((RECT_VALID_WIDTH(*pstDataArea) > 0) && (RECT_VALID_HEIGHT(*pstDataArea) > 0))
+ if((RECT_VALID_WIDTH(*pstBitmapData, *pstInnerPos) > 0) && (RECT_VALID_HEIGHT(*pstBitmapData, *pstInnerPos) > 0))
{
- // Calculate bitmap data size.
- sBitmapDataSize = pstDataArea->Width * ((pstDataArea->Height-1)/8+1);
- // Read flash data.
- SGUI_SystemIF_GetFlashData(pstIFObj, eDataSource, adDataStartAddr, sBitmapDataSize);
// Set loop start parameter of x coordinate
iDrawPixX = RECT_X_START(*pstDisplayArea);
iBmpPixX = 0;
- if(RECT_X_START(*pstDataArea) > 0)
+ if(RECT_X_START(*pstInnerPos) > 0)
{
- iDrawPixX += RECT_X_START(*pstDataArea);
+ iDrawPixX += RECT_X_START(*pstInnerPos);
}
else
{
- iBmpPixX -= RECT_X_START(*pstDataArea);
+ iBmpPixX -= RECT_X_START(*pstInnerPos);
}
uiDrawnWidthIndex = iBmpPixX;
// Loop for x coordinate;
- while((uiDrawnWidthIndexstSize)))
+ while((uiDrawnWidthIndexstSize)))
{
// Redirect to data array for column.
- pData = pstIFObj->arrBmpDataBuffer + iBmpPixX;
+ pData = pstBitmapData->pData+iBmpPixX;
// Set loop start parameter of y coordinate
iDrawPixY = RECT_Y_START(*pstDisplayArea);
iBmpPixY = 0;
- if(RECT_Y_START(*pstDataArea) > 0)
+ if(RECT_Y_START(*pstInnerPos) > 0)
{
- iDrawPixY += RECT_Y_START(*pstDataArea);
+ iDrawPixY += RECT_Y_START(*pstInnerPos);
}
else
{
- iBmpPixY -= RECT_Y_START(*pstDataArea);
+ iBmpPixY -= RECT_Y_START(*pstInnerPos);
}
uiDrawnHeightIndex = iBmpPixY;
uiPixIndex = iBmpPixY % 8;
- pData += (iBmpPixY / 8) * RECT_WIDTH(*pstDataArea);
+ pData += (iBmpPixY / 8) * RECT_WIDTH(*pstBitmapData);
// Loop for y coordinate;
- while((uiDrawnHeightIndexstSize)))
+ while((uiDrawnHeightIndexstSize)))
{
if(uiPixIndex == 8)
{
uiPixIndex = 0;
- pData += RECT_WIDTH(*pstDataArea);
+ pData += RECT_WIDTH(*pstBitmapData);
}
if(SGUI_GET_PAGE_BIT(*pData, uiPixIndex) != eDrawMode)
{
diff --git a/GUI/src/SGUI_Common.c b/GUI/src/SGUI_Common.c
index 6657df4..87163b5 100644
--- a/GUI/src/SGUI_Common.c
+++ b/GUI/src/SGUI_Common.c
@@ -14,6 +14,38 @@
//=======================================================================//
//= Function define. =//
//=======================================================================//
+/*************************************************************************/
+/** Function Name: SGUI_Common_AdaptDisplayInfo **/
+/** Purpose: Adapt display area data and internal position data **/
+/** order by display area position and screen size. **/
+/** Params: **/
+/** @ pstDisplayArea[in/out]: Display area info. **/
+/** @ pstInnerPos[in/out]: Display position info in display rectangular **/
+/** area . **/
+/** Return: None. **/
+/** Notice: This function will reset display information on **/
+/** given data, make sure the display area is within **/
+/** the screen area. **/
+/*************************************************************************/
+void SGUI_Common_AdaptDisplayInfo(SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstInnerPos)
+{
+ if((NULL != pstDisplayArea) && (NULL != pstInnerPos))
+ {
+ if(RECT_X_START(*pstDisplayArea) < 0)
+ {
+ RECT_X_START(*pstInnerPos) += RECT_X_START(*pstDisplayArea);
+ RECT_WIDTH(*pstDisplayArea) += RECT_X_START(*pstDisplayArea);
+ RECT_X_START(*pstDisplayArea) = 0;
+ }
+ if(RECT_Y_START(*pstDisplayArea) < 0)
+ {
+ RECT_Y_START(*pstInnerPos) += RECT_Y_START(*pstDisplayArea);
+ RECT_HEIGHT(*pstDisplayArea) += RECT_Y_START(*pstDisplayArea);
+ RECT_Y_START(*pstDisplayArea) = 0;
+ }
+ }
+}
+
/*************************************************************************/
/** Function Name: SGUI_Common_IntegerToStringWithDecimalPoint **/
/** Purpose: Convert number to a string and insert decimal point.**/
diff --git a/GUI/src/SGUI_FlashData.c b/GUI/src/SGUI_FlashData.c
index 760dc22..60bc255 100644
--- a/GUI/src/SGUI_FlashData.c
+++ b/GUI/src/SGUI_FlashData.c
@@ -11,6 +11,78 @@
#include "SGUI_Common.h"
#include "SGUI_FlashData.h"
+//=======================================================================//
+//= User Macro definition. =//
+//=======================================================================//
+#define SGUI_FONT_RES_DECLARE(NAME) SGUI_SIZE SGUI_Resource_GetFontData_##NAME(SGUI_SIZE sStartAddr, SGUI_BYTE* pDataBuffer, SGUI_SIZE sReadSize)
+#define SGUI_FONT_RES_DEFINE(NAME, SRC) SGUI_SIZE SGUI_Resource_GetFontData_##NAME(SGUI_SIZE sStartAddr, SGUI_BYTE* pDataBuffer, SGUI_SIZE sReadSize)\
+ {\
+ SGUI_SIZE sReadCount;\
+ const SGUI_BYTE* pSrc = SRC+sStartAddr;\
+ SGUI_BYTE* pDest = pDataBuffer;\
+ if(NULL != pDataBuffer)\
+ {\
+ for(sReadCount=0; sReadCount 0x19) && (uiCode < 0x7F))
+ {
+ iIndex = uiCode - (0x20);
+ }
+ return iIndex;
+}
+
+SGUI_CSZSTR SGUI_Resource_StepNext(SGUI_CSZSTR cszSrc, SGUI_UINT32* puiCode)
+{
+ /*----------------------------------*/
+ /* Variable Declaration */
+ /*----------------------------------*/
+ const SGUI_CHAR* pcNextChar;
+
+ /*----------------------------------*/
+ /* Initialize */
+ /*----------------------------------*/
+ pcNextChar = cszSrc;
+
+ /*----------------------------------*/
+ /* Process */
+ /*----------------------------------*/
+ if(NULL != pcNextChar)
+ {
+ *puiCode = *pcNextChar;
+ pcNextChar++;
+ }
+
+ return pcNextChar;
+}
+
+SGUI_BOOL SGUI_Resource_IsFullWidth_ASCII(SGUI_UINT32 uiCode)
+{
+ return SGUI_FALSE;
+}
+
+SGUI_FONT_RES_DEFINE(8, SGUI_FONT_H8);
+SGUI_FONT_RES_DEFINE(12, SGUI_FONT_H12);
+SGUI_FONT_RES_DEFINE(16, SGUI_FONT_H16);
diff --git a/GUI/src/SGUI_Interface.c b/GUI/src/SGUI_Interface.c
index 42b0fff..222f87b 100644
--- a/GUI/src/SGUI_Interface.c
+++ b/GUI/src/SGUI_Interface.c
@@ -449,87 +449,3 @@ SGUI_SZSTR SGUI_SystemIF_StringCopy(SGUI_SZSTR szDest, SGUI_CSZSTR szSrc)
return pcDestPtr;
}
-
-/*****************************************************************************/
-/** Function Name: SGUI_FlashData_GetFilash **/
-/** Purpose: Read a byte array form ROM(ex. flash). **/
-/** Params: **/
-/** @ pstIFObj[in]: SimpleGUI device interface object pointer. **/
-/** @ eDataSource[in]: Data source. **/
-/** @ adStartAddr[in]: Read data array start address in source. **/
-/** @ sReadSize[in]: Number of data want to read. **/
-/** Return: None. **/
-/** Notice: You can specify a data source by eDataSource parameter, **/
-/** and it always used when your data is in different ROM **/
-/** space yet. For example, Font data is in external flash **/
-/** and bitmap data is in chip. **/
-/** Text paint and bitmap paint in SimpleGUI are processed **/
-/** as bitmap yet, so tt is necessary to distinguish data **/
-/** sources in some cases. **/
-/** This function will be re-write when use in different **/
-/** hardware PF. **/
-/*****************************************************************************/
-SGUI_SIZE SGUI_SystemIF_GetFlashData(SGUI_SCR_DEV* pstIFObj, SGUI_FLASH_DATA_SOURCE eDataSource, SGUI_ROM_ADDRESS adStartAddr, SGUI_SIZE sReadSize)
-{
- /*----------------------------------*/
- /* Variable Declaration */
- /*----------------------------------*/
- SGUI_ROM_ADDRESS adBaseAddr;
- SGUI_BYTE* pOutPutDataPtr;
- SGUI_CBYTE* pDataSource;
- SGUI_SIZE sReadBytes;
-
- /*----------------------------------*/
- /* Initialize */
- /*----------------------------------*/
- adBaseAddr = adStartAddr;
- pOutPutDataPtr = pstIFObj->arrBmpDataBuffer;
- pDataSource = NULL;
-
- sReadBytes = 0;
-
- /*----------------------------------*/
- /* Process */
- /*----------------------------------*/
- if((eDataSource > SGUI_FONT_SRC_NONE) && (eDataSource < SGUI_FONT_SRC_UNKNOWN) && (sReadSize > 0))
- {
- switch(eDataSource)
- {
- case SGUI_FONT_SRC_H8:
- {
- pDataSource = SGUI_FONT_H8;
- break;
- }
- case SGUI_FONT_SRC_H12:
- {
- pDataSource = SGUI_FONT_H12;
- break;
- }
- case SGUI_FONT_SRC_H16:
- {
- pDataSource = SGUI_FONT_H16;
- break;
- }
-
- case SGUI_NOTICE_ICON:
- {
- pDataSource = SGUI_NOTICE_ICON_DATA;
- break;
- }
- default:
- {
- /* no valid data. */
- break;
- }
- }
-
- if(NULL != pDataSource)
- {
- for(sReadBytes=0; sReadBytesData);
pstSubElement = &(pstList->SubElement);
// Initialize visible area control parameter.
- pstListControl->ListTitleHeight = LIST_TITLE_HEIGHT(pstList->FontSize); // List title height, Include border.
+ pstListControl->ListTitleHeight = LIST_TITLE_HEIGHT(pstList->FontRes->iHeight); // List title height, Include border.
pstListControl->PageStartIndex = 0;
pstListControl->SelectIndex = 0;
pstListControl->ItemPosYOffSet = 0;
pstListControl->FirstVisibleItemPosY = LIST_RECT_START_Y(pstListData->Rect)+LIST_EDGE_SIZE;
- pstListControl->ListItemHeight = g_stFontSize[pstList->FontSize].Height + (LIST_ITEM_TEXT_BLANK_EDGEY*2);
+ pstListControl->ListItemHeight = pstList->FontRes->iHeight + (LIST_ITEM_TEXT_BLANK_EDGEY*2);
pstListControl->VisibleItemsAreaHeight = LIST_RECT_HEIGHT(pstListData->Rect)-LIST_EDGE_SIZE*2;
// Reset list items display area when title is existed.
if(NULL != pstList->Data.Title)
@@ -211,7 +211,7 @@ void SGUI_List_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_List_STRUCT* pstList)
stTitleTextDisplayArea.Width = pstListData->Rect.Width - 4;
stTitleTextDisplayArea.Height = g_stFontSize[pstList->FontSize].Height;
- SGUI_Text_DrawSingleLineText(pstIFObj, pstListData->Title, pstList->FontSize,
+ SGUI_Text_DrawSingleLineText(pstIFObj, pstListData->Title, SGUI_DEFAULT_FONT,
&stTitleTextDisplayArea, &stTitleTextDataArea, SGUI_DRAW_NORMAL);
}
// Draw list items
@@ -413,7 +413,7 @@ void SGUI_List_DrawItem(SGUI_SCR_DEV* pstIFObj, SGUI_List_STRUCT* pstList, SGUI_
// Draw list item text.
SGUI_Text_DrawSingleLineText( pstIFObj,
- pstListItemPointer->Text, pstList->FontSize,
+ pstListItemPointer->Text, SGUI_DEFAULT_FONT,
&stItemTextDisplayArea, &stItemTextDataArea, SGUI_DRAW_NORMAL);
// Prepare draw parameter text.
@@ -470,7 +470,7 @@ void SGUI_List_DrawItem(SGUI_SCR_DEV* pstIFObj, SGUI_List_STRUCT* pstList, SGUI_
}
}
// Draw parameter text.
- SGUI_Text_DrawSingleLineText(pstIFObj, szParameterStringBuffer, pstList->FontSize, &stItemTextDisplayArea, &stItemTextDataArea, SGUI_DRAW_NORMAL);
+ SGUI_Text_DrawSingleLineText(pstIFObj, szParameterStringBuffer, SGUI_DEFAULT_FONT, &stItemTextDisplayArea, &stItemTextDataArea, SGUI_DRAW_NORMAL);
}
}
}
diff --git a/GUI/src/SGUI_Notice.c b/GUI/src/SGUI_Notice.c
index f90fbb7..31dd7bf 100644
--- a/GUI/src/SGUI_Notice.c
+++ b/GUI/src/SGUI_Notice.c
@@ -33,8 +33,8 @@
#define NOTICE_TEXT_POSX_NOICON (NOTICE_BOX_POSX+NOTICE_BOX_MARGIN*2)
#define NOTICE_TEXT_POSX (NOTICE_TEXT_POSX_NOICON+NOTICE_ICON_SIZE+NOTICE_BOX_MARGIN*2)
#define NOTICE_TEXT_POSY(SCR_OBJ, HEIGHT) (NOTICE_BOX_POSY(SCR_OBJ, HEIGHT)+NOTICE_BOX_MARGIN)
-#define NOTICE_TEXT_LINES_MAX(SCR_OBJ, FONT_SIZE) (NOTICE_TEXT_AREA_WIDTH(SCR_OBJ)/g_stFontSize[FONT_SIZE].Width)
-#define NOTICE_TEXT_LINES_MAX_NOICON(SCR_OBJ, FONT_SIZE) (NOTICE_TEXT_AREA_WIDTH_NOICON(SCR_OBJ)/g_stFontSize[FONT_SIZE].Width)
+#define NOTICE_TEXT_LINES_MAX(SCR_OBJ, FONT_WIDTH) (NOTICE_TEXT_AREA_WIDTH(SCR_OBJ)/FONT_WIDTH)
+#define NOTICE_TEXT_LINES_MAX_NOICON(SCR_OBJ, FONT_WIDTH) (NOTICE_TEXT_AREA_WIDTH_NOICON(SCR_OBJ)/FONT_WIDTH)
//=======================================================================//
//= Function define. =//
@@ -52,7 +52,7 @@
/** Return: Remaining text height display. **/
/** Notice: None. **/
/*************************************************************************/
-SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText, SGUI_FONT_SIZE iFontSize, SGUI_INT uiTextOffset, SGUI_NOTICE_ICON_IDX eIcon)
+SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText, const SGUI_FONT_RES* pstFontRes, SGUI_INT uiTextOffset, SGUI_NOTICE_ICON_IDX eIcon)
{
/*----------------------------------*/
/* Variable Declaration */
@@ -62,7 +62,8 @@ SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText,
SGUI_SIZE uiTextLines;
SGUI_RECT_AREA stTextDisplayArea;
SGUI_RECT_AREA stIconDisplayArea, stIconDataArea;
- SGUI_CSZSTR pszNoticeTextPtr;
+ SGUI_CSZSTR pszNoticeTextPtr;
+ SGUI_SIZE sIconDataAddr;
/*----------------------------------*/
/* Process */
@@ -72,11 +73,11 @@ SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText,
// Get max line of notice text.
if(SGUI_ICON_NONE != eIcon)
{
- uiLineCount = SGUI_Text_GetMultiLineTextLines(pszNoticeTextPtr, NOTICE_TEXT_LINES_MAX(*pstIFObj, iFontSize));
+ uiLineCount = SGUI_Text_GetMultiLineTextLines(pszNoticeTextPtr, NOTICE_TEXT_LINES_MAX(*pstIFObj, pstFontRes->iHalfWidth));
}
else
{
- uiLineCount = SGUI_Text_GetMultiLineTextLines(pszNoticeTextPtr, NOTICE_TEXT_LINES_MAX_NOICON(*pstIFObj, iFontSize));
+ uiLineCount = SGUI_Text_GetMultiLineTextLines(pszNoticeTextPtr, NOTICE_TEXT_LINES_MAX_NOICON(*pstIFObj, pstFontRes->iHalfWidth));
}
if(uiLineCount < 2)
{
@@ -100,7 +101,12 @@ SGUI_SIZE SGUI_Notice_Repaint(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szNoticeText,
stIconDataArea.PosY = 0;
stIconDataArea.Width = NOTICE_ICON_SIZE;
stIconDataArea.Height = NOTICE_ICON_SIZE;
- SGUI_Basic_DrawBitMap(pstIFObj, &stIconDisplayArea, &stIconDataArea, SGUI_NOTICE_ICON, eIcon*(NOTICE_ICON_SIZE*(NOTICE_ICON_SIZE/8)), SGUI_DRAW_NORMAL);
+
+ sIconDataAddr = (NOTICE_ICON_SIZE*NOTICE_ICON_SIZE/8)*eIcon;
+
+ SGUI_SystemIF_GetFlashData(pstIFObj, SGUI_NOTICE_ICON, sIconDataAddr, NOTICE_ICON_SIZE*NOTICE_ICON_SIZE);
+
+ SGUI_Basic_DrawBitMap(pstIFObj, &stIconDisplayArea, &stIconDataArea, pstIFObj->arrBmpDataBuffer, SGUI_DRAW_NORMAL);
}
// Draw text;
if(SGUI_ICON_NONE != eIcon)
diff --git a/GUI/src/SGUI_Text.c b/GUI/src/SGUI_Text.c
index 6d4eb15..9c7dda8 100644
--- a/GUI/src/SGUI_Text.c
+++ b/GUI/src/SGUI_Text.c
@@ -14,503 +14,317 @@
//=======================================================================//
//= Static variable declaration. =//
//=======================================================================//
-const SGUI_FONT_SIZE_STRUCT g_stFontSize[SGUI_FONT_SIZE_MAX] = { {6, 4, 6, 4},
- {8, 6, 8, 6},
- {12, 6, 12, 12},
- {16, 8, 16, 16},
- {24, 12, 24, 36},
- {32, 16, 32, 64}};
//=======================================================================//
//= Static function declaration. =//
//=======================================================================//
-static SGUI_SIZE SGUI_Text_GetCharacterTableIndex(SGUI_UINT16 uiCharacterCode);
-static SGUI_FLASH_DATA_SOURCE SGUI_Text_GetFontResource(SGUI_FONT_SIZE eFontSize);
//=======================================================================//
//= Function define. =//
//=======================================================================//
+/*************************************************************************/
+/** Function Name: SGUI_Text_GetTextExtent **/
+/** Purpose: Get the area size if show given text completely. **/
+/** Params: **/
+/** @ szText[in]: Text array pointer. **/
+/** @ pstFontRes[in]: Font resource, improve font size info. **/
+/** @ pstTextExtent[out]: Text extent size. **/
+/** Return: Next character X coordinate in current line. **/
+/** Limitation: None. **/
+/*************************************************************************/
+void SGUI_Text_GetTextExtent(SGUI_CSZSTR cszText, const SGUI_FONT_RES* pstFontRes, SGUI_AREA_SIZE* pstTextExtent)
+{
+ /*----------------------------------*/
+ /* Variable Declaration */
+ /*----------------------------------*/
+ const SGUI_CHAR* pcChar;
+ SGUI_UINT32 uiCharacterCode;
+
+ /*----------------------------------*/
+ /* Initialize */
+ /*----------------------------------*/
+ pcChar = cszText;
+
+ /*----------------------------------*/
+ /* Process */
+ /*----------------------------------*/
+ if((NULL != pcChar) && (NULL != pstTextExtent))
+ {
+ pstTextExtent->iHeight = pstFontRes->iHeight;
+ pstTextExtent->iWidth=0;
+ while('\0' != *pcChar)
+ {
+ uiCharacterCode = 0;
+ pcChar = pstFontRes->fnStepNext(pcChar, &uiCharacterCode);
+ if(SGUI_IS_VISIBLE_CHAR(uiCharacterCode))
+ {
+ pstTextExtent->iWidth+=(pstFontRes->fnIsFullWidth(uiCharacterCode)?pstFontRes->iFullWidth:pstFontRes->iHalfWidth);
+ }
+ }
+ }
+}
/*************************************************************************/
/** Function Name: SGUI_Text_DrawSingleLineText **/
/** Purpose: Write a single line text in a fixed area. **/
/** Params: **/
-/** @szText[in]: Text array pointer. **/
-/** @eFontSize[in]: Font size. **/
-/** @pstDisplayArea[in]: Display area size. **/
-/** @pstTextDataArea[in]: Text area size. **/
-/** @eFontMode[in] Character display mode(normal or reverse color).**/
-/** Return: Next character X coordinate in current line. **/
-/** Limitation: None. **/
+/** @ pstIFObj[in]: SimpleGUI object pointer. **/
+/** @ cszText[in]: Text array pointer. **/
+/** @ pstFontRes[in]: Font resource object. **/
+/** @ pstDisplayArea[in]: Display area size. **/
+/** @ pstInnerPos[in]: Text paint position in display area. **/
+/** @ eFontMode[in] Character display mode(normal or reverse color). **/
+/** Return: None. **/
/*************************************************************************/
-void SGUI_Text_DrawSingleLineText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szText, SGUI_FONT_SIZE eFontSize, SGUI_RECT_AREA* pstDisplayArea, SGUI_RECT_AREA* pstTextDataArea, SGUI_DRAW_MODE eFontMode)
+void SGUI_Text_DrawText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR cszText, const SGUI_FONT_RES* pstFontRes, SGUI_RECT_AREA* pstDisplayArea, SGUI_POINT* pstInnerPos, SGUI_DRAW_MODE eFontMode)
{
+
/*----------------------------------*/
/* Variable Declaration */
/*----------------------------------*/
- SGUI_SZSTR pcTextPointer; // Text character pointer.
- SGUI_UINT16 uiCodeHighByte, uiCodeLowByte, uiCharacterCode; // Character byte, might be tow bytes.
- SGUI_UINT16 uiFontWidth, uiFontHeight, uiCharacterWidth; // Font size and character graphics width.
- SGUI_UINT32 uiCharacterDataSize;
- SGUI_RECT_AREA stCharacterDataArea = {0};
+ const SGUI_CHAR* pcChar; // Text character pointer.
+ SGUI_UINT32 uiCharacterCode; // Character byte, might be tow bytes.
SGUI_COLOR eBackColor;
- SGUI_FLASH_DATA_SOURCE eFontResource;
- SGUI_ROM_ADDRESS adFontDataAddr;
- SGUI_INT iFontDataIndex;
+ SGUI_BMP_RES stCharBitmap;
+ SGUI_POINT stPaintPos;
/*----------------------------------*/
/* Initialize */
/*----------------------------------*/
// Initialize variable.
- pcTextPointer = (SGUI_SZSTR)ENCODE(szText);
- uiCharacterCode = 0x0000;
+ pcChar = cszText;
+ uiCharacterCode = 0x00000000;
eBackColor = (eFontMode == SGUI_DRAW_NORMAL)?SGUI_COLOR_BKGCLR:SGUI_COLOR_FRGCLR;
- // Get font graphics size.
- uiFontWidth = g_stFontSize[eFontSize].Width;
- uiFontHeight = g_stFontSize[eFontSize].Height;
- uiCharacterDataSize = (((uiFontHeight-1)/8)+1)*uiFontWidth;
- eFontResource = SGUI_Text_GetFontResource(eFontSize);
+
/*----------------------------------*/
/* Process */
/*----------------------------------*/
- if((szText != NULL) && (RECT_X_START(*pstDisplayArea) < RECT_WIDTH(pstIFObj->stSize)) && (SGUI_FONT_SRC_UNKNOWN != eFontResource))
- {
- // Recalculate text display area and data area.
- if(RECT_X_START(*pstDisplayArea) < 0)
- {
- RECT_X_START(*pstTextDataArea) += RECT_X_START(*pstDisplayArea);
- RECT_WIDTH(*pstDisplayArea) += RECT_X_START(*pstDisplayArea);
- RECT_X_START(*pstDisplayArea) = 0;
- }
- if(RECT_Y_START(*pstDisplayArea) < 0)
- {
- RECT_Y_START(*pstTextDataArea) += RECT_Y_START(*pstDisplayArea);
- RECT_HEIGHT(*pstDisplayArea) += RECT_Y_START(*pstDisplayArea);
- RECT_Y_START(*pstDisplayArea) = 0;
- }
+ if((NULL != pcChar) && (RECT_X_START(*pstDisplayArea) < RECT_WIDTH(pstIFObj->stSize)))
+ {
+ // Adapt text display area and data area.
+ SGUI_Common_AdaptDisplayInfo(pstDisplayArea, pstInnerPos);
// Clear text area.
SGUI_Basic_DrawRectangle(pstIFObj, RECT_X_START(*pstDisplayArea), RECT_Y_START(*pstDisplayArea),
RECT_WIDTH(*pstDisplayArea), RECT_HEIGHT(*pstDisplayArea),
eBackColor, eBackColor);
// Initialize drawing area data.
- RECT_X_START(stCharacterDataArea) = RECT_X_START(*pstTextDataArea);
- RECT_Y_START(stCharacterDataArea) = RECT_Y_START(*pstTextDataArea);
- RECT_HEIGHT(stCharacterDataArea) = uiFontHeight;
+ RECT_X_START(stPaintPos) = RECT_X_START(*pstInnerPos);
+ RECT_Y_START(stPaintPos) = RECT_Y_START(*pstInnerPos);
+ RECT_HEIGHT(stCharBitmap) = pstFontRes->iHeight;
+ stCharBitmap.pData = pstIFObj->arrBmpDataBuffer;
+
// Loop for Each char.
- while(((NULL != pcTextPointer) && ('\0' != *pcTextPointer)) && (RECT_X_START(stCharacterDataArea) < RECT_WIDTH(*pstDisplayArea)))
+ while(((NULL != pcChar) && ('\0' != *pcChar)) && (RECT_X_START(stPaintPos) < RECT_WIDTH(*pstDisplayArea)))
{
- // Get character.
- uiCodeHighByte = 0x00;
- uiCodeLowByte = 0x00;
- // Process with ASCII code.
- if((SGUI_BYTE)(*pcTextPointer) < 0x7F)
+ uiCharacterCode = 0;
+ pcChar = pstFontRes->fnStepNext(pcChar, &uiCharacterCode);
+ if(SGUI_IS_VISIBLE_CHAR(uiCharacterCode))
{
- uiCodeLowByte = (SGUI_BYTE)(*pcTextPointer);
- uiCharacterWidth = uiFontWidth;
- pcTextPointer++;
+ RECT_WIDTH(stCharBitmap) = pstFontRes->fnIsFullWidth(uiCharacterCode)?pstFontRes->iFullWidth:pstFontRes->iHalfWidth;
+ if(RECT_X_END(stCharBitmap, stPaintPos) >= 0)
+ {
+ SGUI_Text_GetCharacterData(pstFontRes, uiCharacterCode, pstIFObj->arrBmpDataBuffer, SGUI_BMP_DATA_BUFFER_SIZE);
+ SGUI_Basic_DrawBitMap(pstIFObj, pstDisplayArea, &stPaintPos, &stCharBitmap, eFontMode);
+ }
+ RECT_X_START(stPaintPos) += RECT_WIDTH(stCharBitmap);
}
- // Process with GB2312.
- else if(((SGUI_BYTE)(*pcTextPointer) >= 0xA1) && ((SGUI_BYTE)(*pcTextPointer) <= 0xF7))
- {
- uiCodeHighByte = (SGUI_BYTE)*pcTextPointer++;
- uiCodeLowByte = (SGUI_BYTE)*pcTextPointer++;
- uiCharacterWidth = uiFontWidth << 1; //uiCharacterWidth = uiFontWidth * 2; for full-width character;
- }
- // Invalid character
- else
- {
- uiCharacterWidth = 0;
- pcTextPointer++;
- continue;
- }
- uiCharacterCode = uiCodeHighByte;
- uiCharacterCode = uiCharacterCode << 8;
- uiCharacterCode = uiCharacterCode | uiCodeLowByte;
-
- RECT_WIDTH(stCharacterDataArea) = uiCharacterWidth;
-
- if(RECT_X_END(stCharacterDataArea) >= 0)
- {
- iFontDataIndex = SGUI_Text_GetCharacterTableIndex(uiCharacterCode);
- adFontDataAddr = iFontDataIndex * uiCharacterDataSize;
- SGUI_Basic_DrawBitMap(pstIFObj, pstDisplayArea, &stCharacterDataArea, eFontResource, adFontDataAddr, eFontMode);
- }
- RECT_X_START(stCharacterDataArea) += uiCharacterWidth;
}
}
}
-
-/*****************************************************************************/
-/** Function Name: GUI_DrawMultipleLinesText **/
-/** Purpose: Write a mulitiplt line text in a rectangular area. **/
-/** Params: **/
-/** @szText[in]: Text array pointer. **/
-/** @eFontSize[in]: Font size. **/
-/** @pstDisplayArea[in]: Display area size. **/
-/** @eFontMode[in]: Character display mode(normal or reverse color). **/
-/** Return: Next character X coordinate in current line. **/
-/** Notice: None. **/
-/*****************************************************************************/
-SGUI_SIZE SGUI_Text_DrawMultipleLinesText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR szText, SGUI_FONT_SIZE eFontSize, SGUI_RECT_AREA* pstDisplayArea, SGUI_INT iTopOffset, SGUI_DRAW_MODE eFontMode)
+/*************************************************************************/
+/** Function Name: GUI_DrawMultipleLinesText **/
+/** Purpose: Write a mulitiplt line text in a rectangular area. **/
+/** Params: **/
+/** @ pstIFObj[in]: SimpleGUI object pointer. **/
+/** @ cszText[in]: Text array pointer. **/
+/** @ pstFontRes[in]: Font resource object. **/
+/** @ pstDisplayArea[in]: Display area size. **/
+/** @ iTopOffset[in]: Text paint offset in vertical. **/
+/** @ eFontMode[in]: Character display mode(normal or reverse color). **/
+/** Return: Used line count. **/
+/** Notice: None. **/
+/*************************************************************************/
+SGUI_SIZE SGUI_Text_DrawMultipleLinesText(SGUI_SCR_DEV* pstIFObj, SGUI_CSZSTR cszText, const SGUI_FONT_RES* pstFontRes, SGUI_RECT_AREA* pstDisplayArea, SGUI_INT iTopOffset, SGUI_DRAW_MODE eFontMode)
{
/*----------------------------------*/
/* Variable Declaration */
/*----------------------------------*/
- SGUI_SZSTR pcTextPointer;
- SGUI_UINT16 uiCodeHighByte, uiCodeLowByte, uiCharacterCode;
- SGUI_UINT16 uiFontWidth, uiFontHeight;
- SGUI_UINT32 uiCharacterDataSize;
+ const SGUI_CHAR* pcChar;
+ SGUI_UINT32 uiCharacterCode;
SGUI_SIZE uiLines;
- SGUI_RECT_AREA stCharacterDataArea = {0};
SGUI_COLOR eBackColor;
- SGUI_FLASH_DATA_SOURCE eFontResource;
- SGUI_ROM_ADDRESS adFontDataAddr;
- SGUI_INT iFontDataIndex;
+ SGUI_BMP_RES stCharBitmap;
+ SGUI_POINT stPaintPos;
+ SGUI_INT iStartOffsetX;
/*----------------------------------*/
/* Initialize */
/*----------------------------------*/
- pcTextPointer = (SGUI_SZSTR)ENCODE(szText);
- uiCharacterCode = 0x0000;
+ pcChar = cszText;
+ uiCharacterCode = 0;
uiLines = 0;
eBackColor = (eFontMode == SGUI_DRAW_NORMAL)?SGUI_COLOR_BKGCLR:SGUI_COLOR_FRGCLR;
- // Get font graphics size.
- uiFontWidth = g_stFontSize[eFontSize].Width;
- uiFontHeight = g_stFontSize[eFontSize].Height;
- uiCharacterDataSize = (((uiFontHeight-1)/8)+1)*uiFontWidth;
- eFontResource = SGUI_Text_GetFontResource(eFontSize);
/*----------------------------------*/
/* Process */
/*----------------------------------*/
- if((szText != NULL) && (RECT_X_START(*pstDisplayArea) < RECT_WIDTH(pstIFObj->stSize)))
+ if((cszText != NULL) && (RECT_X_START(*pstDisplayArea) < RECT_WIDTH(pstIFObj->stSize)))
{
- // Recalculate text display area and data area.
- if(RECT_X_START(*pstDisplayArea) < 0)
- {
- RECT_X_START(stCharacterDataArea) += RECT_X_START(*pstDisplayArea);
- RECT_WIDTH(*pstDisplayArea) += RECT_X_START(*pstDisplayArea);
- RECT_X_START(*pstDisplayArea) = 0;
- }
- if(RECT_Y_START(*pstDisplayArea) < 0)
- {
- RECT_Y_START(stCharacterDataArea) += RECT_Y_START(*pstDisplayArea);
- RECT_HEIGHT(*pstDisplayArea) += RECT_Y_START(*pstDisplayArea);
- RECT_Y_START(*pstDisplayArea) = 0;
- }
+ // Initialize drawing position.
+ RECT_X_START(stPaintPos) = 0;
+ RECT_Y_START(stPaintPos) = iTopOffset;
+ // Adapt text display area and data area.
+ SGUI_Common_AdaptDisplayInfo(pstDisplayArea, &stPaintPos);
+ iStartOffsetX = stPaintPos.iPosX;
// Clear text area.
SGUI_Basic_DrawRectangle(pstIFObj,
RECT_X_START(*pstDisplayArea), RECT_Y_START(*pstDisplayArea),
RECT_WIDTH(*pstDisplayArea), RECT_HEIGHT(*pstDisplayArea),
eBackColor, eBackColor);
- // Initialize drawing area data.
- RECT_X_START(stCharacterDataArea) = 0;
- RECT_Y_START(stCharacterDataArea) = iTopOffset;
- RECT_HEIGHT(stCharacterDataArea) = uiFontHeight;
- uiLines = 1;
+ RECT_HEIGHT(stCharBitmap) = pstFontRes->iHeight;
+ uiLines = 1;
+ stCharBitmap.pData = pstIFObj->arrBmpDataBuffer;
// Loop for each word in display area.
- if(NULL != pcTextPointer)
- {
- while(*pcTextPointer != '\0')
- {
- uiCodeHighByte = 0x00;
- uiCodeLowByte = 0x00;
- // Judge change line symbol.
- if(*pcTextPointer == '\n')
- {
- if(RECT_X_START(stCharacterDataArea) == 0)
- {
- // Ignore change lines in line start.
- }
- else
- {
- // Change lines.
- RECT_X_START(stCharacterDataArea) = 0;
- RECT_Y_START(stCharacterDataArea) += uiFontHeight;
- uiLines ++;
- }
- pcTextPointer++;
- continue;
- }
- // Process with ASCII code.
- if(((SGUI_BYTE)(*pcTextPointer) < 0x7F) && ((SGUI_BYTE)(*pcTextPointer) >= 0x20))
- {
- uiCodeLowByte = (SGUI_BYTE)*pcTextPointer++;
- RECT_WIDTH(stCharacterDataArea) = uiFontWidth;
- }
- // Process with GB2312.
- else if(((SGUI_BYTE)(*pcTextPointer) >= 0xA1) && ((SGUI_BYTE)(*pcTextPointer) <= 0xF7))
- {
- uiCodeHighByte = (SGUI_BYTE)*pcTextPointer++;
- uiCodeLowByte = (SGUI_BYTE)*pcTextPointer++;
- RECT_WIDTH(stCharacterDataArea) = uiFontWidth << 1;
- }
- // Invalid character
- else
- {
- pcTextPointer++;
- RECT_WIDTH(stCharacterDataArea) = 0;
- continue;
- }
- uiCharacterCode = uiCodeHighByte;
- uiCharacterCode = uiCharacterCode << 8;
- uiCharacterCode = uiCharacterCode | uiCodeLowByte;
+ while(((NULL != pcChar) && ('\0' != *pcChar)))
+ {
+ uiCharacterCode = 0;
+ pcChar = pstFontRes->fnStepNext(pcChar, &uiCharacterCode);
- // Judge change line
- if(RECT_X_END(stCharacterDataArea) >= RECT_WIDTH(*pstDisplayArea))
- {
- // Change lines.
- RECT_X_START(stCharacterDataArea) = 0;
- RECT_Y_START(stCharacterDataArea) += uiFontHeight;
- uiLines ++;
- }
- // Draw characters.
- if((RECT_Y_END(stCharacterDataArea) >= 0) && (RECT_Y_START(stCharacterDataArea) < RECT_HEIGHT(*pstDisplayArea)))
- {
- // Draw character.
- iFontDataIndex = SGUI_Text_GetCharacterTableIndex(uiCharacterCode);
- adFontDataAddr = iFontDataIndex * uiCharacterDataSize;
- SGUI_Basic_DrawBitMap(pstIFObj, pstDisplayArea, &stCharacterDataArea, eFontResource, adFontDataAddr, eFontMode);
+ // Judge change line symbol.
+ if(uiCharacterCode == '\n')
+ {
+ // Change lines.
+ RECT_X_START(stPaintPos) = iStartOffsetX;
+ RECT_Y_START(stPaintPos) += pstFontRes->iHeight;
+ uiLines ++;
+ continue;
+ }
+ // Get character width;
+ RECT_WIDTH(stCharBitmap) = pstFontRes->fnIsFullWidth(uiCharacterCode)?pstFontRes->iFullWidth:pstFontRes->iHalfWidth;
- }
- else
- {
- // character is not in visible area, ignore.
- }
- RECT_X_START(stCharacterDataArea) += RECT_WIDTH(stCharacterDataArea);
- }
- }
+ // Judge change line
+ if(RECT_X_END(stCharBitmap, stPaintPos) >= RECT_WIDTH(*pstDisplayArea))
+ {
+ // Change lines.
+ RECT_X_START(stPaintPos) = iStartOffsetX;
+ RECT_Y_START(stPaintPos) += pstFontRes->iHeight;
+ uiLines ++;
+ }
+ // Draw characters.
+ if((RECT_Y_END(stCharBitmap, stPaintPos) >= 0) && (RECT_Y_START(stPaintPos) < RECT_HEIGHT(*pstDisplayArea)))
+ {
+ // Draw character.
+ SGUI_Text_GetCharacterData(pstFontRes, uiCharacterCode, pstIFObj->arrBmpDataBuffer, SGUI_BMP_DATA_BUFFER_SIZE);
+ SGUI_Basic_DrawBitMap(pstIFObj, pstDisplayArea, &stPaintPos, &stCharBitmap, eFontMode);
+ }
+ else
+ {
+ // character is not in visible area, ignore.
+ }
+ RECT_X_START(stPaintPos) += RECT_WIDTH(stCharBitmap);
+ }
}
return uiLines;
}
-/*****************************************************************************/
-/** Function Name: SGUI_Text_GetCharacterTableIndex **/
-/** Purpose: Get character index in font mode table. **/
-/** Params: **/
-/** @uiCharacterCode[in]: Data buffer pointer of read font data. **/
-/** Return: Font mode data index in table. **/
-/** Limitation: This function need to override when use external flash **/
-/** ROM data, user must redefine the data offset by the **/
-/** actual data. **/
-/*****************************************************************************/
-SGUI_SIZE SGUI_Text_GetCharacterTableIndex(SGUI_UINT16 uiCharacterCode)
+/*************************************************************************/
+/** Function Name: SGUI_Text_GetMultiLineTextLines **/
+/** Purpose: Get a string's lines in a fixed width area. **/
+/** Resources: None. **/
+/** Params: **/
+/** @ cszText[in]: Text array pointer. **/
+/** @ pstFontRes[in]: Font resource object. **/
+/** @ uiDisplayAreaWidth[in]: Display area width. **/
+/** Return: String lines. **/
+/*************************************************************************/
+SGUI_SIZE SGUI_Text_GetMultiLineTextLines(SGUI_CSZSTR cszText, const SGUI_FONT_RES* pstFontRes, SGUI_SIZE uiDisplayAreaWidth)
{
/*----------------------------------*/
/* Variable Declaration */
/*----------------------------------*/
- SGUI_UINT16 uiCharacterCodeHighByte;
- SGUI_UINT16 uiCharacterCodeLowByte;
- SGUI_SIZE uiFontTableIndex;
+ SGUI_SIZE uiLineNumber, uiLineLength;
+ SGUI_UINT32 uiCharacterCode;
+ SGUI_UINT16 uiCharWidth;
+ SGUI_CSZSTR pcChar;
/*----------------------------------*/
/* Initialize */
/*----------------------------------*/
- uiCharacterCodeHighByte = (uiCharacterCode >> 8) & 0x00FF;
- uiCharacterCodeLowByte = uiCharacterCode & 0x00FF;
+ uiLineLength = 0;
+ uiLineNumber = 1;
+ pcChar = cszText;
/*----------------------------------*/
/* Process */
/*----------------------------------*/
- // ASCII code.
- if((0 == uiCharacterCodeHighByte) && (uiCharacterCodeLowByte < 128))
+ while('\0' != *pcChar)
{
- uiFontTableIndex = (uiCharacterCodeLowByte + FONT_LIB_OFFSET_ASCII);
- }
- // GB2312 punctuation
- else if((0xAA > uiCharacterCodeHighByte) && (0xA0 < uiCharacterCodeHighByte))
- {
- uiFontTableIndex = ((((uiCharacterCodeHighByte-0xA1)*94 + (uiCharacterCodeLowByte-0xA1))*2) + FONT_LIB_OFFSET_GB2312_SYMBOL);
- }
- // GB2312 level one character.
- else if((0xF8 > uiCharacterCodeHighByte) && (0xAF < uiCharacterCodeHighByte))
- {
- uiFontTableIndex = ((((uiCharacterCodeHighByte-0xB0)*94 + (uiCharacterCodeLowByte-0xA1))*2) + FONT_LIB_OFFSET_GB2312_CHARL1);
- }
- // Other to return full width space.
- else
- {
- uiFontTableIndex = FONT_LIB_OFFSET_GB2312_SYMBOL; // Full-size space.
- }
-
- return uiFontTableIndex;
-}
-
-/*****************************************************************************/
-/** Function Name: SGUI_Text_GetTextGraphicsWidth **/
-/** Purpose: Get text displayed full width. **/
-/** Params: **/
-/** @szText[in]: Text pointer. **/
-/** @eFontSize[in]: Font size, usually means font height. **/
-/** Return: None. **/
-/** Notice: Only used with Equal-width characters. **/
-/*****************************************************************************/
-SGUI_SIZE SGUI_Text_GetTextGraphicsWidth(SGUI_CSZSTR szText, SGUI_FONT_SIZE eFontSize)
-{
- /*----------------------------------*/
- /* Variable Declaration */
- /*----------------------------------*/
- SGUI_SIZE uiTextHalfCharLength;
- SGUI_UINT16 uiHalfFontWidth;
- SGUI_SIZE uiTextGraphicsWidth;
- /*----------------------------------*/
- /* Initialize */
- /*----------------------------------*/
- uiTextHalfCharLength = 0;
- uiTextGraphicsWidth = 0;
- /*----------------------------------*/
- /* Process */
- /*----------------------------------*/
- if(NULL != szText)
- {
- uiTextHalfCharLength = SGUI_SystemIF_StringLength(ENCODE(szText));
- uiHalfFontWidth = g_stFontSize[eFontSize].Width;
- uiTextGraphicsWidth = uiHalfFontWidth * uiTextHalfCharLength;
- }
- return uiTextGraphicsWidth;
-}
-
-
-/*****************************************************************************/
-/** Function Name: SGUI_Text_GetMultiLineTextLines **/
-/** Purpose: Get a string's lines in a fixed width area. **/
-/** Resources: None. **/
-/** Params: **/
-/** @szNoticeText[in]: Notice text resource. **/
-/** @uiHalfWidthCharInLine[in]: Max number of half-width character in each **/
-/** line. **/
-/** Return: String lines. **/
-/** Notice: None. **/
-/*****************************************************************************/
-SGUI_SIZE SGUI_Text_GetMultiLineTextLines(SGUI_CSZSTR szNoticeText, SGUI_SIZE uiHalfWidthCharInLine)
-{
- /*----------------------------------*/
- /* Variable Declaration */
- /*----------------------------------*/
- SGUI_SIZE uiLineCount, uiLineByteCount;
- SGUI_CSZSTR pcCur;
-
- /*----------------------------------*/
- /* Initialize */
- /*----------------------------------*/
- uiLineByteCount = 0;
- uiLineCount = 1;
- pcCur = ENCODE(szNoticeText);
-
- /*----------------------------------*/
- /* Process */
- /*----------------------------------*/
- if(NULL != pcCur)
- {
- while('\0' != *pcCur)
+ uiCharacterCode = 0;
+ pcChar = pstFontRes->fnStepNext(pcChar, &uiCharacterCode);
+ if('\n' == uiCharacterCode)
{
- if(*pcCur == '\n')
+ uiLineNumber++;
+ uiLineLength = 0;
+ }
+ else
+ {
+ uiCharWidth = pstFontRes->fnIsFullWidth(uiCharacterCode)?pstFontRes->iFullWidth:pstFontRes->iHalfWidth;
+ if((uiLineLength+uiCharWidth)>uiDisplayAreaWidth)
{
- if(uiLineByteCount > 0)
- {
- // Change lines.
- uiLineCount ++;
- uiLineByteCount = 0;
- }
- else
- {
- // Ignore change lines in line start.
- }
- pcCur++;
- continue;
+ uiLineNumber++;
+ uiLineLength = uiCharWidth;
}
-
- if((uint8_t)(*pcCur) < 0x7F)
- {
- if(uiLineByteCount= 0xA1) && ((uint8_t)(*pcCur) <= 0xF7))
- {
- //GB2312
- if((uiHalfWidthCharInLine-uiLineByteCount)>2)
- {
- uiLineByteCount+=2;
- }
- else
- {
- uiLineByteCount = 2;
- uiLineCount++;
- }
- pcCur+=2;
- }
- // Invalid character
else
{
- pcCur++;
+ uiLineLength+=uiCharWidth;
}
}
}
- return uiLineCount;
+ return uiLineNumber;
}
/*****************************************************************************/
-/** Function Name: SGUI_Text_GetFontResource **/
-/** Purpose: Get character index in font mode table. **/
+/** Function Name: SGUI_Text_GetCharacterData **/
+/** Purpose: Get character data form font resource by char code. **/
/** Params: **/
-/** @ eFontSize[in]: Get font resource ID by font size. **/
-/** Return: Font data resource ID. **/
-/** Limitation: This function will be used when user data is in differ- **/
-/** end media, like flash on chip or external flash. user **/
-/** can distinguish many different resources by ID, and **/
-/** this function will read data form different media with **/
-/** different parameter. **/
+/** @ pstFontRes[in]: Font resource structure pointer. **/
+/** @ uiCode[in]: Character code. **/
+/** @ pDataBuffer[out]: Buffer for output char data. **/
+/** @ sBufferSize[in]: Output buffer size. **/
+/** Return: Number of read data, return 0 when error occurred. **/
/*****************************************************************************/
-SGUI_FLASH_DATA_SOURCE SGUI_Text_GetFontResource(SGUI_FONT_SIZE eFontSize)
+SGUI_SIZE SGUI_Text_GetCharacterData(const SGUI_FONT_RES* pstFontRes, SGUI_UINT32 uiCode, SGUI_BYTE* pDataBuffer, SGUI_SIZE sBufferSize)
{
- /*----------------------------------*/
+ /*----------------------------------*/
/* Variable Declaration */
/*----------------------------------*/
- SGUI_FLASH_DATA_SOURCE eResourceID;
+ SGUI_SIZE sGetDataSize;
+ SGUI_SIZE sReadDataSize;
+ SGUI_SIZE sDataBlockSize;
+ SGUI_SIZE sCharIndex;
+ SGUI_BOOL bIsFullWidth;
+
+ /*----------------------------------*/
+ /* Initialize */
+ /*----------------------------------*/
+ sGetDataSize = 0;
+ bIsFullWidth = SGUI_FALSE;
/*----------------------------------*/
/* Process */
/*----------------------------------*/
- switch(eFontSize)
- {
- case SGUI_FONT_SIZE_H6:
- {
- eResourceID = SGUI_FONT_SRC_H6;
- break;
- }
- case SGUI_FONT_SIZE_H8:
- {
- eResourceID = SGUI_FONT_SRC_H8;
- break;
- }
- case SGUI_FONT_SIZE_H12:
- {
- eResourceID = SGUI_FONT_SRC_H12;
- break;
- }
- case SGUI_FONT_SIZE_H16:
- {
- eResourceID = SGUI_FONT_SRC_H16;
- break;
- }
- default:
- {
- eResourceID = SGUI_FONT_SRC_UNKNOWN;
- break;
- }
- }
+ if((NULL != pstFontRes) && (NULL != pDataBuffer) && (0 != sBufferSize))
+ {
+ sCharIndex = pstFontRes->fnGetIndex(uiCode);
+ if(SGUI_INVALID_INDEX != sCharIndex)
+ {
+ sDataBlockSize = SGUI_USED_BYTE(pstFontRes->iHeight) * pstFontRes->iHalfWidth;
+ sReadDataSize = bIsFullWidth?(sDataBlockSize*2):sDataBlockSize;
+ sGetDataSize = pstFontRes->fnGetData(sCharIndex*sDataBlockSize, pDataBuffer, sReadDataSize>sBufferSize?sBufferSize:sReadDataSize);
+ }
+ }
- return eResourceID;
+ return sGetDataSize;
}
-
diff --git a/VirtualSDK/Frame/src/LCDFrame.cpp b/VirtualSDK/Frame/src/LCDFrame.cpp
index a001674..296a474 100644
--- a/VirtualSDK/Frame/src/LCDFrame.cpp
+++ b/VirtualSDK/Frame/src/LCDFrame.cpp
@@ -649,7 +649,7 @@ wxThread::ExitCode LCDFrame::Entry(void)
while(false == bExit)
{
bExit = pclsThread->TestDestroy();
- lExitCode = (wxThread::ExitCode)SGUI_SDK_DummyMainProc();
+ lExitCode = reinterpret_cast(SGUI_SDK_DummyMainProc());
}
}
diff --git a/VirtualSDK/Project/CodeBlocks/VirtualSDK_wx31.cbp b/VirtualSDK/Project/CodeBlocks/VirtualSDK_wx31.cbp
index 6efebff..e4929b8 100644
--- a/VirtualSDK/Project/CodeBlocks/VirtualSDK_wx31.cbp
+++ b/VirtualSDK/Project/CodeBlocks/VirtualSDK_wx31.cbp
@@ -97,24 +97,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -140,27 +122,15 @@
-
-
-
-
-
-
-
-
-
-
-
-