Added 'Resident' field to ensure that the handler is included in the
[AROS.git] / rom / intuition / printitext.c
blobf7445c6de10709ed838b972453151f5aec32f250
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
5 */
7 #include <string.h>
8 #include <proto/graphics.h>
9 #include "intuition_intern.h"
11 /*****************************************************************************
13 NAME */
14 #include <graphics/rastport.h>
15 #include <graphics/rpattr.h>
16 #include <intuition/intuition.h>
17 #include <proto/intuition.h>
19 AROS_LH4(void, PrintIText,
21 /* SYNOPSIS */
22 AROS_LHA(struct RastPort *, rp, A0),
23 AROS_LHA(struct IntuiText *, iText, A1),
24 AROS_LHA(LONG , leftOffset, D0),
25 AROS_LHA(LONG , topOffset, D1),
27 /* LOCATION */
28 struct IntuitionBase *, IntuitionBase, 36, Intuition)
30 /* FUNCTION
31 Render an IntuiText in the specified RastPort with the
32 specified offset.
34 INPUTS
35 rp - Draw into this RastPort
36 iText - Render this text
37 leftOffset, topOffset - Starting-Point. All coordinates in the
38 IntuiText structures are relative to this point.
40 RESULT
41 None.
43 NOTES
45 EXAMPLE
47 BUGS
49 SEE ALSO
51 INTERNALS
53 HISTORY
54 29-10-95 digulla automatically created from
55 intuition_lib.fd and clib/intuition_protos.h
57 *****************************************************************************/
59 AROS_LIBFUNC_INIT
61 int_PrintIText(rp, iText, leftOffset, topOffset, FALSE, IntuitionBase);
63 AROS_LIBFUNC_EXIT
65 } /* PrintIText */
67 void int_PrintIText(struct RastPort * rp, struct IntuiText * iText,
68 LONG leftOffset, LONG topOffset, BOOL ignore_attributes,
69 struct IntuitionBase *IntuitionBase)
72 struct GfxBase *GfxBase = GetPrivIBase(IntuitionBase)->GfxBase;
73 IPTR apen;
74 IPTR bpen;
75 IPTR drmd;
76 #ifdef __MORPHOS__
77 IPTR penmode;
78 #endif
79 UBYTE style;
80 struct TextFont *font;
81 struct TextFont *newfont = NULL;
83 EXTENDWORD(leftOffset);
84 EXTENDWORD(topOffset);
86 DEBUG_PRINTITEXT(dprintf("int_PrintIText: rp %p text %p Left %ld Top %ld IgnoreAttrs %ld\n",
87 rp, iText, leftOffset, topOffset, ignore_attributes));
89 /* Store important variables of the RastPort */
90 #ifdef __MORPHOS__
91 GetRPAttrs(rp,RPTAG_PenMode,(IPTR)&penmode,RPTAG_APen,(IPTR)&apen,
92 RPTAG_BPen,(IPTR)&bpen,RPTAG_DrMd,(IPTR)&drmd,TAG_DONE);
93 #else
94 GetRPAttrs(rp,RPTAG_APen,(IPTR)&apen,
95 RPTAG_BPen,(IPTR)&bpen,RPTAG_DrMd,(IPTR)&drmd,TAG_DONE);
96 #endif
98 font = rp->Font;
99 style = rp->AlgoStyle;
101 /* For all borders... */
102 for ( ; iText; iText = iText->NextText)
104 if (!ignore_attributes)
106 /* Change RastPort to the colors/mode specified */
107 SetABPenDrMd (rp, iText->FrontPen, iText->BackPen, iText->DrawMode);
110 if (iText->ITextFont)
112 newfont = OpenFont (iText->ITextFont);
114 if (newfont)
115 SetFont (rp, newfont);
117 SetSoftStyle(rp, iText->ITextFont->ta_Style, AskSoftStyle(rp));
120 /* Move to initial position */
121 Move (rp
122 , iText->LeftEdge + leftOffset
123 , iText->TopEdge + topOffset + rp->Font->tf_Baseline
125 Text (rp, iText->IText, strlen (iText->IText));
127 if (iText->ITextFont)
129 if (newfont)
131 SetFont (rp, font);
132 CloseFont (newfont);
137 /* Restore RastPort */
138 #ifdef __MORPHOS__
139 SetRPAttrs(rp,RPTAG_APen,apen,RPTAG_BPen,bpen,RPTAG_DrMd,drmd,RPTAG_PenMode,penmode,TAG_DONE);
140 #else
141 SetRPAttrs(rp,RPTAG_APen,apen,RPTAG_BPen,bpen,RPTAG_DrMd,drmd,TAG_DONE);
142 #endif
143 SetFont (rp, font);
144 SetSoftStyle (rp, style, AskSoftStyle(rp));