From 4d39f77dbc8092cbc9c19ea77d9581edf6daa054 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 7 Oct 2015 10:10:03 -0400 Subject: [PATCH] Set up a system for brushes. --- winarea_d2d/ui.h | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/winarea_d2d/ui.h b/winarea_d2d/ui.h index b31ecb7f..031f7283 100644 --- a/winarea_d2d/ui.h +++ b/winarea_d2d/ui.h @@ -36,15 +36,26 @@ struct uiAreaDrawParams { intmax_t VScrollPos; }; -// TODO proper sources // TODO dotting/dashing typedef struct uiDrawPath uiDrawPath; +typedef struct uiDrawBrush uiDrawBrush; typedef struct uiDrawStrokeParams uiDrawStrokeParams; + +typedef enum uiDrawBrushType uiDrawBrushType; +typedef struct uiDrawBrushGradientStop uiDrawBrushGradientStop; + typedef enum uiDrawLineCap uiDrawLineCap; typedef enum uiDrawLineJoin uiDrawLineJoin; typedef enum uiDrawFillMode uiDrawFillMode; +enum uiDrawBrushType { + uiDrawBrushTypeSolid, +/*TODO uiDrawBrushTypeLinearGradient, + uiDrawBrushTypeRadialGradient, + uiDrawBrushTypeImage, +*/}; + enum uiDrawLineCap { uiDrawLineCapFlat, uiDrawLineCapRound, @@ -67,6 +78,35 @@ enum uiDrawFillMode { uiDrawFillModeAlternate, }; +struct uiDrawBrush { + uiDrawBrushType Type; + + // solid brushes + double R; + double G; + double B; + double A; + + // gradient brushes + double X0; // linear: start X, radial: start X + double Y0; // linear: start Y, radial: start Y + double X1; // linear: end X, radial: outer circle center X + double Y1; // linear: end Y, radial: outer circle center Y + double OuterRadius; // radial gradients only + uiDrawBrushGradientStop *Stops; + size_t NumStops; + + // TODO images +}; + +struct uiDrawBrushGradientStop { + double Pos; + double R; + double G; + double B; + double A; +}; + struct uiDrawStrokeParams { uiDrawLineCap Cap; uiDrawLineJoin Join; @@ -91,8 +131,8 @@ void uiDrawPathAddRectangle(uiDrawPath *, double, double, double, double); void uiDrawPathEnd(uiDrawPath *); -void uiDrawStroke(uiDrawContext *, uiDrawPath *, uiDrawStrokeParams *); -void uiDrawFill(uiDrawContext *, uiDrawPath *); +void uiDrawStroke(uiDrawContext *, uiDrawPath *, uiDrawBrush *, uiDrawStrokeParams *); +void uiDrawFill(uiDrawContext *, uiDrawPath *, uiDrawBrush *); // TODO primitives: // - rounded rectangles