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