2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
5 Desc: Graphics function SetRPAttrsA()
8 #include "graphics_intern.h"
9 #include <proto/utility.h>
10 #include <proto/oop.h>
11 #include "gfxfuncsupport.h"
13 /*****************************************************************************
16 #include <graphics/rastport.h>
17 #include <graphics/rpattr.h>
18 #include <utility/tagitem.h>
19 #include <proto/graphics.h>
21 AROS_LH2(void, SetRPAttrsA
,
24 AROS_LHA(struct RastPort
*, rp
, A0
),
25 AROS_LHA(struct TagItem
*, tags
, A1
),
28 struct GfxBase
*, GfxBase
, 173, Graphics
)
31 Modify rastport with values from a taglist.
36 - RPTAG_Font: text font
37 - RPTAG_APen: primary pen
38 - RPTAG_BPen: secondary pen
39 - RPTAG_DrMd: draw mode
40 - RPTAG_OutlinePen: outline pen
41 - RPTAG_WriteMask: bit mask
42 - RPTAG_MaxPen: see SetMaxPen()
48 - RPTAG_PatternOriginX:
49 - RPTAG_PatternOriginY:
50 - RPTAG_ClipRectangle: (struct Rectangle *)
51 - RPTAG_ClipRectangleFlags: RPCRF_RELRIGHT | RPCRF_RELBOTTOM
52 - RPTAG_RemapColorFonts: (BOOL)
67 29-10-95 digulla automatically created from
68 graphics_lib.fd and clib/graphics_protos.h
70 *****************************************************************************/
73 AROS_LIBBASE_EXT_DECL(struct GfxBase
*,GfxBase
)
75 struct TagItem
*tag
, *tstate
= tags
;
76 BOOL havedriverdata
= FALSE
;
78 while ((tag
= NextTagItem ((const struct TagItem
**)&tstate
)))
83 SetFont (rp
, (struct TextFont
*)(tag
->ti_Data
));
87 SetAPen (rp
, tag
->ti_Data
);
91 SetBPen (rp
, tag
->ti_Data
);
95 SetDrMd (rp
, tag
->ti_Data
);
98 case RPTAG_OutlinePen
:
99 SetOutlinePen (rp
, tag
->ti_Data
);
102 case RPTAG_WriteMask
:
103 SetWriteMask (rp
, tag
->ti_Data
);
109 case RPTAG_DrawBounds
:
117 if (tag
->ti_Tag
== RPTAG_FgColor
)
119 attr
= aHidd_GC_Foreground
;
120 RP_FGCOLOR(rp
) = (ULONG
)tag
->ti_Data
;
124 attr
= aHidd_GC_Background
;
125 RP_BGCOLOR(rp
) = (ULONG
)tag
->ti_Data
;
128 if (!rp
->BitMap
) break;
129 if (!IS_HIDD_BM(rp
->BitMap
)) break;
133 havedriverdata
= OBTAIN_DRIVERDATA(rp
, GfxBase
);
138 struct TagItem col_tags
[] =
144 ULONG rgb
= (ULONG
)tag
->ti_Data
;
146 /* HIDDT_ColComp are 16 Bit */
147 col
.alpha
= (HIDDT_ColComp
)((rgb
>> 16) & 0x0000FF00);
148 col
.red
= (HIDDT_ColComp
)((rgb
>> 8) & 0x0000FF00);
149 col
.green
= (HIDDT_ColComp
)(rgb
& 0x0000FF00);
150 col
.blue
= (HIDDT_ColComp
)((rgb
<< 8) & 0x0000FF00);
152 col_tags
[0].ti_Data
= HIDD_BM_MapColor(HIDD_BM_OBJ(rp
->BitMap
), &col
);
153 OOP_SetAttrs(RP_DRIVERDATA(rp
)->dd_GC
, col_tags
);
159 case RPTAG_PatternOriginX
:
160 RP_PATORIGINX(rp
) = (WORD
)tag
->ti_Data
;
163 case RPTAG_PatternOriginY
:
164 RP_PATORIGINY(rp
) = (WORD
)tag
->ti_Data
;
167 case RPTAG_ClipRectangle
:
170 havedriverdata
= OBTAIN_DRIVERDATA(rp
, GfxBase
);
177 RP_DRIVERDATA(rp
)->dd_ClipRectangle
= *(struct Rectangle
*)tag
->ti_Data
;
178 RP_DRIVERDATA(rp
)->dd_ClipRectangleFlags
|= RPCRF_VALID
;
182 RP_DRIVERDATA(rp
)->dd_ClipRectangleFlags
&= ~RPCRF_VALID
;
187 case RPTAG_ClipRectangleFlags
:
190 havedriverdata
= OBTAIN_DRIVERDATA(rp
, GfxBase
);
195 RP_DRIVERDATA(rp
)->dd_ClipRectangleFlags
&= ~(RPCRF_RELRIGHT
| RPCRF_RELBOTTOM
);
196 RP_DRIVERDATA(rp
)->dd_ClipRectangleFlags
|= (tag
->ti_Data
& (RPCRF_RELRIGHT
| RPCRF_RELBOTTOM
));
200 case RPTAG_RemapColorFonts
:
203 rp
->Flags
|= RPF_REMAP_COLORFONTS
;
207 rp
->Flags
&= ~RPF_REMAP_COLORFONTS
;
217 RELEASE_DRIVERDATA(rp
, GfxBase
);