diff options
Diffstat (limited to 'nx-X11/lib/dpstk/FontCreato.c')
-rw-r--r-- | nx-X11/lib/dpstk/FontCreato.c | 1610 |
1 files changed, 0 insertions, 1610 deletions
diff --git a/nx-X11/lib/dpstk/FontCreato.c b/nx-X11/lib/dpstk/FontCreato.c deleted file mode 100644 index 5164665cc..000000000 --- a/nx-X11/lib/dpstk/FontCreato.c +++ /dev/null @@ -1,1610 +0,0 @@ -/* - * FontCreato.c - * - * (c) Copyright 1992-1994 Adobe Systems Incorporated. - * All rights reserved. - * - * Permission to use, copy, modify, distribute, and sublicense this software - * and its documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notices appear in all copies and that - * both those copyright notices and this permission notice appear in - * supporting documentation and that the name of Adobe Systems Incorporated - * not be used in advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. No trademark license - * to use the Adobe trademarks is hereby granted. If the Adobe trademark - * "Display PostScript"(tm) is used to describe this software, its - * functionality or for any other purpose, such use shall be limited to a - * statement that this software works in conjunction with the Display - * PostScript system. Proper trademark attribution to reflect Adobe's - * ownership of the trademark shall be given whenever any such reference to - * the Display PostScript system is made. - * - * ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR - * ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. - * ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL - * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON- INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL ADOBE BE LIABLE - * TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ADOBE WILL NOT - * PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE. - * - * Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems - * Incorporated which may be registered in certain jurisdictions - * - * Author: Adobe Systems Incorporated - */ -/* $XFree86$ */ - -#include <stdio.h> -#include <ctype.h> - -#include <X11/IntrinsicP.h> -#include <X11/StringDefs.h> -#include <X11/ShellP.h> -#include <Xm/Xm.h> - -/* There are no words to describe how I feel about having to do this */ - -#if XmVersion > 1001 -#include <Xm/ManagerP.h> -#else -#include <Xm/XmP.h> -#endif - -#include <Xm/Form.h> -#include <Xm/LabelG.h> -#include <Xm/PushBG.h> -#include <Xm/DrawingA.h> -#include <Xm/Scale.h> -#include <Xm/MessageB.h> -#include <Xm/TextF.h> -#include <Xm/PanedW.h> -#include <Xm/List.h> -#include <Xm/SeparatoG.h> -#include <Xm/ToggleBG.h> -#include <Xm/RowColumn.h> -#include <DPS/dpsXclient.h> -#include <DPS/dpsXshare.h> -#include <DPS/FontSBP.h> -#include <DPS/FontCreatP.h> -#include <stdlib.h> -#include <math.h> -#include "FontSBI.h" -#include "FSBwraps.h" - -/* Turn a string into a compound string */ -#define UnsharedCS(str) XmStringCreate(str, XmSTRING_DEFAULT_CHARSET) -#define CS(str, w) _FSBCreateSharedCS(str, w) -static XmString CSempty; -static char *opticalSize = NULL; - -#define Canonical(str) XrmQuarkToString(XrmStringToQuark(str)) - -static float defaultSizeList[] = { -#ifndef CREATOR_DEFAULT_SIZE_LIST - 8, 10, 12, 14, 16, 18, 24, 36, 48, 72 -#else - CREATOR_DEFAULT_SIZE_LIST -#endif /* CREATOR_DEFAULT_SIZE_LIST */ -}; - -#ifndef CREATOR_DEFAULT_SIZE_LIST_COUNT -#define CREATOR_DEFAULT_SIZE_LIST_COUNT 10 -#endif /* CREATOR_DEFAULT_SIZE_LIST_COUNT */ - -#define Offset(field) XtOffsetOf(FontCreatorRec, creator.field) - -static XtResource resources[] = { - {XtNsizes, XtCSizes, XtRFloatList, sizeof(float*), - Offset(sizes), XtRImmediate, (XtPointer) defaultSizeList}, - {XtNsizeCount, XtCSizeCount, XtRInt, sizeof(int), - Offset(size_count), XtRImmediate, - (XtPointer) CREATOR_DEFAULT_SIZE_LIST_COUNT}, - {XtNdismissCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - Offset(dismiss_callback), XtRCallback, (XtPointer) NULL}, - {XtNfontSelectionBox, XtCReadOnly, XtRWidget, sizeof(Widget), - Offset(fsb), XtRWidget, (XtPointer) NULL}, -}; - -/* Forward declarations */ - -static Boolean SetValues(Widget old, Widget req, Widget new, ArgList args, Cardinal *num_args); -static XtGeometryResult GeometryManager(Widget w, XtWidgetGeometry *desired, XtWidgetGeometry *allowed); -static void ChangeManaged(Widget w); -static void ClassInitialize(void); -static void Destroy(Widget widget); -static void Initialize(Widget request, Widget new, ArgList args, Cardinal *num_args); -static void Resize(Widget widget); - -FontCreatorClassRec fontCreatorClassRec = { - /* Core class part */ - { - /* superclass */ (WidgetClass) &xmManagerClassRec, - /* class_name */ "FontCreator", - /* widget_size */ sizeof(FontCreatorRec), - /* class_initialize */ ClassInitialize, - /* class_part_initialize */ NULL, - /* class_inited */ FALSE, - /* initialize */ Initialize, - /* initialize_hook */ NULL, - /* realize */ XtInheritRealize, - /* actions */ NULL, - /* num_actions */ 0, - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ TRUE, - /* compress_exposure */ XtExposeCompressMultiple, - /* compress_enterleave */ TRUE, - /* visible_interest */ FALSE, - /* destroy */ Destroy, - /* resize */ Resize, - /* expose */ NULL, - /* set_values */ SetValues, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback offsets */ NULL, - /* tm_table */ NULL, - /* query_geometry */ XtInheritQueryGeometry, - /* display_accelerator */ NULL, - /* extension */ NULL, - }, - /* Composite class part */ - { - /* geometry_manager */ GeometryManager, - /* change_managed */ ChangeManaged, - /* insert_child */ XtInheritInsertChild, - /* delete_child */ XtInheritDeleteChild, - /* extension */ NULL, - }, - /* Constraint class part */ - { - /* resources */ NULL, - /* num_resources */ 0, - /* constraint_size */ 0, - /* initialize */ NULL, - /* destroy */ NULL, - /* set_values */ NULL, - /* extension */ NULL, - }, - /* Manager class part */ - { - /* translations */ XtInheritTranslations, - /* syn_resources */ NULL, - /* num_syn_resources */ 0, - /* syn_constraint_resources */ NULL, - /* num_syn_constraint_resources */ 0, - /* parent_process */ XmInheritParentProcess, - /* extension */ NULL, - }, - /* FontCreator class part */ - { - /* extension */ NULL, - } -}; - -WidgetClass fontCreatorWidgetClass = - (WidgetClass) &fontCreatorClassRec; - -static void ClassInitialize(void) -{ - XtInitializeWidgetClass(fontSelectionBoxWidgetClass); - - CSempty = UnsharedCS(""); - opticalSize = Canonical("OpticalSize"); -} - -/* ARGSUSED */ - -static void ResizePreview( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - Dimension height; - Cardinal depth; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - if (!XtIsRealized(widget) || fc->creator.gstate == 0) return; - - XtVaGetValues(widget, XmNheight, &height, - XmNdepth, &depth, NULL); - - XDPSSetContextGState(fc->creator.fsb->fsb.context, fc->creator.gstate); - - XDPSSetContextParameters(fc->creator.fsb->fsb.context, XtScreen(widget), - depth, XtWindow(widget), height, - (XDPSStandardColormap *) NULL, - (XDPSStandardColormap *) NULL, - XDPSContextScreenDepth | XDPSContextDrawable); - - _DPSFReclip(fc->creator.fsb->fsb.context); - - XDPSUpdateContextGState(fc->creator.fsb->fsb.context, fc->creator.gstate); -} - -static void DrawMM(FontCreatorWidget fc) -{ - int i, j; - String str; - float p[MAX_AXES]; - float b[MAX_BLENDS]; - int val; - float size; - char *chSize; - DPSContext context; - Dimension hgt; - BlendDataRec *bd = fc->creator.font->blend_data; - float total; - int bogusFont; - - str = XmTextFieldGetString(fc->creator.display_text_child); - - for (i = 0; i < bd->num_axes; i++) { - XtVaGetValues(fc->creator.axis_scale_child[i], XmNvalue, &val, NULL); - p[i] = _FSBNormalize(val, bd, i); - } - - XtVaGetValues(fc->creator.preview_child, XtNheight, &hgt, NULL); - context = fc->creator.fsb->fsb.context; - if (fc->creator.gstate == 0) { - XDPSSetContextDrawable(context, - XtWindow(fc->creator.preview_child), hgt); - XDPSCaptureContextGState(context, &fc->creator.gstate); - } else XDPSSetContextGState(context, fc->creator.gstate); - - /* Force b[0] to be 1 - total(b[1..n]) to avoid round-off error */ - - total = 0.0; - for (i = 1; i < bd->num_designs; i++) { - b[i] = 1.0; - for (j = 0; j < bd->num_axes; j++) { - if (bd->design_positions[i*bd->num_axes + j] == 1.0) b[i] *= p[j]; - else b[i] *= 1.0 - p[j]; - } - total += b[i]; - } - b[0] = 1.0 - total; - - XtVaGetValues(fc->creator.size_text_field_child, - XmNvalue, &chSize, NULL); - - if (chSize == NULL || *chSize == '\0') return; - size = atof(chSize); - - _DPSFSetUpMM(context, fc->creator.font->font_name, - str, size, hgt, b, bd->num_designs, &bogusFont); - DPSWaitContext(context); - XClearWindow(XtDisplay(fc->creator.preview_child), - XtWindow(fc->creator.preview_child)); - _DPSFDrawMM(context, str, hgt); -} - -/* ARGSUSED */ - -static void DrawMMCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - DrawMM(fc); -} - -/* ARGSUSED */ - -static void ExposeCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - XmDrawingAreaCallbackStruct *dac = - (XmDrawingAreaCallbackStruct *) callData; - - if (!fc->creator.preview_fixed) { - XSetWindowAttributes att; - att.bit_gravity = ForgetGravity; - XChangeWindowAttributes(XtDisplay(fc), - XtWindow(fc->creator.preview_child), - CWBitGravity, &att); - fc->creator.preview_fixed = TRUE; - } - - if (dac != NULL && dac->event->type == Expose && - dac->event->xexpose.count != 0) return; - - DrawMM(fc); -} - -static void SetUpBlendList(FontCreatorWidget fc) -{ - XmString *CSblends; - int count, i; - BlendRec *b; - char buf[256]; - FontRec *f = fc->creator.font; - - sprintf(buf, "%s Blends", f->face_name); - XtVaSetValues(fc->creator.blend_label_child, - XtVaTypedArg, XmNlabelString, XtRString, - buf, strlen(buf)+1, - NULL); - - if (f->blend_count == 0) { - count = 1; - CSblends = &CSempty; - - } else { - count = f->blend_count; - CSblends = (XmString *) XtCalloc(count, sizeof(XmString)); - - for (i = 0, b = f->blend_data->blends; i < f->blend_count; - i++, b = b->next) { - CSblends[i] = b->CS_blend_name; - } - } - - XtVaSetValues(fc->creator.blend_scrolled_list_child, XmNitemCount, count, - XmNitems, CSblends, NULL); - - if (f->blend_count != 0) XtFree((XtPointer) CSblends); -} - -static void CalcCarryValues(FontCreatorWidget fc, FontRec *oldf, int *carry_values) -{ - FontRec *f = fc->creator.font; - BlendDataRec *bd = f->blend_data, *oldbd = oldf->blend_data; - int i, j; - - for (i = 0; i < bd->num_axes; i++) { - carry_values[i] = -1; - for (j = 0; j < oldbd->num_axes; j++) { - if (bd->name[i] == oldbd->name[j]) { - XmScaleGetValue(fc->creator.axis_scale_child[j], - carry_values+i); - break; - } - } - } -} - -static void SetUpAxisLabels(FontCreatorWidget fc, FontRec *oldf, int *carry_values) -{ - int i; - char buf[20]; - XmString cs; - BlendDataRec *bd = fc->creator.font->blend_data, *oldbd = 0; - char *value; - - if (oldf != NULL) oldbd = oldf->blend_data; - - for (i = 0; i < bd->num_axes; i++) { - if (oldf == NULL || i >= oldbd->num_axes || - oldbd->name[i] != bd->name[i]) { - cs = UnsharedCS(bd->name[i]); - XtVaSetValues(fc->creator.axis_label_child[i], - XmNlabelString, cs, NULL); - XmStringFree(cs); - } - if (oldf == NULL || i >= oldbd->num_axes || - oldbd->min[i] != bd->min[i]) { - sprintf(buf, "%d", bd->min[i]); - cs = UnsharedCS(buf); - XtVaSetValues(fc->creator.axis_min_label_child[i], - XmNlabelString, cs, NULL); - XmStringFree(cs); - } - if (oldf == NULL || i >= oldbd->num_axes || - oldbd->max[i] != bd->max[i]) { - sprintf(buf, "%d", bd->max[i]); - cs = UnsharedCS(buf); - XtVaSetValues(fc->creator.axis_max_label_child[i], - XmNlabelString, cs, NULL); - XmStringFree(cs); - } - if (oldf == NULL || carry_values[i] == -1) { - if (bd->name[i] == opticalSize && - XmToggleButtonGadgetGetState( - fc->creator.follow_size_toggle_child)) { - XtVaGetValues(fc->creator.fsb->fsb.size_text_field_child, - XmNvalue, &value, NULL); - if (value == NULL || *value == '\0') { - carry_values[i] = bd->min[i]; - } else carry_values[i] = atof(value) + 0.5; - } else carry_values[i] = bd->min[i]; - } - if (carry_values[i] < bd->min[i]) carry_values[i] = bd->min[i]; - else if (carry_values[i] > bd->max[i]) carry_values[i] = bd->max[i]; - XtVaSetValues(fc->creator.axis_scale_child[i], - XmNminimum, bd->min[i], XmNmaximum, bd->max[i], - XmNvalue, carry_values[i], NULL); - } -} - -static void ManageAxes(FontCreatorWidget fc) -{ - Widget w[5*MAX_AXES]; - int i, j; - int diff; - - diff = fc->creator.managed_axes - fc->creator.font->blend_data->num_axes; - - if (diff == 0) return; - - if (diff < 0) { - for (i = fc->creator.managed_axes, j=0; j < -diff * 5; i++, j+=5) { - w[j] = fc->creator.axis_label_child[i]; - w[j+1] = fc->creator.axis_scale_child[i]; - w[j+2] = fc->creator.axis_value_text_child[i]; - w[j+3] = fc->creator.axis_min_label_child[i]; - w[j+4] = fc->creator.axis_max_label_child[i]; - } - XtManageChildren(w, -diff * 5); - } else { - for (i = fc->creator.font->blend_data->num_axes, j=0; j < diff * 5; - i++, j+=5) { - w[j] = fc->creator.axis_label_child[i]; - w[j+1] = fc->creator.axis_scale_child[i]; - w[j+2] = fc->creator.axis_value_text_child[i]; - w[j+3] = fc->creator.axis_min_label_child[i]; - w[j+4] = fc->creator.axis_max_label_child[i]; - } - XtUnmanageChildren(w, diff * 5); - } - fc->creator.managed_axes = fc->creator.font->blend_data->num_axes; -} - -static void SetScaleValues(FontCreatorWidget fc) -{ - int val; - char buf[32]; - int i, axes; - - axes = fc->creator.font->blend_data->num_axes; - - for (i = 0; i < axes; i++) { - XmScaleGetValue(fc->creator.axis_scale_child[i], &val); - sprintf(buf, "%d", val); - XmTextFieldSetString(fc->creator.axis_value_text_child[i], buf); - } -} - -static void SetUpAxes(FontCreatorWidget fc, FontRec *oldf) -{ - int carry_values[MAX_AXES]; - - if (oldf != NULL) CalcCarryValues(fc, oldf, carry_values); - SetUpAxisLabels(fc, oldf, carry_values); - SetScaleValues(fc); - ManageAxes(fc); -} - -/* ARGSUSED */ - -static void FaceSelect( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - XmListCallbackStruct *listCB = (XmListCallbackStruct *) callData; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - FontRec *f, *oldf = fc->creator.font; - int i; - - i = 0; - f = fc->creator.family->fonts; - while (f != NULL) { - if (f->blend_data != NULL) i++; - if (i == listCB->item_position) break; - f = f->next; - } - - if (f == NULL) return; - if (!_FSBDownloadFontIfNecessary(f, fc->creator.fsb)) { - _FSBFlushFont(fc->creator.fsb, f); - return; - } - if (fc->creator.font != NULL) fc->creator.font->in_font_creator = False; - fc->creator.font = f; - f->in_font_creator = True; - SetUpBlendList(fc); - SetUpAxes(fc, oldf); - - DrawMM(fc); -} - -static void HandleSelectedBlend(FontCreatorWidget fc, int n) -{ - BlendDataRec *bd = fc->creator.font->blend_data; - BlendRec *b; - int i; - int value; - char buf[32]; - - b = bd->blends; - /* List uses 1-based addressing!! */ - for (i = 1; i < n; i++) b = b->next; - - XmTextFieldSetString(fc->creator.name_text_child, b->blend_name); - - for (i = 0; i < bd->num_axes; i++) { - value = _FSBUnnormalize(b->data[i], bd, i); - XmScaleSetValue(fc->creator.axis_scale_child[i], value); - sprintf(buf, "%d", value); - XmTextFieldSetString(fc->creator.axis_value_text_child[i], buf); - } -} - -/* ARGSUSED */ - -static void BlendSelect( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - XmListCallbackStruct *listCB = (XmListCallbackStruct *) callData; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - if (fc->creator.font->blend_count == 0) return; - - HandleSelectedBlend(fc, listCB->item_position); - - DrawMM(fc); -} - -/* ARGSUSED */ - -static void SetValue( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - XmScaleCallbackStruct *scaleData = (XmScaleCallbackStruct *) callData; - Widget text = (Widget) clientData; - char buf[32]; - - sprintf(buf, "%d", scaleData->value); - XmTextFieldSetString(text, buf); -} - -/* ARGSUSED */ - -static void SetScale( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - Widget scale = (Widget) clientData; - char *value; - int val, min, max; - char buf[32]; - - value = XmTextFieldGetString(widget); - val = atoi(value); - XtVaGetValues(scale, XmNminimum, &min, XmNmaximum, &max, NULL); - if (val < min) val = min; - if (val > max) val = max; - XmScaleSetValue(scale, val); - - /* Handle range and illegal characters this way...*/ - - sprintf(buf, "%d", val); - XmTextFieldSetString(widget, buf); -} - -/* ARGSUSED */ - -static void DeleteMessage( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - XtDestroyWidget(widget); -} - -static void PutUpDialog(FontCreatorWidget fc, char *name) -{ - Widget message, w; - - message = XmCreateInformationDialog((Widget) fc, name, (ArgList) NULL, 0); - w = XmMessageBoxGetChild(message, XmDIALOG_CANCEL_BUTTON); - XtUnmanageChild(w); - w = XmMessageBoxGetChild(message, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(w); - XtAddCallback(message, XmNokCallback, DeleteMessage, (XtPointer) NULL); - - XtManageChild(message); -} - -static void NoName(FontCreatorWidget fc) -{ - PutUpDialog(fc, "noNameMessage"); -} - -static void UsedName(FontCreatorWidget fc) -{ - PutUpDialog(fc, "usedNameMessage"); -} - -static void SomeUsedName(FontCreatorWidget fc) -{ - PutUpDialog(fc, "someUsedNameMessage"); -} - -static void NoSuchName(FontCreatorWidget fc) -{ - PutUpDialog(fc, "noSuchNameMessage"); -} - -static Boolean DoAdd(FontCreatorWidget fc, FontRec *f, String name) -{ - char *spaceName; - BlendRec *b, *newb, **last; - BlendDataRec *bd = f->blend_data; - int val[MAX_AXES], i; - - for (b = bd->blends; b != NULL; b = b->next) { - if (strcmp(name, b->blend_name) == 0) return True; - } - - newb = (BlendRec *) XtMalloc(sizeof(BlendRec)); - newb->blend_name = Canonical(name); - newb->CS_blend_name = CS(newb->blend_name, (Widget) fc); - - spaceName = (char *) XtMalloc(strlen(name) + 4); - spaceName[0] = spaceName[1] = spaceName[2] = ' '; - strcpy(spaceName+3, name); - newb->CS_space_blend_name = CS(spaceName, (Widget) fc); - XtFree((XtPointer) spaceName); - - for (i = 0; i < bd->num_axes; i++) { - XtVaGetValues(fc->creator.axis_scale_child[i], - XmNvalue, val+i, NULL); - newb->data[i] = _FSBNormalize(val[i], bd, i); - } - for (/**/; i < MAX_AXES; i++) newb->data[i] = 0.0; - - newb->font_name = _FSBGenFontName(f->font_name, val, bd); - - f->blend_count++; - fc->creator.family->blend_count++; - - last = &bd->blends; - for (b = bd->blends; b != NULL; b = b->next) { - if (strcmp(name, b->blend_name) < 0) break; - last = &b->next; - } - newb->next = b; - *last = newb; - - SetUpBlendList(fc); - _FSBSetUpFaceList(fc->creator.fsb, False); - return False; -} - -/* ARGSUSED */ - -static void AddCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - char *value; - FontRec *f; - Boolean failures = False; - BlendDataRec *bd = fc->creator.font->blend_data; - int i; - - value = XmTextFieldGetString(fc->creator.name_text_child); - - if (value == NULL || *value == '\0') { - NoName(fc); - return; - } - - if (XmToggleButtonGadgetGetState(fc->creator.do_all_toggle_child)) { - for (f = fc->creator.family->fonts; f != NULL; f = f->next) { - if (f->blend_data != NULL && - f->blend_data->num_axes == bd->num_axes) { - for (i = 0; i < bd->num_axes; i++) { - if (f->blend_data->name[i] != bd->name[i]) break; - } - if (i == bd->num_axes) failures |= DoAdd(fc, f, value); - } - } - if (failures) SomeUsedName(fc); - } else if (DoAdd(fc, fc->creator.font, value)) UsedName(fc); -} - -static Boolean DoReplace(FontCreatorWidget fc, FontRec *f, String name) -{ - BlendDataRec *bd = f->blend_data; - BlendRec *b; - int val[MAX_AXES], i; - - name = Canonical(name); - for (b = bd->blends; b != NULL; b = b->next) { - if (name == b->blend_name) { - for (i = 0; i < bd->num_axes; i++) { - XtVaGetValues(fc->creator.axis_scale_child[i], - XmNvalue, val+i, NULL); - b->data[i] = _FSBNormalize(val[i], bd, i); - } - b->font_name = _FSBGenFontName(f->font_name, val, bd); - if (fc->creator.fsb->fsb.currently_selected_blend == b) { - _FSBSetUpFaceList(fc->creator.fsb, True); - } - return False; - } - } - return True; -} - -/* ARGSUSED */ - -static void ReplaceCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - char *value; - FontRec *f; - Boolean failures = True; - BlendDataRec *bd = fc->creator.font->blend_data; - int i; - - value = XmTextFieldGetString(fc->creator.name_text_child); - - if (value == NULL || *value == '\0') { - NoName(fc); - return; - } - - if (XmToggleButtonGadgetGetState(fc->creator.do_all_toggle_child)) { - for (f = fc->creator.family->fonts; f != NULL; f = f->next) { - if (f->blend_data != NULL && - f->blend_data->num_axes == bd->num_axes) { - for (i = 0; i < bd->num_axes; i++) { - if (f->blend_data->name[i] != bd->name[i]) break; - } - if (i == bd->num_axes) failures &= DoReplace(fc, f, value); - } - } - if (failures) NoSuchName(fc); - } else if (DoReplace(fc, fc->creator.font, value)) NoSuchName(fc); -} - -static Boolean DoDelete(FontCreatorWidget fc, FontRec *f, String name) -{ - BlendDataRec *bd = f->blend_data; - BlendRec *b, *oldb; - Boolean current = FALSE; - - name = Canonical(name); - for (b = bd->blends, oldb = NULL; b != NULL; oldb = b, b = b->next) { - if (name == b->blend_name) { - if (oldb == NULL) bd->blends = b->next; - else oldb->next = b->next; - if (fc->creator.fsb->fsb.currently_selected_blend == b) { - fc->creator.fsb->fsb.currently_selected_blend = NULL; - current = TRUE; - } - XtFree((XtPointer) b); - f->blend_count--; - fc->creator.family->blend_count--; - SetUpBlendList(fc); - _FSBSetUpFaceList(fc->creator.fsb, current); - return False; - } - } - return True; -} - -/* ARGSUSED */ - -static void DeleteCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - char *value; - FontRec *f; - Boolean failures = True; - - value = XmTextFieldGetString(fc->creator.name_text_child); - - if (value == NULL || *value == '\0') { - NoName(fc); - return; - } - - if (XmToggleButtonGadgetGetState(fc->creator.do_all_toggle_child)) { - for (f = fc->creator.family->fonts; f != NULL; f = f->next) { - if (f->blend_data != NULL) { - failures &= DoDelete(fc, f, value); - } - } - if (failures) NoSuchName(fc); - } else if (DoDelete(fc, fc->creator.font, value)) NoSuchName(fc); -} - -/* ARGSUSED */ - -static void UnmanageOptions( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - XtUnmanageChild(fc->creator.option_box); -} - -/* ARGSUSED */ - -static void ShowOptions( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - XtManageChild(fc->creator.option_box); -} - -/* ARGSUSED */ - -static void GenerateCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - BlendDataRec *bd = fc->creator.font->blend_data; - int i, val[MAX_AXES]; - char nameBuf[256]; - char *ch; - - for (i = 0; i < bd->num_axes; i++) { - XtVaGetValues(fc->creator.axis_scale_child[i], - XmNvalue, val+i, NULL); - } - - ch = nameBuf; - - for (i = 0; i < bd->num_axes - 1; i++) { - sprintf(ch, "%d ", val[i]); - ch = ch + strlen(ch); - } - - sprintf(ch, "%d", val[bd->num_axes - 1]); - - XmTextFieldSetString(fc->creator.name_text_child, nameBuf); -} - -/* ARGSUSED */ - -static void DismissCallback( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - if (XtIsShell(XtParent(fc))) XtPopdown(XtParent(fc)); - XtCallCallbackList(widget, fc->creator.dismiss_callback, (XtPointer) NULL); -} - -/* ARGSUSED */ - -static void SizeChanged( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - String value; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - int size; - FontRec *f = fc->creator.font; - BlendDataRec *bd; - int i; - char buf[32]; - - if (f == NULL || f->blend_data == NULL) return; - - /* See if we have an optical size scale */ - bd = f->blend_data; - - for (i = 0; i < bd->num_axes; i++) { - if (bd->name[i] == opticalSize) break; - } - if (i == bd->num_axes) return; - - if (!XmToggleButtonGadgetGetState(fc->creator.follow_size_toggle_child)) { - return; - } - - XtVaGetValues(widget, XmNvalue, &value, NULL); - - if (value == NULL || *value == '\0') return; - size = atof(value) + 0.5; - sprintf(buf, "%d", size); - XmTextFieldSetString(fc->creator.axis_value_text_child[i], buf); - - SetScale(fc->creator.axis_value_text_child[i], - (XtPointer) fc->creator.axis_scale_child[i], (XtPointer) NULL); - DrawMM(fc); -} - -/* There's a problem; sometimes the change has already been made in the field, - and sometimes it hasn't. The times when it has seem to correspond to - making changes with the size option menu, so we use this disgusting - global flag to notice when this happens. We also use this to tell whether - or not the change is coming from internal to the widget or as a result - of user interaction. */ - -static Boolean changingSize = False; - -/* ARGSUSED */ - -static void SizeSelect( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - String value; - Widget option; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - char *ch; - - XtVaGetValues(widget, XmNvalue, &value, NULL); - - if (value == NULL) option = fc->creator.other_size; - else { - for (ch = value; *ch != '\0'; ch++) if (*ch == '.') *ch = '-'; - - option = XtNameToWidget(fc->creator.size_menu, value); - if (option == NULL) option = fc->creator.other_size; - } - - XtVaSetValues(fc->creator.size_option_menu_child, - XmNmenuHistory, option, NULL); -} - -/* ARGSUSED */ - -static void TextVerify( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - XmTextVerifyPtr v = (XmTextVerifyPtr) callData; - char ch, *cp; - int decimalPoints = 0; - int i; - - if (changingSize) return; /* We know what we're doing; allow it */ - - /* Should probably look at format field, but seems to contain garbage */ - - if (v->text->length == 0) return; - - for (i = 0; i < v->text->length; i++) { - ch = v->text->ptr[i]; - if (ch == '.') decimalPoints++; - else if (!isdigit(ch)) { - v->doit = False; - return; - } - } - - if (decimalPoints > 1) { - v->doit = False; - return; - } - - XtVaGetValues(widget, XmNvalue, &cp, NULL); - - for (/**/; *cp != '\0'; cp++) { - if (*cp == '.') decimalPoints++; - } - - if (decimalPoints > 1) v->doit = False; -} - -/* ARGSUSED */ - -static void SetSize( - Widget widget, - XtPointer clientData, XtPointer callData) -{ - char buf[20]; - char *ch; - FontCreatorWidget fc = (FontCreatorWidget) clientData; - - strcpy(buf, XtName(widget)); - for (ch = buf; *ch != '\0'; ch++) if (*ch == '-') *ch++ = '.'; - - changingSize = True; - XtVaSetValues(fc->creator.size_text_field_child, XmNvalue, buf, NULL); - changingSize = False; -} - -/* This makes sure the selected item is visible */ - -static void ListSelectPos(Widget w, int pos, Boolean notify) -{ - int topPos, items, visible; - - XmListSelectPos(w, pos, notify); - - XtVaGetValues(w, XmNtopItemPosition, &topPos, - XmNvisibleItemCount, &visible, - XmNitemCount, &items, NULL); - - if (pos >= topPos && pos < topPos + visible) return; - topPos = pos - (visible-1)/2; - if (topPos + visible > items) topPos = items - visible + 1; - if (topPos < 1) topPos = 1; - - XtVaSetValues(w, XmNtopItemPosition, topPos, NULL); -} - -static void CreateSizeMenu( - FontCreatorWidget fc, - Boolean destroyOldChildren) -{ - Arg args[20]; - int i, j; - Widget *sizes; - char buf[20]; - Widget *children; - Cardinal num_children; - XmString csName; - char *ch; - - if (destroyOldChildren) { - XtVaGetValues(fc->creator.size_menu, XtNchildren, &children, - XtNnumChildren, &num_children, NULL); - - /* Don't destroy first child ("other") */ - for (j = 1; (Cardinal)j < num_children; j++) XtDestroyWidget(children[j]); - - sizes = (Widget *) XtMalloc((fc->creator.size_count+1) * - sizeof(Widget)); - sizes[0] = children[0]; - } else { - sizes = (Widget *) XtMalloc((fc->creator.size_count+1) * - sizeof(Widget)); - i = 0; - fc->creator.other_size = sizes[0] = - XtCreateManagedWidget("other", xmPushButtonGadgetClass, - fc->creator.size_menu, args, i); - } - - for (j = 0; j < fc->creator.size_count; j++) { - (void) sprintf(buf, "%g", fc->creator.sizes[j]); - csName = UnsharedCS(buf); - for (ch = buf; *ch != '\0'; ch++) if (*ch == '.') *ch = '-'; - i = 0; - XtSetArg(args[i], XmNlabelString, csName); i++; - sizes[j+1] = - XmCreatePushButtonGadget(fc->creator.size_menu, buf, args, i); - XmStringFree(csName); - XtAddCallback(sizes[j+1], XmNactivateCallback, - SetSize, (XtPointer) fc); - XtAddCallback(sizes[j+1], XmNactivateCallback, - DrawMMCallback, (XtPointer) fc); - } - XtManageChildren(sizes, j+1); - XtFree((char *) sizes); -} - -static void CreateChildren(FontCreatorWidget fc) -{ - Arg args[20]; - int i, j; - Widget form, prev, w, label, sep, button; - char buf[20]; - - i = 0; - fc->creator.pane_child = - XtCreateManagedWidget("pane", xmPanedWindowWidgetClass, - (Widget) fc, args, i); - - i = 0; - fc->creator.preview_child = - XtCreateManagedWidget("preview", xmDrawingAreaWidgetClass, - fc->creator.pane_child, args, i); - XtAddCallback(fc->creator.preview_child, XmNexposeCallback, - ExposeCallback, (XtPointer) fc); - XtAddCallback(fc->creator.preview_child, XmNresizeCallback, - ResizePreview, (XtPointer) fc); - - i = 0; - form = XtCreateManagedWidget("panel", xmFormWidgetClass, - fc->creator.pane_child, args, i); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - button = XtCreateManagedWidget("deleteButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(button, XmNactivateCallback, DeleteCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNrightWidget, button); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - button = XtCreateManagedWidget("replaceButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(button, XmNactivateCallback, - ReplaceCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNrightWidget, button); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - button = XtCreateManagedWidget("addButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(button, XmNactivateCallback, AddCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNrightWidget, button); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - fc->creator.generate_button_child = - XtCreateManagedWidget("generateButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(fc->creator.generate_button_child, XmNactivateCallback, - GenerateCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNrightWidget, fc->creator.generate_button_child);i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - button = XtCreateManagedWidget("optionsButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(button, XmNactivateCallback, ShowOptions, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_FORM); i++; - button = XtCreateManagedWidget("dismissButton", xmPushButtonGadgetClass, - form, args, i); - XtAddCallback(button, XmNactivateCallback, - DismissCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, button); i++; - sep = XtCreateManagedWidget("separator", xmSeparatorGadgetClass, - form, args, i); - - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, sep); i++; - label = XtCreateManagedWidget("sizeLabel", xmLabelGadgetClass, - form, args, i); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, label); i++; - fc->creator.size_text_field_child = - XtCreateManagedWidget("sizeTextField", xmTextFieldWidgetClass, - form, args, i); - XtAddCallback(fc->creator.size_text_field_child, XmNvalueChangedCallback, - SizeSelect, (XtPointer) fc); - XtAddCallback(fc->creator.size_text_field_child, XmNmodifyVerifyCallback, - TextVerify, (XtPointer) fc); - XtAddCallback(fc->creator.size_text_field_child, XmNactivateCallback, - DrawMMCallback, (XtPointer) fc); - - i = 0; - fc->creator.size_menu = XmCreatePulldownMenu(form, "sizeMenu", args, i); - - CreateSizeMenu(fc, FALSE); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNleftWidget, fc->creator.size_text_field_child);i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, label); i++; - XtSetArg(args[i], XmNsubMenuId, fc->creator.size_menu); i++; - fc->creator.size_option_menu_child = - XmCreateOptionMenu(form, "sizeOptionMenu", args, i); - XtManageChild(fc->creator.size_option_menu_child); - - SizeSelect(fc->creator.size_text_field_child, (XtPointer) fc, - (XtPointer) NULL); - - i = 0; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, sep); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - fc->creator.name_text_child = - XtCreateManagedWidget("nameText", xmTextFieldWidgetClass, - form, args, i); - XtAddCallback(fc->creator.name_text_child, XmNactivateCallback, - AddCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, fc->creator.name_text_child); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - label = XtCreateManagedWidget("nameLabel", xmLabelGadgetClass, - form, args, i); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - label = XtCreateManagedWidget("faceLabel",xmLabelGadgetClass, - form, args, i); - - i = 0; - XtSetArg(args[i], XmNitemCount, 1); i++; - XtSetArg(args[i], XmNitems, &CSempty); i++; - fc->creator.face_scrolled_list_child = - XmCreateScrolledList(form, "faceList", args, i); - XtAddCallback(fc->creator.face_scrolled_list_child, - XmNbrowseSelectionCallback, FaceSelect, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, label); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_POSITION); i++; - XtSetValues(XtParent(fc->creator.face_scrolled_list_child), args, i); - XtManageChild(fc->creator.face_scrolled_list_child); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - fc->creator.blend_label_child = - XtCreateManagedWidget("blendLabel",xmLabelGadgetClass, - form, args, i); - - i = 0; - XtSetArg(args[i], XmNitemCount, 1); i++; - XtSetArg(args[i], XmNitems, &CSempty); i++; - fc->creator.blend_scrolled_list_child = - XmCreateScrolledList(form, "blendList", args, i); - XtAddCallback(fc->creator.blend_scrolled_list_child, - XmNbrowseSelectionCallback, BlendSelect, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, fc->creator.blend_label_child); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_FORM); i++; - XtSetArg(args[i], XmNbottomAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNbottomWidget, fc->creator.name_text_child); i++; - XtSetValues(XtParent(fc->creator.blend_scrolled_list_child), args, i); - XtManageChild(fc->creator.blend_scrolled_list_child); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, - XtParent(fc->creator.face_scrolled_list_child)); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - fc->creator.display_text_child = - XtCreateManagedWidget("displayText", xmTextFieldWidgetClass, - form, args, i); - XtAddCallback(fc->creator.display_text_child, XmNactivateCallback, - DrawMMCallback, (XtPointer) fc); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, fc->creator.display_text_child); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - label = XtCreateManagedWidget("displayTextLabel", xmLabelGadgetClass, - form, args, i); - - prev = fc->creator.display_text_child; - - for (j = 0; j < 4; j++) { - i = 0; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, prev); i++; - sprintf(buf, "axisValue%d", j+1); - fc->creator.axis_value_text_child[j] = - XtCreateWidget(buf, xmTextFieldWidgetClass, form, args, i); - - i = 0; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_POSITION); i++; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, - fc->creator.axis_value_text_child[j]); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNrightWidget, - fc->creator.axis_value_text_child[j]); i++; - sprintf(buf, "axisScale%d", j+1); - fc->creator.axis_scale_child[j] = - XtCreateWidget(buf, xmScaleWidgetClass, form, args, i); - XtAddCallback(fc->creator.axis_scale_child[j], - XmNvalueChangedCallback, DrawMMCallback, (XtPointer) fc); - XtAddCallback(fc->creator.axis_scale_child[j], - XmNdragCallback, DrawMMCallback, (XtPointer) fc); - XtAddCallback(fc->creator.axis_scale_child[j], - XmNvalueChangedCallback, SetValue, - (XtPointer) fc->creator.axis_value_text_child[j]); - XtAddCallback(fc->creator.axis_scale_child[j], - XmNdragCallback, SetValue, - (XtPointer) fc->creator.axis_value_text_child[j]); - XtAddCallback(fc->creator.axis_value_text_child[j], - XmNactivateCallback, SetScale, - (XtPointer) fc->creator.axis_scale_child[j]); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, - fc->creator.axis_scale_child[j]); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET);i++; - XtSetArg(args[i], XmNrightWidget, - fc->creator.axis_scale_child[j]); i++; - sprintf(buf, "axisMax%d", j+1); - fc->creator.axis_max_label_child[j] = - XtCreateWidget(buf, xmLabelGadgetClass, form, args, i); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, - fc->creator.axis_scale_child[j]); i++; - XtSetArg(args[i], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNleftWidget, - fc->creator.axis_scale_child[j]); i++; - sprintf(buf, "axisMin%d", j+1); - fc->creator.axis_min_label_child[j] = - XtCreateWidget(buf, xmLabelGadgetClass, form, args, i); - - i = 0; - XtSetArg(args[i], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); i++; - XtSetArg(args[i], XmNtopWidget, - fc->creator.axis_value_text_child[j]); i++; - XtSetArg(args[i], XmNrightAttachment, XmATTACH_POSITION); i++; - sprintf(buf, "axisLabel%d", j+1); - fc->creator.axis_label_child[j] = - XtCreateWidget(buf, xmLabelGadgetClass, form, args, i); - - prev = fc->creator.axis_value_text_child[j]; - } - - /* Create the options box so we have the toggles */ - - fc->creator.option_box = XmCreateFormDialog((Widget) fc, "optionBox", - (Arg *) NULL, 0); - w = XtCreateManagedWidget("filterBox", xmRowColumnWidgetClass, - fc->creator.option_box, (Arg *) NULL, 0); - fc->creator.do_all_toggle_child = - XtCreateManagedWidget("doAllToggle", xmToggleButtonGadgetClass, - w, (Arg *) NULL, 0); - fc->creator.follow_size_toggle_child = - XtCreateManagedWidget("followSizeToggle", - xmToggleButtonGadgetClass, - w, (Arg *) NULL, 0); - button = XtCreateManagedWidget("dismissOptionButton", - xmPushButtonGadgetClass, - w, (Arg *) NULL, 0); - XtAddCallback(button, XmNactivateCallback, - UnmanageOptions, (XtPointer) fc); -} - -/* ARGSUSED */ - -static void Initialize( - Widget request, Widget new, - ArgList args, - Cardinal *num_args) -{ - FontCreatorWidget fc = (FontCreatorWidget) new; - - /* Must have a fsb */ - - if (fc->creator.fsb == NULL) { - XtAppErrorMsg(XtWidgetToApplicationContext(new), - "initializeFontCreator", "noFontSelectionBox", - "FontSelectionBoxError", - "No font selection box given to font creator", - (String *) NULL, (Cardinal *) NULL); - } - - /* Verify size list */ - - if (fc->creator.size_count > 0 && fc->creator.sizes == NULL) { - XtAppWarningMsg(XtWidgetToApplicationContext(new), - "initializeFontCreator", "sizeMismatch", - "FontSelectionBoxError", - "Size count specified but no sizes present", - (String *) NULL, (Cardinal *) NULL); - fc->creator.size_count = 0; - } - - if (fc->creator.size_count < 0) { - XtAppWarningMsg(XtWidgetToApplicationContext(new), - "initializeFontCreator", "negativeSize", - "FontSelectionBoxError", - "Size count should not be negative", - (String *) NULL, (Cardinal *) NULL); - fc->creator.size_count = 0; - } - - fc->creator.gstate = 0; - fc->creator.family = NULL; - fc->creator.font = NULL; - fc->creator.managed_axes = 0; - fc->creator.preview_fixed = False; - fc->creator.option_box = NULL; - - CreateChildren(fc); - XtAddCallback(fc->creator.fsb->fsb.size_text_field_child, - XmNvalueChangedCallback, SizeChanged, (XtPointer) fc); -} - -static void SelectBlend(FontCreatorWidget fc, BlendRec *cur_b) -{ - int i, cur = 0; - BlendRec *b; - int *selectList, selectCount; - - if (cur_b == NULL) { - if (!XmListGetSelectedPos(fc->creator.blend_scrolled_list_child, - &selectList, &selectCount)) return; - if (selectCount == 0 || *selectList < 1) return; - cur = *selectList; - XtFree((XtPointer) selectList); - } else { - for (i = 0, b = fc->creator.font->blend_data->blends; - i < fc->creator.font->blend_count; i++, b = b->next) { - if (b == cur_b) { - cur = i+1; - break; - } - } - } - ListSelectPos(fc->creator.blend_scrolled_list_child, cur, FALSE); - HandleSelectedBlend(fc, cur); -} - -void _FSBSetCreatorFamily(Widget w, FontFamilyRec *ff) -{ - FontCreatorWidget fc = (FontCreatorWidget) w; - int i, count = 0, cur = 1; - FontRec *newf = NULL, *f, *oldf = fc->creator.font; - XmString *CSfaces; - - if (ff != fc->creator.family) { - fc->creator.family = ff; - - CSfaces = (XmString *) XtCalloc(ff->font_count, sizeof(XmString)); - - for (i = 0, f = ff->fonts; i < ff->font_count; i++, f = f->next) { - if (f->blend_data == NULL) continue; - - if (newf == NULL) newf = f; - CSfaces[count] = f->CS_face_name; - count++; - if (f == fc->creator.fsb->fsb.currently_selected_face) { - cur = count; - newf = f; - } - } - - XtVaSetValues(fc->creator.face_scrolled_list_child, - XmNitemCount, count, XmNitems, CSfaces, NULL); - - XtFree((XtPointer) CSfaces); - - } else { - for (i = 0, f = ff->fonts; i < ff->font_count; i++, f = f->next) { - if (f->blend_data == NULL) continue; - count++; - if (newf == NULL) newf = f; - if (f == fc->creator.fsb->fsb.currently_selected_face) { - cur = count; - newf = f; - break; - } - } - } - - if (fc->creator.font != NULL) fc->creator.font->in_font_creator = False; - fc->creator.font = newf; - newf->in_font_creator = True; - ListSelectPos(fc->creator.face_scrolled_list_child, cur, FALSE); - SetUpBlendList(fc); - SetUpAxes(fc, oldf); - if (fc->creator.fsb->fsb.currently_selected_blend != 0) { - SelectBlend(fc, fc->creator.fsb->fsb.currently_selected_blend); - } else { - SelectBlend(fc, NULL); - } - SetScaleValues(fc); - XmTextFieldSetString(fc->creator.display_text_child, ff->family_name); - DrawMM(fc); -} - -static void Destroy(Widget widget) -{ - FontCreatorWidget fc = (FontCreatorWidget) widget; - - if (fc->creator.gstate != 0) { - XDPSFreeContextGState(fc->creator.fsb->fsb.context, - fc->creator.gstate); - } -} - -static void Resize(Widget widget) -{ - FontCreatorWidget fc = (FontCreatorWidget) widget; - - XtResizeWidget(fc->creator.pane_child, fc->core.width, fc->core.height, 0); -} - -/* ARGSUSED */ - -static Boolean SetValues( - Widget old, Widget req, Widget new, - ArgList args, - Cardinal *num_args) -{ - FontCreatorWidget oldfc = (FontCreatorWidget) old; - FontCreatorWidget newfc = (FontCreatorWidget) new; - -#define NE(field) newfc->creator.field != oldfc->creator.field - - if (NE(fsb)) newfc->creator.fsb = oldfc->creator.fsb; - - if (newfc->creator.size_count > 0 && newfc->creator.sizes == NULL) { - XtAppWarningMsg(XtWidgetToApplicationContext(new), - "setValuesFontCreator", "sizeMismatch", - "FontSelectionBoxError", - "Size count specified but no sizes present", - (String *) NULL, (Cardinal *) NULL); - newfc->creator.size_count = 0; - } - - if (newfc->creator.size_count < 0) { - XtAppWarningMsg(XtWidgetToApplicationContext(new), - "setValuesFontCreator", "negativeSize", - "FontSelectionBoxError", - "Size count should not be negative", - (String *) NULL, (Cardinal *) NULL); - newfc->creator.size_count = 0; - } - - if (NE(sizes)) CreateSizeMenu(newfc, TRUE); -#undef NE - return False; -} - -/* ARGSUSED */ - -static XtGeometryResult GeometryManager( - Widget w, - XtWidgetGeometry *desired, XtWidgetGeometry *allowed) -{ -#define WANTS(flag) (desired->request_mode & flag) - - if (WANTS(XtCWQueryOnly)) return XtGeometryYes; - - if (WANTS(CWWidth)) w->core.width = desired->width; - if (WANTS(CWHeight)) w->core.height = desired->height; - if (WANTS(CWX)) w->core.x = desired->x; - if (WANTS(CWY)) w->core.y = desired->y; - if (WANTS(CWBorderWidth)) { - w->core.border_width = desired->border_width; - } - - return XtGeometryYes; -#undef WANTS -} - -static void ChangeManaged(Widget w) -{ - FontCreatorWidget fc = (FontCreatorWidget) w; - - w->core.width = fc->composite.children[0]->core.width; - w->core.height = fc->composite.children[0]->core.height; -} |