4 Original GPL release version 4.12
5 Copyright 1993-2000 Jonathan Potter
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 All users of Directory Opus 4 (including versions distributed
22 under the GPL) are entitled to upgrade to the latest version of
23 Directory Opus version 5 at a reduced price. Please see
24 http://www.gpsoft.com.au for more information.
26 The release of Directory Opus 4 under the GPL in NO WAY affects
27 the existing commercial status of Directory Opus 5.
31 /* Font-sensitive requester routines.
33 These routines are for LAYOUT ONLY!!!!
35 They do not add gadgets or listviews to a window, nor do they
36 attempt to process gadget or listview operations. They will
37 allocate most, if not all things you need to add an object
38 to the requester, however */
43 struct Image
*check_off_image
;
44 struct Image
*check_on_image
;
45 struct Image
*button_off_image
;
46 struct Image
*button_on_image
;
50 topazfont
={(STRPTR
)"topaz.font",8,0,0};
54 struct Window
* __saveds
R_OpenRequester(register struct RequesterBase
*reqbase
__asm("a0"))
56 struct NewWindow newwin
;
57 struct Screen
*screen
,screendata
;
58 struct Window
*window
=NULL
,*center_window
=NULL
;
59 short width
,height
,attempt
;
61 /* Forbid to prevent changes to Screen lists */
67 if (reqbase
->rb_flags
&RBF_WINDOWCENTER
)
68 center_window
=reqbase
->rb_window
;
69 reqbase
->rb_window
=NULL
;
71 /* rb_screen overrides rb_screenname; if this is initialised then try
72 to open the window on the CUSTOMSCREEN given */
74 if (reqbase
->rb_screen
) {
75 newwin
.Type
=CUSTOMSCREEN
;
76 newwin
.Screen
=reqbase
->rb_screen
;
77 screen
=reqbase
->rb_screen
;
80 /* Otherwise, if rb_screenname is given, search screen lists for that
83 else if (reqbase
->rb_screenname
) {
85 /* Look for it as a public screen first (2.0 only) */
87 if (//IntuitionBase->LibNode.lib_Version>35 &&
88 (screen
=LockPubScreen(reqbase
->rb_screenname
))) {
89 newwin
.Type
=PUBLICSCREEN
;
93 /* Otherwise search screen lists manually */
96 screen=IntuitionBase->FirstScreen;
99 LStrCmpI((char *)screen->Title,reqbase->rb_screenname)==0) {
100 newwin.Type=CUSTOMSCREEN;
101 newwin.Screen=screen;
104 screen=screen->NextScreen;
110 /* If the screen type is still unset, just open on the Workbench screen
111 (or default public screen) */
114 newwin
.Type
=WBENCHSCREEN
;
115 GetWBScreen(&screendata
);
119 /* Check font pointer; if not set, use screen's font */
121 if (!reqbase
->rb_font
)
122 reqbase
->rb_font
=screen
->RastPort
.Font
;
124 /* If font is proportional, use system default font */
126 if (reqbase
->rb_font
->tf_Flags
&FPF_PROPORTIONAL
)
127 reqbase
->rb_font
=GfxBase
->DefaultFont
;
129 /* Attempt this twice; first with the selected font, and if
130 the window is too large, again with topaz/8 */
132 for (attempt
=0;attempt
<2;attempt
++) {
134 /* Setup window size for selected font */
136 width
=(reqbase
->rb_width
*reqbase
->rb_font
->tf_XSize
)+reqbase
->rb_widthfine
;
137 height
=(reqbase
->rb_height
*reqbase
->rb_font
->tf_YSize
)+reqbase
->rb_heightfine
;
139 if (reqbase
->rb_flags
&RBF_BORDERS
) {
140 width
+=screen
->WBorLeft
+screen
->WBorRight
;
141 height
+=screen
->WBorTop
+screen
->WBorBottom
+screen
->Font
->ta_YSize
+1;
144 /* If it's not going to fit on the screen, don't even attempt
145 to open it. Otherwise, fill in NewWindow structure */
147 if (width
<=screen
->Width
&& height
<=screen
->Height
) {
149 if (reqbase
->rb_flags
&RBF_WINDOWCENTER
&& center_window
) {
150 newwin
.LeftEdge
=center_window
->LeftEdge
+((center_window
->Width
-width
)/2);
151 newwin
.TopEdge
=center_window
->TopEdge
+((center_window
->Height
-height
)/2);
154 newwin
.LeftEdge
=(screen
->Width
-width
)/2;
155 newwin
.TopEdge
=(screen
->Height
-height
)/2;
158 if (newwin
.LeftEdge
<0) newwin
.LeftEdge
=0;
159 else if (newwin
.LeftEdge
+width
>screen
->Width
) newwin
.LeftEdge
=screen
->Width
-width
;
160 if (newwin
.TopEdge
<0) newwin
.TopEdge
=0;
161 else if (newwin
.TopEdge
+height
>screen
->Height
) newwin
.TopEdge
=screen
->Height
-height
;
164 newwin
.Height
=height
;
165 newwin
.DetailPen
=255;
168 if (reqbase
->rb_idcmpflags
)
169 newwin
.IDCMPFlags
=reqbase
->rb_idcmpflags
;
170 else newwin
.IDCMPFlags
=
180 if (reqbase
->rb_flags
&RBF_BORDERS
) {
187 if (reqbase
->rb_flags
&RBF_CLOSEGAD
) {
188 newwin
.Flags
|=WFLG_CLOSEGADGET
;
189 newwin
.IDCMPFlags
|=IDCMP_CLOSEWINDOW
;
200 newwin
.FirstGadget
=NULL
;
201 newwin
.CheckMark
=NULL
;
202 newwin
.Title
=reqbase
->rb_title
;
204 /* Try to open window; if we succeed, then render border and fill
207 if (window
=OpenWindow(&newwin
)) {
208 SetFont(window
->RPort
,reqbase
->rb_font
);
209 if (!(reqbase
->rb_flags
&RBF_BORDERS
)) {
210 Do3DBox(window
->RPort
,2,1,window
->Width
-4,window
->Height
-2,
211 reqbase
->rb_shine
,reqbase
->rb_shadow
);
213 SetAPen(window
->RPort
,reqbase
->rb_bg
);
214 RectFill(window
->RPort
,
215 window
->BorderLeft
+2,
217 window
->Width
-3-window
->BorderRight
,
218 window
->Height
-2-window
->BorderBottom
);
219 SetAPen(window
->RPort
,reqbase
->rb_fg
);
220 SetBPen(window
->RPort
,reqbase
->rb_bg
);
221 SetDrMd(window
->RPort
,JAM2
);
226 /* If we failed with the custom font, try again with topaz/8 */
229 if (!(reqbase
->rb_font
=OpenFont(&topazfont
))) break;
230 reqbase
->rb_privateflags
|=RBP_CLOSEFONT
;
234 /* Unlock the public screen we may have locked earlier */
236 if (screen
&& newwin
.Type
==PUBLICSCREEN
) UnlockPubScreen(NULL
,screen
);
238 /* Fix StringExtend function for current font */
240 if (reqbase
->rb_extend
&& window
) reqbase
->rb_extend
->Font
=reqbase
->rb_font
;
242 /* Restore multitasking */
246 /* Initialise other data */
248 reqbase
->rb_objects
=NULL
;
249 reqbase
->rb_memory
=NULL
;
250 reqbase
->rb_privatedata
=
251 DoAllocRemember(&reqbase
->rb_memory
,sizeof(struct PrivateData
),MEMF_CLEAR
);
253 /* Fill out rb_window pointer in RequesterBase structure. We also
254 return the window pointer to indicate success or failure */
256 reqbase
->rb_window
=window
;
261 void __saveds
R_CloseRequester(register struct RequesterBase
*reqbase
__asm("a0"))
263 if (reqbase
->rb_window
) {
264 CloseWindow(reqbase
->rb_window
);
265 reqbase
->rb_window
=NULL
;
267 if (reqbase
->rb_privateflags
&RBP_CLOSEFONT
&& reqbase
->rb_font
)
268 CloseFont(reqbase
->rb_font
);
269 DoFreeRemember(&reqbase
->rb_memory
);
272 APTR __saveds
R_AddRequesterObject(register struct RequesterBase
*reqbase
__asm("a0"),
273 register struct TagItem
*taglist
__asm("a1"))
275 struct RequesterObject
*object
=NULL
,*tempobject
;
276 struct PrivateData
*private;
278 int tag
,size
,type
,xoffset
,yoffset
;
279 struct StringInfo
*stringinfo
=NULL
;
280 struct PropInfo
*propinfo
;
281 struct Image
*propimage
;
282 struct Gadget
*gadget
=NULL
;
285 if (!taglist
|| !reqbase
|| !reqbase
->rb_window
) return(NULL
);
287 private=(struct PrivateData
*)reqbase
->rb_privatedata
;
289 if (reqbase
->rb_flags
&RBF_BORDERS
) {
290 xoffset
=reqbase
->rb_window
->BorderLeft
;
291 yoffset
=reqbase
->rb_window
->BorderTop
;
298 for (tag
=0;tag
>-1;tag
++) {
299 data
=taglist
[tag
].ti_Data
;
300 switch (taglist
[tag
].ti_Tag
) {
309 taglist
=(struct TagItem
*)data
;
317 if (!(object
=DoAllocRemember(&reqbase
->rb_memory
,
318 sizeof(struct RequesterObject
),MEMF_CLEAR
))) return(NULL
);
319 switch (object
->ro_type
=data
) {
321 size
=sizeof(Object_Text
);
324 size
=sizeof(Object_Border
);
327 size
=sizeof(Object_Gadget
);
329 case OBJECT_LISTVIEW
:
330 size
=sizeof(Object_ListView
);
333 if (!(object
->ro_data
=DoAllocRemember(&reqbase
->rb_memory
,
334 size
,MEMF_CLEAR
))) return(NULL
);
336 switch (object
->ro_type
) {
339 ((Object_Text
*)object
->ro_data
)->ot_left
=
340 reqbase
->rb_leftoffset
+xoffset
;
341 ((Object_Text
*)object
->ro_data
)->ot_top
=
342 reqbase
->rb_topoffset
+yoffset
;
345 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.LeftEdge
=
346 reqbase
->rb_leftoffset
+xoffset
;
347 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.TopEdge
=
348 reqbase
->rb_topoffset
+yoffset
;
350 case OBJECT_LISTVIEW
:
351 ((Object_ListView
*)object
->ro_data
)->ol_listview
.x
=
352 reqbase
->rb_leftoffset
+xoffset
;
353 ((Object_ListView
*)object
->ro_data
)->ol_listview
.y
=
354 reqbase
->rb_topoffset
+yoffset
;
358 if (tempobject
=reqbase
->rb_objects
)
359 while (tempobject
->ro_next
) tempobject
=tempobject
->ro_next
;
360 if (tempobject
) tempobject
->ro_next
=object
;
361 else reqbase
->rb_objects
=object
;
364 /* Gadget type (object->ro_Type==OBJECT_GADGET) */
367 if (!object
|| object
->ro_type
!=OBJECT_GADGET
) break;
368 gadget
=&((Object_Gadget
*)object
->ro_data
)->og_gadget
;
369 ((Object_Gadget
*)object
->ro_data
)->og_type
=data
;
372 gadget
->MutualExclude
=GAD_CYCLE
;
374 case GADGET_TINYGLASS
:
376 type
=GTYP_BOOLGADGET
;
377 gadget
->Flags
=GFLG_GADGHCOMP
;
378 gadget
->Activation
=GACT_RELVERIFY
;
382 gadget
->Activation
|=GACT_LONGINT
;
385 if (!(stringinfo
=(struct StringInfo
*)
386 DoAllocRemember(&reqbase
->rb_memory
,sizeof(struct StringInfo
),MEMF_CLEAR
)))
388 gadget
->SpecialInfo
=(APTR
)stringinfo
;
389 gadget
->Flags
=GFLG_GADGHCOMP
|GFLG_TABCYCLE
;
390 if (reqbase
->rb_extend
) {
391 gadget
->Flags
|=GFLG_STRINGEXTEND
;
392 stringinfo
->Extension
=reqbase
->rb_extend
;
394 gadget
->Activation
|=GACT_RELVERIFY
|GACT_TOGGLESELECT
;
398 type
=GTYP_PROPGADGET
;
399 if (!(propinfo
=(struct PropInfo
*)
400 DoAllocRemember(&reqbase
->rb_memory
,sizeof(struct PropInfo
),MEMF_CLEAR
)))
402 gadget
->SpecialInfo
=(APTR
)propinfo
;
403 if (!(propimage
=(struct Image
*)
404 DoAllocRemember(&reqbase
->rb_memory
,sizeof(struct Image
),MEMF_CLEAR
)))
406 gadget
->GadgetRender
=propimage
;
410 type
=GTYP_BOOLGADGET
;
413 gadget
->Flags
=GFLG_GADGIMAGE
|GFLG_GADGHIMAGE
;
414 gadget
->Activation
=GACT_RELVERIFY
|GACT_TOGGLESELECT
;
416 if (!private->check_off_image
)
417 private->check_off_image
=
418 DoGetCheckImage(reqbase
->rb_shadow
,reqbase
->rb_bg
,0,&reqbase
->rb_memory
);
419 if (!private->check_on_image
)
420 private->check_on_image
=
421 DoGetCheckImage(reqbase
->rb_shadow
,reqbase
->rb_bg
,1,&reqbase
->rb_memory
);
422 gadget
->GadgetRender
=(APTR
)private->check_off_image
;
423 gadget
->SelectRender
=(APTR
)private->check_on_image
;
425 gadget
->MutualExclude
=GAD_CHECK
;
429 type
=GTYP_BOOLGADGET
;
432 gadget
->Flags
=GFLG_GADGIMAGE
|GFLG_GADGHIMAGE
;
433 gadget
->Activation
=GACT_IMMEDIATE
|GACT_TOGGLESELECT
;
435 if (!private->button_off_image
)
436 private->button_off_image
=
437 DoGetButtonImage(15,9,reqbase
->rb_shine
,reqbase
->rb_shadow
,
438 reqbase
->rb_bg
,reqbase
->rb_bg
,&reqbase
->rb_memory
);
439 if (!private->button_on_image
)
440 private->button_on_image
=
441 DoGetButtonImage(15,9,reqbase
->rb_shine
,reqbase
->rb_shadow
,
442 reqbase
->rb_fg
,reqbase
->rb_bg
,&reqbase
->rb_memory
);
443 gadget
->GadgetRender
=(APTR
)private->button_off_image
;
444 gadget
->SelectRender
=(APTR
)private->button_on_image
;
446 gadget
->MutualExclude
=GAD_RADIO
;
449 gadget
->GadgetType
=type
;
452 /* Gadget ID (object->ro_type==OBJECT_GADGET) */
455 if (!object
|| object
->ro_type
!=OBJECT_GADGET
) break;
456 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.GadgetID
=data
;
459 /* Border type (object->ro_type==OBJECT_BORDER) */
462 if (!object
|| object
->ro_type
!=OBJECT_BORDER
) break;
463 ((Object_Border
*)object
->ro_data
)->ob_type
=data
;
466 /* ListView ID (object->ro_type==OBJECT_LISTVIEW) */
469 if (!object
|| object
->ro_type
!=OBJECT_LISTVIEW
) break;
470 ((Object_ListView
*)object
->ro_data
)->ol_listview
.listid
=data
;
473 /* Left edge positioning */
476 data
*=reqbase
->rb_font
->tf_XSize
;
479 switch (object
->ro_type
) {
482 ((Object_Text
*)object
->ro_data
)->ot_left
+=data
;
486 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.LeftEdge
+=data
;
489 case OBJECT_LISTVIEW
:
490 ((Object_ListView
*)object
->ro_data
)->ol_listview
.x
+=data
;
495 /* Top edge positioning */
498 data
*=reqbase
->rb_font
->tf_YSize
;
501 switch (object
->ro_type
) {
504 ((Object_Text
*)object
->ro_data
)->ot_top
+=data
;
508 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.TopEdge
+=data
;
511 case OBJECT_LISTVIEW
:
512 ((Object_ListView
*)object
->ro_data
)->ol_listview
.y
+=data
;
517 /* Width adjustment */
520 data
*=reqbase
->rb_font
->tf_XSize
;
523 switch (object
->ro_type
) {
525 ((Object_Border
*)object
->ro_data
)->ob_width
+=data
;
529 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.Width
+=data
;
532 case OBJECT_LISTVIEW
:
533 ((Object_ListView
*)object
->ro_data
)->ol_listview
.w
+=data
;
538 /* Height adjustment */
541 data
*=reqbase
->rb_font
->tf_YSize
;
544 switch (object
->ro_type
) {
546 ((Object_Border
*)object
->ro_data
)->ob_height
+=data
;
550 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.Height
+=data
;
553 case OBJECT_LISTVIEW
:
554 ((Object_ListView
*)object
->ro_data
)->ol_listview
.h
+=data
;
562 if (!reqbase
->rb_flags
&RBF_STRINGS
|| !reqbase
->rb_string_table
) break;
563 data
=(ULONG
)reqbase
->rb_string_table
[data
];
566 if (!object
|| !data
) break;
568 switch (object
->ro_type
) {
570 string
=&((Object_Text
*)object
->ro_data
)->ot_text
;
574 string
=&((Object_Gadget
*)object
->ro_data
)->og_text
;
578 string
=&((Object_Border
*)object
->ro_data
)->ob_text
;
581 case OBJECT_LISTVIEW
:
582 string
=&((Object_ListView
*)object
->ro_data
)->ol_listview
.title
;
586 (*string
=DoAllocRemember(&reqbase
->rb_memory
,strlen((char *)data
)+1,0)))
587 LStrCpy(*string
,(char *)data
);
590 /* Text positioning */
594 switch (object
->ro_type
) {
596 ((Object_Gadget
*)object
->ro_data
)->og_textpos
=data
;
600 ((Object_Border
*)object
->ro_data
)->ob_textpos
=data
;
603 case OBJECT_LISTVIEW
:
604 if (data
==TEXTPOS_ABOVE
)
605 ((Object_ListView
*)object
->ro_data
)->ol_listview
.flags
|=DLVF_TTOP
;
610 /* String gadget settings (gadgettype==GTYP_STRGADGET) */
613 if (!stringinfo
) break;
614 stringinfo
->Buffer
=(UBYTE
*)data
;
618 if (!stringinfo
) break;
619 stringinfo
->MaxChars
=data
;
623 if (!stringinfo
) break;
624 stringinfo
->UndoBuffer
=(UBYTE
*)data
;
627 /* Boolean gadget setting */
630 if (data
&& object
&& object
->ro_type
==OBJECT_GADGET
)
631 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.Flags
|=GFLG_SELECTED
;
634 /* Various other tags */
637 if (data
&& object
&& object
->ro_type
==OBJECT_GADGET
&& gadget
&&
638 (gadget
->MutualExclude
==GAD_CHECK
|| gadget
->MutualExclude
==GAD_RADIO
) &&
639 reqbase
->rb_font
->tf_YSize
>gadget
->Height
)
640 gadget
->TopEdge
+=(reqbase
->rb_font
->tf_YSize
-gadget
->Height
)/2;
644 if (data
&& object
) {
645 if (object
->ro_type
==OBJECT_GADGET
&&
646 gadget
&& gadget
->GadgetType
==GTYP_BOOLGADGET
) {
647 DoAddGadgetBorders(&reqbase
->rb_memory
,
649 reqbase
->rb_shine
,reqbase
->rb_shadow
);
651 else if (object
->ro_type
==OBJECT_LISTVIEW
)
652 ((Object_ListView
*)object
->ro_data
)->ol_listview
.flags
|=DLVF_HIREC
;
658 if (stringinfo
&& !stringinfo
->Buffer
&& stringinfo
->MaxChars
>0) {
659 if (!(stringinfo
->Buffer
=
660 DoAllocRemember(&reqbase
->rb_memory
,stringinfo
->MaxChars
+1,MEMF_CLEAR
)))
664 return((object
)?object
->ro_data
:(APTR
)NULL
);
667 void __saveds
R_RefreshRequesterObject(register struct RequesterBase
*reqbase
__asm("a0"),
668 register struct RequesterObject
*object
__asm("a1"))
673 if (!reqbase
|| !reqbase
->rb_window
) return;
675 else if ((object
=reqbase
->rb_objects
)) count
=65535;
678 rp
=reqbase
->rb_window
->RPort
;
680 while (count
-- && object
) {
681 switch (object
->ro_type
) {
683 R_ObjectText(reqbase
,
684 ((Object_Text
*)object
->ro_data
)->ot_left
,
685 ((Object_Text
*)object
->ro_data
)->ot_top
,
687 ((Object_Text
*)object
->ro_data
)->ot_text
,
692 switch (((Object_Border
*)object
->ro_data
)->ob_type
) {
695 ((Object_Border
*)object
->ro_data
)->ob_left
,
696 ((Object_Border
*)object
->ro_data
)->ob_top
,
697 ((Object_Border
*)object
->ro_data
)->ob_width
,
698 ((Object_Border
*)object
->ro_data
)->ob_height
,
699 reqbase
->rb_shine
,reqbase
->rb_shadow
);
702 case BORDER_RECESSED
:
704 ((Object_Border
*)object
->ro_data
)->ob_left
,
705 ((Object_Border
*)object
->ro_data
)->ob_top
,
706 ((Object_Border
*)object
->ro_data
)->ob_width
,
707 ((Object_Border
*)object
->ro_data
)->ob_height
,
708 reqbase
->rb_shadow
,reqbase
->rb_shine
);
713 ((Object_Border
*)object
->ro_data
)->ob_left
,
714 ((Object_Border
*)object
->ro_data
)->ob_top
,
715 ((Object_Border
*)object
->ro_data
)->ob_width
,
716 ((Object_Border
*)object
->ro_data
)->ob_height
,
717 ((Object_Border
*)object
->ro_data
)->ob_text
,
718 reqbase
->rb_shine
,reqbase
->rb_shadow
);
723 ((Object_Border
*)object
->ro_data
)->ob_left
,
724 ((Object_Border
*)object
->ro_data
)->ob_top
,
725 ((Object_Border
*)object
->ro_data
)->ob_width
,
726 ((Object_Border
*)object
->ro_data
)->ob_height
,
727 reqbase
->rb_shine
,reqbase
->rb_shadow
);
730 if (((Object_Border
*)object
->ro_data
)->ob_type
!=BORDER_GROUP
&&
731 ((Object_Border
*)object
->ro_data
)->ob_text
) {
732 R_ObjectText(reqbase
,
733 ((Object_Border
*)object
->ro_data
)->ob_left
,
734 ((Object_Border
*)object
->ro_data
)->ob_top
,
735 ((Object_Border
*)object
->ro_data
)->ob_width
,
736 ((Object_Border
*)object
->ro_data
)->ob_height
,
737 ((Object_Border
*)object
->ro_data
)->ob_text
,
738 ((Object_Border
*)object
->ro_data
)->ob_textpos
);
743 if (((Object_Gadget
*)object
->ro_data
)->og_text
) {
744 R_ObjectText(reqbase
,
745 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.LeftEdge
,
746 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.TopEdge
,
747 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.Width
,
748 ((Object_Gadget
*)object
->ro_data
)->og_gadget
.Height
,
749 ((Object_Gadget
*)object
->ro_data
)->og_text
,
750 ((Object_Gadget
*)object
->ro_data
)->og_textpos
);
752 if (((Object_Gadget
*)object
->ro_data
)->og_type
==GADGET_TINYGLASS
) {
753 DoDoGlassImage(reqbase
->rb_window
->RPort
,
754 &((Object_Gadget
*)object
->ro_data
)->og_gadget
,
760 if (((Object_Gadget *)object->ro_data)->og_gadget.GadgetType==GTYP_STRGADGET &&
761 IntuitionBase->LibNode.lib_Version<36) {
762 SetAPen(reqbase->rb_window->RPort,0);
763 RectFill(reqbase->rb_window->RPort,
764 ((Object_Gadget *)object->ro_data)->og_gadget.LeftEdge,
765 ((Object_Gadget *)object->ro_data)->og_gadget.TopEdge,
766 ((Object_Gadget *)object->ro_data)->og_gadget.LeftEdge+
767 ((Object_Gadget *)object->ro_data)->og_gadget.Width-1,
768 ((Object_Gadget *)object->ro_data)->og_gadget.TopEdge+
769 ((Object_Gadget *)object->ro_data)->og_gadget.Height-1);
770 RefreshStrGad(&((Object_Gadget *)object->ro_data)->og_gadget,
776 object
=object
->ro_next
;
780 void __saveds
R_ObjectText(register struct RequesterBase
*reqbase
__asm("a0"),
781 register short left
__asm("d0"),
782 register short top
__asm("d1"),
783 register short width
__asm("d2"),
784 register short height
__asm("d3"),
785 register char *text
__asm("a1"),
786 register unsigned short textpos
__asm("d4"))
789 short x
,y
,text_width
,text_height
,cx
,cy
,len
,got_uscore
=-1,uscoreok
=1;
790 char *ptr
,textbuf
[82];
792 rp
=reqbase
->rb_window
->RPort
;
794 SetAPen(rp
,reqbase
->rb_fg
);
795 SetBPen(rp
,reqbase
->rb_bg
);
797 if (textpos
&TEXTPOS_F_NOUSCORE
) {
799 textpos
&=~TEXTPOS_F_NOUSCORE
;
802 for (len
=0,ptr
=text
;*ptr
&& len
<80;len
++,ptr
++) {
803 if (uscoreok
&& *ptr
=='_' && got_uscore
==-1) {
807 else textbuf
[len
]=*ptr
;
811 text_width
=len
*rp
->Font
->tf_XSize
;
812 text_height
=rp
->Font
->tf_YSize
;
814 cx
=left
+((width
-text_width
)/2);
815 cy
=top
+((height
-text_height
)/2);
818 case TEXTPOS_ABSOLUTE
:
829 x
=left
-text_width
-rp
->Font
->tf_XSize
;
834 x
=left
+width
+rp
->Font
->tf_XSize
;
840 y
=top
-rp
->Font
->tf_YSize
-2;
849 DoUScoreText(rp
,textbuf
,x
,y
+rp
->Font
->tf_Baseline
,got_uscore
);