toknot/php-libui
Composer 安装命令:
composer require toknot/php-libui
包简介
PHP bindings to the libui C library.
README 文档
README
php-libui
PHP bindings to the libui C library.
libui is a lightweight, portable GUI library that uses the native GUI technologies of each platform it supports.
Requirements
- PHP >= 8.1
- PHP FFI extension available
- libui latest version
A Simple Example
see https://github.com/chopins/http-request
first download libui dynamic library from https://github.com/andlabs/libui/releases or checkout source for self-build, then load in php code use following code
include '/src/UI.php'; $ui = new \UI\UI('/usr/lib64/libui.so'); //load libui dynamic library $ui->init(); $mainwin = $ui->newWindow("libui Control Gallery", 640, 480,1); $ui->controlShow($mainwin); $ui->main();
Note: When Call libui C function need remove ui prefix of name, then to lower case first char
Use UIBuild create UI
Basic Usage:
include '/src/UI.php'; $ui = new \UI\UI('/usr/lib64/libui.so'); $config = ['title' => 'test', 'width' => 600,'height' => 450]; $build = $ui->build($config); $build->show();
build config structure
- build config is xml file, see
tests/uibuild.xml - In xml file, all event attribute name must be prefix
on,onclick,onchange,ondraw, value is callable name, it is not Event instance, callable name support php variable and php callable:$var,func_name,CLASS::method, do not support array callable. variable is GLOBALS - attr value support GLOBALS variable and constant, prefix
$``@as$varor@CONST - also build config support array, main key contain
body,menuand window attribute key; in config array, element key is attr name, element value is attr value,similar the following:
[
'title' => 'window title name',
'width' => 600,
'menu' => [],
'body' => [
'name' => 'box'
'childs' => []
]
]
<?xml version="1.0" encoding="UTF-8"?> <window title="window title name" width="600" height="800" fullscreen="0" onclose="HTTP::quit"> <menu> </menu> <body> </body> </window>
window attribute key list:
| attr | type | Description | Default Vlaue |
|---|---|---|---|
| title | string | window title | No Win Title |
| width | int | window width | 800 |
| height | int | window height | 640 |
| border | int | window border | 0 |
| margin | int | window margin | 0 |
| fullscreen | int | window margin | 0 |
| quit | \UI\Event | quit callback | null |
| close | \UI\Event | close callback | null |
| resize | \UI\Event | resize callback | null |
menu array
The array level 1 of item element is one menu, similar:
[
[
'title' => 'File',
'id' => 'menu_id_1',
'childs' => [
['title' => 'New File'],
['title' => 'Open File'],
]
],
[
'title' => 'Edit',
'id' => 'menu_id_1',
'childs' => [
['title' => 'Undo'],
['title' => 'Copy'],
]
],
]
Top menu only contain title, id, childs , the title value will display in window, every element of childs array is submenu that display in drop-down menu. if element is string and equral hr will display a separator
current Build UI Config of submenu only contain the following attr:
| attr | type | Description | require |
|---|---|---|---|
| title | string | menu title | yes |
| type | string | menu type, value is text,quit,about,preferences or checkbox, default is text |
no |
| click | \UI\Event | click callback | no |
| childs | array | child menu list | no |
body array
every element key of body array is control config, widget element is control name and attr element is control attr. see examples/table.php Build UI current only support the following control:
-
button, Button control,contain the following attr:attr type Description require type string control type, smiliar HTML <button>tag oftypeattr, potential value is following:
1.file, open file button
2.save, save file button
3.font, select font button
4.color, select color button
5.button, is default valueyes title string button label name yes click \UI\Event when click callback, when type fileandsaveis after select file callno change \UI\Event only when colorandfontavailable, select color or font be callno id string no -
boxbox layout,the following attr:attr type Description require dir string layout direction, Specify one of his horizontal and default value,vis verticalyes padded int padding value, default is 0no child_fit int Whether to automatically adapt no childs array sub control list no id string no -
groupgroup layout, havetitleandmargin,child,idattr -
labeltext control, only hastitleandidattr -
hrhorizontal separator, no attr -
vrvertical separator, no attr -
inputinput control, the following attr:attr type Description require type string miliar HTML <input>tag oftypeattr, specify one of the following value:
1.passwordpassword entry control
2.searchsearch entry control
3.textareamultiline entry control
4.radioradio
5.selectselect
6.checkboxcheckbox
7.text, is default value
8.numberis Spinbox
9.slideryes readonly bool whether readonly no wrap bool only textareais available,falseis non wrapping textareano option array radioandselectavailable, element value is option title, key is natural order numberno change \UI\Event exclude checkboxandradiono title string checkboxavailableyes click \UI\Event only radioandcheckboxavailableno min int numberandslideravailableyes max int numberandslideravailableyes id string no editable bool selectavailableno -
formform layout, haspadded,childs,idattr, child widget has label attr -
gridgrid layout, the following attr:attr type Description require padded int no child_left int no child_top int no child_width int no child_height int no child_hexpand int no child_halign int no child_vexpand int no child_valign int no childs array no id string no -
tabletable control, table cell has change event, it is following sub key :attr type Description require th array every element of value is array, key is id, has the following attr:
1.editable,booltype, the column is whether editable
2.textColor
3.title
4.type, specify value ofbutton,image,imgtext,progress,checkbox,checkboxtext,color,text
5. widget haschangeattr, for row column change callbackyes tbody array the table row value list, every element is one row value, when row of column is array has the following attr:
1.imagetype, hassrcwidthheight
2.colortype hasr,g,b
3.rowBgcoloryes id string no -
tabtab control, haspagesub array,pagearray every element value is page child control and key is page title -
imgimage control, has flowing attr:attr type Description require src array is image paths list, every element value is image file path, key is natural order number yes width int the image control width, default is srcfirst element image widthno height int the image control heigth, default is srcfirst element image widthno id string no -
datetimedatetime controlattr type description require type string specify one of value time,date,datetimeyes change \UI\Event no id string no -
progress, hasidattr -
area,canvascreateArea -
attributecreateAttribute -
drawtextcreateTextLayout -
stringcreate aAttributeString -
unsupport control must call libui C function by
UI\UI -
UI\Event, all event callback class, The signature of the callback is as follows:
/** * @param UI\Event $callable The object instance of current event * * */ function (UI\Event $callable) {}
Control common method:
- show()
- hide()
- enable()
- disable()
- destroy()
- parent()
- setParent($parent)
- isVisible()
- isEnabled()
specify control see class statement in control directory
UI method
see UI.php
UIBuild method
see UIBuild.php
toknot/php-libui 适用场景与选型建议
toknot/php-libui 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 54 次下载、GitHub Stars 达 72, 最近一次更新时间为 2019 年 09 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「ui」 「ffi」 「libui」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 toknot/php-libui 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 toknot/php-libui 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 toknot/php-libui 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP FFI Environment
SDL FFI bindings for the PHP language
A PHP FFI integration with TdLib via JSON interface
SDL Image FFI bindings for the PHP language
Local text embeddings via PHP FFI, powered by embedding.cpp. No Python, no API calls, no external services at runtime.
Integration of tesseract bridge via FFI and CLI
统计信息
- 总下载量: 54
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 72
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2019-09-21