xref: /haiku/src/tests/servers/app/painter/Painter.h (revision 30f5afc8a94aadcad0ba8b7e156dede167714079)
1*30f5afc8SStephan Aßmus // Painter.h
2*30f5afc8SStephan Aßmus 
3*30f5afc8SStephan Aßmus #ifndef PAINTER_H
4*30f5afc8SStephan Aßmus #define PAINTER_H
5*30f5afc8SStephan Aßmus 
6*30f5afc8SStephan Aßmus #include <Font.h>
7*30f5afc8SStephan Aßmus #include <Rect.h>
8*30f5afc8SStephan Aßmus #include <FontServer.h>
9*30f5afc8SStephan Aßmus #include <ServerFont.h>
10*30f5afc8SStephan Aßmus 
11*30f5afc8SStephan Aßmus #include "defines.h"
12*30f5afc8SStephan Aßmus #include "forwarding_pixfmt.h"
13*30f5afc8SStephan Aßmus 
14*30f5afc8SStephan Aßmus #include "RGBColor.h"
15*30f5afc8SStephan Aßmus 
16*30f5afc8SStephan Aßmus class AGGTextRenderer;
17*30f5afc8SStephan Aßmus class BBitmap;
18*30f5afc8SStephan Aßmus class BRegion;
19*30f5afc8SStephan Aßmus class DrawData;
20*30f5afc8SStephan Aßmus class PatternHandler;
21*30f5afc8SStephan Aßmus class RenderingBuffer;
22*30f5afc8SStephan Aßmus class ServerBitmap;
23*30f5afc8SStephan Aßmus class ServerFont;
24*30f5afc8SStephan Aßmus 
25*30f5afc8SStephan Aßmus class Painter {
26*30f5afc8SStephan Aßmus  public:
27*30f5afc8SStephan Aßmus 								Painter();
28*30f5afc8SStephan Aßmus 	virtual						~Painter();
29*30f5afc8SStephan Aßmus 
30*30f5afc8SStephan Aßmus 								// frame buffer stuff
31*30f5afc8SStephan Aßmus 			void				AttachToBuffer(RenderingBuffer* buffer);
32*30f5afc8SStephan Aßmus 			void				DetachFromBuffer();
33*30f5afc8SStephan Aßmus 
34*30f5afc8SStephan Aßmus 			void				ConstrainClipping(const BRegion& region);
35*30f5afc8SStephan Aßmus 			void				SetDrawData(const DrawData* data);
36*30f5afc8SStephan Aßmus 
37*30f5afc8SStephan Aßmus 								// object settings
38*30f5afc8SStephan Aßmus 			void				SetHighColor(const rgb_color& color);
39*30f5afc8SStephan Aßmus 	inline	void				SetHighColor(uint8 r, uint8 g, uint8 b, uint8 a = 255);
SetHighColor(const RGBColor & color)40*30f5afc8SStephan Aßmus 	inline	void				SetHighColor(const RGBColor& color)
41*30f5afc8SStephan Aßmus 									{ SetHighColor(color.GetColor32()); }
42*30f5afc8SStephan Aßmus 			void				SetLowColor(const rgb_color& color);
43*30f5afc8SStephan Aßmus 	inline	void				SetLowColor(uint8 r, uint8 g, uint8 b, uint8 a = 255);
SetLowColor(const RGBColor & color)44*30f5afc8SStephan Aßmus 	inline	void				SetLowColor(const RGBColor& color)
45*30f5afc8SStephan Aßmus 									{ SetLowColor(color.GetColor32()); }
46*30f5afc8SStephan Aßmus 
47*30f5afc8SStephan Aßmus 			void				SetScale(float scale);
48*30f5afc8SStephan Aßmus 			void				SetPenSize(float size);
49*30f5afc8SStephan Aßmus 			void				SetOrigin(const BPoint& origin);
50*30f5afc8SStephan Aßmus 			void				SetDrawingMode(drawing_mode mode);
51*30f5afc8SStephan Aßmus 			void				SetBlendingMode(source_alpha alphaSrcMode,
52*30f5afc8SStephan Aßmus 												alpha_function alphaFncMode);
53*30f5afc8SStephan Aßmus 			void				SetPenLocation(const BPoint& location);
54*30f5afc8SStephan Aßmus 			void				SetFont(const BFont& font);
55*30f5afc8SStephan Aßmus 			void				SetFont(const ServerFont& font);
56*30f5afc8SStephan Aßmus 
57*30f5afc8SStephan Aßmus 								// BView API compatibility (for easier testing)
Sync()58*30f5afc8SStephan Aßmus 			void				Sync() {}
MovePenTo(const BPoint & location)59*30f5afc8SStephan Aßmus 	inline	void				MovePenTo(const BPoint& location)
60*30f5afc8SStephan Aßmus 									{ SetPenLocation(location); }
SetFont(const BFont * font)61*30f5afc8SStephan Aßmus 	inline	void				SetFont(const BFont* font)
62*30f5afc8SStephan Aßmus 									{ if (font) SetFont(*font); }
63*30f5afc8SStephan Aßmus 
64*30f5afc8SStephan Aßmus 								// painting functions
65*30f5afc8SStephan Aßmus 
66*30f5afc8SStephan Aßmus 								// lines
67*30f5afc8SStephan Aßmus 			BRect				StrokeLine(		BPoint a,
68*30f5afc8SStephan Aßmus 												BPoint b,
69*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH);
70*30f5afc8SStephan Aßmus 
71*30f5afc8SStephan Aßmus 			BRect				StrokeLine(		BPoint b,
72*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH);
73*30f5afc8SStephan Aßmus 
74*30f5afc8SStephan Aßmus 			// return true if the line was either vertical or horizontal
75*30f5afc8SStephan Aßmus 			// draws a solid one pixel wide line of color c, no blending
76*30f5afc8SStephan Aßmus 			bool				StraightLine(	BPoint a,
77*30f5afc8SStephan Aßmus 												BPoint b,
78*30f5afc8SStephan Aßmus 												const rgb_color& c) const;
79*30f5afc8SStephan Aßmus 
80*30f5afc8SStephan Aßmus 								// triangles
81*30f5afc8SStephan Aßmus 			void				StrokeTriangle(	BPoint pt1,
82*30f5afc8SStephan Aßmus 												BPoint pt2,
83*30f5afc8SStephan Aßmus 												BPoint pt3,
84*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
85*30f5afc8SStephan Aßmus 
86*30f5afc8SStephan Aßmus 			void				FillTriangle(	BPoint pt1,
87*30f5afc8SStephan Aßmus 												BPoint pt2,
88*30f5afc8SStephan Aßmus 												BPoint pt3,
89*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
90*30f5afc8SStephan Aßmus 
91*30f5afc8SStephan Aßmus 								// polygons
92*30f5afc8SStephan Aßmus 			void				StrokePolygon(	const BPoint* ptArray,
93*30f5afc8SStephan Aßmus 												int32 numPts,
94*30f5afc8SStephan Aßmus 											    bool  closed = true,
95*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
96*30f5afc8SStephan Aßmus 
97*30f5afc8SStephan Aßmus 			void				FillPolygon(	const BPoint* ptArray,
98*30f5afc8SStephan Aßmus 												int32 numPts,
99*30f5afc8SStephan Aßmus 											    bool  closed = true,
100*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
101*30f5afc8SStephan Aßmus 
102*30f5afc8SStephan Aßmus 								// bezier curves
103*30f5afc8SStephan Aßmus 			void				StrokeBezier(	const BPoint* controlPoints,
104*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
105*30f5afc8SStephan Aßmus 
106*30f5afc8SStephan Aßmus 			void				FillBezier(		const BPoint* controlPoints,
107*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
108*30f5afc8SStephan Aßmus 
109*30f5afc8SStephan Aßmus 								// shapes
110*30f5afc8SStephan Aßmus 			void				StrokeShape(	/*const */BShape* shape,
111*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
112*30f5afc8SStephan Aßmus 
113*30f5afc8SStephan Aßmus 			void				FillShape(		/*const */BShape* shape,
114*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
115*30f5afc8SStephan Aßmus 
116*30f5afc8SStephan Aßmus 
117*30f5afc8SStephan Aßmus 								// rects
118*30f5afc8SStephan Aßmus 			BRect				StrokeRect(		const BRect& r,
119*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
120*30f5afc8SStephan Aßmus 
121*30f5afc8SStephan Aßmus 			// strokes a one pixel wide solid rect, no blending
122*30f5afc8SStephan Aßmus 			void				StrokeRect(		const BRect& r,
123*30f5afc8SStephan Aßmus 												const rgb_color& c) const;
124*30f5afc8SStephan Aßmus 
125*30f5afc8SStephan Aßmus 			BRect				FillRect(		const BRect& r,
126*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
127*30f5afc8SStephan Aßmus 
128*30f5afc8SStephan Aßmus 			// fills a solid rect with color c, no blending
129*30f5afc8SStephan Aßmus 			void				FillRect(		const BRect& r,
130*30f5afc8SStephan Aßmus 												const rgb_color& c) const;
131*30f5afc8SStephan Aßmus 
132*30f5afc8SStephan Aßmus 								// round rects
133*30f5afc8SStephan Aßmus 			void				StrokeRoundRect(const BRect& r,
134*30f5afc8SStephan Aßmus 												float xRadius,
135*30f5afc8SStephan Aßmus 												float yRadius,
136*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
137*30f5afc8SStephan Aßmus 
138*30f5afc8SStephan Aßmus 			void				FillRoundRect(	const BRect& r,
139*30f5afc8SStephan Aßmus 												float xRadius,
140*30f5afc8SStephan Aßmus 												float yRadius,
141*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
142*30f5afc8SStephan Aßmus 
143*30f5afc8SStephan Aßmus 								// ellipses
144*30f5afc8SStephan Aßmus 			void				StrokeEllipse(	BPoint center,
145*30f5afc8SStephan Aßmus 												float xRadius,
146*30f5afc8SStephan Aßmus 												float yRadius,
147*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
148*30f5afc8SStephan Aßmus 
149*30f5afc8SStephan Aßmus 			void				FillEllipse(	BPoint center,
150*30f5afc8SStephan Aßmus 												float xRadius,
151*30f5afc8SStephan Aßmus 												float yRadius,
152*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
153*30f5afc8SStephan Aßmus 
154*30f5afc8SStephan Aßmus 								// arcs
155*30f5afc8SStephan Aßmus 			void				StrokeArc(		BPoint center,
156*30f5afc8SStephan Aßmus 												float xRadius,
157*30f5afc8SStephan Aßmus 												float yRadius,
158*30f5afc8SStephan Aßmus 												float angle,
159*30f5afc8SStephan Aßmus 												float span,
160*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
161*30f5afc8SStephan Aßmus 
162*30f5afc8SStephan Aßmus 			void				FillArc(		BPoint center,
163*30f5afc8SStephan Aßmus 												float xRadius,
164*30f5afc8SStephan Aßmus 												float yRadius,
165*30f5afc8SStephan Aßmus 												float angle,
166*30f5afc8SStephan Aßmus 												float span,
167*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
168*30f5afc8SStephan Aßmus 
169*30f5afc8SStephan Aßmus 								// strings
170*30f5afc8SStephan Aßmus 			BRect				DrawChar(		char aChar);
171*30f5afc8SStephan Aßmus 
172*30f5afc8SStephan Aßmus 			BRect				DrawChar(		char aChar,
173*30f5afc8SStephan Aßmus 												BPoint baseLine);
174*30f5afc8SStephan Aßmus 
175*30f5afc8SStephan Aßmus 			BRect				DrawString(		const char* utf8String,
176*30f5afc8SStephan Aßmus 												uint32 length,
177*30f5afc8SStephan Aßmus 												const escapement_delta* delta = NULL);
178*30f5afc8SStephan Aßmus 
179*30f5afc8SStephan Aßmus 			BRect				DrawString(		const char* utf8String,
180*30f5afc8SStephan Aßmus 												uint32 length,
181*30f5afc8SStephan Aßmus 												BPoint baseLine,
182*30f5afc8SStephan Aßmus 												const escapement_delta* delta = NULL);
183*30f5afc8SStephan Aßmus 
184*30f5afc8SStephan Aßmus 			BRect				DrawString(		const char* utf8String,
185*30f5afc8SStephan Aßmus 												const escapement_delta* delta = NULL);
186*30f5afc8SStephan Aßmus 
187*30f5afc8SStephan Aßmus 			BRect				DrawString(		const char* utf8String,
188*30f5afc8SStephan Aßmus 												BPoint baseLine,
189*30f5afc8SStephan Aßmus 												const escapement_delta* delta = NULL);
190*30f5afc8SStephan Aßmus 
191*30f5afc8SStephan Aßmus 								// bitmaps
192*30f5afc8SStephan Aßmus 			void				DrawBitmap(		const BBitmap* bitmap,
193*30f5afc8SStephan Aßmus 												BRect bitmapRect,
194*30f5afc8SStephan Aßmus 												BRect viewRect) const;
195*30f5afc8SStephan Aßmus 
196*30f5afc8SStephan Aßmus 			void				DrawBitmap(		const ServerBitmap* bitmap,
197*30f5afc8SStephan Aßmus 												BRect bitmapRect,
198*30f5afc8SStephan Aßmus 												BRect viewRect) const;
199*30f5afc8SStephan Aßmus 
200*30f5afc8SStephan Aßmus 								// some convenience stuff
201*30f5afc8SStephan Aßmus 			void				FillRegion(		const BRegion* region,
202*30f5afc8SStephan Aßmus 												const pattern& p = B_SOLID_HIGH) const;
203*30f5afc8SStephan Aßmus 
204*30f5afc8SStephan Aßmus 			void				InvertRect(		const BRect& r) const;
205*30f5afc8SStephan Aßmus 
206*30f5afc8SStephan Aßmus 			BRect				BoundingBox(	const char* utf8String,
207*30f5afc8SStephan Aßmus 												uint32 length,
208*30f5afc8SStephan Aßmus 												const BPoint& baseLine) const;
209*30f5afc8SStephan Aßmus 
ClipRect(const BRect & rect)210*30f5afc8SStephan Aßmus 	inline	BRect				ClipRect(const BRect& rect) const
211*30f5afc8SStephan Aßmus 									{ return _Clipped(rect); }
212*30f5afc8SStephan Aßmus 
213*30f5afc8SStephan Aßmus  private:
214*30f5afc8SStephan Aßmus 			void				_MakeEmpty();
215*30f5afc8SStephan Aßmus 
216*30f5afc8SStephan Aßmus 			void				_Transform(BPoint* point,
217*30f5afc8SStephan Aßmus 										   bool centerOffset = true) const;
218*30f5afc8SStephan Aßmus 			BPoint				_Transform(const BPoint& point,
219*30f5afc8SStephan Aßmus 										   bool centerOffset = true) const;
220*30f5afc8SStephan Aßmus 			void				_Transform(float* width) const;
221*30f5afc8SStephan Aßmus 			float				_Transform(const float& width) const;
222*30f5afc8SStephan Aßmus 			void				_Transform(BRect* rect) const;
223*30f5afc8SStephan Aßmus 			BRect				_Transform(const BRect& rect) const;
224*30f5afc8SStephan Aßmus 			BRect				_Clipped(const BRect& rect) const;
225*30f5afc8SStephan Aßmus 
226*30f5afc8SStephan Aßmus 			void				_RebuildClipping();
227*30f5afc8SStephan Aßmus 
228*30f5afc8SStephan Aßmus 			void				_UpdateFont();
229*30f5afc8SStephan Aßmus 			void				_UpdateLineWidth();
230*30f5afc8SStephan Aßmus 
231*30f5afc8SStephan Aßmus 								// drawing functions stroke/fill
232*30f5afc8SStephan Aßmus 			void				_DrawTriangle(	BPoint pt1,
233*30f5afc8SStephan Aßmus 												BPoint pt2,
234*30f5afc8SStephan Aßmus 												BPoint pt3,
235*30f5afc8SStephan Aßmus 												const pattern& p,
236*30f5afc8SStephan Aßmus 												bool fill) const;
237*30f5afc8SStephan Aßmus 			void				_DrawEllipse(	BPoint center,
238*30f5afc8SStephan Aßmus 												float xRadius,
239*30f5afc8SStephan Aßmus 												float yRadius,
240*30f5afc8SStephan Aßmus 												const pattern& p,
241*30f5afc8SStephan Aßmus 												bool fill) const;
242*30f5afc8SStephan Aßmus 			void				_DrawShape(		/*const */BShape* shape,
243*30f5afc8SStephan Aßmus 												const pattern& p,
244*30f5afc8SStephan Aßmus 												bool fill) const;
245*30f5afc8SStephan Aßmus 			void				_DrawPolygon(	const BPoint* ptArray,
246*30f5afc8SStephan Aßmus 												int32 numPts,
247*30f5afc8SStephan Aßmus 											    bool  closed,
248*30f5afc8SStephan Aßmus 												const pattern& p,
249*30f5afc8SStephan Aßmus 												bool fill) const;
250*30f5afc8SStephan Aßmus 
251*30f5afc8SStephan Aßmus 			void				_DrawBitmap(	const agg::rendering_buffer& srcBuffer,
252*30f5afc8SStephan Aßmus 												color_space format,
253*30f5afc8SStephan Aßmus 												BRect actualBitmapRect,
254*30f5afc8SStephan Aßmus 												BRect bitmapRect,
255*30f5afc8SStephan Aßmus 												BRect viewRect) const;
256*30f5afc8SStephan Aßmus 			void				_DrawBitmap32(	const agg::rendering_buffer& srcBuffer,
257*30f5afc8SStephan Aßmus 												BRect actualBitmapRect,
258*30f5afc8SStephan Aßmus 												BRect bitmapRect,
259*30f5afc8SStephan Aßmus 												BRect viewRect) const;
260*30f5afc8SStephan Aßmus 
261*30f5afc8SStephan Aßmus 			void				_InvertRect32(BRect r) const;
262*30f5afc8SStephan Aßmus 
263*30f5afc8SStephan Aßmus 
264*30f5afc8SStephan Aßmus 			template<class VertexSource>
265*30f5afc8SStephan Aßmus 			BRect				_BoundingBox(VertexSource& path) const;
266*30f5afc8SStephan Aßmus 
267*30f5afc8SStephan Aßmus 			template<class VertexSource>
268*30f5afc8SStephan Aßmus 			BRect				_StrokePath(VertexSource& path,
269*30f5afc8SStephan Aßmus 											const pattern& p) const;
270*30f5afc8SStephan Aßmus 			template<class VertexSource>
271*30f5afc8SStephan Aßmus 			BRect				_FillPath(VertexSource& path,
272*30f5afc8SStephan Aßmus 
273*30f5afc8SStephan Aßmus 										  const pattern& p) const;
274*30f5afc8SStephan Aßmus 
275*30f5afc8SStephan Aßmus 			void				_SetPattern(const pattern& p) const;
276*30f5afc8SStephan Aßmus 			void				_SetRendererColor(const rgb_color& color) const;
277*30f5afc8SStephan Aßmus 
278*30f5afc8SStephan Aßmus 	agg::rendering_buffer*		fBuffer;
279*30f5afc8SStephan Aßmus 
280*30f5afc8SStephan Aßmus 	// AGG rendering and rasterization classes
281*30f5afc8SStephan Aßmus 	pixfmt*						fPixelFormat;
282*30f5afc8SStephan Aßmus 	renderer_base*				fBaseRenderer;
283*30f5afc8SStephan Aßmus 
284*30f5afc8SStephan Aßmus 	outline_renderer_type*		fOutlineRenderer;
285*30f5afc8SStephan Aßmus 	outline_rasterizer_type*	fOutlineRasterizer;
286*30f5afc8SStephan Aßmus 
287*30f5afc8SStephan Aßmus 	scanline_type*				fScanline;
288*30f5afc8SStephan Aßmus 	rasterizer_type*			fRasterizer;
289*30f5afc8SStephan Aßmus 	renderer_type*				fRenderer;
290*30f5afc8SStephan Aßmus 
291*30f5afc8SStephan Aßmus 	font_renderer_solid_type*	fFontRendererSolid;
292*30f5afc8SStephan Aßmus 	font_renderer_bin_type*		fFontRendererBin;
293*30f5afc8SStephan Aßmus 
294*30f5afc8SStephan Aßmus 	agg::line_profile_aa		fLineProfile;
295*30f5afc8SStephan Aßmus 
296*30f5afc8SStephan Aßmus 	// for internal coordinate rounding/transformation,
297*30f5afc8SStephan Aßmus 	// does not concern rendering
298*30f5afc8SStephan Aßmus 	bool						fSubpixelPrecise;
299*30f5afc8SStephan Aßmus 
300*30f5afc8SStephan Aßmus 	float						fScale;
301*30f5afc8SStephan Aßmus 	float						fPenSize;
302*30f5afc8SStephan Aßmus 	BPoint						fOrigin;
303*30f5afc8SStephan Aßmus 	BRegion*					fClippingRegion; // NULL indicates no clipping at all
304*30f5afc8SStephan Aßmus 	drawing_mode				fDrawingMode;
305*30f5afc8SStephan Aßmus 	source_alpha				fAlphaSrcMode;
306*30f5afc8SStephan Aßmus 	alpha_function				fAlphaFncMode;
307*30f5afc8SStephan Aßmus 	BPoint						fPenLocation;
308*30f5afc8SStephan Aßmus 	PatternHandler*				fPatternHandler;
309*30f5afc8SStephan Aßmus 
310*30f5afc8SStephan Aßmus 	ServerFont					fFont;
311*30f5afc8SStephan Aßmus 	// a class handling rendering and caching of glyphs
312*30f5afc8SStephan Aßmus 	// it is setup to load from a specific Freetype supported
313*30f5afc8SStephan Aßmus 	// font file, it uses the FontManager to locate a file
314*30f5afc8SStephan Aßmus 	// by Family and Style
315*30f5afc8SStephan Aßmus 	AGGTextRenderer*			fTextRenderer;
316*30f5afc8SStephan Aßmus 	uint32						fLastFamilyAndStyle;
317*30f5afc8SStephan Aßmus };
318*30f5afc8SStephan Aßmus 
319*30f5afc8SStephan Aßmus // SetHighColor
320*30f5afc8SStephan Aßmus inline void
SetHighColor(uint8 r,uint8 g,uint8 b,uint8 a)321*30f5afc8SStephan Aßmus Painter::SetHighColor(uint8 r, uint8 g, uint8 b, uint8 a)
322*30f5afc8SStephan Aßmus {
323*30f5afc8SStephan Aßmus 	rgb_color color;
324*30f5afc8SStephan Aßmus 	color.red = r;
325*30f5afc8SStephan Aßmus 	color.green = g;
326*30f5afc8SStephan Aßmus 	color.blue = b;
327*30f5afc8SStephan Aßmus 	color.alpha = a;
328*30f5afc8SStephan Aßmus 	SetHighColor(color);
329*30f5afc8SStephan Aßmus }
330*30f5afc8SStephan Aßmus 
331*30f5afc8SStephan Aßmus // SetLowColor
332*30f5afc8SStephan Aßmus inline void
SetLowColor(uint8 r,uint8 g,uint8 b,uint8 a)333*30f5afc8SStephan Aßmus Painter::SetLowColor(uint8 r, uint8 g, uint8 b, uint8 a)
334*30f5afc8SStephan Aßmus {
335*30f5afc8SStephan Aßmus 	rgb_color color;
336*30f5afc8SStephan Aßmus 	color.red = r;
337*30f5afc8SStephan Aßmus 	color.green = g;
338*30f5afc8SStephan Aßmus 	color.blue = b;
339*30f5afc8SStephan Aßmus 	color.alpha = a;
340*30f5afc8SStephan Aßmus 	SetLowColor(color);
341*30f5afc8SStephan Aßmus }
342*30f5afc8SStephan Aßmus 
343*30f5afc8SStephan Aßmus 
344*30f5afc8SStephan Aßmus #endif // PAINTER_H
345*30f5afc8SStephan Aßmus 
346*30f5afc8SStephan Aßmus 
347