Query: xtallocategc
OS: hpux
Section: 3
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
XtAllocateGC() XtAllocateGC() Name XtAllocateGC - obtain a sharable GC with modifiable fields. Synopsis GC XtAllocateGC(object, depth, value_mask, values, dynamic_mask, dont_care_mask) Widget object; Cardinal depth; XtGCMask value_mask; XGCValues *values; XtGCMask dynamic_mask; XtGCMask dont_care_mask; Inputs object Specifies an object; may be of class Object or any subclass thereof. depth Specifies the depth for which the returned GC is valid, or 0. value_mask Specifies the fields of the GC which must have fixed values. values Specifies the values for the fields in value_mask. dynamic_mask Specifies fields of the GC which may be modified. dont_care_mask Specifies fields of the GC which will never be used. Returns A GC with fields as specified in value_mask and values. Availability Release 5 and later. Description XtAllocateGC() returns a sharable GC with values as specified in values for each field set in value_mask. The GC is valid for the screen of the specified object (the screen of the nearest widget ancestor if the specified object is not itself a widget) and for drawable depth depth. If depth is 0, the depth is taken from the XtNdepth resource of the object (or from its nearest widget ancestor). The dynamic_mask and dont_care_mask arguments specify more information about the intended usage of the GC which influences how the GC may be shared. These arguments are explained below. When returned, the GC may already be in use by other widgets, and it may be passed to other widgets in the future. For this reason, none of the fields specified in value_mask should ever be modified. The dynamic_mask argument specifies fields of the GC that may be modified by the widget. Because this is a shared GC, other widgets may also modify those fields, and a widget cannot rely on them to remain unchanged. For this reason, these fields must be explicitly set prior to every use. The dont_care_mask argument specifies fields of the GC that the widget does not care about (i.e., fields that will never be used by any of the graphic functions called with this GC). The returned GC may have any values for these fields. GC fields that are not specified in value_mask, dynamic_mask, or dont_care_mask will always have their default values in the returned GC. If a field is specified in both value_mask, and in dynamic_mask, then the field is modifiable, but will also be initialized to the appro- priate value specified in values. If a field is set in dont_care_mask and is also set in one of the other masks, the dont_care_mask is ignored for that field. Usage XtAllocateGC() is a generalization of XtGetGC(). Calling XtAllocateGC() with depth, dynamic_mask, and dont_care_mask all 0 is equivalent to calling XtGetGC() with the remaining arguments. There are several common situations in which a modifiable GC is necessary. If you are drawing complex text with XDrawText(), the font field of your GC will be automatically changed to each of the font values in your text description. Also, if you use clip masks to protect or speed up drawing in a widget's expose method, you will need to modify the clipping fields of the GC. Using XtAllocateGC() with a dynamic_mask argument means that you can share a GC, with other instances of the same widget at least, instead of allocating a private GC with XCreateGC(). Furthermore, specifying a dont_care_mask when allocating a shared GC can make that GC much more sharable. For example, if a widget draws text with XDrawString() only, then it is only interested in the font and foreground fields of a GC. If it allocates its GC and specifies that it doesn't care about the background field, then it can share its GC with another widget that uses the same font and foreground, but draws with XDrawImageString() and so does care about the background field. This kind of sharing is not possible with XtGetGC(). Note that XtAllocateGC() is new in Release 5. If you use it in a widget, you will lose portability to Release 4. If you have a Release 4 widget that uses a private GC, you may be able to add conditional compilation directives to make it use the more efficient XtAllocateGC() when compiled with X11R5. When done with a GC obtained with XtAllocateGC(), it should be freed with XtReleaseGC(). Structures The XtGCMask type is simply an unsigned long: typedef unsigned long XtGCMask; /* Mask of values that are used by widget*/ Each of the symbols in the table below sets a single bit in an XtGCMask. The value_mask, dynamic_mask, and dont_care_mask arguments are formed by combining these symbols with the bitwise OR operator ( ): GCArcMode GCFillRule GCLineWidth GCBackground GCFillStyle GCPlaneMask GCCapStyle GCFont GCStipple GCClipMask GCForeground GCSubwindowMode GCClipXOrigin GCFunction GCTile GCClipYOrigin GCGraphicsExposures GCTileStipXOrigin GCDashList GCJoinStyle GCTileStipYOrigin GCDashOffset GCLineStyle The XGCValues structure has one field for each of the GC fields: typedef struct { int function; /* logical operation */ unsigned long plane_mask;/* plane mask */ unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaqueStippled */ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stippling */ int ts_x_origin; /* offset for tile or int ts_y_origin; * stipple operations */ Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures;/* should exposures be generated? */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /* patterned/dashed line information */ char dashes; } XGCValues; See Also XtGetGC(1), XtReleaseGC(1). Xt - Graphics Context XtAllocateGC()