2 Copyright © 1995-2010, The AROS Development Team. All rights reserved.
5 Desc: Graphics gc class implementation.
9 /****************************************************************************************/
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>
22 #include <hidd/graphics.h>
24 #include "graphics_intern.h"
30 #include <aros/debug.h>
32 /*****************************************************************************************
56 *****************************************************************************************/
58 /*****************************************************************************************
70 Bitmap which this gc uses.
82 *****************************************************************************************/
84 /*****************************************************************************************
108 *****************************************************************************************/
110 /*****************************************************************************************
134 *****************************************************************************************/
136 /*****************************************************************************************
160 *****************************************************************************************/
162 /*****************************************************************************************
186 *****************************************************************************************/
188 /*****************************************************************************************
200 Prevents some color bits from changing.
212 *****************************************************************************************/
214 /*****************************************************************************************
217 aoHidd_GC_LinePattern
226 Pattern for line drawing
238 *****************************************************************************************/
240 /*****************************************************************************************
243 aoHidd_GC_LinePatternCnt
252 Pattern start bit for line drawing.
264 *****************************************************************************************/
266 /*****************************************************************************************
290 *****************************************************************************************/
292 /*****************************************************************************************
295 aoHidd_GC_ColorExpansionMode
304 Mode for color expansion
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
);
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); */
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
;
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
))
377 case aoHidd_GC_Foreground
:
378 data
->fg
= tag
->ti_Data
;
381 case aoHidd_GC_Background
:
382 data
->bg
= tag
->ti_Data
;
385 case aoHidd_GC_DrawMode
:
386 data
->drMode
= tag
->ti_Data
;
390 data
->font
= (APTR
) tag
->ti_Data
;
393 case aoHidd_GC_ColorMask
:
394 data
->colMask
= tag
->ti_Data
;
397 case aoHidd_GC_LinePattern
:
398 data
->linePat
= (UWORD
) tag
->ti_Data
;
401 case aoHidd_GC_LinePatternCnt
:
402 data
->linePatCnt
= (UWORD
) tag
->ti_Data
;
405 case aoHidd_GC_PlaneMask
:
406 data
->planeMask
= (APTR
) tag
->ti_Data
;
409 case aoHidd_GC_ColorExpansionMode
:
410 data
->colExp
= tag
->ti_Data
;
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
);
426 EnterFunc(bug("GC::Get() attrID: %i storage: %p\n", msg
->attrID
, msg
->storage
));
428 if(IS_GC_ATTR(msg
->attrID
, idx
))
432 case aoHidd_GC_Foreground
:
433 *msg
->storage
= data
->fg
;
436 case aoHidd_GC_Background
:
437 *msg
->storage
= data
->bg
;
440 case aoHidd_GC_DrawMode
:
441 *msg
->storage
= data
->drMode
;
445 *msg
->storage
= (IPTR
)data
->font
;
448 case aoHidd_GC_ColorMask
:
449 *msg
->storage
= data
->colMask
;
452 case aoHidd_GC_LinePattern
:
453 *msg
->storage
= data
->linePat
;
456 case aoHidd_GC_LinePatternCnt
:
457 *msg
->storage
= data
->linePatCnt
;
460 case aoHidd_GC_PlaneMask
:
461 *msg
->storage
= (IPTR
)data
->planeMask
;
464 case aoHidd_GC_ColorExpansionMode
:
465 *msg
->storage
= data
->colExp
;
469 OOP_DoSuperMethod(cl
, obj
, (OOP_Msg
) msg
);
475 OOP_DoSuperMethod(cl
, obj
, (OOP_Msg
) msg
);
480 /*****************************************************************************************
483 moHidd_GC_SetClipRect
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);
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
;
530 /*****************************************************************************************
533 moHidd_GC_UnsetClipRect
536 VOID OOP_DoMethod(OOP_Object *obj, struct pHidd_GC_UnsetClipRect *msg);
538 VOID HIDD_GC_UnsetClipRect(OOP_Object *obj);
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
;