updated Readme
This commit is contained in:
parent
36bec32c56
commit
f69689b6ce
93
Readme.md
93
Readme.md
@ -7,7 +7,6 @@ Work in progress
|
||||
- Small (~2.5kLOC)
|
||||
- Focus on portability and minimal internal state
|
||||
- Suited for embedding into graphical applications
|
||||
- Flexible abstraction layer (Widgets, Panel, Window)
|
||||
- No global hidden state
|
||||
- No direct dependencies (not even libc!)
|
||||
- Renderer and platform independent
|
||||
@ -15,10 +14,98 @@ Work in progress
|
||||
- Configurable
|
||||
- UTF-8 supported
|
||||
|
||||
## Layer
|
||||
The gui toolkit consists of three level of abstraction. First the basic widget layer
|
||||
for a as pure functional as possible set of widgets functions without
|
||||
any kind of internal state, with the tradeoff off of a lot of boilerplate code.
|
||||
Second the panel layer for a static grouping of widgets into a panel with a reduced need for
|
||||
a lot of the boilerplate code but takes away some freedome of widget placing and
|
||||
introduces the state of the pannel.
|
||||
Finally there is the context layer which represent the complete window and
|
||||
enables moveable, scaleable and overlapping panels, but needs complete control
|
||||
over the panel management and therefore needs the most amount of internal state.
|
||||
Each higher level level of astraction uses the lower level(s) internally to build
|
||||
on but offers mostly a different API.
|
||||
|
||||
### Widgets
|
||||
|
||||
### Panels
|
||||
|
||||
### Context
|
||||
|
||||
## Memory
|
||||
|
||||
## Input
|
||||
|
||||
## Output
|
||||
|
||||
## Font
|
||||
|
||||
## Configuration
|
||||
While the widgets layer offers the most configuration and even expects you to
|
||||
configure each and every widget, the upper levels provide you with a basic set of
|
||||
configurable attributes like color, padding and spacing.
|
||||
|
||||
## FAQ
|
||||
|
||||
### Is this project stable?
|
||||
The basic API is stable while the needed backend may change. For example the draw
|
||||
command backend will probably be changed to support primitives instead of
|
||||
just using triangles with textures. Which would simplify the library a whole lot
|
||||
while providing more freedom and control to the user.
|
||||
|
||||
### Where is widget X?
|
||||
A number of basic widgets are provided but some of the more complex widgets like
|
||||
comboboxes, tables and tree views are not yet implemented. Maybe if I have more
|
||||
time I will look into adding them, except for comboboxes which are just
|
||||
discusting to implement.
|
||||
|
||||
### Why should I use this library over ImGui
|
||||
You probably shouldn't since ImGui provides a lot more features, better
|
||||
support and more polish. That being said ImGui is C++ and not C and
|
||||
therefore for people who exclusivly only use C not interesting. Furthermore
|
||||
while ImGui provides a way more bloat free expierence than most classic
|
||||
non immediate mode GUIs, it still focuses on unneeded global hidden state.
|
||||
And finally the biggest difference between this project and ImGui is the
|
||||
flexible selection of abstraction provided by this project. That beeing said I
|
||||
still think the ImGui team did a great job of providing a good
|
||||
immedate mode GUI that I don't activily try compete against since the
|
||||
contributors of ImGUI are a.) alot more contributers and b.) probably have more
|
||||
programming expierence than I do.
|
||||
|
||||
### Why did you use ANSI C and not C99 or C++?
|
||||
Personally I stay out of all "discussions" about C vs C++ since they are totally
|
||||
worthless and never brought anything good with it. The simple answer is I
|
||||
personally love C have nothing against people using C++ exspecially the new
|
||||
iterations with C++11 and C++14 as long as they stay away from my code.
|
||||
While this hopefully settles my view on C vs C++ there is still ANSI C vs C99.
|
||||
While for personal projects I only use C99 with all its niceties, libraries are a
|
||||
whole different animal. Since libraries are designed to reach the highest number of
|
||||
users possible. Which brings me to ANSI C which is probably the most portable
|
||||
programming langauge out there. In addition not all C compiler like the MSVC
|
||||
compiler fully support C99, which finalized my decision to use
|
||||
ANSI C.
|
||||
|
||||
### Why do you typedef our own types instead of using the standard types
|
||||
Because this project is in ANSI C which does not have the header file `<stdint.h>`
|
||||
and therefore does not provide me with fixed size types that I need . Therefore
|
||||
I defined my own types which need to be set to the correct size for each
|
||||
plaform. But if your development environment provides the header you can define
|
||||
`GUI_USE_FIXED_SIZE_TYPES` to directly use the correct types.
|
||||
|
||||
### Why do you use Freetype? I thought there are no direct dependencies?
|
||||
Freefont is no direct dependency and is only used if you specifically import
|
||||
the library by defining `GUI_USE_FRETYPE_FONT`. The main reason I even added
|
||||
freetype was to have a basic easy way to test out the library without having to
|
||||
manage font handling.
|
||||
|
||||
## References
|
||||
- [Tutorial from Jari Komppa on imgui libraries](http://www.johno.se/book/imgui.html)
|
||||
- [Tutorial from Jari Komppa about imgui libraries](http://www.johno.se/book/imgui.html)
|
||||
- [Johannes 'johno' Norneby's article](http://iki.fi/sol/imgui/)
|
||||
- [imgui: The inspiration for this project](https://github.com/ocornut/imgui)
|
||||
- [Casey Muratori's original introduction to imgui's](http:://mollyrocket.com/861?node=861)
|
||||
- [Casey Muratori's imgui Panel design 1/2](http://mollyrocket.com/casey/stream_0019.html)
|
||||
- [Casey Muratori's imgui Panel design 2/2](http://mollyrocket.com/casey/stream_0020.html)
|
||||
- [ImGui: The inspiration for this project](https://github.com/ocornut/imgui)
|
||||
|
||||
# License
|
||||
(The MIT License)
|
||||
|
@ -215,7 +215,6 @@ main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Window */
|
||||
UNUSED(argc); UNUSED(argv);
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
win = SDL_CreateWindow("clone", 0, 0,
|
||||
@ -238,12 +237,12 @@ main(int argc, char *argv[])
|
||||
memory.memory = calloc(MAX_MEMORY , 1);
|
||||
memory.size = MAX_MEMORY;
|
||||
memory.vertex_percentage = 0.80f;
|
||||
memory.command_percentage = 0.19f;
|
||||
memory.command_percentage = 0.20f;
|
||||
ctx = gui_new(&memory, &input);
|
||||
|
||||
/* Panel */
|
||||
gui_default_config(&config);
|
||||
font = mkfont(argv[1], 14, 16, 255, GUI_ATLAS_DIM_256);
|
||||
font = mkfont(argv[1], 12, 16, 255, GUI_ATLAS_DIM_256);
|
||||
panel = gui_panel_new(ctx, 50, 50, 500, 320, &config, font);
|
||||
message = gui_panel_new(ctx, 150, 150, 200, 100, &config, font);
|
||||
color_panel = gui_panel_new(ctx, 250, 250, 400, 235, &config, font);
|
||||
@ -291,8 +290,8 @@ main(int argc, char *argv[])
|
||||
SDL_Delay(DTIME - dt);
|
||||
}
|
||||
|
||||
/* Cleanup */
|
||||
cleanup:
|
||||
/* Cleanup */
|
||||
free(memory.memory);
|
||||
delfont(font);
|
||||
SDL_GL_DeleteContext(glContext);
|
||||
|
14
gui.h
14
gui.h
@ -396,6 +396,13 @@ struct gui_panel {
|
||||
const struct gui_config *config;
|
||||
};
|
||||
|
||||
/* font */
|
||||
#ifdef GUI_USE_FREETYPE_FONT
|
||||
#define gui_font_atlas_alloc_size(sz) ((sz) * (sz) * GUI_ATLAS_DEPTH)
|
||||
gui_bool gui_font_load(struct gui_font*, struct gui_font_atlas*, gui_uint height,
|
||||
const gui_byte*, gui_size);
|
||||
#endif
|
||||
|
||||
/* Input */
|
||||
void gui_input_begin(struct gui_input*);
|
||||
void gui_input_motion(struct gui_input*, gui_int x, gui_int y);
|
||||
@ -409,13 +416,6 @@ void gui_output_begin(struct gui_draw_buffer*, const struct gui_memory*);
|
||||
void gui_output_end(struct gui_draw_buffer*, struct gui_draw_call_list*,
|
||||
struct gui_memory_status*);
|
||||
|
||||
/* font */
|
||||
#ifdef GUI_USE_FREETYPE_FONT
|
||||
#define gui_font_atlas_alloc_size(sz) ((sz) * (sz) * GUI_ATLAS_DEPTH)
|
||||
gui_bool gui_font_load(struct gui_font*, struct gui_font_atlas*, gui_uint height,
|
||||
const gui_byte*, gui_size);
|
||||
#endif
|
||||
|
||||
/* Widgets */
|
||||
void gui_widget_text(struct gui_draw_buffer*, const struct gui_text*,
|
||||
const struct gui_font*);
|
||||
|
Loading…
Reference in New Issue
Block a user