earlybrowserreborn - Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 roytam 1 /*==================================================================*/
2 /*                                                                  */
3 /* SGMLCaptionTextObject                                            */
4 /*                                                                  */
5 /* T.Johnson - (TonyJ@Slacvx.Slac.Stanford.Edu)           June.92   */
6 /*                                                                  */
7 /* Defines a composite text segment for the SGMLHyper widget        */
8 /*                                                                  */
9 /*==================================================================*/
10  
11 #include <X11/IntrinsicP.h>
12 #include <X11/StringDefs.h>
13 #include "SGMLCaptionTextP.h"
14  
15 /*
16   Private functions
17 */
18  
19 /*
20   Private data struct
21 */
22  
23 /*
24   Widget class methods
25 */
26  
27 static void    ComputeSize();
28  
29 #define Offset(field) XtOffsetOf(SGMLCaptionTextRec,sgml_caption_text.field)
30  
31 static XtResource resources[] = {
32  
33     {SGMLNcaption, SGMLCCaption, XtRWidget, sizeof(Widget),
34      Offset(caption), XtRImmediate, (XtPointer) NULL}
35  
36 };
37 #undef Offset
38  
39 /*---------------------------------------------------------------*/
40 /* Static initialisation of the class record                     */
41 /*---------------------------------------------------------------*/
42  
43 SGMLCaptionTextClassRec  sGMLCaptionTextClassRec = {
44     {
45     (WidgetClass) &sGMLCompositeTextClassRec,
46                                          /* superclass            */
47     "SGMLCaptionText",                   /* class_name            */
48     sizeof(SGMLCaptionTextRec),          /* widget_size           */
49     NULL,                                /* class_initialize      */
50     NULL,                                /* class_part_initialize */
51     FALSE,                               /* class_inited          */
52     NULL,                                /* initialize            */
53     NULL,                                /* initialize_hook       */
54     NULL,                                /* obj1                  */
55     NULL,                                /* obj2                  */
56     0,                                   /* obj3                  */
57     resources,                           /* resources             */
58     XtNumber(resources),                 /* num_resources         */
59     NULLQUARK,                           /* xrm_class             */
60     0,                                   /* obj4                  */
61     0,                                   /* obj5                  */
62     0,                                   /* obj6                  */
63     0,                                   /* obj7                  */
64     NULL,                                /* destroy               */
65     NULL,                                /* obj8                  */
66     NULL,                                /* obj9                  */
67     NULL,                                /* set_values            */
68     NULL,                                /* set_values_hook       */
69     NULL,                                /* obj10                 */
70     NULL,                                /* get_values_hook       */
71     NULL,                                /* obj11                 */
72     XtVersion,                           /* version               */
73     NULL,                                /* callback private      */
74     NULL,                                /* obj12                 */
75     NULL,                                /* obj13                 */
76     NULL,                                /* obj14                 */
77     NULL,                                /* extension             */
78     },
79     {
80     ComputeSize,                         /* compute_size          */
81     SGMLInheritAdjustSize,               /* adjust_size           */
82     SGMLInheritAdjustPosition,           /* adjust_position       */
83     SGMLInheritExpose,                   /* expose                */
84     SGMLInheritActivate,                 /* activate              */
85     SGMLInheritHilite,                   /* hilite                */
86     SGMLInheritContains,                 /* contains              */
87     SGMLInheritCallCreateCallback,       /* call_create_callback  */
88     SGMLInheritCallMapCallback,          /* call_map_callback     */
89     SGMLInheritMakeVisible,              /* make_visible          */
90     NULL,                                /* sgml_set_values       */
91     NULL,                                /* inherit_changes       */
92     SGMLInheritComputeChangeMask,        /* compute_change_mask   */
93     SGMLInheritSearch,                   /* search                */
94     SGMLInheritClearSelect,              /* clear_select          */
95     SGMLInheritHiliteSelection,          /* hilite_selection      */
96     SGMLInheritXYToPos,                  /* xy_to_pos             */
97     SGMLInheritPosToXY,                  /* pos_to_xy             */
98     SGMLInheritDumpText,                 /* dump_text             */
99     NULL,                                /* extension             */
100     },
101     {
102     SGMLInheritGeometryManager,          /* geometry_manager      */
103     SGMLInheritChangeManaged,            /* change_managed        */
104     SGMLInheritInsertChild,              /* insert_child          */
105     SGMLInheritDeleteChild,              /* delete_child          */
106     SGMLInheritCallAdjustSize,           /* call_adjust_size      */
107     NULL,                                /* ignore                */
108     },
109     {
110     NULL,                                /* ignore                */
111     },
112  };
113  
114 WidgetClass sGMLCaptionTextObjectClass = (WidgetClass) &sGMLCaptionTextClassRec;
115  
116 static void DoNothing() {}
117  
118 /*--------------------------------------------------------------*/
119 /* Compute Size:                                                */
120 /*--------------------------------------------------------------*/
121  
122 static void ComputeSize(w,geom,Adjust,Closure)
123 SGMLCaptionTextObject w;
124 SGMLGeometry *geom;
125 CallAdjustSizeProc Adjust;
126 Opaque Closure;
127 {
128    int n = w->sgml_composite_text.num_children;
129    WidgetList children = w->sgml_composite_text.children;
130    Boolean *managed = w->sgml_composite_text.managed;
131    SGMLPosition xmin, xmax;
132  
133    /*
134     * Always Break before
135     */  
136  
137    _SGMLBreak(geom, w->sgml_text.space_before);
138  
139    /*
140     * Deal with caption first
141     */
142  
143    w->sgml_text.begin = geom->coord;
144    xmin = xmax = geom->coord.x;
145  
146    if (w->sgml_caption_text.caption)
147      {
148        SGMLTextObject t = (SGMLTextObject) w->sgml_caption_text.caption;
149        SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass((Widget) t);
150  
151        (*childClass->sgml_text_class.compute_size)(t,geom,DoNothing,NULL);
152  
153        if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin;
154        if (t->sgml_text.margin + t->sgml_text.width > xmax)
155        xmax = t->sgml_text.margin + t->sgml_text.width;  
156     }
157  
158    /*
159     * Query children?
160     */  
161  
162    for (; n-- > 0; children++, managed++)
163      {
164        if (*managed && *children != w->sgml_caption_text.caption)
165          {    
166            SGMLTextObject t = (SGMLTextObject) *children;
167  
168            SGMLTextObjectClass childClass = (SGMLTextObjectClass) XtClass(*children);
169            SGMLCompositeTextObjectClass myClass = (SGMLCompositeTextObjectClass) XtClass((Widget) w);
170  
171            (*childClass->sgml_text_class.compute_size)
172               (*children,geom,myClass->sgml_composite_text_class.call_adjust_size,*children);
173  
174            if (t->sgml_text.margin < xmin) xmin = t->sgml_text.margin;
175            if (t->sgml_text.margin + t->sgml_text.width > xmax)
176              xmax = t->sgml_text.margin + t->sgml_text.width;
177          }  
178      }  
179  
180    w->sgml_text.end = geom->coord;
181    w->sgml_text.height = geom->coord.y + geom->coord.descent + geom->coord.ascent - w->sgml_text.begin.y;
182    w->sgml_text.width  = xmax - xmin;
183    w->sgml_text.margin = xmin;
184  
185    /*
186     * Always Break after
187     */  
188  
189    _SGMLBreak(geom,w->sgml_text.space_after);
190    w->sgml_text.size_valid = TRUE;
191 }
192