toknot / php-libui
PHP bindings to the libui C library.
Installs: 54
Dependents: 0
Suggesters: 0
Security: 0
Stars: 71
Watchers: 5
Forks: 8
Open Issues: 0
pkg:composer/toknot/php-libui
Requires
- php: >=8.1.0
- ext-ffi: *
Suggests
- ext-imagick: For get font real height and width
This package is auto-updated.
Last update: 2025-10-11 04:32:49 UTC
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