Compare commits

..

5 Commits

Author SHA1 Message Date
独角戏
ef33751599
Pre Merge pull request !10 from 独角戏/Develope 2025-02-17 03:13:44 +00:00
Polarix
e7978fa417 增加使用CMake编译模拟器的说明 2025-02-17 11:13:27 +08:00
Polarix
3a505a8b79 修正CMake配置文件的注释说明 2025-02-17 11:02:34 +08:00
Polarix
889ba929b8 增加CMake编译配置 2025-02-17 10:54:16 +08:00
Polarix
29bb204479 更新readme文件 2025-02-07 11:41:21 +08:00
4 changed files with 177 additions and 70 deletions

86
CMakeLists.txt Normal file
View File

@ -0,0 +1,86 @@
cmake_minimum_required(VERSION 3.10)
project(simple_gui_demo)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
# For compiler
# Default use MinGW-w64
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# SDL2 library path.
set(SDL_DIR D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32)
set(SDL_LIB ${SDL_DIR}/lib)
set(SDL_BIN ${SDL_DIR}/bin)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_options(-g -O0) #
set(CEF_LIB ${CEF_DIR}/Debug)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
add_compile_options(-O3) #
set(CEF_LIB ${CEF_DIR}/Release)
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_compile_options(-O2 -g) # '
set(CEF_LIB ${CEF_DIR}/Release)
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
add_compile_options(-Os) #
set(CEF_LIB ${CEF_DIR}/Release)
endif()
# C++11
set(CMAKE_CXX_STANDARD 11)
# Header search path.
include_directories(${SDL_DIR}/include/SDL2)
include_directories(${CMAKE_SOURCE_DIR}/GUI/inc)
include_directories(${CMAKE_SOURCE_DIR}/HMI/inc)
include_directories(${CMAKE_SOURCE_DIR}/Simulator/inc)
include_directories(${CMAKE_SOURCE_DIR}/DemoProc/inc)
# Global marco
add_definitions(-DSDL_MAIN_HANDLED)
if(USE_CHS_TEXT)
include_directories(${CMAKE_SOURCE_DIR}/Library/inc)
link_directories(${CMAKE_SOURCE_DIR}/Library/lib64)
add_definitions(-D_SIMPLE_GUI_DEMO_INNER_CHS_)
# add_definitions(-D_SIMPLE_GUI_ENCODE_TEXT_)
endif()
# Library search path.
link_directories(${SDL_LIB})
# Demo source files.
aux_source_directory(DemoProc DEMO_SRC_LIST)
# SimpleGUI library source.
file(GLOB_RECURSE GUI_LIB_SRC_LIST "GUI/src/*.c")
# Static GUI library.
add_library(simplegui STATIC ${GUI_LIB_SRC_LIST})
# SimpleGUI HMI library source.
file(GLOB_RECURSE HMI_LIB_SRC_LIST "HMI/src/*.c")
# Static HMI library.
add_library(simplegui_hmi STATIC ${HMI_LIB_SRC_LIST})
# SimpleGUI demo source.
file(GLOB_RECURSE DEMO_SRC_LIST "DemoProc/src/*.c")
# Other application source
file(GLOB_RECURSE APP_SRC_LIST "Simulator/src/*.cpp")
# Execution file target.
add_executable(simple_gui_demo ${APP_SRC_LIST} ${DEMO_SRC_LIST})
# Append linkage.
target_link_libraries(simple_gui_demo libSDL2.dll.a)
target_link_libraries(simple_gui_demo simplegui)
target_link_libraries(simple_gui_demo simplegui_hmi)
if(USE_CHS_TEXT)
target_link_libraries(simple_gui_demo libiconv64.a)
endif()
# Copy runtime needed.
file(COPY ${SDL_BIN}/SDL2.dll DESTINATION ${CMAKE_BINARY_DIR})

View File

@ -5,8 +5,11 @@
#ifndef _SIMPLE_GUI_DEMO_INNER_CHS_
#include "DemoResource_ASCII.h"
#else
//#include "DemoResource_GB2312.h"
#ifdef _SIMPLE_GUI_ENCODE_TEXT_
#include "DemoResource_UTF8.h"
#else
#include "DemoResource_GB2312.h"
#endif // _SIMPLE_GUI_ENCODE_TEXT_
#endif
extern const SGUI_FONT_RES GB2312_FZXS12;

View File

@ -21,17 +21,32 @@
## 2. 编译和使用模拟器
#### 2.1. 什么是模拟器
  SimpleGUI使用SDL2构建了一个简单的模拟环境除可以演示、预览SimpleGUI外还可以作为脱离硬件平台进行图形界面开发的辅助工具使用。配合SimpleGUI的低耦合性接移植口定义使用模拟器开发的用户界面处理源码几乎额可以无缝的移植到预期的硬件平台上。
  在初次接触SimpleGUI时您可能尚未选定或准备好相应的硬件平台。鉴于这种情况您可以从VirtualSDK开始初步了解SimpleGUI的显示效果以及代码架构。
  在初次接触SimpleGUI时您可能尚未选定或准备好相应的硬件平台。鉴于这种情况您可以从模拟器环境开始初步了解SimpleGUI的显示效果以及代码架构。
#### 2.2. 编译模拟器环境
  SimpleGUI的模拟器工程使用CodeBlocks组织进入Simulator目录打开Simulator.cbp工程文件如果用户下载的是nosetup绿色版的Code::Blocks需要手动建立关联才能直接用双击的方式打开cbp文件否则用户只能先打开Code::Blocks然后从Code::Blocks中执行打开操作以打开工程文件。
#### 2.2. 使用CMake快速完成模拟器的编译
  在使用CMake编译模拟器示例之前需要先修改一下CMakeLists.txt文件找到SDL_DIR变量将变量的值修改为SDL库的实际路径。
``` text
set(SDL_DIR D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32)
```
> 将D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32修改为SDL2库的实际部署路径。
  然后在当前仓库目录下创建一个新文件夹build然后再build目录中打开控制台然后执行以下命令
``` cmd
cmake.exe ../CMakeLists.txt -B ./ -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DUSE_CHS_TEXT=True
```
> - 要正常再控制台中使用CMake需要将CMake添加到系统的PATH环境变量中。
> - USE_CHS_TEXT=True参数是启用中文演示资源如果不添加此项目演示程序将使用英文显示。
#### 2.3. 使用Codeblocks打开模拟器环境
  SimpleGUI的模拟器也提供了基于Code::Blocks的图形化IDE环境可以方便的进行调试、断点跟踪等等。
  进入Simulator目录打开Simulator.cbp工程文件如果用户下载的是nosetup绿色版的Code::Blocks需要手动建立关联才能直接用双击的方式打开cbp文件否则用户只能先打开Code::Blocks然后从Code::Blocks中执行打开操作以打开工程文件。
  点击工具栏上的编译按钮或按快捷键Ctrl+F9开始编译模拟环境演示工程。
![01-编译工程](images/01/01.png)
  编译完成显示无错误和警告现在点击工具栏上的运行按钮或按快捷键Ctrl+F10就可以看到模拟环境的运行效果了。
![02-运行效果](images/01/02.png)
#### 3.3. 模拟不同型号和外观的屏幕效果
#### 2.4. 模拟不同型号和外观的屏幕效果
  默认情况下模拟器中虚拟显示屏幕的配色方案为黄底黑字的LCD点阵显示屏为最大程度上模拟真实情况下的视觉效果方便创建和调试GUI元素VirtualSDK的LCD面板可以通过修改配置定义修改颜色和尺寸。
  打开模拟器工程修改Simulator\inc\simulator_conf.h文件这里这里是针对模拟器屏幕参数的宏定义意义如下
```c++

133
README.md
View File

@ -1,66 +1,69 @@
# SimpleGUI
---
#### 简介
SimpleGUI是一款针对单色显示屏设计的GUI接口库。
> ![SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果](Images/Perview.png "SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果")
#### 特征
相比于传统的GUI框架SimpleGUI移除了诸如心跳、绘图缓冲、图层等概念仅提供各种各样的绘图接口、以及由这些绘图接口绘制出的更复杂的图形组件以此来降低整整体对系统资源的需求。
#### 设计目标
在尽可能减小资源消耗的前提下,提供以下功能:
1. 点、线、基本几何图形、单色位图、文字等的绘制功能。
2. 列表、进度条、滚动条、提示框、曲线图等部件的设置元显示功能。
3. 单色显示屏模拟环境方便脱离硬件平台进行部分GUI开发。
#### 部署模拟器
SimpleGUI提供了一个单色显示屏的模拟器以方便开发者进行基于SimpleGUI的开发模拟器的详细的使用方法请参照Documents文件夹下的《01-快速开始SimpleGUI》。
> 预览效果
>
> ![模拟器预览1](Images/Simulator01.png "模拟器预览1")
> ![模拟器预览2](Images/Simulator02.png "模拟器预览2")
#### 移植
SimpleGUI的移植方法可以参照Documents文件夹下的《02-移植演示程序》里面详细阐述了SimpleGUI在MDK5环境下移植到STM32F1平台下的方法和移植要点其他平台也可参照。
#### 关于SimpleGUI
SimpleGUI发布已经有很长时间了在发布后很多人都来询问一些技术细节以及提出一些宝贵的意见与建议但是很多建议和SimpleGUI的设计初衷相悖所以我并没有采纳关于这一点还请大家谅解。所以在这里详细阐述一下SimpleGUI的设计理念和主导思想。
首先SimpleGUI面向的是单色显示屏目前市面上的单色显示屏一般12864和19264居多最大的应该也就240160的样子但不太常见。这种屏幕因为像素密度不高单屏幕能显示的内容有限所以面向此类平台的SimpleGUI就舍弃了诸如图层、窗口、阴影等的实现希望能用尽可能少的元素兼顾美观的同时在屏幕上表现尽可能多的内容。
其次SimpleGUI的另一个目标就是轻量化希望能尽可能减少对资源的消耗所以暂时没有引入对文件字库、非等宽字体等特性的支持。作为SimpleGUI的设计和开发者我的初衷是希望尽可能减少开发人员在一些简单地事情上浪费时间转而投入到更有意义的事情上去。
另外我正在致力于开发一款文字取模的工具类似PCtoLCD2002那种以方便开发者可以定制最符合自身需求的字库。
#### 视频讲解
为了方便大家进一步了解SimpleGUI并快速上手我录制了一些视频供大家参考。
| 内容 | 地址 |
|:--------------------- | -------------------------------------------- |
| 01 SimpleGUI概述 | https://www.bilibili.com/video/av86593220/ |
| 02 基础绘图 | https://www.bilibili.com/video/av86890300/ |
| 03 文本文字 | https://www.bilibili.com/video/av87098997/ |
| 04 拓展组件概述 | https://www.bilibili.com/video/av87432375/ |
| 05 交互引擎HMI | https://www.bilibili.com/video/av87530421/ |
| 06 VirtualSDK概述 | https://www.bilibili.com/video/av87713369/ |
| 07 基于VirtualSDK的GUI开发 | https://www.bilibili.com/video/BV1qz4y12771/ |
#### 参与讨论
如果您有意参与SimpleGUI的讨论与改进可以在以下地方留言
1. 开源中国SimpleGUI页面https://www.oschina.net/p/simplegui
2. 码云页面https://gitee.com/Polarix/simplegui
# SimpleGUI
---
#### 简介
SimpleGUI是一款针对单色显示屏设计的GUI绘图接口库。
> ![SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果](Images/Perview.png "SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果")
#### 特征
相比于传统的GUI框架SimpleGUI移除了诸如心跳、绘图缓冲、图层等概念仅提供各种各样的绘图接口、以及由这些绘图接口绘制出的更复杂的图形组件以此来降低整整体对系统资源的需求。
#### 设计目标
在尽可能减小资源消耗的前提下,提供以下功能:
1. 点、线、基本几何图形、单色位图、文字等的绘制功能。
2. 列表、进度条、滚动条、提示框、曲线图等部件的设置元显示功能。
3. 单色显示屏模拟环境方便脱离硬件平台进行部分GUI开发。
#### 部署模拟器
SimpleGUI提供了一个单色显示屏的模拟器以方便开发者进行基于SimpleGUI的开发模拟器的详细的使用方法请参照Documents文件夹下的《01-快速开始SimpleGUI》。
> 预览效果
>
> ![模拟器预览1](Images/Simulator01.png "模拟器预览1")
> ![模拟器预览2](Images/Simulator02.png "模拟器预览2")
#### 移植
SimpleGUI的移植方法可以参照Documents文件夹下的《02-移植演示程序》里面详细阐述了SimpleGUI在MDK5环境下移植到STM32F1平台下的方法和移植要点其他平台也可参照。
#### 关于SimpleGUI
SimpleGUI发布已经有很长时间了在发布后很多人都来询问一些技术细节以及提出一些宝贵的意见与建议但是很多建议和SimpleGUI的设计初衷相悖所以我并没有采纳关于这一点还请大家谅解。所以在这里详细阐述一下SimpleGUI的设计理念和主导思想。
首先SimpleGUI面向的是单色显示屏目前市面上的单色显示屏一般12864和19264居多最大的应该也就240160的样子但不太常见。这种屏幕因为像素密度不高单屏幕能显示的内容有限所以面向此类平台的SimpleGUI就舍弃了诸如图层、窗口、阴影等的实现希望能用尽可能少的元素兼顾美观的同时在屏幕上表现尽可能多的内容。
其次SimpleGUI的另一个目标就是轻量化希望能尽可能减少对资源的消耗所以暂时没有引入对文件字库、非等宽字体等特性的支持。作为SimpleGUI的设计和开发者我的初衷是希望尽可能减少开发人员在一些简单地事情上浪费时间转而投入到更有意义的事情上去。
另外我正在致力于开发一款文字取模的工具类似PCtoLCD2002那种以方便开发者可以定制最符合自身需求的字库。
#### 视频讲解
为了方便大家进一步了解SimpleGUI并快速上手我录制了一些视频供大家参考。
| 内容 | 地址 |
|:--------------------- | -------------------------------------------- |
| 01 SimpleGUI概述 | https://www.bilibili.com/video/av86593220/ |
| 02 基础绘图 | https://www.bilibili.com/video/av86890300/ |
| 03 文本文字 | https://www.bilibili.com/video/av87098997/ |
| 04 拓展组件概述 | https://www.bilibili.com/video/av87432375/ |
| 05 交互引擎HMI | https://www.bilibili.com/video/av87530421/ |
| 06 VirtualSDK概述 | https://www.bilibili.com/video/av87713369/ |
| 07 基于VirtualSDK的GUI开发 | https://www.bilibili.com/video/BV1qz4y12771/ |
#### 补充说明
- 2025-02-07QQ群里很多人都会问wxWidgets环境部署的相关问题确实部署这个图形库在下载选型时就面临各种大坑使用的GCC版本、位模式、开发库还是运行库……一步错步步错所以我更新了模拟器使用SDL2编译需要注意的事项少了很多。至于当时为什么选用wxWidgets开发是因为最初是想把这模拟器当作一个辅助软件来设计的可以模拟屏幕可以截图甚至还可以通过贴图的形式模拟某些设备面板但是实际使用下来我预想的共能用上的不多反而拉高了使用门槛所以弃用。
#### 参与讨论
如果您有意参与SimpleGUI的讨论与改进可以在以下地方留言
1. 开源中国SimpleGUI页面https://www.oschina.net/p/simplegui
2. 码云页面https://gitee.com/Polarix/simplegui
3. QQ交流群799501887