r4493@vps: verhaegs | 2007-04-19 14:44:00 -0400
[AROS.git] / rom / graphics / setrpattrsa.c
blobaf49ba752ca49ea83cf141005f0b95c0b30ce380
1 /*
2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3 $Id$ $Log
5 Desc: Graphics function SetRPAttrsA()
6 Lang: english
7 */
8 #include "graphics_intern.h"
9 #include <proto/utility.h>
10 #include <proto/oop.h>
11 #include "gfxfuncsupport.h"
13 /*****************************************************************************
15 NAME */
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,
23 /* SYNOPSIS */
24 AROS_LHA(struct RastPort *, rp, A0),
25 AROS_LHA(struct TagItem *, tags, A1),
27 /* LOCATION */
28 struct GfxBase *, GfxBase, 173, Graphics)
30 /* FUNCTION
31 Modify rastport with values from a taglist.
33 INPUTS
34 rp - RastPort
35 tags - tagarray
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()
44 AROS extensions
45 - RPTAG_DrawBounds:
46 - RPTAG_FgColor:
47 - RPTAG_BgColor:
48 - RPTAG_PatternOriginX:
49 - RPTAG_PatternOriginY:
50 - RPTAG_ClipRectangle: (struct Rectangle *)
51 - RPTAG_ClipRectangleFlags: RPCRF_RELRIGHT | RPCRF_RELBOTTOM
52 - RPTAG_RemapColorFonts: (BOOL)
54 RESULT
56 NOTES
58 EXAMPLE
60 BUGS
62 SEE ALSO
64 INTERNALS
66 HISTORY
67 29-10-95 digulla automatically created from
68 graphics_lib.fd and clib/graphics_protos.h
70 *****************************************************************************/
72 AROS_LIBFUNC_INIT
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)))
80 switch (tag->ti_Tag)
82 case RPTAG_Font:
83 SetFont (rp, (struct TextFont *)(tag->ti_Data));
84 break;
86 case RPTAG_APen:
87 SetAPen (rp, tag->ti_Data);
88 break;
90 case RPTAG_BPen:
91 SetBPen (rp, tag->ti_Data);
92 break;
94 case RPTAG_DrMd:
95 SetDrMd (rp, tag->ti_Data);
96 break;
98 case RPTAG_OutlinePen:
99 SetOutlinePen (rp, tag->ti_Data);
100 break;
102 case RPTAG_WriteMask:
103 SetWriteMask (rp, tag->ti_Data);
104 break;
106 case RPTAG_MaxPen:
107 break;
109 case RPTAG_DrawBounds:
110 break;
112 case RPTAG_FgColor:
113 case RPTAG_BgColor:
115 IPTR attr;
117 if (tag->ti_Tag == RPTAG_FgColor)
119 attr = aHidd_GC_Foreground;
120 RP_FGCOLOR(rp) = (ULONG)tag->ti_Data;
122 else
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;
131 if (!havedriverdata)
133 havedriverdata = OBTAIN_DRIVERDATA(rp, GfxBase);
136 if (havedriverdata)
138 struct TagItem col_tags[] =
140 { attr, 0 },
141 { TAG_DONE }
143 HIDDT_Color col;
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);
155 break;
157 } /**/
159 case RPTAG_PatternOriginX:
160 RP_PATORIGINX(rp) = (WORD)tag->ti_Data;
161 break;
163 case RPTAG_PatternOriginY:
164 RP_PATORIGINY(rp) = (WORD)tag->ti_Data;
165 break;
167 case RPTAG_ClipRectangle:
168 if (!havedriverdata)
170 havedriverdata = OBTAIN_DRIVERDATA(rp, GfxBase);
173 if (havedriverdata)
175 if (tag->ti_Data)
177 RP_DRIVERDATA(rp)->dd_ClipRectangle = *(struct Rectangle *)tag->ti_Data;
178 RP_DRIVERDATA(rp)->dd_ClipRectangleFlags |= RPCRF_VALID;
180 else
182 RP_DRIVERDATA(rp)->dd_ClipRectangleFlags &= ~RPCRF_VALID;
185 break;
187 case RPTAG_ClipRectangleFlags:
188 if (!havedriverdata)
190 havedriverdata = OBTAIN_DRIVERDATA(rp, GfxBase);
193 if (havedriverdata)
195 RP_DRIVERDATA(rp)->dd_ClipRectangleFlags &= ~(RPCRF_RELRIGHT | RPCRF_RELBOTTOM);
196 RP_DRIVERDATA(rp)->dd_ClipRectangleFlags |= (tag->ti_Data & (RPCRF_RELRIGHT | RPCRF_RELBOTTOM));
198 break;
200 case RPTAG_RemapColorFonts:
201 if (tag->ti_Data)
203 rp->Flags |= RPF_REMAP_COLORFONTS;
205 else
207 rp->Flags &= ~RPF_REMAP_COLORFONTS;
209 break;
211 } /* switch (tag) */
213 } /* while (tag) */
215 if (havedriverdata)
217 RELEASE_DRIVERDATA(rp, GfxBase);
220 AROS_LIBFUNC_EXIT
221 } /* SetRPAttrsA */