mirror of
https://gitee.com/Polarix/simplegui.git
synced 2025-06-17 13:37:52 +00:00
Compare commits
5 Commits
737c5d2171
...
ef33751599
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ef33751599 | ||
![]() |
e7978fa417 | ||
![]() |
3a505a8b79 | ||
![]() |
889ba929b8 | ||
![]() |
29bb204479 |
86
CMakeLists.txt
Normal file
86
CMakeLists.txt
Normal 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})
|
@ -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;
|
||||
|
@ -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,开始编译模拟环境演示工程。
|
||||

|
||||
|
||||
  编译完成,显示无错误和警告,现在点击工具栏上的运行按钮或按快捷键Ctrl+F10就可以看到模拟环境的运行效果了。
|
||||

|
||||
|
||||
#### 3.3. 模拟不同型号和外观的屏幕效果
|
||||
#### 2.4. 模拟不同型号和外观的屏幕效果
|
||||
  默认情况下,模拟器中虚拟显示屏幕的配色方案为黄底黑字的LCD点阵显示屏,为最大程度上模拟真实情况下的视觉效果,方便创建和调试GUI元素,VirtualSDK的LCD面板可以通过修改配置定义修改颜色和尺寸。
|
||||
  打开模拟器工程,修改Simulator\inc\simulator_conf.h文件,这里这里是针对模拟器屏幕参数的宏定义,意义如下:
|
||||
```c++
|
||||
|
133
README.md
133
README.md
@ -1,66 +1,69 @@
|
||||
# SimpleGUI
|
||||
|
||||
---
|
||||
|
||||
#### 简介
|
||||
|
||||
SimpleGUI是一款针对单色显示屏设计的GUI接口库。
|
||||
|
||||
> 
|
||||
|
||||
#### 特征
|
||||
|
||||
相比于传统的GUI框架,SimpleGUI移除了诸如心跳、绘图缓冲、图层等概念,仅提供各种各样的绘图接口、以及由这些绘图接口绘制出的更复杂的图形组件,以此来降低整整体对系统资源的需求。
|
||||
|
||||
#### 设计目标
|
||||
|
||||
在尽可能减小资源消耗的前提下,提供以下功能:
|
||||
|
||||
1. 点、线、基本几何图形、单色位图、文字等的绘制功能。
|
||||
2. 列表、进度条、滚动条、提示框、曲线图等部件的设置元显示功能。
|
||||
3. 单色显示屏模拟环境,方便脱离硬件平台进行部分GUI开发。
|
||||
|
||||
#### 部署模拟器
|
||||
|
||||
SimpleGUI提供了一个单色显示屏的模拟器以方便开发者进行基于SimpleGUI的开发,模拟器的详细的使用方法请参照Documents文件夹下的《01-快速开始SimpleGUI》。
|
||||
|
||||
> 预览效果
|
||||
>
|
||||
> 
|
||||
> 
|
||||
|
||||
#### 移植
|
||||
|
||||
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绘图接口库。
|
||||
|
||||
> 
|
||||
|
||||
#### 特征
|
||||
|
||||
相比于传统的GUI框架,SimpleGUI移除了诸如心跳、绘图缓冲、图层等概念,仅提供各种各样的绘图接口、以及由这些绘图接口绘制出的更复杂的图形组件,以此来降低整整体对系统资源的需求。
|
||||
|
||||
#### 设计目标
|
||||
|
||||
在尽可能减小资源消耗的前提下,提供以下功能:
|
||||
|
||||
1. 点、线、基本几何图形、单色位图、文字等的绘制功能。
|
||||
2. 列表、进度条、滚动条、提示框、曲线图等部件的设置元显示功能。
|
||||
3. 单色显示屏模拟环境,方便脱离硬件平台进行部分GUI开发。
|
||||
|
||||
#### 部署模拟器
|
||||
|
||||
SimpleGUI提供了一个单色显示屏的模拟器以方便开发者进行基于SimpleGUI的开发,模拟器的详细的使用方法请参照Documents文件夹下的《01-快速开始SimpleGUI》。
|
||||
|
||||
> 预览效果
|
||||
>
|
||||
> 
|
||||
> 
|
||||
|
||||
#### 移植
|
||||
|
||||
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-07:QQ群里很多人都会问wxWidgets环境部署的相关问题,确实,部署这个图形库在下载选型时就面临各种大坑,使用的GCC版本、位模式、开发库还是运行库……一步错步步错,所以我更新了模拟器,使用SDL2编译,需要注意的事项少了很多。至于当时为什么选用wxWidgets开发,是因为最初是想把这模拟器当作一个辅助软件来设计的,可以模拟屏幕,可以截图,甚至还可以通过贴图的形式模拟某些设备面板,但是实际使用下来,我预想的共能用上的不多,反而拉高了使用门槛,所以弃用。
|
||||
|
||||
#### 参与讨论
|
||||
|
||||
如果您有意参与SimpleGUI的讨论与改进,可以在以下地方留言:
|
||||
|
||||
1. 开源中国SimpleGUI页面:https://www.oschina.net/p/simplegui
|
||||
2. 码云页面:https://gitee.com/Polarix/simplegui
|
||||
3. QQ交流群:799501887
|
Loading…
Reference in New Issue
Block a user