libui/zOLD_test/page7c.c

134 lines
2.9 KiB
C

// 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;
}