From 75377c98c5728480bb6ccbe5f4fe3c27085a9a56 Mon Sep 17 00:00:00 2001 From: shadow303 Date: Sun, 7 Dec 2003 03:19:50 +0000 Subject: [PATCH] Convert to LayerData independent drawing API git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5598 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/servers/app/DisplayDriver.h | 115 +++++++++++++++----- 1 file changed, 85 insertions(+), 30 deletions(-) diff --git a/headers/private/servers/app/DisplayDriver.h b/headers/private/servers/app/DisplayDriver.h index 5279f2658d..feeada4cec 100644 --- a/headers/private/servers/app/DisplayDriver.h +++ b/headers/private/servers/app/DisplayDriver.h @@ -21,6 +21,7 @@ // // File Name: DisplayDriver.h // Author: DarkWyrm +// Gabe Yoder // Description: Mostly abstract class which handles all graphics output // for the server // @@ -79,21 +80,31 @@ typedef struct #endif -class AccLineCalc +class DisplayDriver; + +typedef void (DisplayDriver::* SetPixelFuncType)(int x, int y); +typedef void (DisplayDriver::* SetHorizontalLineFuncType)(int xstart, int xend, int y); +typedef void (DisplayDriver::* SetVerticalLineFuncType)(int x, int ystart, int yend); +typedef void (DisplayDriver::* SetRectangleFuncType)(int left, int top, int right, int bottom); + +class LineCalc { public: - AccLineCalc(); - AccLineCalc(const BPoint &pta, const BPoint &ptb); + LineCalc(); + LineCalc(const BPoint &pta, const BPoint &ptb); void SetPoints(const BPoint &pta, const BPoint &ptb); float GetX(float y); float GetY(float x); float Slope(void) { return slope; } float Offset(void) { return offset; } - float MinX(); - float MinY(); - float MaxX(); - float MaxY(); - void Swap(AccLineCalc &from); + float MinX() { return minx; } + float MinY() { return miny; } + float MaxX() { return maxx; } + float MaxY() { return maxy; } + void Swap(LineCalc &from); + bool ClipToRect(const BRect& rect); + BPoint GetStart() { return start; } + BPoint GetEnd() { return end; } private: float slope; float offset; @@ -129,15 +140,23 @@ public: virtual void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest, LayerData *d); virtual void DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL); - virtual void FillArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat); - virtual void FillBezier(BPoint *pts, LayerData *d, const Pattern &pat); - virtual void FillEllipse(BRect r, LayerData *d, const Pattern &pat); - virtual void FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat); - virtual void FillRect(BRect r, LayerData *d, const Pattern &pat); - virtual void FillRegion(BRegion *r, LayerData *d, const Pattern &pat); - virtual void FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat); + virtual void FillArc(const BRect r, float angle, float span, RGBColor& color); + virtual void FillArc(const BRect r, float angle, float span, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillBezier(BPoint *pts, RGBColor& color); + virtual void FillBezier(BPoint *pts, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillEllipse(BRect r, RGBColor& color); + virtual void FillEllipse(BRect r, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillPolygon(BPoint *ptlist, int32 numpts, RGBColor& color); + virtual void FillPolygon(BPoint *ptlist, int32 numpts, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillRect(const BRect r, RGBColor& color); + virtual void FillRect(const BRect r, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillRegion(BRegion& r, RGBColor& color); + virtual void FillRegion(BRegion& r, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void FillRoundRect(BRect r, float xrad, float yrad, RGBColor& color); + virtual void FillRoundRect(BRect r, float xrad, float yrad, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); // virtual void FillShape(SShape *sh, LayerData *d, const Pattern &pat); - virtual void FillTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &pat); + virtual void FillTriangle(BPoint *pts, RGBColor& color); + virtual void FillTriangle(BPoint *pts, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); virtual void HideCursor(void); virtual bool IsCursorHidden(void); @@ -147,17 +166,29 @@ public: virtual void ObscureCursor(void); virtual void SetCursor(ServerCursor *cursor); - virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat); - virtual void StrokeBezier(BPoint *pts, LayerData *d, const Pattern &pat); - virtual void StrokeEllipse(BRect r, LayerData *d, const Pattern &pat); - virtual void StrokeLine(BPoint start, BPoint end, LayerData *d, const Pattern &pat); - virtual void StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat, bool is_closed=true); - virtual void StrokeRect(BRect r, LayerData *d, const Pattern &pat); - virtual void StrokeRegion(BRegion *r, LayerData *d, const Pattern &pat); - virtual void StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat); + virtual void StrokeArc(BRect r, float angle, float span, float pensize, RGBColor& color); + virtual void StrokeArc(BRect r, float angle, float span, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokeBezier(BPoint *pts, float pensize, RGBColor& color); + virtual void StrokeBezier(BPoint *pts, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokeEllipse(BRect r, float pensize, RGBColor& color); + virtual void StrokeEllipse(BRect r, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokeLine(BPoint start, BPoint end, float pensize, RGBColor& color); + virtual void StrokeLine(BPoint start, BPoint end, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokePoint(BPoint& pt, RGBColor& color); + virtual void StrokePolygon(BPoint *ptlist, int32 numpts, float pensize, RGBColor& color, bool is_closed=true); + virtual void StrokePolygon(BPoint *ptlist, int32 numpts, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color, bool is_closed=true); + virtual void StrokeRect(BRect r, float pensize, RGBColor& color); + virtual void StrokeRect(BRect r, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokeRegion(BRegion& r, float pensize, RGBColor& color); + virtual void StrokeRegion(BRegion& r, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + virtual void StrokeRoundRect(BRect r, float xrad, float yrad, float pensize, RGBColor& color); + virtual void StrokeRoundRect(BRect r, float xrad, float yrad, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); // virtual void StrokeShape(SShape *sh, LayerData *d, const Pattern &pat); - virtual void StrokeTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &pat); - virtual void StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *colors, LayerData *d); + virtual void StrokeTriangle(BPoint *pts, float pensize, RGBColor& color); + virtual void StrokeTriangle(BPoint *pts, float pensize, const Pattern& pattern, RGBColor& high_color, RGBColor& low_color); + + virtual void StrokeLineArray(BPoint *pts, int32 numlines, float pensize, RGBColor *colors); + virtual void SetMode(int32 mode); virtual bool DumpToFile(const char *path); virtual ServerBitmap *DumpToBitmap(void); @@ -204,10 +235,34 @@ protected: void _SetDPMSState(uint32 state); void _SetDeviceInfo(const accelerant_device_info &infO); ServerCursor *_GetCursor(void); - virtual void HLine(int32 x1, int32 x2, int32 y, PatternHandler *pat); - virtual void HLineThick(int32 x1, int32 x2, int32 y, int32 thick, PatternHandler *pat); - virtual void SetPixel(int x, int y, RGBColor col); - virtual void SetThickPixel(int x, int y, int thick, PatternHandler *pat); + //virtual void HLine(int32 x1, int32 x2, int32 y, PatternHandler *pat); + //virtual void HLineThick(int32 x1, int32 x2, int32 y, int32 thick, PatternHandler *pat); + virtual void HLinePatternThick(int32 x1, int32 x2, int32 y); + virtual void VLinePatternThick(int32 x, int32 y1, int32 y2); + virtual void FillSolidRect(int32 left, int32 top, int32 right, int32 bottom); + virtual void FillPatternRect(int32 left, int32 top, int32 right, int32 bottom); + //virtual void SetPixel(int x, int y, RGBColor col); + //virtual void SetThickPixel(int x, int y, int thick, PatternHandler *pat); + virtual void SetThickPatternPixel(int x, int y); + + void FillArc(const BRect r, float angle, float span, DisplayDriver*, SetHorizontalLineFuncType setLine); + void FillBezier(BPoint *pts, DisplayDriver* driver, SetHorizontalLineFuncType setLine); + void FillEllipse(BRect r, DisplayDriver* driver, SetHorizontalLineFuncType setLine); + void FillPolygon(BPoint *ptlist, int32 numpts, DisplayDriver* driver, SetHorizontalLineFuncType setLine); + void FillRegion(BRegion& r, DisplayDriver* driver, SetRectangleFuncType setRect); + void FillRoundRect(BRect r, float xrad, float yrad, DisplayDriver* driver, SetRectangleFuncType setRect, SetHorizontalLineFuncType setLine); + void FillTriangle(BPoint *pts, DisplayDriver* driver, SetHorizontalLineFuncType setLine); + void StrokeArc(BRect r, float angle, float span, DisplayDriver* driver, SetPixelFuncType setPixel); + void StrokeBezier(BPoint *pts, DisplayDriver* driver, SetPixelFuncType setPixel); + void StrokeEllipse(BRect r, DisplayDriver* driver, SetPixelFuncType setPixel); + void StrokeLine(BPoint start, BPoint end, DisplayDriver* driver, SetPixelFuncType setPixel); + void StrokePolygon(BPoint *ptlist, int32 numpts, DisplayDriver* driver, SetPixelFuncType setPixel, bool is_closed=true); + void StrokeRect(BRect r, DisplayDriver* driver, SetHorizontalLineFuncType setHLine, SetVerticalLineFuncType setVLine); + void StrokeRoundRect(BRect r, float xrad, float yrad, DisplayDriver* driver, SetHorizontalLineFuncType setHLine, SetVerticalLineFuncType setVLine, SetPixelFuncType setPixel); + + PatternHandler fDrawPattern; + RGBColor fDrawColor; + int fLineThickness; private: BLocker *_locker;