Port the SB128 code to AROS.
[AROS.git] / rom / hidds / graphics / GC_Class.c
blob79b6ad3b29211ea9cf438f1eecd687f1e73ba5ac
1 /*
2 Copyright © 1995-2010, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Graphics gc class implementation.
6 Lang: english
7 */
9 /****************************************************************************************/
11 #include <string.h>
13 #include <proto/exec.h>
14 #include <proto/utility.h>
15 #include <proto/oop.h>
17 #include <exec/memory.h>
18 #include <graphics/text.h>
19 #include <utility/tagitem.h>
20 #include <oop/oop.h>
22 #include <hidd/graphics.h>
24 #include "graphics_intern.h"
26 #undef SDEBUG
27 #define SDEBUG 0
28 #undef DEBUG
29 #define DEBUG 0
30 #include <aros/debug.h>
32 /*****************************************************************************************
34 NAME
35 aoHidd_GC_UserData
37 SYNOPSIS
38 [.SG]
40 LOCATION
41 hidd.graphics.gc
43 FUNCTION
44 User data
46 NOTES
48 EXAMPLE
50 BUGS
52 SEE ALSO
54 INTERNALS
56 *****************************************************************************************/
58 /*****************************************************************************************
60 NAME
61 aoHidd_GC_BitMap
63 SYNOPSIS
64 [I.G]
66 LOCATION
67 hidd.graphics.gc
69 FUNCTION
70 Bitmap which this gc uses.
72 NOTES
74 EXAMPLE
76 BUGS
78 SEE ALSO
80 INTERNALS
82 *****************************************************************************************/
84 /*****************************************************************************************
86 NAME
87 aoHidd_GC_Foreground
89 SYNOPSIS
90 [.SG]
92 LOCATION
93 hidd.graphics.gc
95 FUNCTION
96 Foreground color
98 NOTES
100 EXAMPLE
102 BUGS
104 SEE ALSO
106 INTERNALS
108 *****************************************************************************************/
110 /*****************************************************************************************
112 NAME
113 aoHidd_GC_Background
115 SYNOPSIS
116 [.SG]
118 LOCATION
119 hidd.graphics.gc
121 FUNCTION
122 Background color
124 NOTES
126 EXAMPLE
128 BUGS
130 SEE ALSO
132 INTERNALS
134 *****************************************************************************************/
136 /*****************************************************************************************
138 NAME
139 aoHidd_GC_DrawMode
141 SYNOPSIS
142 [.SG]
144 LOCATION
145 hidd.graphics.gc
147 FUNCTION
148 Draw mode
150 NOTES
152 EXAMPLE
154 BUGS
156 SEE ALSO
158 INTERNALS
160 *****************************************************************************************/
162 /*****************************************************************************************
164 NAME
165 aoHidd_GC_Font
167 SYNOPSIS
168 [.SG]
170 LOCATION
171 hidd.graphics.gc
173 FUNCTION
174 Current font
176 NOTES
178 EXAMPLE
180 BUGS
182 SEE ALSO
184 INTERNALS
186 *****************************************************************************************/
188 /*****************************************************************************************
190 NAME
191 aoHidd_GC_ColorMask
193 SYNOPSIS
194 [.SG]
196 LOCATION
197 hidd.graphics.gc
199 FUNCTION
200 Prevents some color bits from changing.
202 NOTES
204 EXAMPLE
206 BUGS
208 SEE ALSO
210 INTERNALS
212 *****************************************************************************************/
214 /*****************************************************************************************
216 NAME
217 aoHidd_GC_LinePattern
219 SYNOPSIS
220 [.SG]
222 LOCATION
223 hidd.graphics.gc
225 FUNCTION
226 Pattern for line drawing
228 NOTES
230 EXAMPLE
232 BUGS
234 SEE ALSO
236 INTERNALS
238 *****************************************************************************************/
240 /*****************************************************************************************
242 NAME
243 aoHidd_GC_LinePatternCnt
245 SYNOPSIS
246 [.SG]
248 LOCATION
249 hidd.graphics.gc
251 FUNCTION
252 Pattern start bit for line drawing.
254 NOTES
256 EXAMPLE
258 BUGS
260 SEE ALSO
262 INTERNALS
264 *****************************************************************************************/
266 /*****************************************************************************************
268 NAME
269 aoHidd_GC_PlaneMask
271 SYNOPSIS
272 [.SG]
274 LOCATION
275 hidd.graphics.gc
277 FUNCTION
278 Shape bitmap
280 NOTES
282 EXAMPLE
284 BUGS
286 SEE ALSO
288 INTERNALS
290 *****************************************************************************************/
292 /*****************************************************************************************
294 NAME
295 aoHidd_GC_ColorExpansionMode
297 SYNOPSIS
298 [.SG]
300 LOCATION
301 hidd.graphics.gc
303 FUNCTION
304 Mode for color expansion
306 NOTES
308 EXAMPLE
310 BUGS
312 SEE ALSO
314 INTERNALS
316 *****************************************************************************************/
319 VOID GC__Root__Set(OOP_Class *cl, OOP_Object *obj, struct pRoot_Set *msg);
321 #define IS_GC_ATTR(attr, idx) ( ( (idx) = (attr) - HiddGCAttrBase) < num_Hidd_GC_Attrs)
323 /****************************************************************************************/
325 OOP_Object *GC__Root__New(OOP_Class *cl, OOP_Object *obj, struct pRoot_New *msg)
327 HIDDT_GC_Intern *data;
329 EnterFunc(bug("GC::New()\n"));
331 obj = (OOP_Object *) OOP_DoSuperMethod(cl, obj, (OOP_Msg) msg);
333 if(obj)
335 data = OOP_INST_DATA(cl, obj);
337 /* clear all data and set some default values */
339 memset(data, 0, sizeof (*data));
341 data->fg = 1; /* foreground color */
342 data->bg = 0; /* background color */
343 data->drMode = vHidd_GC_DrawMode_Copy; /* drawmode */
344 data->colExp = vHidd_GC_ColExp_Opaque; /* color expansion mode */
345 data->font = NULL; /* current fonts */
346 data->colMask = ~0; /* ColorMask prevents some color bits from changing*/
347 data->linePat = ~0; /* LinePattern */
348 data->planeMask = NULL; /* Pointer to a shape bitMap */
350 /* Override defaults with user suplied attrs */
352 OOP_SetAttrs(obj, msg->attrList);
353 /* GC__Root__Set(cl, obj, &set_msg); */
355 } /* if(obj) */
357 ReturnPtr("GC::New", OOP_Object *, obj);
360 /****************************************************************************************/
362 VOID GC__Root__Set(OOP_Class *cl, OOP_Object *obj, struct pRoot_Set *msg)
364 HIDDT_GC_Intern *data = OOP_INST_DATA(cl, obj);
365 struct TagItem *tag, *tstate;
366 ULONG idx;
368 EnterFunc(bug("GC::Set()\n"));
370 tstate = msg->attrList;
371 while((tag = NextTagItem((const struct TagItem **)&tstate)))
373 if(IS_GC_ATTR(tag->ti_Tag, idx))
375 switch(idx)
377 case aoHidd_GC_Foreground:
378 data->fg = tag->ti_Data;
379 break;
381 case aoHidd_GC_Background:
382 data->bg = tag->ti_Data;
383 break;
385 case aoHidd_GC_DrawMode:
386 data->drMode = tag->ti_Data;
387 break;
389 case aoHidd_GC_Font:
390 data->font = (APTR) tag->ti_Data;
391 break;
393 case aoHidd_GC_ColorMask:
394 data->colMask = tag->ti_Data;
395 break;
397 case aoHidd_GC_LinePattern:
398 data->linePat = (UWORD) tag->ti_Data;
399 break;
401 case aoHidd_GC_LinePatternCnt:
402 data->linePatCnt = (UWORD) tag->ti_Data;
403 break;
405 case aoHidd_GC_PlaneMask:
406 data->planeMask = (APTR) tag->ti_Data;
407 break;
409 case aoHidd_GC_ColorExpansionMode:
410 data->colExp = tag->ti_Data;
411 break;
416 ReturnVoid("GC::Set");
419 /****************************************************************************************/
421 VOID GC__Root__Get(OOP_Class *cl, OOP_Object *obj, struct pRoot_Get *msg)
423 HIDDT_GC_Intern *data = OOP_INST_DATA(cl, obj);
424 ULONG idx;
426 EnterFunc(bug("GC::Get() attrID: %i storage: %p\n", msg->attrID, msg->storage));
428 if(IS_GC_ATTR(msg->attrID, idx))
430 switch(idx)
432 case aoHidd_GC_Foreground:
433 *msg->storage = data->fg;
434 break;
436 case aoHidd_GC_Background:
437 *msg->storage = data->bg;
438 break;
440 case aoHidd_GC_DrawMode:
441 *msg->storage = data->drMode;
442 break;
444 case aoHidd_GC_Font:
445 *msg->storage = (IPTR)data->font;
446 break;
448 case aoHidd_GC_ColorMask:
449 *msg->storage = data->colMask;
450 break;
452 case aoHidd_GC_LinePattern:
453 *msg->storage = data->linePat;
454 break;
456 case aoHidd_GC_LinePatternCnt:
457 *msg->storage = data->linePatCnt;
458 break;
460 case aoHidd_GC_PlaneMask:
461 *msg->storage = (IPTR)data->planeMask;
462 break;
464 case aoHidd_GC_ColorExpansionMode:
465 *msg->storage = data->colExp;
466 break;
468 default:
469 OOP_DoSuperMethod(cl, obj, (OOP_Msg) msg);
470 break;
473 else
475 OOP_DoSuperMethod(cl, obj, (OOP_Msg) msg);
480 /*****************************************************************************************
482 NAME
483 moHidd_GC_SetClipRect
485 SYNOPSIS
486 VOID OOP_DoMethod(OOP_Object *obj, struct pHidd_GC_SetClipRect *msg);
488 VOID HIDD_GC_SetClipRect(OOP_Object *obj, LONG x1, LONG y1, LONG x2, LONG y2);
490 LOCATION
491 hidd.graphics.gc
493 FUNCTION
495 INPUTS
496 obj -
497 x1 -
498 y1 -
499 x2 -
500 y2 -
502 RESULT
504 NOTES
506 EXAMPLE
508 BUGS
510 SEE ALSO
512 INTERNALS
514 *****************************************************************************************/
516 VOID GC__Hidd_GC__SetClipRect(OOP_Class *cl, OOP_Object *o, struct pHidd_GC_SetClipRect *msg)
518 HIDDT_GC_Intern *data;
520 data = OOP_INST_DATA(cl, o);
522 data->clipX1 = msg->x1;
523 data->clipY1 = msg->y1;
524 data->clipX2 = msg->x2;
525 data->clipY2 = msg->y2;
527 data->doClip = TRUE;
530 /*****************************************************************************************
532 NAME
533 moHidd_GC_UnsetClipRect
535 SYNOPSIS
536 VOID OOP_DoMethod(OOP_Object *obj, struct pHidd_GC_UnsetClipRect *msg);
538 VOID HIDD_GC_UnsetClipRect(OOP_Object *obj);
540 LOCATION
541 hidd.graphics.gc
543 FUNCTION
545 INPUTS
546 obj -
548 RESULT
550 NOTES
552 EXAMPLE
554 BUGS
556 SEE ALSO
558 INTERNALS
560 *****************************************************************************************/
562 VOID GC__Hidd_GC__UnsetClipRect(OOP_Class *cl, OOP_Object *o, struct pHidd_GC_UnsetClipRect *msg)
564 HIDDT_GC_Intern *data;
566 data = OOP_INST_DATA(cl, o);
568 data->doClip = FALSE;