diff options
Diffstat (limited to 'src/libui_sdl/libui/test/page7c.c')
-rw-r--r-- | src/libui_sdl/libui/test/page7c.c | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/libui_sdl/libui/test/page7c.c b/src/libui_sdl/libui/test/page7c.c new file mode 100644 index 0000000..ac6a316 --- /dev/null +++ b/src/libui_sdl/libui/test/page7c.c @@ -0,0 +1,133 @@ +// 13 october 2015 +#include "test.h" + +static uiArea *area; + +struct handler { + uiAreaHandler ah; +}; + +static struct handler handler; + +#define areaSize 250 +#define borderThickness 1 +#define padding 30 +#define circleRadius ((areaSize - padding) / 2) + +static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *dp) +{ + uiDrawPath *path; + uiDrawBrush brush; + uiDrawStrokeParams sp; + uiDrawBrushGradientStop stops[2]; + + memset(&brush, 0, sizeof (uiDrawBrush)); + memset(&sp, 0, sizeof (uiDrawStrokeParams)); + + // add some buffering to detect scrolls that aren't on the dot and draws that are outside the scroll area on Windows + path = uiDrawNewPath(uiDrawFillModeWinding); + uiDrawPathAddRectangle(path, + -50, -50, + areaSize + 100, areaSize + 100); + uiDrawPathEnd(path); + brush.Type = uiDrawBrushTypeSolid; + brush.R = 0; + brush.G = 1; + brush.B = 0; + brush.A = 1; + uiDrawFill(dp->Context, path, &brush); + uiDrawFreePath(path); + + path = uiDrawNewPath(uiDrawFillModeWinding); + uiDrawPathAddRectangle(path, + 0, 0, + areaSize, areaSize); + uiDrawPathEnd(path); + brush.Type = uiDrawBrushTypeSolid; + brush.R = 1; + brush.G = 1; + brush.B = 1; + brush.A = 1; + uiDrawFill(dp->Context, path, &brush); + brush.Type = uiDrawBrushTypeSolid; + brush.R = 1; + brush.G = 0; + brush.B = 0; + brush.A = 1; + sp.Cap = uiDrawLineCapFlat; + sp.Join = uiDrawLineJoinMiter; + sp.Thickness = 1; + sp.MiterLimit = uiDrawDefaultMiterLimit; + uiDrawStroke(dp->Context, path, &brush, &sp); + uiDrawFreePath(path); + + path = uiDrawNewPath(uiDrawFillModeWinding); + uiDrawPathNewFigureWithArc(path, + areaSize / 2, areaSize / 2, + circleRadius, + 0, 2 * uiPi, + 0); + uiDrawPathEnd(path); + stops[0].Pos =0.0; + stops[0].R = 0.0; + stops[0].G = 1.0; + stops[0].B = 1.0; + stops[0].A = 1.0; + stops[1].Pos = 1.0; + stops[1].R = 0.0; + stops[1].G = 0.0; + stops[1].B = 1.0; + stops[1].A = 1.0; + brush.Type = uiDrawBrushTypeLinearGradient; + brush.X0 = areaSize / 2; + brush.Y0 = padding; + brush.X1 = areaSize / 2; + brush.Y1 = areaSize - padding; + brush.Stops = stops; + brush.NumStops = 2; + uiDrawFill(dp->Context, path, &brush); + uiDrawFreePath(path); +} + +static void handlerMouseEvent(uiAreaHandler *a, uiArea *area, uiAreaMouseEvent *e) +{ + // do nothing +} + +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 (e->Key == 'h' && !e->Up) { + // TODO hide the widget momentarily on the h key + return 1; + } + return 0; +} + +uiGroup *makePage7c(void) +{ + uiGroup *group; + + handler.ah.Draw = handlerDraw; + handler.ah.MouseEvent = handlerMouseEvent; + handler.ah.MouseCrossed = handlerMouseCrossed; + handler.ah.DragBroken = handlerDragBroken; + handler.ah.KeyEvent = handlerKeyEvent; + + group = newGroup("Scrolling Drawing Test"); + + area = uiNewScrollingArea((uiAreaHandler *) (&handler), + areaSize, areaSize); + uiGroupSetChild(group, uiControl(area)); + + return group; +} |