137 lines
3.1 KiB
C
137 lines
3.1 KiB
C
|
// 17 january 2017
|
||
|
#include "drawtext.h"
|
||
|
|
||
|
static uiWindow *mainwin;
|
||
|
static uiBox *box;
|
||
|
static uiCombobox *exampleList;
|
||
|
static uiArea *area;
|
||
|
static uiAreaHandler handler;
|
||
|
|
||
|
#define nExamples 20
|
||
|
static struct example *examples[nExamples];
|
||
|
static int curExample = 0;
|
||
|
|
||
|
static void onExampleChanged(uiCombobox *c, void *data)
|
||
|
{
|
||
|
uiControlHide(examples[curExample]->panel);
|
||
|
curExample = uiComboboxSelected(exampleList);
|
||
|
uiControlShow(examples[curExample]->panel);
|
||
|
redraw();
|
||
|
}
|
||
|
|
||
|
void redraw(void)
|
||
|
{
|
||
|
uiAreaQueueRedrawAll(area);
|
||
|
}
|
||
|
|
||
|
static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p)
|
||
|
{
|
||
|
examples[curExample]->draw(p);
|
||
|
}
|
||
|
|
||
|
static void handlerMouseEvent(uiAreaHandler *a, uiArea *area, uiAreaMouseEvent *e)
|
||
|
{
|
||
|
if (examples[curExample]->mouse != NULL)
|
||
|
examples[curExample]->mouse(e);
|
||
|
}
|
||
|
|
||
|
static void handlerMouseCrossed(uiAreaHandler *ah, uiArea *a, int left)
|
||
|
{
|
||
|
// do nothing
|
||
|
}
|
||
|
|
||
|
static void handlerDragBroken(uiAreaHandler *ah, uiArea *a)
|
||
|
{
|
||
|
// do nothing
|
||
|
}
|
||
|
|
||
|
static int handlerKeyEvent(uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e)
|
||
|
{
|
||
|
if (examples[curExample]->key != NULL)
|
||
|
return examples[curExample]->key(e);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int onClosing(uiWindow *w, void *data)
|
||
|
{
|
||
|
uiControlDestroy(uiControl(mainwin));
|
||
|
uiQuit();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int shouldQuit(void *data)
|
||
|
{
|
||
|
uiControlDestroy(uiControl(mainwin));
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
uiInitOptions o;
|
||
|
const char *err;
|
||
|
int n;
|
||
|
|
||
|
handler.Draw = handlerDraw;
|
||
|
handler.MouseEvent = handlerMouseEvent;
|
||
|
handler.MouseCrossed = handlerMouseCrossed;
|
||
|
handler.DragBroken = handlerDragBroken;
|
||
|
handler.KeyEvent = handlerKeyEvent;
|
||
|
|
||
|
memset(&o, 0, sizeof (uiInitOptions));
|
||
|
err = uiInit(&o);
|
||
|
if (err != NULL) {
|
||
|
fprintf(stderr, "error initializing ui: %s\n", err);
|
||
|
uiFreeInitError(err);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
uiOnShouldQuit(shouldQuit, NULL);
|
||
|
|
||
|
mainwin = uiNewWindow("libui Text-Drawing Example", 640, 480, 1);
|
||
|
uiWindowOnClosing(mainwin, onClosing, NULL);
|
||
|
|
||
|
box = uiNewVerticalBox();
|
||
|
uiWindowSetChild(mainwin, uiControl(box));
|
||
|
|
||
|
exampleList = uiNewCombobox();
|
||
|
uiBoxAppend(box, uiControl(exampleList), 0);
|
||
|
|
||
|
area = uiNewArea(&handler);
|
||
|
uiBoxAppend(box, uiControl(area), 1);
|
||
|
|
||
|
n = 0;
|
||
|
examples[n] = mkBasicExample();
|
||
|
uiComboboxAppend(exampleList, examples[n]->name);
|
||
|
uiControlHide(examples[n]->panel);
|
||
|
uiBoxAppend(box, examples[n]->panel, 0);
|
||
|
n++;
|
||
|
examples[n] = mkHitTestExample();
|
||
|
uiComboboxAppend(exampleList, examples[n]->name);
|
||
|
uiControlHide(examples[n]->panel);
|
||
|
uiBoxAppend(box, examples[n]->panel, 0);
|
||
|
n++;
|
||
|
examples[n] = mkAttributesExample();
|
||
|
uiComboboxAppend(exampleList, examples[n]->name);
|
||
|
uiControlHide(examples[n]->panel);
|
||
|
uiBoxAppend(box, examples[n]->panel, 0);
|
||
|
n++;
|
||
|
examples[n] = mkEmptyStringExample();
|
||
|
uiComboboxAppend(exampleList, examples[n]->name);
|
||
|
uiControlHide(examples[n]->panel);
|
||
|
uiBoxAppend(box, examples[n]->panel, 0);
|
||
|
n++;
|
||
|
// and set things up for the initial state
|
||
|
uiComboboxSetSelected(exampleList, 0);
|
||
|
uiComboboxOnSelected(exampleList, onExampleChanged, NULL);
|
||
|
// and set up the first one
|
||
|
onExampleChanged(NULL, NULL);
|
||
|
|
||
|
uiControlShow(uiControl(mainwin));
|
||
|
uiMain();
|
||
|
|
||
|
// TODO free examples
|
||
|
|
||
|
uiUninit();
|
||
|
return 0;
|
||
|
}
|