diff options
Diffstat (limited to 'specs/CH09.xml')
-rw-r--r-- | specs/CH09.xml | 254 |
1 files changed, 127 insertions, 127 deletions
diff --git a/specs/CH09.xml b/specs/CH09.xml index 53eba83..822ee6a 100644 --- a/specs/CH09.xml +++ b/specs/CH09.xml @@ -46,17 +46,17 @@ The declaration for the <function>XtResource</function> structure is </para> -<literallayout> -<code>typedef struct {</code> -<code> String resource_name;</code> -<code> String resource_class;</code> -<code> String resource_type;</code> -<code> Cardinal resource_size;</code> -<code> Cardinal resource_offset;</code> -<code> String default_type;</code> -<code> XtPointer default_addr;</code> -<code>} XtResource, *XtResourceList;</code> -</literallayout> +<programlisting> +typedef struct { + String resource_name; + String resource_class; + String resource_type; + Cardinal resource_size; + Cardinal resource_offset; + String default_type; + XtPointer default_addr; +} XtResource, *XtResourceList; +</programlisting> <para> When the resource list is specified as the <function>CoreClassPart</function>, @@ -130,19 +130,19 @@ and all the other pixel entries a resource class of Then, the resource file needs only two lines to change all pixels to ivory or darkblue: </para> -<literallayout> -<code>*Background: ivory</code> -<code>*Foreground: darkblue</code> -</literallayout> +<programlisting> +*Background: ivory +*Foreground: darkblue +</programlisting> <para> Similarly, a widget may have several font resources (such as normal and bold), but all fonts should have the class Font. Thus, changing all fonts simply requires only a single line in the default resource file: </para> -<literallayout> +<programlisting> *Font: 6x13 -</literallayout> +</programlisting> <para> By convention, resource classes are always spelled starting with a capital letter @@ -641,20 +641,20 @@ see <xref linkend='Obtaining_Widget_State' /> and <para> Here is an abbreviated version of a possible resource list for a Label widget: </para> -<literallayout> -<code>/* Resources specific to Label */</code> -<code>static XtResource resources[] = {</code> -<code>{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),</code> -<code> XtOffsetOf(LabelRec, label.foreground), XtRString, XtDefaultForeground},</code> -<code>{XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*),</code> -<code> XtOffsetOf(LabelRec, label.font), XtRString, XtDefaultFont},</code> -<code>{XtNlabel, XtCLabel, XtRString, sizeof(String),</code> -<code> XtOffsetOf(LabelRec, label.label), XtRString, NULL},</code> -<code> .</code> -<code> .</code> -<code> .</code> -<code>}</code> -</literallayout> +<programlisting> +/* Resources specific to Label */ +static XtResource resources[] = { +{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), + XtOffsetOf(LabelRec, label.foreground), XtRString, XtDefaultForeground}, +{XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), + XtOffsetOf(LabelRec, label.font), XtRString, XtDefaultFont}, +{XtNlabel, XtCLabel, XtRString, sizeof(String), + XtOffsetOf(LabelRec, label.label), XtRString, NULL}, + . + . + . +} +</programlisting> <para> The complete resource name for a field of a widget instance is the concatenation of the application shell name (from @@ -1759,12 +1759,12 @@ see <olink targetdoc='libX11' targetptr='Creating_and_Storing_Databases'>Section <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface.</olink>) for input and output values. </para> -<literallayout> -<code>typedef struct {</code> -<code> unsigned int size;</code> -<code> XPointer addr;</code> -<code>} XrmValue, *XrmValuePtr;</code> -</literallayout> +<programlisting> +typedef struct { + unsigned int size; + XPointer addr; +} XrmValue, *XrmValuePtr; +</programlisting> <para> The <emphasis remap='I'>addr</emphasis> field specifies the address of the data, and the <emphasis remap='I'>size</emphasis> field gives the total number of significant bytes in the data. @@ -1942,72 +1942,72 @@ still required to inform the Intrinsics that the converted value is a function of the particular display (and colormap). </para> -<literallayout> -<code>#define done(type, value) \\</code> -<code> { \\</code> -<code> if (toVal->addr != NULL) { \\</code> -<code> if (toVal->size < sizeof(type)) { \\</code> -<code> toVal->size = sizeof(type); \\</code> -<code> return False; \\</code> -<code> } \\</code> -<code> *(type*)(toVal->addr) = (value); \\</code> -<code> } \\</code> -<code> else { \\</code> -<code> static type static_val; \\</code> -<code> static_val = (value); \\</code> -<code> toVal->addr = (XPointer)&static_val; \\</code> -<code> } \\</code> -<code> toVal->size = sizeof(type); \\</code> -<code> return True; \\</code> -<code> }</code> - -<code>static Boolean CvtStringToPixel(</code> -<code> Display *dpy,</code> -<code> XrmValue *args,</code> -<code> Cardinal *num_args,</code> -<code> XrmValue *fromVal,</code> -<code> XrmValue *toVal,</code> -<code> XtPointer *converter_data)</code> -<code>{</code> -<code> static XColor screenColor;</code> -<code> XColor exactColor;</code> -<code> Screen *screen;</code> -<code> Colormap colormap;</code> -<code> Status status;</code> - -<code> if (*num_args != 2)</code> -<code> XtAppWarningMsg(XtDisplayToApplicationContext(dpy),</code> -<code> "wrongParameters", "cvtStringToPixel", "XtToolkitError",</code> -<code> "String to pixel conversion needs screen and colormap arguments",</code> -<code> (String *)NULL, (Cardinal *)NULL);</code> -<code> screen = *((Screen**) args[0].addr);</code> -<code> colormap = *((Colormap *) args[1].addr);</code> -<code> if (CompareISOLatin1(str, XtDefaultBackground) == 0) {</code> -<code> *closure_ret = False;</code> -<code> done(Pixel, WhitePixelOfScreen(screen));</code> -<code> }</code> -<code> if (CompareISOLatin1(str, XtDefaultForeground) == 0) {</code> -<code> *closure_ret = False;</code> -<code> done(Pixel, BlackPixelOfScreen(screen));</code> -<code> }</code> -<code> status = XAllocNamedColor(DisplayOfScreen(screen), colormap, (char*)fromVal->addr,</code> -<code> &screenColor, &exactColor);</code> -<code> if (status == 0) {</code> -<code> String params[1];</code> -<code> Cardinal num_params = 1;</code> -<code> params[0] = (String)fromVal->addr;</code> -<code> XtAppWarningMsg(XtDisplayToApplicationContext(dpy),</code> -<code> "noColormap", "cvtStringToPixel", "XtToolkitError",</code> -<code> "Cannot allocate colormap entry for \\"%s\\"",</code> -<code> params, &num_params);</code> -<code> *converter_data = (char *) False;</code> -<code> return False;</code> -<code> } else {</code> -<code> *converter_data = (char *) True;</code> -<code> done(Pixel, &screenColor.pixel);</code> -<code> }</code> -<code>}</code> -</literallayout> +<programlisting> +#define done(type, value) \\ + { \\ + if (toVal->addr != NULL) { \\ + if (toVal->size < sizeof(type)) { \\ + toVal->size = sizeof(type); \\ + return False; \\ + } \\ + *(type*)(toVal->addr) = (value); \\ + } \\ + else { \\ + static type static_val; \\ + static_val = (value); \\ + toVal->addr = (XPointer)&static_val; \\ + } \\ + toVal->size = sizeof(type); \\ + return True; \\ + } + +static Boolean CvtStringToPixel( + Display *dpy, + XrmValue *args, + Cardinal *num_args, + XrmValue *fromVal, + XrmValue *toVal, + XtPointer *converter_data) +{ + static XColor screenColor; + XColor exactColor; + Screen *screen; + Colormap colormap; + Status status; + + if (*num_args != 2) + XtAppWarningMsg(XtDisplayToApplicationContext(dpy), + "wrongParameters", "cvtStringToPixel", "XtToolkitError", + "String to pixel conversion needs screen and colormap arguments", + (String *)NULL, (Cardinal *)NULL); + screen = *((Screen**) args[0].addr); + colormap = *((Colormap *) args[1].addr); + if (CompareISOLatin1(str, XtDefaultBackground) == 0) { + *closure_ret = False; + done(Pixel, WhitePixelOfScreen(screen)); + } + if (CompareISOLatin1(str, XtDefaultForeground) == 0) { + *closure_ret = False; + done(Pixel, BlackPixelOfScreen(screen)); + } + status = XAllocNamedColor(DisplayOfScreen(screen), colormap, (char*)fromVal->addr, + &screenColor, &exactColor); + if (status == 0) { + String params[1]; + Cardinal num_params = 1; + params[0] = (String)fromVal->addr; + XtAppWarningMsg(XtDisplayToApplicationContext(dpy), + "noColormap", "cvtStringToPixel", "XtToolkitError", + "Cannot allocate colormap entry for \\"%s\\"", + params, &num_params); + *converter_data = (char *) False; + return False; + } else { + *converter_data = (char *) True; + done(Pixel, &screenColor.pixel); + } +} +</programlisting> <para> All type converters should define some set of conversion values for which they @@ -2221,9 +2221,9 @@ calls to the converter. Conversion cache control is specified via an <function>XtCacheType</function> argument. </para> -<literallayout> -<code>typedef int XtCacheType;</code> -</literallayout> +<programlisting> +typedef int XtCacheType; +</programlisting> <para> An <function>XtCacheType</function> @@ -2513,24 +2513,24 @@ specify how each argument is derived. These are defined in <function><X11/Intrinsic.h></function>. </para> -<literallayout> -<code>typedef enum {</code> -<code> /* address mode parameter representation */</code> -<code> XtAddress, /* address */</code> -<code> XtBaseOffset, /* offset */</code> -<code> XtImmediate, /* constant */</code> -<code> XtResourceString, /* resource name string */</code> -<code> XtResourceQuark, /* resource name quark */</code> -<code> XtWidgetBaseOffset, /* offset */</code> -<code> XtProcedureArg /* procedure to call */</code> -<code>} XtAddressMode;</code> - -<code>typedef struct {</code> -<code> XtAddressMode address_mode;</code> -<code> XtPointer address_id;</code> -<code> Cardinal size;</code> -<code>} XtConvertArgRec, *XtConvertArgList;</code> -</literallayout> +<programlisting> +typedef enum { + /* address mode parameter representation */ + XtAddress, /* address */ + XtBaseOffset, /* offset */ + XtImmediate, /* constant */ + XtResourceString, /* resource name string */ + XtResourceQuark, /* resource name quark */ + XtWidgetBaseOffset, /* offset */ + XtProcedureArg /* procedure to call */ +} XtAddressMode; + +typedef struct { + XtAddressMode address_mode; + XtPointer address_id; + Cardinal size; +} XtConvertArgRec, *XtConvertArgList; +</programlisting> <para> The <emphasis remap='I'>size</emphasis> field specifies the length of the data in bytes. The <emphasis remap='I'>address_mode</emphasis> field specifies how the <emphasis remap='I'>address_id</emphasis> field should be @@ -2659,9 +2659,9 @@ To invoke explicit resource conversions, use or <xref linkend='XtCallConverter' xrefstyle='select: title'/>. </para> -<literallayout> -<code>typedef XtPointer XtCacheRef;</code> -</literallayout> +<programlisting> +typedef XtPointer XtCacheRef; +</programlisting> <funcsynopsis id='XtCallConverter'> <funcprototype> |