LCUI 1.0 Alpha 发布,C 的图形界面库

司徒永超
 司徒永超
发布于 2017年04月18日
收藏 91

LCUI 是一个用 C 编写的图形界面库,可用于构建简单的桌面应用程序。需要特别注意的是,LCUI 采用的开源许可证是GNU 通用公共许可证第二版,简称 GPLv2。

官网:https://lcui.lc-soft.io
码云:https://git.oschina.net/lc-soft/LCUI
Github:https://github.com/lc-soft/LCUI

由于本次更新改动很大,所以版本号从 1.0 开始,主要更新内容如下:

  • 改进 bmp、jpeg、png 图片的读取接口

  • 添加滚动条(Scrollbar)部件

  • 改进按钮(Button)部件

  • 改进文本显示(TextView)部件

  • 改进文本编辑(TextEdit)部件

  • 改进部件的类型、事件、布局及样式处理

  • 改进图形界面的性能

  • 添加触控支持

  • 添加 CSS 和 XML 支持

  • 移除 Linux 的帧缓冲(FrameBuffer)支持

  • 添加对 Linux 的 XWindow 的支持

  • 添加对 Windows 通用应用平台(UWP)的简单支持

  • 改进对 Windows 的支持

  • 添加部分文档

  • 修复部分已知BUG

原计划在此版本中添加缩放功能,用于适应各种分辨率的屏幕,但由于涉及到的地方比较多,所以该特性已经推迟到后续的版本中。

以下将针对几个主要改动做些简单的说明,如需要体验具体效果可以下载 LCUI 的功能旗舰级应用: LC's Finder

XML 和 CSS

本次比较大的改动是加入了对 XML 和 CSS 支持,为此 LCUI 的部件布局和样式处理也做了些整改,基本算是重写了一遍。相信写过图形界面应用的程序员们都会有这样的体验,只用编程语言来描述界面内容是一件很麻烦的事情,写了一坨代码却只是实现一些简单的布局和效果,可读性差且不易维护。XML 和 CSS 能够解决这种问题,界面的布局和结构可以用 XML 描述,目前支持的标签很少,书写起来会比较简单,就像下面这样。

<?xml version="1.0" encoding="UTF-8" ?>
<lcui-app>
  <resource type="text/css" src="helloworld.css"/>
  <resource type="application/font-ttf" src="C:/Windows/Fonts/comic.ttf"/>
  <ui>
    <widget id="text-hello" type="textview" class="text-hello">Hello, World!</widget>
    <widget id="edit" type="textedit">Hello, World!</widget>
    <widget id="btn-ok" type="button">Submit</widget>
  </ui>
</lcui-app>

至于 CSS,你可以用它来描述界面元素的视觉效果,受限于现有条件,目前只支持简单的 CSS 样式,并且某些 CSS 样式的实际效果会根据 LCUI 的现有情况做一定的调整,属于定制版的 CSS。除了一些简单的样式外,你还可以靠 CSS 来使用图标字体,例如: FontAwesome 和 Material Design Icons,当然,这些图标字体附带的 CSS 文件并不能直接在 LCUI 中使用,需要做些修改,具体可以参考这篇文章

对于比较复杂的界面,CSS 代码也会比较多,如果觉得这堆 CSS 代码写起来很麻烦,可以试试使用 sassless 和 stylus 这类 CSS 预处理器来简化编码,就像下面这样。


当 CSS 代码比较多的时候,会很容易出现样式污染问题,在没有浏览器自带的开发人员工具情况下,这个问题处理起来会比较麻烦,但也不是没有办法,LCUI 提供了 Widget_PrintStyleSheets() 函数,可以打印出指定部件应用到的所有样式表内容,结果类似于下面这样。

selector(1612994007) stylesheets begin

[helloworld.css][rank: 11]
textview.text-hello {
	margin-top: 25px;
	margin-right: 25px;
	margin-bottom: 25px;
	margin-left: 25px;
	padding-top: 25px;
	padding-right: 25px;
	padding-bottom: 25px;
	padding-left: 25px;
	border-top-width: 1px;
	border-top-style: solid;
	border-top-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-left-width: 1px;
	border-left-style: solid;
	border-left-color: #000000;
	background-color: #fafafa;
	color: #8cc63f;
	font-family (+): "Comic Sans MS";
	font-size (+): 18px;
	text-align (+): center;
}

[<none>][rank: 1]
* {
	position: static;
	display: block;
	width: auto;
	height: auto;
	此处省略部分内容 ...
	background-color: rgba(255,255,255,0);
}
[selector(1612994007) final stylesheet] {
	此处省略部分内容 ...
}
selector(1612994007) stylesheets end

UWP 支持

此版本虽然支持编译成 Windows 通用库/运行时组件,但并未包含 UWP 版的消息循环、键盘、鼠标、触控和图形输出的支持代码,这块的代码目前还在 LC's Finder 项目内,如有需要可以套用该项目的相关代码,后续版本会将这块的代码整理进来。

最后

LCUI 属于个人项目,它的大部分功能都是按作者个人需求而添加的,与那些立志为开发者们解决各种难题的开源项目不同,它没有成群的贡献者,也没有活跃的社区,如果你有什么功能需求、改进意见或者BUG反馈,请先花一点时间尝试自己动手解决,毕竟作者的空闲时间是有限的。

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:LCUI 1.0 Alpha 发布,C 的图形界面库
加载中

精彩评论

司徒永超
司徒永超
然而管理员并没有更新图标。
__c
__c
C语言重新开发UI库还是有意义的,C语言编译后也方便其他语言调用,也没有ABI问题,C++开发的编译成链接库的话编译器不一样、编译器版本不一样都要出问题的;体积小文件少,像gtk+这种带一大堆依赖,用的时候根本不知道发生了什么,Electron之类的也太大了,而且作为一个浏览器启动速度也没法太快
司徒永超
司徒永超

引用来自“翼辉小健健”的评论

😳移除fb支持是为啥?
因为代码结构做了调整,老代码懒得改,目前暂时又用不到,所以就删除了。
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“__c”的评论

C语言重新开发UI库还是有意义的,C语言编译后也方便其他语言调用,也没有ABI问题,C++开发的编译成链接库的话编译器不一样、编译器版本不一样都要出问题的;体积小文件少,像gtk+这种带一大堆依赖,用的时候根本不知道发生了什么,Electron之类的也太大了,而且作为一个浏览器启动速度也没法太快

引用来自“eechen”的评论

其实很多编程语言的标准库都是没有UI的,UI基本都是第三方库,比如C的GTK+,C++的Qt,而且UI库的开发和维护成本都很大,特别是跨平台支持难度也大.所以个人认为编程语言完全可以用通用的HTML作为自己的UI语言,也就是HTML由操作系统的浏览器或WebView来实现,跨平台简单,UI开发也简单,编程语言只需做好本地后端.比如我打包的 #PHPDroid# 这个只有5MB的APK,就是这么一个例子,利用PHP内置HTTP服务器和WebView在Android上跑PHP应用.
phpdroid_20170117.apk 我打包的APK包(5MB)
https://pan.baidu.com/s/1mia21HA
phpdroid_20170117.7z 项目源代码(Android Studio)
https://pan.baidu.com/s/1miuLk96
用musl-cross-compilers交叉编译Android版PHP(无脑下一步)
cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
crossx86-arm-linux-musleabi-1.1.12.tar.xz
https://pan.baidu.com/s/1micZBWc
osc的大神 @eechen 和他的盗版在知乎惨遭吊打,osc的小伙伴赶紧过去支援,传送门:https://www.zhihu.com/question/48350013 via falconchen

最新评论(48

土卫十六
土卫十六

引用来自“土卫十六”的评论

能在Win下运行吗??

引用来自“灼眼的超哥”的评论

你需要仔细看这篇资讯的前半部分图片和文字,或者也可以看 README.md 文档内容。
回复@灼眼的超哥 : 这回仔细看了,有空试试。非常感谢。
司徒永超
司徒永超

引用来自“我不是AI”的评论

为什么图形绘制的算法也自己写?这个项目是以学习为目的的?
因为以前懒得去学现成的图形库的用法,反正都是简单的图形处理,所以就手写了。况且,要真是以学习为目的,这个项目就不会存在了。
我不是AI
我不是AI

引用来自“__c”的评论

C语言重新开发UI库还是有意义的,C语言编译后也方便其他语言调用,也没有ABI问题,C++开发的编译成链接库的话编译器不一样、编译器版本不一样都要出问题的;体积小文件少,像gtk+这种带一大堆依赖,用的时候根本不知道发生了什么,Electron之类的也太大了,而且作为一个浏览器启动速度也没法太快

引用来自“eechen”的评论

其实很多编程语言的标准库都是没有UI的,UI基本都是第三方库,比如C的GTK+,C++的Qt,而且UI库的开发和维护成本都很大,特别是跨平台支持难度也大.所以个人认为编程语言完全可以用通用的HTML作为自己的UI语言,也就是HTML由操作系统的浏览器或WebView来实现,跨平台简单,UI开发也简单,编程语言只需做好本地后端.比如我打包的 #PHPDroid# 这个只有5MB的APK,就是这么一个例子,利用PHP内置HTTP服务器和WebView在Android上跑PHP应用.
phpdroid_20170117.apk 我打包的APK包(5MB)
https://pan.baidu.com/s/1mia21HA
phpdroid_20170117.7z 项目源代码(Android Studio)
https://pan.baidu.com/s/1miuLk96
用musl-cross-compilers交叉编译Android版PHP(无脑下一步)
cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
crossx86-arm-linux-musleabi-1.1.12.tar.xz
https://pan.baidu.com/s/1micZBWc
这个语言内置GUI支持:https://github.com/red/red
我不是AI
我不是AI
为什么图形绘制的算法也自己写?这个项目是以学习为目的的?
开源中国首席屌炸天
开源中国首席屌炸天

引用来自“__c”的评论

C语言重新开发UI库还是有意义的,C语言编译后也方便其他语言调用,也没有ABI问题,C++开发的编译成链接库的话编译器不一样、编译器版本不一样都要出问题的;体积小文件少,像gtk+这种带一大堆依赖,用的时候根本不知道发生了什么,Electron之类的也太大了,而且作为一个浏览器启动速度也没法太快

引用来自“eechen”的评论

其实很多编程语言的标准库都是没有UI的,UI基本都是第三方库,比如C的GTK+,C++的Qt,而且UI库的开发和维护成本都很大,特别是跨平台支持难度也大.所以个人认为编程语言完全可以用通用的HTML作为自己的UI语言,也就是HTML由操作系统的浏览器或WebView来实现,跨平台简单,UI开发也简单,编程语言只需做好本地后端.比如我打包的 #PHPDroid# 这个只有5MB的APK,就是这么一个例子,利用PHP内置HTTP服务器和WebView在Android上跑PHP应用.
phpdroid_20170117.apk 我打包的APK包(5MB)
https://pan.baidu.com/s/1mia21HA
phpdroid_20170117.7z 项目源代码(Android Studio)
https://pan.baidu.com/s/1miuLk96
用musl-cross-compilers交叉编译Android版PHP(无脑下一步)
cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
crossx86-arm-linux-musleabi-1.1.12.tar.xz
https://pan.baidu.com/s/1micZBWc
osc的大神 @eechen 和他的盗版在知乎惨遭吊打,osc的小伙伴赶紧过去支援,传送门:https://www.zhihu.com/question/48350013 via falconchen
eechen
eechen

引用来自“__c”的评论

C语言重新开发UI库还是有意义的,C语言编译后也方便其他语言调用,也没有ABI问题,C++开发的编译成链接库的话编译器不一样、编译器版本不一样都要出问题的;体积小文件少,像gtk+这种带一大堆依赖,用的时候根本不知道发生了什么,Electron之类的也太大了,而且作为一个浏览器启动速度也没法太快
其实很多编程语言的标准库都是没有UI的,UI基本都是第三方库,比如C的GTK+,C++的Qt,而且UI库的开发和维护成本都很大,特别是跨平台支持难度也大.所以个人认为编程语言完全可以用通用的HTML作为自己的UI语言,也就是HTML由操作系统的浏览器或WebView来实现,跨平台简单,UI开发也简单,编程语言只需做好本地后端.比如我打包的 #PHPDroid# 这个只有5MB的APK,就是这么一个例子,利用PHP内置HTTP服务器和WebView在Android上跑PHP应用.
phpdroid_20170117.apk 我打包的APK包(5MB)
https://pan.baidu.com/s/1mia21HA
phpdroid_20170117.7z 项目源代码(Android Studio)
https://pan.baidu.com/s/1miuLk96
用musl-cross-compilers交叉编译Android版PHP(无脑下一步)
cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
crossx86-arm-linux-musleabi-1.1.12.tar.xz
https://pan.baidu.com/s/1micZBWc
antonius
antonius

引用来自“灼眼的超哥”的评论

然而管理员并没有更新图标。

引用来自“weijer”的评论

超哥你职业是什么~ 我发现入群就这个不知道答案了😭
超哥是开源中国官方人员!
yak
yak
c语言怎么实现继承?
翼辉小健健
翼辉小健健

引用来自“翼辉小健健”的评论

😳移除fb支持是为啥?

引用来自“灼眼的超哥”的评论

因为代码结构做了调整,老代码懒得改,目前暂时又用不到,所以就删除了。

引用来自“翼辉小健健”的评论

😂以后还有机会添加进来么?我这里有个操作系统SylixOS,里面的显示是基于fb的结构,看看能不能移植。

引用来自“灼眼的超哥”的评论

目前的主线是 windows, FB 支持那要等很久了。
😨好吧
返回顶部
顶部