Skip to content

Latest commit

 

History

History
148 lines (144 loc) · 11.1 KB

跨平台开发相关事项.md

File metadata and controls

148 lines (144 loc) · 11.1 KB

跨平台开发相关事项

以下为nim_duilib支持跨平台的主要事项(目前正在开发基于SDL3.0的作为窗口管理器的方案,可实现界面库的跨平台的支持)

事项 备注
HWND 已解决
HDC 已解决
Win API 已解决
DPI 已解决
字体 已解决(使用Skia的字体管理器)
UINT LRESULT, 已解决
WPARAM,LPARAM 已解决
按键状态 已解决
RichEdit控件 需要使用SDL实现,只支持基本的文本输入,待开发,是难点
日期控件 暂不支持,需要调研替代方案
三个Combo控件 已解决
ColorPicker截屏 需要使用SDL实现,待开发
Menu控件 已解决
消息处理 已解决
SetWindowPos 已解决
Window GetHWND 已解决
DragDrop 暂不支持,需要调研替代方案
HotKey 暂不支持,需要调研替代方案
窗口风格 已解决
窗口 已解决
窗口图标 已解决
光标 已解决
鼠标 已解决
键盘 已解决
消息接口修改 已解决
窗口接口抽象化 已解决

跨平台的功能整理(含开放进展情况)

模块 源文件(Windows平台或使用Windows API) 当前状态 功能说明 源文件(同目录,其他平台) 备注
Utils duilib\Utils\ApiWrapper_Windows.h 无需处理 只有Windows平台使用 不需要
Utils duilib\Utils\ApiWrapper_Windows.cpp 无需处理 只有Windows平台使用 不需要
Utils duilib\Utils\BitmapHelper_Windows.h 无需处理 只有Windows平台使用 不需要
Utils duilib\Utils\BitmapHelper_Windows.cpp 无需处理 只有Windows平台使用 不需要
Utils duilib\Utils\Macros_Windows.h 无需处理 只有Windows平台使用 不需要
Utils duilib\Utils\MonitorUtil_Windows.cpp 已完成 获取DPI值 MonitorUtil_SDL.cpp
Utils duilib\Utils\FileDialog_Windows.cpp 已完成 FileDialog_SDL.cpp
Utils duilib\Utils\ScreenCapture_Windows.cpp 不予支持 SDL没有屏幕截图功能 目前没有方案,其他
平台不支持屏幕取色
Utils duilib\Utils\ShadowWnd_Windows.cpp 开发中... 需要修改SDL,增加
WM_MOVE/WM_MOVING事件
SDL不支持修改窗口的Z-Order,
达不到预期效果
ShadowWnd_SDL.cpp
Control duilib\Control\DateTimeWnd_Windows.h 已完成 DateTimeWnd_SDL.h 自己编码实现
Control duilib\Control\DateTimeWnd_Windows.cpp 已完成 DateTimeWnd_SDL.cpp 自己编码实现,
但不支持EditFormat::
kDateCalendar格式
Control duilib\Control\PropertyGrid.cpp 已完成 移除平台相关代码
Control duilib\Control\RichEdit_Windows.h 已完成 RichEdit_SDL.h 比Windows的RichEdit
控件缺少RichText功能
Control duilib\Control\RichEdit_Windows.cpp 已完成 RichEdit_SDL.cpp 自己编码实现
Control duilib\Control\RichEditCtrl_Windows.h 无需处理
Control duilib\Control\RichEditHost_Windows.h 无需处理
Control duilib\Control\RichEditHost_Windows.cpp 无需处理
Core duilib\Core\DpiManager.cpp 已完成 移除平台相关代码
Core duilib\Core\FontManager.cpp 已完成 移除平台相关代码
Core duilib\Core\TimerManager.h std::condition_variable
Linux平台需要pthread实现
Core duilib\Core\TimerManager.cpp 已完成 移除平台相关代码
Core duilib\Core\FrameworkThread.cpp和.h 已完成 移除平台相关代码
Core duilib\Core\CursorManager_Windows.cpp 已完成 光标管理 CursorManager_SDL.cpp
Core duilib\Core\DpiAwareness_Windows.cpp 已完成 DPI感知 DpiAwareness_SDL.cpp 其他平台暂不支持
Core duilib\Core\IconManager_Windows.h 无需处理 只有Windows平台使用 不需要 其他平台不支持
Core duilib\Core\IconManager_Windows.cpp 无需处理 只有Windows平台使用 不需要 其他平台不支持
Core duilib\Core\Keyboard_Windows.cpp 已完成 键盘相关 Keyboard_SDL.cpp
Keycode_SDL.cpp
Core duilib\Core\NativeWindow_Windows.cpp 已完成 窗口管理 NativeWindow_SDL.cpp
Core duilib\Core\NativeWindow_Windows.h 已完成 窗口管理 NativeWindow_SDL.h
Core duilib\Core\ToolTip_Windows.cpp 已完成 ToolTip功能 ToolTip_SDL.cpp 其他平台暂不支持
Core duilib\Core\WindowDropTarget_Windows.cpp 已完成 拖放功能 WindowDropTarget_SDL.cpp 其他平台暂不支持
Core duilib\Core\ThreadMessage_Windows.cpp 已完成 线程间通信 ThreadMessage_SDL.cpp
Core duilib\Core\MessageLoop_Windows.h 已完成 消息循环 MessageLoop_SDL.h
Core duilib\Core\MessageLoop_Windows.cpp 已完成 消息循环 MessageLoop_SDL.cpp
RenderSkia duilib\RenderSkia\Bitmap_Skia.h 已完成 移除平台相关代码 不需要
RenderSkia duilib\RenderSkia\Bitmap_Skia.cpp 已完成 移除平台相关代码 不需要
RenderSkia duilib\RenderSkia\Render_Skia.h 已完成 移除平台相关代码 不需要
RenderSkia duilib\RenderSkia\Render_Skia.cpp 已完成 移除平台相关代码 不需要
RenderSkia duilib\RenderSkia\Render_Skia_Windows.h 已完成 渲染引擎与窗口关联 Render_Skia_SDL.h
RenderSkia duilib\RenderSkia\Render_Skia_Windows.cpp 已完成 渲染引擎与窗口关联 Render_Skia_SDL.cpp
RenderSkia duilib\RenderSkia\SkRasterWindowContext_Windows.h 已完成 支持CPU渲染 SkRasterWindowContext_SDL.h
RenderSkia duilib\RenderSkia\SkRasterWindowContext_Windows.cpp 已完成 支持CPU渲染 SkRasterWindowContext_SDL.cpp
RenderSkia duilib\RenderSkia\SkGLWindowContext_Windows.h 已完成 支持OpenGL渲染 暂不支持,待调研
RenderSkia duilib\RenderSkia\SkGLWindowContext_Windows.cpp 已完成 支持OpenGL渲染 暂不支持,待调研
RenderSkia skia\tools\gpu\gl\win\SkWGL_win.cpp 已完成 支持OpenGL渲染 暂不支持,待调研

RichEdit的基本功能列表和开发状态(功能定位:替换Windows的RichEdit控件,但不支持Rich功能)

功能 键盘或鼠标快捷键 开发状态 备注
文本存储 完成 文本分行存储,需控制内存占有率和绘制速度
文本修改 完成 增量修改,增量绘制,绘制速度快,不卡
文本选择 按住鼠标左键移动鼠标 完成 选择鼠标点击到移动点的范围内的文本
文本选择 Shift + 鼠标左键点击 完成 选择光标到鼠标点击范围内的文本
文本选择 Shift + Left键 完成 选择光标到向左逐字符扩大的范围内的文本
文本选择 Shift + Right键 完成 选择光标到向右逐字符扩大的范围内的文本
文本选择 Shift + Up键 完成 选择光标到向上逐行扩大的范围内的文本
文本选择 Shift + Down键 完成 选择光标到向下逐行扩大的范围内的文本
文本选择 Shift + Home键 完成 选择光标到行首范围内的文本
文本选择 Shift + End键 完成 选择光标到行尾范围内的文本
文本选择 Shift + Page Up键 完成 选择光标到向上按页逐步扩大的范围内的文本
文本选择 Shift + Page Down键 完成 选择光标到向下按页逐步扩大的范围内的文本
光标定位 鼠标左键/右键单击 完成
保持光标在可见区域 完成
光标向左移动一个字符 Left键 完成
光标向右移动一个字符 Right 键 完成
光标向上移动一行 Up 键 完成
光标向下移动一行 Down 键 完成
光标移到行首 Home 键 完成
光标移到行尾 End 键 完成
光标向上移动一页 Page Up 键 完成
光标向下移动一页 Page Down 键 完成
光标向左移动一个词 Ctrl + Left键 完成
光标向右移动一个词 Ctrl + Right键 完成
光标移动到文档开头 Ctrl + Home键 完成 视图和光标同时变化
光标移动到文档末尾 Ctrl + End键 完成 视图和光标同时变化
视图移动到上面的行 Ctrl + Up键 完成 光标位置不变, 即ScrollBox的功能
视图移动到下面的行 Ctrl + Down键 完成 光标位置不变, 即ScrollBox的功能
视图向上移动一页 Ctrl + Page Up键 完成 光标位置不变, 即ScrollBox的功能
视图向下移动一页 Ctrl + Page Down键 完成 光标位置不变, 即ScrollBox的功能
按字符向后删除 Delete 完成
按词向后删除 Ctrl + Delete 完成 删除下一个词或所选字符
按字符向前删除 Backspace 完成
按词向前删除 Ctrl + Backspace 完成 删除前一个词或所选字符
全选 Ctrl+A 完成
复制 Ctrl+C / Ctrl+Insert 完成
粘贴 Ctrl+V / Shift+Insert 完成
剪切 Ctrl+X 完成
撤销 Ctrl+Z 完成
重做 Ctrl+Y 完成
自动换行 Ctrl+W 完成 功能切换
缩放 Ctrl + 鼠标滚轮 完成
TAB键的绘制 完成 TAB键对应4个空格,固定
文本横向对齐方式的支持 完成
文本纵向对齐方式的支持 完成
单行文本/多行文本 完成
密码模式相关功能 完成
数字模式相关功能 完成
限制符数的功能 完成
PromptText功能 完成
输入字符的识别与过滤 完成 最新的SDL3.0源码,输入字符已经正常
其他常规功能 完成
查找功能 完成
DPI自适应功能 完成

一些Linux平台的适配与测试

Linux分类 系统版本 桌面类型 进度 备注
OpenEuler 24.03 64位 UKUI(X11) 已完成
OpenEuler 24.03 64位 DDE (X11) 进行中... deepin桌面
Ubuntu 24.04.1 64位 进行中...
Debian 12.7.0 64位 进行中...
UOS desktop-20 1070 进行中...