LGI is an open source GUI framework (on
github)
for abstracting out all the operating system dependencies
that you can produce portable code. It handles all the graphical interface functions,
threading and semaphores, network connectivity and lots of other bits and peices to
help build small, fast and reliable applications.
The strengths of LGI is that it's a small enough library that one person can understand
it all. Also it's not too much of a burden on an application, both in increased download
time and memory footprint. Ultimately however size is a secondary consideration to the core
feature of LGI and that
is portability. Currently 3 serious ports exist: Windows, Mac and Linux. There is also
Haiku/BeOS and SDL ports which are partially implemented.
You can build some basic documentation using
doxygen and there is some scripting language
docs. Mostly though a good place to start is looking at the apps with source code:
Latest code:
git clone https://github.com/memecode/lgi.git lgi/trunk
Developer environement GUI:
|
| Windows Win10+
|
v1.0
Stable
| Zip 2.7 MiB, 12/11/2018
|
Graphical editor / translation for resource files:
Cross platform and version control user interface (Git/Hg/Svn/Cvs):
|
| Windows Win10+
| OSX x32 10.10+
| Linux x64
|
v0.4
Alpha
| Zip 2.4 MiB, 23/11/2018
| Zip 1.3 MiB, 23/11/2018
|
|
v0.1
Alpha
|
|
| Zip 5.1 MiB, 20/5/2018
|
There is
some documentation for configuring Lgi at runtime
via the
lgi.json file.
- Data storage classes
- File system abstraction:
- User interface elements:
- Internally all text is Utf-8.
- Unicode font support:
- LTypeFace - font info base class
- LFontSystem
- LFontCache - cache for creating and reusing CSS fonts
- LDisplayString - rendering text
- LFontSelect - user interface for choosing a font
- Tools for converting to/from
native OS text and other codepages are provided. iso-8859-x and
windows-12xx codepage support is native, other codepages supported via
the iconv library.
- Multi-threading:
- Sub process management:
- Graphics library:
- LSurface
- LMemDC - in memory bitmap
- LScreenDC - drawing to screen
- LPrintDC - print support
- Supports internally, all the basic primitives: Line, Circle, Rect,
Blt, Flood, Polygon, Ellipse etc. No OS support required.
- Bit depth conversion for bitmaps and colours.
- Palette management.
- Alpha blending.
- LDisplayInfo
- Vector art:
- LPath
- anti-aliased rasterisation of primitives & text.
- Includes TTF -> path capability.
- LFilter - image file format support:
- Full OS independant file open/save dialog (LFileSelect)
There is also support for the Win32 and Mac native file open/save
dialogs (API compatible).
- Mime type detection lookup API with support for finding a suitable app for
a Mimetype.
- Platform independant XML resource file format for strings, dialogs and
menus. All fully multi-lingual.
- Clipboard IO for text, bitmaps and binary data:
- Drag'n'drop events/API:
- Commonly dialogs:
- Date time handling:
- Network support:
- LSocket - socket base class
- LSelect - select wrapper, wait on events
- LSsh - libssh wrapper
- Protocol support:
- Structured data formats:
- Scripting:
- LDom - API to connect the scripting to external classes
- LVariant - common variable class
- LScriptEngine - high level compile + run class
Building LGI
First check out the source:
git clone https://github.com/memecode/lgi.git lgi/trunk
Then build the dependencies:
cd lgi/trunk/deps
./build.py
Windows
Visual Studio
Install a supported version of Visual Studio: 2019 or 2022.
Adding build folders to the shared library path:
Add these to your PATH:
- lgi\deps\build-x64\bin
- lgi\trunk\lib
| Mac
Install XCode
Go to the Apple Developer site and grab XCode
Build
Open Lgi.xcodeproj in XCode and run the build command.
| Linux
Building on Ubuntu:
sudo apt-get install mercurial libmagic-dev libgtk3.0-dev \
libgstreamer1.0-dev libappindicator3-dev libssh-dev
hg clone https://phab.mallen.id.au/source/lgi/ lgi/trunk
cd lgi/trunk
ln -s Makefile.linux makefile
make -j 4
If apt can't find the gtk 3 dev libraries, on some systems it's called 'libgtk-3-dev' just
to be different I guess.
If the makefile doesn't work on your system:
- Download a binary of LgiIde
- Project->Open and select lgi/trunk/Ide/LgiIde.xml
- Project->Create Makefile->Linux
- Project->Build
|