diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-03-28 21:33:20 +0200 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-03-28 21:35:32 +0200 |
commit | 908749cfdfa037b6f5fd0f5f7b2fa66080329156 (patch) | |
tree | 9875ca3fb9800c0b14f0cb68817d4f14e59105f9 | |
parent | c2adc3c7cf691230f0ad4697e2bbb0bcd24c6afe (diff) | |
download | bemenu-908749cfdfa037b6f5fd0f5f7b2fa66080329156.tar.gz bemenu-908749cfdfa037b6f5fd0f5f7b2fa66080329156.tar.bz2 bemenu-908749cfdfa037b6f5fd0f5f7b2fa66080329156.zip |
Add basic API code.
=> bmMenu instancing.
=> "Rendering"
=> bmMenu releasing.
-rw-r--r-- | client/CMakeLists.txt | 2 | ||||
-rw-r--r-- | client/client.c | 12 | ||||
-rw-r--r-- | lib/bemenu.c | 51 | ||||
-rw-r--r-- | lib/bemenu.h | 38 | ||||
-rw-r--r-- | lib/internal.h | 37 |
5 files changed, 134 insertions, 6 deletions
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 91c4ea5..aceaaf5 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,6 +1,6 @@ # Sources SET(CLIENT_SOURCE client.c) -SET(CLIENT_INCLUDE) +SET(CLIENT_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../lib") SET(CLIENT_LIBRARIES bemenu) # Warnings diff --git a/client/client.c b/client/client.c index de5468e..559651f 100644 --- a/client/client.c +++ b/client/client.c @@ -6,6 +6,7 @@ */ #include <stdlib.h> +#include <bemenu.h> /** * Main method @@ -20,9 +21,14 @@ int main(int argc, char **argv) { (void)argc, (void)argv; - /* - * code goes here - */ + bmMenu *menu = bmMenuNew(BM_DRAW_MODE_NONE); + + if (!menu) + return EXIT_FAILURE; + + bmMenuRender(menu); + + bmMenuFree(menu); return EXIT_SUCCESS; } diff --git a/lib/bemenu.c b/lib/bemenu.c index 2f92f27..a2caa13 100644 --- a/lib/bemenu.c +++ b/lib/bemenu.c @@ -2,8 +2,55 @@ * @file bemenu.c */ -/* - * code goes here +#include "internal.h" +#include <stdlib.h> +#include <assert.h> + +/** + * Create new bmMenu instance. + * + * @param drawMode Render method to be used for this menu instance. + * @return bmMenu for new menu instance, NULL if creation failed. */ +bmMenu* bmMenuNew(bmDrawMode drawMode) +{ + bmMenu *menu = calloc(1, sizeof(bmMenu)); + + menu->drawMode = drawMode; + + if (!menu) + return NULL; + + switch (menu->drawMode) { + default:break; + } + + return menu; +} + +/** + * Release bmMenu instance. + * + * @param menu bmMenu instance to be freed from memory. + */ +void bmMenuFree(bmMenu *menu) +{ + assert(menu != NULL); + free(menu); +} + +/** + * Create new bmMenu instance. + * + * @param drawMode Render method to be used for this menu instance. + * @return bmMenu for new menu instance, NULL if creation failed. + */ +void bmMenuRender(bmMenu *menu) +{ + assert(menu != NULL); + + if (menu->renderApi.render) + menu->renderApi.render(menu->items, menu->itemsCount); +} /* vim: set ts=8 sw=4 tw=0 :*/ diff --git a/lib/bemenu.h b/lib/bemenu.h new file mode 100644 index 0000000..f4823b4 --- /dev/null +++ b/lib/bemenu.h @@ -0,0 +1,38 @@ +/** + * @file bemenu.h + * + * Public header + */ + +/** + * Draw mode constants for setting bmMenu instance draw mode. + */ +typedef enum bmDrawMode { + BM_DRAW_MODE_NONE +} bmDrawMode; + +typedef struct _bmMenu bmMenu; + +/** + * Create new bmMenu instance. + * + * @param drawMode Render method to be used for this menu instance. + * @return bmMenu for new menu instance, NULL if creation failed. + */ +bmMenu* bmMenuNew(bmDrawMode drawMode); + +/** + * Release bmMenu instance. + * + * @param menu bmMenu instance to be freed from memory. + */ +void bmMenuFree(bmMenu *menu); + +/** + * Render bmMenu instance using chosen draw method. + * + * @param menu bmMenu instance to be rendered. + */ +void bmMenuRender(bmMenu *menu); + +/* vim: set ts=8 sw=4 tw=0 :*/ diff --git a/lib/internal.h b/lib/internal.h new file mode 100644 index 0000000..d11ebe2 --- /dev/null +++ b/lib/internal.h @@ -0,0 +1,37 @@ +/** + * @file internal.h + */ + +#include "bemenu.h" + +/** + * Internal bmItem struct that is not exposed to public. + * Represents a single item in menu. + */ +struct _bmItem { + char *text; +} _bmItem; + +/** + * Internal bmRenderApi struct. + * Renderers should be able to fill this one as they see fit. + */ +struct _bmRenderApi { + void (*render)(struct _bmItem **items, unsigned int nmemb); + void (*free)(void); +} _bmRenderApi; + +/** + * Internal bmMenu struct that is not exposed to public. + */ +struct _bmMenu { + bmDrawMode drawMode; + struct _bmRenderApi renderApi; + struct _bmItem **items; + unsigned int itemsCount; +} _bmMenu; + + +void bmRenderNullInit(struct _bmRenderApi *api); + +/* vim: set ts=8 sw=4 tw=0 :*/ |