|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#define dbg() fprintf(stderr, "file: %s - XtWidgetToApplicationContext() on line: %d\n", __FILE__, __LINE__);
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <ctype.h>
|
|
Packit |
b099d7 |
#include <stdlib.h>
|
|
Packit |
b099d7 |
#include <string.h> /* May have to be strings.h on some systems. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/Xm.h>
|
|
Packit |
b099d7 |
#include <Xm/FontSP.h>
|
|
Packit |
b099d7 |
#include <Xm/Label.h>
|
|
Packit |
b099d7 |
#include <Xm/PushB.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumn.h>
|
|
Packit |
b099d7 |
#include <Xm/TextF.h>
|
|
Packit |
b099d7 |
#include <Xm/Text.h>
|
|
Packit |
b099d7 |
#include <Xm/ToggleB.h>
|
|
Packit |
b099d7 |
#include <Xm/MenuShell.h>
|
|
Packit |
b099d7 |
#include <Xm/DropDown.h>
|
|
Packit |
b099d7 |
#include <Xm/ButtonBox.h>
|
|
Packit |
b099d7 |
#include <Xm/ExtP.h>
|
|
Packit |
b099d7 |
#include "Xm/XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define NUM_XLFD_DASHES 14
|
|
Packit |
b099d7 |
/* max number of fonts that can be returned (CARD16) */
|
|
Packit |
b099d7 |
#define TRY_FONTS (unsigned int) 65535
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define NUM_BUTTONS 30 /* The MAX number of encoding buttons. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define ANY_FAMILY 0 /* Don't change this, without fixing */
|
|
Packit |
b099d7 |
/* ProcessXldfFontData */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define GET_FONT_SIZE BUFSIZ
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define ALLOC_INC 100
|
|
Packit |
b099d7 |
#define FAMILY_INC 10
|
|
Packit |
b099d7 |
#define WIDGET_LIST_INC 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define POINT_DIVIDE 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DEFAULT_WEIGHT ("medium")
|
|
Packit |
b099d7 |
#define BOLD_WEIGHT ("bold")
|
|
Packit |
b099d7 |
#define DEFAULT_SLANT ("r")
|
|
Packit |
b099d7 |
#define ITALIC_SLANT ("i")
|
|
Packit |
b099d7 |
#define DEFAULT_FIXED_SPACING ("c")
|
|
Packit |
b099d7 |
#define OTHER_FIXED_SPACING ("m")
|
|
Packit |
b099d7 |
#define PROPORTIONAL_SPACING ("p")
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define STAR_STRING ("*")
|
|
Packit |
b099d7 |
#define ANY_ENCODING ("*-*")
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define FAMILY_COLUMNS 20
|
|
Packit |
b099d7 |
#define VISIBILE_FAMILIES 11
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static short GValidSizes[] = {
|
|
Packit |
b099d7 |
2, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,26,28,36,48,72
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* A font may only be scaled in one resolution, not all resolutions.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define IsScaled(fsw, fam) (XmFontS_use_scaling((fsw)) && \
|
|
Packit |
b099d7 |
((CheckFlag(XmFontS_user_state((fsw)), DPI_75) && \
|
|
Packit |
b099d7 |
CheckFlag((fam)->state, SCALED_75)) || \
|
|
Packit |
b099d7 |
(CheckFlag(XmFontS_user_state((fsw)), DPI_100)&& \
|
|
Packit |
b099d7 |
CheckFlag((fam)->state, SCALED_100))))
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* GLOBAL DECLARATIONS
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* Private functions - for creating children widgets.
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void CreateChildren(XmFontSelectorWidget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateTopWidgets(XmFontSelectorWidget, Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateMiddleArea(XmFontSelectorWidget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateSpacingBox(XmFontSelectorWidget, Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateFontChoiceBox(XmFontSelectorWidget, Widget,ArgList,Cardinal);
|
|
Packit |
b099d7 |
static void CreateResolutionBox(XmFontSelectorWidget, Widget,ArgList,Cardinal);
|
|
Packit |
b099d7 |
static void CreateFamilyBox(XmFontSelectorWidget, Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateSizesBox(XmFontSelectorWidget, Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateBoldItalicBox(XmFontSelectorWidget,Widget,ArgList, Cardinal);
|
|
Packit |
b099d7 |
static void CreateOtherChoiceBox(XmFontSelectorWidget,
|
|
Packit |
b099d7 |
Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* Private functions.
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void LoadFontData(Widget, FontData **, int *, String **, int *);
|
|
Packit |
b099d7 |
static void ProcessXlfdFontData(XmFontSelectorWidget,
|
|
Packit |
b099d7 |
FontInfo *, FontData *, int);
|
|
Packit |
b099d7 |
static void SortOtherFontData(FontInfo *, String *, int);
|
|
Packit |
b099d7 |
static void AddToOtherList(char *, String **, int *, int *);
|
|
Packit |
b099d7 |
static void SetNonStringData(FontData *), SetFlag(Flag *, Flag, Boolean);
|
|
Packit |
b099d7 |
static void StoreString(register String, register String, register int);
|
|
Packit |
b099d7 |
static void SetLongFlag(LongFlag *, LongFlag, Boolean);
|
|
Packit |
b099d7 |
static void UpdateExistingFamily(FamilyInfo *, FontData *);
|
|
Packit |
b099d7 |
static void FillNewFamily(FamilyInfo *, FontData *);
|
|
Packit |
b099d7 |
static void SetResolution(XmFontSelectorWidget, FontData *);
|
|
Packit |
b099d7 |
static void DisplayCurrentFont(XmFontSelectorWidget, String);
|
|
Packit |
b099d7 |
static void UpdateBoldItalic(XmFontSelectorWidget);
|
|
Packit |
b099d7 |
static void UpdateFixedProportional(XmFontSelectorWidget);
|
|
Packit |
b099d7 |
static void UpdateFamilies(XmFontSelectorWidget);
|
|
Packit |
b099d7 |
static void UpdateSizes(XmFontSelectorWidget);
|
|
Packit |
b099d7 |
static void SetComboValue(Widget, String), UnsetSiblings(Widget);
|
|
Packit |
b099d7 |
static void DisplayUserError(XmFontSelectorWidget, String);
|
|
Packit |
b099d7 |
static void SetDisplayedFont(XmFontSelectorWidget, String);
|
|
Packit |
b099d7 |
static void AddToXlfdOnlyList(XmFontSelectorWidget, Widget);
|
|
Packit |
b099d7 |
static void AddToXlfdSensitiveList(XmFontSelectorWidget, Widget);
|
|
Packit |
b099d7 |
static void ChangeMode(XmFontSelectorWidget, Boolean, Boolean);
|
|
Packit |
b099d7 |
static void SetOtherList(XmFontSelectorWidget, Boolean);
|
|
Packit |
b099d7 |
static void AddToXlfdList(XmFontSelectorWidget,
|
|
Packit |
b099d7 |
char *, FontData **, int *, int *);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget CreateEncodingMenu(XmFontSelectorWidget,
|
|
Packit |
b099d7 |
Widget, ArgList, Cardinal);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static FontInfo * LoadFontInfo(XmFontSelectorWidget);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int FindResolution(Widget), CmpStrings(const void *, const void *);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean CheckFlag(Flag, Flag), CheckLongFlag(LongFlag, LongFlag);
|
|
Packit |
b099d7 |
static Boolean FillData(XmFontSelectorWidget, FontData *, char *);
|
|
Packit |
b099d7 |
static Boolean IsXlfdFont(register char *);
|
|
Packit |
b099d7 |
static Boolean CheckEncoding(XmFontSelectorWidget, FamilyInfo *);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static FamilyInfo *FindFamily(register XrmQuark, FamilyInfo *, int);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static String BuildFontString(XmFontSelectorWidget, FontData *, String, int);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static LongFlag SizeMapping(short);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* Callbacks
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ToggleMiddlePane(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleNameWindow(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void FamilyChanged(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void SizeChanged(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ChangeEncoding(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleScaling(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleBold(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleItalic(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void Toggle75DPI(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void Toggle100DPI(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleBothDPI(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleProportional(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleFixed(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void ToggleBothSpacing(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void XlfdMode(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void OtherMode(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
static void RemoveUserError(Widget, XtPointer, XtPointer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* Semi-Public functions
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean SetValues(Widget, Widget, Widget, ArgList, Cardinal *);
|
|
Packit |
b099d7 |
static void GetValuesHook(Widget, ArgList, Cardinal *);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void Destroy(Widget);
|
|
Packit |
b099d7 |
static void Initialize(Widget, Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
static void ClassPartInitialize(WidgetClass w_class);
|
|
Packit |
b099d7 |
static void ClassInitialize();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Resource definitions for Subclasses of Primitive */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define SAMPLE \
|
|
Packit |
b099d7 |
("abcdefghijklmonpqrstuvwxyz\n\
|
|
Packit |
b099d7 |
ABCDEFGHIJKLMONPQRSTUVWXYZ\n\
|
|
Packit |
b099d7 |
1234567890\n!@#$%^&*()")
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
* STATIC DECLARATIONS
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This table is the list of resolutions of fonts that are supported.
|
|
Packit |
b099d7 |
* most machines have only 75 and 100 dpi fonts, so we only find which
|
|
Packit |
b099d7 |
* of those we are closest to with FindResolution().
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int resolutions[] = { 75, 100 };
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNspacing, XmCSpacing, XmRVerticalDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension), XtOffsetOf(XmPanedRec, paned.internal_bw),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 2
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNseparatorOn, XmCSeparatorOn, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmPanedRec, paned.separator_on),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) True
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmarginHeight, XmCMargin, XmRVerticalDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension), XtOffsetOf(XmPanedRec, paned.margin_height),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 0
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNcurrentFont, XmCString, XmRString,
|
|
Packit |
b099d7 |
sizeof(String), XtOffsetOf(XmFontSelectorRec, fs.current_font),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNshowFontName, XmCBoolean, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmFontSelectorRec, fs.show_font_name),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNuseScaling, XmCBoolean, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmFontSelectorRec, fs.use_scaling),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) True
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtextRows, XmCTextRows, XmRDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension), XtOffsetOf(XmFontSelectorRec, fs.text_rows),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 8
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNvalueChangedCallback, XmCCallback, XmRCallback,
|
|
Packit |
b099d7 |
sizeof(XtCallbackList), XtOffsetOf(XmFontSelectorRec, fs.font_changed_callback),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNsampleText, XmCSampleText, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.sample_text),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) SAMPLE
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNanyString, XmCAnyString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.any),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Any"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNanyLowerString, XmCAnyLowerString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.lower_any),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "any"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNfamilyString, XmCFamilyString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.family),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Family"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNsizeString, XmCSizeString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.size),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Size"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNboldString, XmCBoldString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.bold),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Bold"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNitalicString, XmCItalicString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.italic),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Italic"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNoptionString, XmCOptionString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.option),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Options..."
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNbothString, XmCBothString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.both),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Both"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmonoSpaceString, XmCMonoSpaceString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.mono_space),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Fixed Width Fonts"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNpropSpaceString, XmCPropSpaceString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.prop_space),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Proportional Fonts"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNotherString, XmCOtherString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.other_font),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Other Fonts"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNxlfdString, XmCXlfdSpaceString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.xlfd),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Xlfd Fonts"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmN75DPIstring, XmC75DPIString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.dpi_75),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "75 dpi"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmN100DPIstring, XmC100DPIString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.dpi_100),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "100 dpi"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNscalingString, XmCScalingString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.scaling),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Use Font Scaling"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNshowNameString, XmCShowNameString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.show_name),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Show Font Name"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Stuff to set the valid charset/encoding pairs.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNencodingString, XmCEncodingString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmFontSelectorRec, fs.strings.encoding_only),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "Encoding"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* NOTE: This resource value must end in a comma because the resource
|
|
Packit |
b099d7 |
* converter is broken in Motif1.1.4.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNencodingList, XmCEncodingList, XmRStringTable,
|
|
Packit |
b099d7 |
sizeof(String *), XtOffsetOf(XmFontSelectorRec, fs.strings.encoding_list),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "iso8859-1,"
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultEncodingString, XmCDefaultEncodingString, XmRString,
|
|
Packit |
b099d7 |
sizeof(String), XtOffsetOf(XmFontSelectorRec, fs.encoding),
|
|
Packit |
b099d7 |
XmRString, (XtPointer) "iso8859-1"
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmSyntheticResource syn_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNspacing, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmPanedRec, paned.internal_bw),
|
|
Packit |
b099d7 |
_XmFromPanedPixels, (XmImportProc) _XmToPanedPixels
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmarginHeight, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmPanedRec, paned.margin_height),
|
|
Packit |
b099d7 |
XmeFromVerticalPixels, (XmImportProc) XmeToVerticalPixels
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource subresources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNshowSash, XmCShowSash, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmPanedConstraintsRec, paned.show_sash),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define SuperClass ((ConstraintWidgetClass) &xmPanedClassRec)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontSelectorClassRec xmFontSelectorClassRec = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* core class fields */
|
|
Packit |
b099d7 |
/* superclass */ (WidgetClass) SuperClass,
|
|
Packit |
b099d7 |
/* class name */ "XmFontSelector",
|
|
Packit |
b099d7 |
/* size */ sizeof(XmFontSelectorRec),
|
|
Packit |
b099d7 |
/* class_initialize */ ClassInitialize,
|
|
Packit |
b099d7 |
/* class_part init */ ClassPartInitialize,
|
|
Packit |
b099d7 |
/* class_inited */ FALSE,
|
|
Packit |
b099d7 |
/* initialize */ Initialize,
|
|
Packit |
b099d7 |
/* initialize_hook */ NULL,
|
|
Packit |
b099d7 |
/* realize */ XtInheritRealize,
|
|
Packit |
b099d7 |
/* actions */ NULL,
|
|
Packit |
b099d7 |
/* num_actions */ 0,
|
|
Packit |
b099d7 |
/* resources */ (XtResourceList)resources,
|
|
Packit |
b099d7 |
/* resource_count */ XtNumber(resources),
|
|
Packit |
b099d7 |
/* xrm_class */ NULLQUARK,
|
|
Packit |
b099d7 |
/* compress_motion */ TRUE,
|
|
Packit |
b099d7 |
/* compress_exposure */ TRUE,
|
|
Packit |
b099d7 |
/* compress_enterleave*/ TRUE,
|
|
Packit |
b099d7 |
/* visible_interest */ FALSE,
|
|
Packit |
b099d7 |
/* destroy */ Destroy,
|
|
Packit |
b099d7 |
/* resize */ XtInheritResize,
|
|
Packit |
b099d7 |
/* expose */ NULL,
|
|
Packit |
b099d7 |
/* set_values */ SetValues,
|
|
Packit |
b099d7 |
/* set_values_hook */ NULL,
|
|
Packit |
b099d7 |
/* set_values_almost */ XtInheritSetValuesAlmost,
|
|
Packit |
b099d7 |
/* get_values_hook */ GetValuesHook,
|
|
Packit |
b099d7 |
/* accept_focus */ NULL,
|
|
Packit |
b099d7 |
/* version */ XtVersion,
|
|
Packit |
b099d7 |
/* callback_private */ NULL,
|
|
Packit |
b099d7 |
/* tm_table */ XtInheritTranslations,
|
|
Packit |
b099d7 |
/* query_geometry */ XtInheritQueryGeometry,
|
|
Packit |
b099d7 |
/* display_accelerator*/ XtInheritDisplayAccelerator,
|
|
Packit |
b099d7 |
/* extension */ NULL
|
|
Packit |
b099d7 |
}, {
|
|
Packit |
b099d7 |
/* composite class fields */
|
|
Packit |
b099d7 |
/* geometry_manager */ XtInheritGeometryManager,
|
|
Packit |
b099d7 |
/* change_managed */ XtInheritChangeManaged,
|
|
Packit |
b099d7 |
/* insert_child */ XtInheritInsertChild,
|
|
Packit |
b099d7 |
/* delete_child */ XtInheritDeleteChild,
|
|
Packit |
b099d7 |
/* extension */ NULL
|
|
Packit |
b099d7 |
}, {
|
|
Packit |
b099d7 |
/* constraint class fields */
|
|
Packit |
b099d7 |
/* subresources */ subresources,
|
|
Packit |
b099d7 |
/* subresource_count */ XtNumber(subresources),
|
|
Packit |
b099d7 |
/* constraint_size */ sizeof(XmFontSelectorConstraintsRec),
|
|
Packit |
b099d7 |
/* initialize */ NULL,
|
|
Packit |
b099d7 |
/* destroy */ NULL,
|
|
Packit |
b099d7 |
/* set_values */ NULL,
|
|
Packit |
b099d7 |
/* extension */ NULL
|
|
Packit |
b099d7 |
}, {
|
|
Packit |
b099d7 |
/* manager_class fields */
|
|
Packit |
b099d7 |
XtInheritTranslations, /* translations */
|
|
Packit |
b099d7 |
syn_resources, /* get resources */
|
|
Packit |
b099d7 |
XtNumber(syn_resources), /* num get_resources */
|
|
Packit |
b099d7 |
NULL, /* get_cont_resources */
|
|
Packit |
b099d7 |
0, /* num_get_cont_resources */
|
|
Packit |
b099d7 |
XmInheritParentProcess, /* parent_process */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
}, {
|
|
Packit |
b099d7 |
/* paned_class fields */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
}, {
|
|
Packit |
b099d7 |
/* font selector class fields */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WidgetClass xmFontSelectorWidgetClass = (WidgetClass) &xmFontSelectorClassRec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***********************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Private Functions.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: LoadFontInfo
|
|
Packit |
b099d7 |
* Description: Loads the font information from the current screen.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* Returns: the font information.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static FontInfo *
|
|
Packit |
b099d7 |
LoadFontInfo(XmFontSelectorWidget fsw)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontInfo *font_info = (FontInfo *) XtMalloc(sizeof(FontInfo));
|
|
Packit |
b099d7 |
FontData *xlfd_font_data;
|
|
Packit |
b099d7 |
String *other_fonts;
|
|
Packit |
b099d7 |
int xlfd_num_fonts, other_num_fonts;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
font_info->resolution = FindResolution((Widget) fsw);
|
|
Packit |
b099d7 |
LoadFontData((Widget) fsw, &xlfd_font_data, &xlfd_num_fonts,
|
|
Packit |
b099d7 |
&other_fonts, &other_num_fonts);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ProcessXlfdFontData(fsw, font_info, xlfd_font_data, xlfd_num_fonts);
|
|
Packit |
b099d7 |
SortOtherFontData(font_info, other_fonts, other_num_fonts);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(font_info);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: LoadFontData
|
|
Packit |
b099d7 |
* Description: Loads the font data from the X Server, sorts it into
|
|
Packit |
b099d7 |
* xlfd and non xlfd fonts, and sorts out the xlfd info.
|
|
Packit |
b099d7 |
* Arguments: w - any widget on the screen.
|
|
Packit |
b099d7 |
* RETURNED xlfd_data, num_xlfd - The xlfd font data.
|
|
Packit |
b099d7 |
* RETURNED other_fonts, num_other - The list of non xlfd fonts.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
LoadFontData(Widget w, FontData **xlfd_data, int *num_xlfd,
|
|
Packit |
b099d7 |
String **other_fonts, int *num_other)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) w;
|
|
Packit |
b099d7 |
char ** fonts, **ptr;
|
|
Packit |
b099d7 |
int i, num, xlfd_alloc, other_alloc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*xlfd_data = NULL;
|
|
Packit |
b099d7 |
*other_fonts = NULL;
|
|
Packit |
b099d7 |
*num_xlfd = *num_other = xlfd_alloc = other_alloc = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fonts = XListFonts(XtDisplay(w), "*", TRY_FONTS, &num);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Loop the all the fonts and add each one to the proper list.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fonts != NULL) {
|
|
Packit |
b099d7 |
for (ptr = fonts, i = 0; i < num; i++, ptr++) {
|
|
Packit |
b099d7 |
if (IsXlfdFont(*ptr))
|
|
Packit |
b099d7 |
AddToXlfdList(fsw, *ptr, xlfd_data, num_xlfd, &xlfd_alloc);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
AddToOtherList(*ptr, other_fonts, num_other, &other_alloc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XFreeFontNames(fonts);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ProcessXlfdFontData
|
|
Packit |
b099d7 |
* Description: Processes the Xlfd data, to come up with lists
|
|
Packit |
b099d7 |
* of various attributes.
|
|
Packit |
b099d7 |
* Arguments: fsw - The Font Selector Widget.
|
|
Packit |
b099d7 |
* font_info - the font information structure.
|
|
Packit |
b099d7 |
* data, num - the xlfd data.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This takes the raw XLFD data and builds lists of families and
|
|
Packit |
b099d7 |
* sizes, and stores all the information in the font_info structure.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ProcessXlfdFontData(XmFontSelectorWidget fsw,
|
|
Packit |
b099d7 |
FontInfo *font_info, FontData *data, int num_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int num, alloc, i;
|
|
Packit |
b099d7 |
FamilyInfo *any_fam, *fam = NULL;
|
|
Packit |
b099d7 |
FontData *top = data;
|
|
Packit |
b099d7 |
String temp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Leave space for the any family, filled in at the end of the function.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* NOTE: This assumes that (ANY_FAMILY == 0)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = 1;
|
|
Packit |
b099d7 |
alloc = FAMILY_INC;
|
|
Packit |
b099d7 |
fam = (FamilyInfo *) XtMalloc(sizeof(FamilyInfo) * alloc);
|
|
Packit |
b099d7 |
fam->nameq = NULLQUARK; /* Don't use this family yet. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set up the "Any" family.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num_data; i++, data++) {
|
|
Packit |
b099d7 |
register FamilyInfo *cur_family = FindFamily(data->familyq, fam, num);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cur_family == NULL) {
|
|
Packit |
b099d7 |
if ( num >= alloc ) {
|
|
Packit |
b099d7 |
alloc += FAMILY_INC;
|
|
Packit |
b099d7 |
fam = (FamilyInfo *) XtRealloc((XtPointer) fam,
|
|
Packit |
b099d7 |
sizeof(FamilyInfo) * alloc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FillNewFamily(fam + num, data);
|
|
Packit |
b099d7 |
num++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
UpdateExistingFamily(cur_family, data);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
font_info->family_info = fam;
|
|
Packit |
b099d7 |
font_info->num_families = num;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
any_fam = fam + ANY_FAMILY;
|
|
Packit |
b099d7 |
temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
any_fam->nameq = XrmStringToQuark(temp);
|
|
Packit |
b099d7 |
XtFree(temp);
|
|
Packit |
b099d7 |
any_fam->bold_nameq = XrmStringToQuark(BOLD_WEIGHT);
|
|
Packit |
b099d7 |
any_fam->medium_nameq = XrmStringToQuark(DEFAULT_WEIGHT);
|
|
Packit |
b099d7 |
any_fam->upright_nameq = XrmStringToQuark(DEFAULT_SLANT);
|
|
Packit |
b099d7 |
any_fam->italic_nameq = XrmStringToQuark(ITALIC_SLANT);
|
|
Packit |
b099d7 |
strcpy(any_fam->fixed_spacing, DEFAULT_FIXED_SPACING);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
any_fam->state = (Flag) 0;
|
|
Packit |
b099d7 |
any_fam->sizes_75 = any_fam->sizes_100 = (LongFlag) 0;
|
|
Packit |
b099d7 |
for (i = 1, fam++; i < num; i++, fam++) {
|
|
Packit |
b099d7 |
any_fam->sizes_75 |= fam->sizes_75;
|
|
Packit |
b099d7 |
any_fam->sizes_100 |= fam->sizes_100;
|
|
Packit |
b099d7 |
any_fam->state |= fam->state;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
any_fam->encodings = NULL;
|
|
Packit |
b099d7 |
any_fam->encoding_alloc = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) top);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SortOtherFonts
|
|
Packit |
b099d7 |
* Description: Sorts the list of other fonts alphabetically
|
|
Packit |
b099d7 |
* and stuffs them into the font data structure.
|
|
Packit |
b099d7 |
* Arguments: font_info - the font information.
|
|
Packit |
b099d7 |
* list, num - the list of fonts.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SortOtherFontData(FontInfo *font_info, String *list, int num)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
qsort((void *) list, num, sizeof(String), CmpStrings);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Remove duplicates.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while (i < (num - 1)) {
|
|
Packit |
b099d7 |
if (streq(list[i], list[i+1])) {
|
|
Packit |
b099d7 |
register int j;
|
|
Packit |
b099d7 |
register String *ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char*)list[i]);
|
|
Packit |
b099d7 |
ptr = list + i;
|
|
Packit |
b099d7 |
j = i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while ( ++j < num) {
|
|
Packit |
b099d7 |
ptr[0] = ptr[1];
|
|
Packit |
b099d7 |
ptr++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num--; /*Something has been removed, decrement count*/
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
font_info->others = list;
|
|
Packit |
b099d7 |
font_info->num_others = num;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CmpStrings
|
|
Packit |
b099d7 |
* Description: Compares two strings.
|
|
Packit |
b099d7 |
* Arguments: p1, p2 - two string pointers.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int
|
|
Packit |
b099d7 |
CmpStrings(const void * p1, const void *p2)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String *s1 = (String *) p1;
|
|
Packit |
b099d7 |
String *s2 = (String *) p2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(strcmp(*s1, *s2));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FindResolution
|
|
Packit |
b099d7 |
* Description: Finds the closest resolution
|
|
Packit |
b099d7 |
* Arguments: w - any widget on the proper screen.
|
|
Packit |
b099d7 |
* Returns: the closest allowable resolution to the real resolution.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int
|
|
Packit |
b099d7 |
FindResolution(Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Screen *screen = XtScreen(w);
|
|
Packit |
b099d7 |
register int i, xres, yres, min, pref;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* there are 2.54 centimeters to an inch; so there are 25.4 millimeters.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* dpi = N pixels / (M millimeters / (25.4 millimeters / 1 inch))
|
|
Packit |
b099d7 |
* = N pixels / (M inch / 25.4)
|
|
Packit |
b099d7 |
* = N * 25.4 pixels / M inch
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Or in integer arithmitic
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* = (254 * N pixels / M inch + 5) / 10
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* This will get us the true pixels / inch. That is probably
|
|
Packit |
b099d7 |
not what we want */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xres = (254 * WidthOfScreen(screen) / WidthMMOfScreen(screen) + 5) / 10;
|
|
Packit |
b099d7 |
yres = (254 * HeightOfScreen(screen) / HeightMMOfScreen(screen) + 5) / 10;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xres *= xres;
|
|
Packit |
b099d7 |
yres *= yres;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Find the closest resolution by using a difference of squares.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
min = 32000;
|
|
Packit |
b099d7 |
pref = resolutions[0]; /* We have to have some default. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < XtNumber(resolutions); i++) {
|
|
Packit |
b099d7 |
int diffx = (xres - resolutions[i] * resolutions[i]);
|
|
Packit |
b099d7 |
int diffy = (yres - resolutions[i] * resolutions[i]);
|
|
Packit |
b099d7 |
int tdiff; /* the total difference. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Square 'em.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tdiff = (diffx * diffx) + (diffy * diffy);
|
|
Packit |
b099d7 |
if (min > tdiff) {
|
|
Packit |
b099d7 |
pref = resolutions[i];
|
|
Packit |
b099d7 |
min = tdiff;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(pref);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: IsXlfdFont
|
|
Packit |
b099d7 |
* Description: Returns True if this is an LXFD font.
|
|
Packit |
b099d7 |
* Arguments: str - the font name to check.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
IsXlfdFont(register char * str)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int num_dashes = 0;
|
|
Packit |
b099d7 |
register char c;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ; (c = *str) != '\0'; str++) {
|
|
Packit |
b099d7 |
if (c == '-')
|
|
Packit |
b099d7 |
num_dashes++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(num_dashes == NUM_XLFD_DASHES);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: AddToXlfdList
|
|
Packit |
b099d7 |
* Description: Adds a font to the list of xlfd fonts.
|
|
Packit |
b099d7 |
* Arguments: name - name of the font.
|
|
Packit |
b099d7 |
* list, num - the list of xlfd fonts to add it to.
|
|
Packit |
b099d7 |
* alloc - the number of allocated slots.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddToXlfdList(XmFontSelectorWidget fsw,
|
|
Packit |
b099d7 |
char *name, FontData **list, int *num, int *alloc)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontData *current;
|
|
Packit |
b099d7 |
if (*num >= *alloc) {
|
|
Packit |
b099d7 |
*alloc += ALLOC_INC;
|
|
Packit |
b099d7 |
*list = (FontData *) XtRealloc((XtPointer) *list,
|
|
Packit |
b099d7 |
sizeof(FontData) * *alloc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
current = (*list) + *num;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If filling the data succeeded, then accept this name, otherwise
|
|
Packit |
b099d7 |
* just ignore it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (FillData(fsw, current, name))
|
|
Packit |
b099d7 |
(*num)++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: AddToOtherList
|
|
Packit |
b099d7 |
* Description: Adds a font to the list of other fonts.
|
|
Packit |
b099d7 |
* Arguments: name - name of the font.
|
|
Packit |
b099d7 |
* list, num - the list of other fonts to add it to.
|
|
Packit |
b099d7 |
* alloc - the number of allocated slots.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddToOtherList(char *name, String **list, int *num, int *alloc)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (*num >= *alloc) {
|
|
Packit |
b099d7 |
*alloc += ALLOC_INC;
|
|
Packit |
b099d7 |
*list = (String *) XtRealloc((XtPointer) *list,
|
|
Packit |
b099d7 |
sizeof(String) * *alloc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
(*list)[(*num)++] = XtNewString(name);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FillData(fsw, current, name);
|
|
Packit |
b099d7 |
* Description: Fills the current font data from an xlfd name.
|
|
Packit |
b099d7 |
* Arguments: fsw - The font selector widget.
|
|
Packit |
b099d7 |
* current - the font data structure to fill.
|
|
Packit |
b099d7 |
* name - an xlfd name of a font.
|
|
Packit |
b099d7 |
* Returns: False on failure.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This name may have NOT *'s in it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define GET_NEXT_FIELD(ptr) \
|
|
Packit |
b099d7 |
if (((ptr) = (char *) strchr((ptr), '-')) == NULL) \
|
|
Packit |
b099d7 |
return(False); \
|
|
Packit |
b099d7 |
(ptr)++ /* skip hyphen */ \
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
FillData(XmFontSelectorWidget fsw, FontData *current, char *name)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *ptr = name;
|
|
Packit |
b099d7 |
char temp[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
current->state = 0; /* Initialize value. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Foundry */
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Family */
|
|
Packit |
b099d7 |
StoreString(ptr, temp, BUFSIZ - 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (streq(temp, STAR_STRING)) {
|
|
Packit |
b099d7 |
String str = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
strcpy(temp, str);
|
|
Packit |
b099d7 |
XtFree((XtPointer) str);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
current->familyq = XrmStringToQuark(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Weight */
|
|
Packit |
b099d7 |
StoreString(ptr, temp, BUFSIZ - 1);
|
|
Packit |
b099d7 |
current->weightq = XrmStringToQuark(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Slant */
|
|
Packit |
b099d7 |
StoreString(ptr, current->slant, SLANT_LEN);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == SetWidth_Name */
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Add_Style_Name */
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Pixel Size */
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Point Size */
|
|
Packit |
b099d7 |
StoreString(ptr, temp, BUFSIZ - 1);
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* the string '*' will default to 0 which is exactly what I want.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
current->point_size = (short) atoi(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Resolution X */
|
|
Packit |
b099d7 |
StoreString(ptr, temp, BUFSIZ - 1);
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* the string '*' will default to 0 which is exactly what I want.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
current->resolution_x = (short) atoi(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Resolution Y */
|
|
Packit |
b099d7 |
StoreString(ptr, temp, BUFSIZ - 1);
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* the string '*' will default to 0 which is exactly what I want.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
current->resolution_y = (short) atoi(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Spacing */
|
|
Packit |
b099d7 |
StoreString(ptr, current->spacing, SPACING_LEN);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Average Width */
|
|
Packit |
b099d7 |
GET_NEXT_FIELD(ptr); /* ptr == Registry and Encoding */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
current->encoding = XrmStringToQuark(ptr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetNonStringData(current);
|
|
Packit |
b099d7 |
return(True); /* success! */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#undef GET_NEXT_FIELD
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetNonStringData
|
|
Packit |
b099d7 |
* Description: Sets the non string part of the Font Data.
|
|
Packit |
b099d7 |
* Arguments: current - the font data we are working with.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetNonStringData(FontData *current)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char lower[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now fill in the non string fields.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the weight_name field contains the words "bold" or "demi"
|
|
Packit |
b099d7 |
* then this is a bold font.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmCopyISOLatin1Lowered(lower, XrmQuarkToString(current->weightq));
|
|
Packit |
b099d7 |
if ((strstr(lower, "bold") != NULL) || (strstr(lower, "demi") != NULL))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), BOLD, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the spacing is "p" then proportional, otherwize monospaced.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmCopyISOLatin1Lowered(lower, current->spacing);
|
|
Packit |
b099d7 |
if (strstr(lower, PROPORTIONAL_SPACING) != NULL)
|
|
Packit |
b099d7 |
SetFlag(&(current->state), PROPORTIONAL, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the slant it "i" or "o" then this is an italic font.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmCopyISOLatin1Lowered(lower, current->slant);
|
|
Packit |
b099d7 |
if ((strchr(lower, 'i') != NULL) || (strchr(lower, 'o') != NULL))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), ITALIC, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the point_size is 0 then this is a scalable font.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (current->point_size == 0) {
|
|
Packit |
b099d7 |
if ((current->resolution_x == 75) && (current->resolution_x == 75))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), SCALED_75, True);
|
|
Packit |
b099d7 |
else if((current->resolution_x == 100)&&(current->resolution_x == 100))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), SCALED_100, True);
|
|
Packit |
b099d7 |
else if ((current->resolution_x == 0)&& (current->resolution_x == 0)) {
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Sun sets all scaled fonts to have a resolution of 0x0
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
SetFlag(&(current->state), SCALED_75 | SCALED_100, True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Check to see if resolution matches 75 or 100 dpi.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((current->resolution_x == 75) && (current->resolution_x == 75))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), DPI_75, True);
|
|
Packit |
b099d7 |
else if ((current->resolution_x == 100) && (current->resolution_x == 100))
|
|
Packit |
b099d7 |
SetFlag(&(current->state), DPI_100, True);
|
|
Packit |
b099d7 |
else if ((current->resolution_x == 0) && (current->resolution_x == 0)) {
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Sun sets all scaled fonts to have a resolution of 0x0
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
SetFlag(&(current->state), DPI_75 | DPI_100, True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: StoreString
|
|
Packit |
b099d7 |
* Description: Stores a portion of an xlfd name into the
|
|
Packit |
b099d7 |
* string varaible passed.
|
|
Packit |
b099d7 |
* Arguments: str - the portion of the string to store.
|
|
Packit |
b099d7 |
* store - the string to store it in.
|
|
Packit |
b099d7 |
* max_len - maximum length of the value.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
StoreString(register String str, register String store, register int max_len)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
register int c;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < max_len; i++, str++, store++) {
|
|
Packit |
b099d7 |
if (((c = *str) == '-') || (c == '\0'))
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
*store = c;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
*store = '\0';
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CheckFlag
|
|
Packit |
b099d7 |
* Description: Checks to see if a flag value is set
|
|
Packit |
b099d7 |
* Arguments: state - the state variable containing the flag.
|
|
Packit |
b099d7 |
* flag - the location of the flag.
|
|
Packit |
b099d7 |
* Returns: True if flag set, False otherwise
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CheckFlag(Flag state, Flag flag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return((state & flag) == flag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CheckLongFlag
|
|
Packit |
b099d7 |
* Description: Checks to see if a long flag value is set
|
|
Packit |
b099d7 |
* Arguments: state - the state variable containing the flag.
|
|
Packit |
b099d7 |
* flag - the location of the flag.
|
|
Packit |
b099d7 |
* Returns: True if flag set, False otherwise
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CheckLongFlag(LongFlag state, LongFlag flag)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return((state & flag) == flag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetFlag
|
|
Packit |
b099d7 |
* Description: Sets a flag value
|
|
Packit |
b099d7 |
* Arguments: state - the state variable containing the flag.
|
|
Packit |
b099d7 |
* flag - the location of the flag.
|
|
Packit |
b099d7 |
* value - the value of the flag.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetFlag(Flag *state, Flag flag, Boolean value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (value)
|
|
Packit |
b099d7 |
*state |= flag;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
*state &= ~flag;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetLongFlag
|
|
Packit |
b099d7 |
* Description: Sets a flag value that is stored in a long
|
|
Packit |
b099d7 |
* Arguments: state - the state variable containing the flag.
|
|
Packit |
b099d7 |
* flag - the location of the flag.
|
|
Packit |
b099d7 |
* value - the value of the flag.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetLongFlag(LongFlag *state, LongFlag flag, Boolean value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (value)
|
|
Packit |
b099d7 |
*state |= flag;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
*state &= ~flag;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FindFamily
|
|
Packit |
b099d7 |
* Description: Finds family associated with the font passed.
|
|
Packit |
b099d7 |
* Arguments: font - the font data.
|
|
Packit |
b099d7 |
* list - the list of all families
|
|
Packit |
b099d7 |
* num - the number of families.
|
|
Packit |
b099d7 |
* Returns: a pointer to the family this font is in or NULL.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static FamilyInfo *
|
|
Packit |
b099d7 |
FindFamily(register XrmQuark nameq, FamilyInfo *list, int num)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, list++) {
|
|
Packit |
b099d7 |
if (list->nameq == nameq)
|
|
Packit |
b099d7 |
return(list);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UpdateExistingFamily
|
|
Packit |
b099d7 |
* Description: Updates data, by adding another font to an
|
|
Packit |
b099d7 |
* existion family.
|
|
Packit |
b099d7 |
* Arguments: fam - the family to update.
|
|
Packit |
b099d7 |
* font - the font to add.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateExistingFamily(FamilyInfo *fam, FontData *font)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(font->state, BOLD))
|
|
Packit |
b099d7 |
fam->bold_nameq = font->weightq;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
fam->medium_nameq = font->weightq;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(font->state, ITALIC))
|
|
Packit |
b099d7 |
fam->italic_nameq = XrmStringToQuark(font->slant);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
fam->upright_nameq = XrmStringToQuark(font->slant);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!streq(font->spacing, PROPORTIONAL_SPACING))
|
|
Packit |
b099d7 |
strcpy(fam->fixed_spacing, font->spacing);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (font->point_size != 0) {
|
|
Packit |
b099d7 |
if ((font->resolution_x == 75) && (font->resolution_x == 75))
|
|
Packit |
b099d7 |
SetLongFlag(&(fam->sizes_75), SizeMapping(font->point_size), True);
|
|
Packit |
b099d7 |
else if ((font->resolution_x == 100) && (font->resolution_x == 100))
|
|
Packit |
b099d7 |
SetLongFlag(&(fam->sizes_100),SizeMapping(font->point_size), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fam->state |= font->state; /* or in all bits. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; TRUE; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (i == fam->encoding_alloc)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
fam->encoding_alloc += NUM_BUTTONS;
|
|
Packit |
b099d7 |
fam->encodings =
|
|
Packit |
b099d7 |
(XrmQuark *) XtRealloc((char *) fam->encodings,
|
|
Packit |
b099d7 |
sizeof(XrmQuark) * fam->encoding_alloc);
|
|
Packit |
b099d7 |
memset((char *) (fam->encodings + i), 0,
|
|
Packit |
b099d7 |
sizeof(XrmQuark) * NUM_BUTTONS);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fam->encodings[i] == font->encoding)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fam->encodings[i] == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
fam->encodings[i] = font->encoding;
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FillNewFamily
|
|
Packit |
b099d7 |
* Description: Fills in the information for a new font family.
|
|
Packit |
b099d7 |
* Arguments: fam - the family data.
|
|
Packit |
b099d7 |
* font - the first font we found.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
FillNewFamily(FamilyInfo *fam, FontData *font)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
fam->nameq = font->familyq;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(font->state, BOLD)) {
|
|
Packit |
b099d7 |
fam->bold_nameq = font->weightq;
|
|
Packit |
b099d7 |
fam->medium_nameq = NULLQUARK;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
fam->bold_nameq = NULLQUARK;
|
|
Packit |
b099d7 |
fam->medium_nameq = font->weightq;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (streq(font->spacing, PROPORTIONAL_SPACING))
|
|
Packit |
b099d7 |
strcpy(fam->fixed_spacing, DEFAULT_FIXED_SPACING);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
strcpy(fam->fixed_spacing, font->spacing);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(font->state, ITALIC)) {
|
|
Packit |
b099d7 |
fam->italic_nameq = XrmStringToQuark(font->slant);
|
|
Packit |
b099d7 |
fam->upright_nameq = NULLQUARK;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
fam->italic_nameq = NULLQUARK;
|
|
Packit |
b099d7 |
fam->upright_nameq = XrmStringToQuark(font->slant);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fam->sizes_75 = fam->sizes_100 = 0;
|
|
Packit |
b099d7 |
fam->state = font->state;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (font->point_size != 0) {
|
|
Packit |
b099d7 |
if ((font->resolution_x == 75) && (font->resolution_x == 75))
|
|
Packit |
b099d7 |
SetLongFlag(&(fam->sizes_75), SizeMapping(font->point_size), True);
|
|
Packit |
b099d7 |
else if ((font->resolution_x == 100) && (font->resolution_x == 100))
|
|
Packit |
b099d7 |
SetLongFlag(&(fam->sizes_100),SizeMapping(font->point_size), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fam->encoding_alloc = NUM_BUTTONS;
|
|
Packit |
b099d7 |
fam->encodings = (XrmQuark *) XtCalloc(fam->encoding_alloc,
|
|
Packit |
b099d7 |
sizeof(XrmQuark));
|
|
Packit |
b099d7 |
fam->encodings[0] = fam->encoding_alloc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SizeMapping
|
|
Packit |
b099d7 |
* Description: Maps the actual size to the sizes bit field
|
|
Packit |
b099d7 |
* Arguments: size - the point size to map.
|
|
Packit |
b099d7 |
* Returns: 0 if the size does not map, otherwise the bit it maps to.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static LongFlag
|
|
Packit |
b099d7 |
SizeMapping(short size)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
size /= POINT_DIVIDE;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (count = 0; count < XtNumber(GValidSizes); count++) {
|
|
Packit |
b099d7 |
if (GValidSizes[count] == size)
|
|
Packit |
b099d7 |
return (((LongFlag) 1) << count);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return((LongFlag) 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: DisplayCurrentFont
|
|
Packit |
b099d7 |
* Description: Displays the current font to the user.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* font - the current font name.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DisplayCurrentFont(XmFontSelectorWidget fsw, String font)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
XmFontList fl;
|
|
Packit |
b099d7 |
XFontStruct *fontdata;
|
|
Packit |
b099d7 |
char buf[BUFSIZ * 2];
|
|
Packit |
b099d7 |
Boolean err = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fontdata = XLoadQueryFont(XtDisplay((Widget) fsw), font)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf(buf, "Font '%s'\nis not availiable on this machine", font);
|
|
Packit |
b099d7 |
DisplayUserError(fsw, buf);
|
|
Packit |
b099d7 |
err = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Always clear out old errors
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RemoveUserError(NULL, (XtPointer)fsw, (XtPointer)0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This is a hack to work around problems with Sun scaled fonts
|
|
Packit |
b099d7 |
* and the Motif Text widget. It turns out that some sun fonts
|
|
Packit |
b099d7 |
* when a size of * is specified will return a font of height 0
|
|
Packit |
b099d7 |
* this causes the ascent + descent to be zero and really confuses
|
|
Packit |
b099d7 |
* the XmTextField widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fontdata->ascent + fontdata->descent) == 0) {
|
|
Packit |
b099d7 |
if (IsXlfdFont(font)) {
|
|
Packit |
b099d7 |
char *ptr, left_buf[BUFSIZ], right_buf[BUFSIZ], fbuf[BUFSIZ];
|
|
Packit |
b099d7 |
register int i, count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This is a poorly formatted Sun Scaled font,
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Find where the size is and change it from a * to 140.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (ptr = font, i = count = 0; *ptr != 0; i++, ptr++) {
|
|
Packit |
b099d7 |
if (*ptr != '-')
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
count++;
|
|
Packit |
b099d7 |
if (count == 8)
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ptr = (char *) strchr(ptr + 1, '-');
|
|
Packit |
b099d7 |
strcpy(right_buf, ptr);
|
|
Packit |
b099d7 |
strcpy(left_buf, font);
|
|
Packit |
b099d7 |
left_buf[i] = '\0';
|
|
Packit |
b099d7 |
sprintf(fbuf, "%s-140%s", left_buf, right_buf);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fontdata = XLoadQueryFont(XtDisplay((Widget) fsw),
|
|
Packit |
b099d7 |
fbuf)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf(buf,
|
|
Packit |
b099d7 |
"Font '%s'\nis not availiable on this machine",
|
|
Packit |
b099d7 |
font);
|
|
Packit |
b099d7 |
DisplayUserError(fsw, buf);
|
|
Packit |
b099d7 |
err = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
sprintf(buf,
|
|
Packit |
b099d7 |
"Font '%s'\n%s",
|
|
Packit |
b099d7 |
font,
|
|
Packit |
b099d7 |
"is is zero pixels high and cannot be displayed.");
|
|
Packit |
b099d7 |
DisplayUserError(fsw, buf);
|
|
Packit |
b099d7 |
err = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!err) {
|
|
Packit |
b099d7 |
fl = XmFontListCreate(fontdata, XmFONTLIST_DEFAULT_TAG);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfontList, fl); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_text(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_old_fontdata(fsw) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFreeFont(XtDisplay((Widget) fsw), XmFontS_old_fontdata(fsw));
|
|
Packit |
b099d7 |
XmFontListFree(XmFontS_old_fontlist(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_old_fontdata(fsw) = fontdata;
|
|
Packit |
b099d7 |
XmFontS_old_fontlist(fsw) = fl;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XtIsManaged(XmFontS_name_label(fsw)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString xmstr = XmStringCreateLocalized(font);
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, xmstr); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_name_label(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
XmStringFree(xmstr);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fire off the callback for the user.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontData *cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
String str_ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_xlfd_mode(fsw)) {
|
|
Packit |
b099d7 |
BuildFontString(fsw, cf, XmFontS_get_font(fsw), GET_FONT_SIZE);
|
|
Packit |
b099d7 |
str_ptr = XmFontS_get_font(fsw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
str_ptr = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtCallCallbackList((Widget) fsw,
|
|
Packit |
b099d7 |
XmFontS_font_changed_callback(fsw), (XtPointer)str_ptr);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: BuildFontString
|
|
Packit |
b099d7 |
* Description: Builds a font string from the current font.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* cf - the font data to use.
|
|
Packit |
b099d7 |
* buf - where to stuff the font name.
|
|
Packit |
b099d7 |
* size - the size not to exceed.
|
|
Packit |
b099d7 |
* Returns: the font string (same as buf).
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static String
|
|
Packit |
b099d7 |
BuildFontString(XmFontSelectorWidget fsw, FontData *cf, String buf, int size)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static XrmQuark anyquark2, anyquark = NULLQUARK;
|
|
Packit |
b099d7 |
String family, encoding;
|
|
Packit |
b099d7 |
char res_x[BUFSIZ], res_y[BUFSIZ], point_size[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (anyquark == NULLQUARK) {
|
|
Packit |
b099d7 |
String temp1 = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
String temp2 = _XmGetMBStringFromXmString(LOWER_ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
anyquark = XrmStringToQuark(temp1);
|
|
Packit |
b099d7 |
anyquark2 = XrmStringToQuark(temp2);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(temp1);
|
|
Packit |
b099d7 |
XtFree(temp2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((anyquark == cf->familyq) || (anyquark2 == cf->familyq))
|
|
Packit |
b099d7 |
family = STAR_STRING;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
family = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cf->point_size == 0)
|
|
Packit |
b099d7 |
strcpy(point_size, STAR_STRING);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
sprintf(point_size, "%d", cf->point_size);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cf->resolution_x == 0)
|
|
Packit |
b099d7 |
strcpy(res_x, STAR_STRING);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
sprintf(res_x, "%d", (int) cf->resolution_x);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cf->resolution_y == 0)
|
|
Packit |
b099d7 |
strcpy(res_y, STAR_STRING);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
sprintf(res_y, "%d", (int) cf->resolution_y);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
encoding = ENCODING_STRING(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* I should really check to see that the string fits, but
|
|
Packit |
b099d7 |
* What would I do it I failed?
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(buf, "-*-%s-%s-%s-*-*-*-%s-%s-%s-%s-*-%s",
|
|
Packit |
b099d7 |
family, XrmQuarkToString(cf->weightq), cf->slant, point_size,
|
|
Packit |
b099d7 |
res_x, res_y, cf->spacing, encoding);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(buf);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UpdateBoldItalic
|
|
Packit |
b099d7 |
* Description: Updates the bold and italic buttons
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateBoldItalic(XmFontSelectorWidget fsw)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean set;
|
|
Packit |
b099d7 |
FontData *cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
FamilyInfo *fam;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fam = FindFamily(cf->familyq, XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fam->medium_nameq == NULLQUARK) || (fam->bold_nameq == NULLQUARK)) {
|
|
Packit |
b099d7 |
set = (fam->medium_nameq == NULLQUARK);
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_bold_toggle(fsw), set, False);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), BOLD, set);
|
|
Packit |
b099d7 |
XtSetSensitive(XmFontS_bold_toggle(fsw), False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtSetSensitive(XmFontS_bold_toggle(fsw), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), BOLD))
|
|
Packit |
b099d7 |
cf->weightq = fam->bold_nameq;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
cf->weightq = fam->medium_nameq;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fam->upright_nameq == NULLQUARK)|| (fam->italic_nameq == NULLQUARK)) {
|
|
Packit |
b099d7 |
set = (fam->upright_nameq == NULLQUARK);
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_italic_toggle(fsw), set, False);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), ITALIC, set);
|
|
Packit |
b099d7 |
XtSetSensitive(XmFontS_italic_toggle(fsw), False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtSetSensitive(XmFontS_italic_toggle(fsw), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), ITALIC))
|
|
Packit |
b099d7 |
strcpy(cf->slant, XrmQuarkToString(fam->italic_nameq));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
strcpy(cf->slant, XrmQuarkToString(fam->upright_nameq));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UpdateFixedProportional
|
|
Packit |
b099d7 |
* Description: Updates the string stored in the fixed/proportional
|
|
Packit |
b099d7 |
* part of the current font data.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateFixedProportional(XmFontSelectorWidget fsw)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontData *cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
FamilyInfo *fam;
|
|
Packit |
b099d7 |
Boolean setMono, setProp, setAny;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((fam = FindFamily(cf->familyq, XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), USER_PROPORTIONAL)) {
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), USER_FIXED))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strcpy(cf->spacing, STAR_STRING);
|
|
Packit |
b099d7 |
setMono = False; setProp = False; setAny = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strcpy(cf->spacing, PROPORTIONAL_SPACING);
|
|
Packit |
b099d7 |
setMono = False; setProp = True; setAny = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (CheckFlag(XmFontS_user_state(fsw), USER_FIXED))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strcpy(cf->spacing, fam->fixed_spacing);
|
|
Packit |
b099d7 |
setMono = True; setProp = False; setAny = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strcpy(cf->spacing, STAR_STRING);
|
|
Packit |
b099d7 |
setMono = False; setProp = False; setAny = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if ( XmFontS_monospace(fsw) != NULL )
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_monospace(fsw), setMono, False);
|
|
Packit |
b099d7 |
if ( XmFontS_proportional(fsw) != NULL )
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_proportional(fsw), setProp, False);
|
|
Packit |
b099d7 |
if ( XmFontS_any_spacing(fsw) != NULL )
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_any_spacing(fsw), setAny, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UpdateFamilies
|
|
Packit |
b099d7 |
* Description: Updates the displayed families.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selector widget.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateFamilies(XmFontSelectorWidget fsw)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
register int count;
|
|
Packit |
b099d7 |
register int i, num;
|
|
Packit |
b099d7 |
XmString *strs;
|
|
Packit |
b099d7 |
LongFlag size_flag;
|
|
Packit |
b099d7 |
FamilyInfo *fam = XmFontS_font_info(fsw)->family_info;
|
|
Packit |
b099d7 |
FontData *cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
Boolean str_match = False;
|
|
Packit |
b099d7 |
String temp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = XmFontS_font_info(fsw)->num_families;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strs = (XmString *) XtMalloc(sizeof(XmString) * num);
|
|
Packit |
b099d7 |
size_flag = SizeMapping(cf->point_size);
|
|
Packit |
b099d7 |
for (i = count = 0; i < num; i++, fam++) {
|
|
Packit |
b099d7 |
Boolean ok_75, ok_100, spacing_match, resolution_ok, has_sizes;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Only add this family if:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The size is 0 (ANY SIZE) and there is a font of the current
|
|
Packit |
b099d7 |
* right DPI, or
|
|
Packit |
b099d7 |
* This is a scaled font and scaling is turned on, or
|
|
Packit |
b099d7 |
* This font has current point size in 75 dpi and 75 or any selectd, or
|
|
Packit |
b099d7 |
* This font has current point size in 100 dpi and 100 or any selectd.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* And
|
|
Packit |
b099d7 |
* The Charset/Encodings match or any is selected.
|
|
Packit |
b099d7 |
* The type of spacing matches.
|
|
Packit |
b099d7 |
* This is a scaled font or there are some valid sizes
|
|
Packit |
b099d7 |
* in the current point size.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ok_75 = ((size_flag != 0) &&
|
|
Packit |
b099d7 |
CheckFlag(XmFontS_user_state(fsw), DPI_75) &&
|
|
Packit |
b099d7 |
CheckLongFlag(fam->sizes_75, size_flag));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ok_100 = ((size_flag != 0) &&
|
|
Packit |
b099d7 |
CheckFlag(XmFontS_user_state(fsw), DPI_100) &&
|
|
Packit |
b099d7 |
CheckLongFlag(fam->sizes_100, size_flag));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
resolution_ok = (cf->resolution_x == 0) && (cf->resolution_y == 0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
resolution_ok |= (CheckFlag(XmFontS_user_state(fsw), DPI_75) &&
|
|
Packit |
b099d7 |
CheckFlag(fam->state, DPI_75));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
resolution_ok |= (CheckFlag(XmFontS_user_state(fsw), DPI_100) &&
|
|
Packit |
b099d7 |
CheckFlag(fam->state, DPI_100));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!(has_sizes = IsScaled(fsw, fam))) {
|
|
Packit |
b099d7 |
has_sizes |= ((fam->sizes_75 != 0) &&
|
|
Packit |
b099d7 |
CheckFlag(XmFontS_user_state(fsw), DPI_75));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
has_sizes |= ((fam->sizes_100 != 0) &&
|
|
Packit |
b099d7 |
CheckFlag(XmFontS_user_state(fsw), DPI_100));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* The Any Family will match all spacings.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
spacing_match = (i == ANY_FAMILY);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
spacing_match |= (CheckFlag(XmFontS_user_state(fsw), USER_PROPORTIONAL) &&
|
|
Packit |
b099d7 |
CheckFlag(fam->state, PROPORTIONAL));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
spacing_match |= (CheckFlag(XmFontS_user_state(fsw), USER_FIXED) &&
|
|
Packit |
b099d7 |
!CheckFlag(fam->state, PROPORTIONAL));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (((cf->point_size == 0) || IsScaled(fsw, fam) || ok_75 || ok_100) &&
|
|
Packit |
b099d7 |
CheckEncoding(fsw, fam) && spacing_match &&
|
|
Packit |
b099d7 |
resolution_ok && has_sizes)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strs[count++] = XmStringCreateLocalized(XrmQuarkToString(fam->nameq));
|
|
Packit |
b099d7 |
str_match |= (fam->nameq == cf->familyq);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This font is no longer in the list, reset the list to ANY_STRING
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!str_match) {
|
|
Packit |
b099d7 |
temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, temp); num_largs++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
temp = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitems, strs); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitemCount, count); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_family_box(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!str_match)
|
|
Packit |
b099d7 |
FamilyChanged(XmFontS_family_box(fsw), (XtPointer) fsw, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (count--; count >= 0; count--)
|
|
Packit |
b099d7 |
XmStringFree(strs[count]);
|
|
Packit |
b099d7 |
XtFree((XtPointer) strs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UpdateSizes
|
|
Packit |
b099d7 |
* Description: Updates the list of sizes.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateSizes(XmFontSelectorWidget fsw)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs = 0;
|
|
Packit |
b099d7 |
register int count = 0;
|
|
Packit |
b099d7 |
register int i, size;
|
|
Packit |
b099d7 |
XmString *strs;
|
|
Packit |
b099d7 |
LongFlag size_flag;
|
|
Packit |
b099d7 |
FamilyInfo *family;
|
|
Packit |
b099d7 |
Boolean editable, match = False;
|
|
Packit |
b099d7 |
String temp = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((family = FindFamily(XmFontS_font_info(fsw)->current_font->familyq,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (IsScaled(fsw, family)) {
|
|
Packit |
b099d7 |
family = XmFontS_font_info(fsw)->family_info + ANY_FAMILY;
|
|
Packit |
b099d7 |
editable = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
editable = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
size_flag = 0;
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), DPI_75))
|
|
Packit |
b099d7 |
size_flag |= family->sizes_75;
|
|
Packit |
b099d7 |
if (CheckFlag(XmFontS_user_state(fsw), DPI_100))
|
|
Packit |
b099d7 |
size_flag |= family->sizes_100;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
size = sizeof(LongFlag) * 8; /* There are 8 bits in a BYTE */
|
|
Packit |
b099d7 |
strs = (XmString *) XtMalloc(sizeof(XmString) * (size + 1));
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* DMS - fix to work around apparent Motif 1.2.4 bug concerning
|
|
Packit |
b099d7 |
* XmStrings containing as the empty string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (XmStringEmpty(ANY_STRING(fsw)))
|
|
Packit |
b099d7 |
strs[count++] = XmStringCreateLocalized(" ");
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
strs[count++] = XmStringCopy(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < XtNumber(GValidSizes); i++) {
|
|
Packit |
b099d7 |
char buf[10];
|
|
Packit |
b099d7 |
LongFlag flag = ((LongFlag) 1) << i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!CheckLongFlag(size_flag, flag) && !IsScaled(fsw, family))
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(buf, "%d", GValidSizes[i]);
|
|
Packit |
b099d7 |
strs[count++] = XmStringCreateLocalized(buf);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
match |= (SizeMapping(cf->point_size) == flag);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!match) {
|
|
Packit |
b099d7 |
temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, temp); num_largs++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitems, strs); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitemCount, count); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNeditable, editable); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_size_box(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!match)
|
|
Packit |
b099d7 |
SizeChanged(XmFontS_size_box(fsw), (XtPointer) fsw, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (count--; count >= 0; count--)
|
|
Packit |
b099d7 |
XmStringFree(strs[count]);
|
|
Packit |
b099d7 |
XtFree((XtPointer) strs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetComboValue
|
|
Packit |
b099d7 |
* Description: Sets the value field of a Combination box.
|
|
Packit |
b099d7 |
* Arguments: box - the combo box.
|
|
Packit |
b099d7 |
* value - the value to set.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetComboValue(Widget box, String value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, value); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(box, largs, num_largs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: UnsetSiblings
|
|
Packit |
b099d7 |
* Description: Unsets all sibling toggles of this toggle.
|
|
Packit |
b099d7 |
* Arguments: w - the toggle who's siblings we are unsetting.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UnsetSiblings(Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
WidgetList children;
|
|
Packit |
b099d7 |
Cardinal num_children;
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal i, num_largs = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNchildren, &children); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNnumChildren, &num_children); num_largs++;
|
|
Packit |
b099d7 |
XtGetValues(XtParent(w), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num_children; i++)
|
|
Packit |
b099d7 |
XmToggleButtonSetState(children[i], (children[i] == w), False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: DisplayUserError
|
|
Packit |
b099d7 |
* Description: Displays an error message to the user.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* msg - the message to display.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* NOTE: If (msg == NULL) then the value of current_text will be placed
|
|
Packit |
b099d7 |
* in the text widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DisplayUserError(XmFontSelectorWidget fsw, String msg)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String temp;
|
|
Packit |
b099d7 |
if (msg != NULL) {
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the real text is already in current_text then do not
|
|
Packit |
b099d7 |
* attempt to get it out of the widget, just use what we have
|
|
Packit |
b099d7 |
* saved already, this hackery is necessary because of the
|
|
Packit |
b099d7 |
* wierd state machine that is in this code.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The problem being solved is that this should work if we call
|
|
Packit |
b099d7 |
* DisplayUserError if a user error is already being displayed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_current_text(fsw) != NULL) {
|
|
Packit |
b099d7 |
temp = XmFontS_current_text(fsw);
|
|
Packit |
b099d7 |
XmFontS_current_text(fsw) = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
temp = XmTextGetString(XmFontS_text(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmTextSetString(XmFontS_text(fsw), msg);
|
|
Packit |
b099d7 |
XmFontS_current_text(fsw) = temp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmProcessTraversal(XmFontS_text(fsw), XmTRAVERSE_CURRENT);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
if (XmFontS_current_text(fsw) == NULL)
|
|
Packit |
b099d7 |
return; /* noting to do. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
temp = XmFontS_current_text(fsw);
|
|
Packit |
b099d7 |
XmFontS_current_text(fsw) = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmTextSetString(XmFontS_text(fsw), temp);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetResolution
|
|
Packit |
b099d7 |
* Description: Sets the DPI toggles based on the FontData passed.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* cf - the font data to use.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetResolution(XmFontSelectorWidget fsw, FontData *cf)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean set75, set100, setAny;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( cf->resolution_x != cf->resolution_y )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
set75 = False;
|
|
Packit |
b099d7 |
set100 = False;
|
|
Packit |
b099d7 |
setAny = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if ( XmFontS_font_info(fsw)->current_font->resolution_x == 75 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
set75 = True;
|
|
Packit |
b099d7 |
set100 = False;
|
|
Packit |
b099d7 |
setAny = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if ( XmFontS_font_info(fsw)->current_font->resolution_x == 100 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
set75 = False;
|
|
Packit |
b099d7 |
set100 = True;
|
|
Packit |
b099d7 |
setAny = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
set75 = False;
|
|
Packit |
b099d7 |
set100 = False;
|
|
Packit |
b099d7 |
setAny = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_dpi75(fsw), set75, False);
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_dpi100(fsw), set100, False);
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_dpiAny(fsw), setAny, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetDisplayedFont
|
|
Packit |
b099d7 |
* Description: Sets the font to be displayed.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* font - the font to be displayed.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetDisplayedFont(XmFontSelectorWidget fsw, String new_font)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean set;
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
FontData *cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(buf, "--%s-%s-%s----0-%d-%d-*--%s",
|
|
Packit |
b099d7 |
STAR_STRING, DEFAULT_WEIGHT, DEFAULT_SLANT,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->resolution,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->resolution, ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FillData(fsw, cf, buf); /* Put in default data. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (new_font != NULL) {
|
|
Packit |
b099d7 |
if (IsXlfdFont(new_font))
|
|
Packit |
b099d7 |
FillData(fsw, cf, new_font);
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
if (strchr(new_font, '-')) {
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[1] = new_font;
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNbadXlfdFont,
|
|
Packit |
b099d7 |
XmNbadXlfdFontMsg, params, num);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
ChangeMode(fsw, False, False);
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_family_box(fsw), new_font);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* For optomization of FamilyChanged Only.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->familyq = XrmStringToQuark(new_font);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
set = CheckFlag(cf->state, ITALIC);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), ITALIC, set);
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, set); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_italic_toggle(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
set = CheckFlag(cf->state, BOLD);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), BOLD, set);
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, set); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_bold_toggle(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_family_box(fsw), XrmQuarkToString(cf->familyq));
|
|
Packit |
b099d7 |
sprintf(buf, "%d", cf->point_size / POINT_DIVIDE);
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_size_box(fsw), buf);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetResolution(fsw, cf);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmCopyISOLatin1Lowered(buf, cf->spacing);
|
|
Packit |
b099d7 |
if ( strstr(buf, STAR_STRING) != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL | USER_FIXED, True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if ( strstr(buf, DEFAULT_FIXED_SPACING) != NULL ||
|
|
Packit |
b099d7 |
strstr(buf, OTHER_FIXED_SPACING) != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED, True);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if ( strstr(buf, PROPORTIONAL_SPACING) != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL, True);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL | USER_FIXED, True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->familyq = NULLQUARK; /* work around FamilyChanged Optomization. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FamilyChanged(XmFontS_family_box(fsw), (XtPointer) fsw, NULL);
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Routines for handling when the change from other <--> xlfd mode
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: AddToXlfdOnlyList
|
|
Packit |
b099d7 |
* Description: Adds a widget to the xlfd only list.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector.
|
|
Packit |
b099d7 |
* w - the widget to add.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddToXlfdOnlyList(XmFontSelectorWidget fsw, Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int num = (int) XmFontS_num_xlfd_only(fsw);
|
|
Packit |
b099d7 |
int alloc = (int) XmFontS_alloc_xlfd_only(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (num >= alloc) {
|
|
Packit |
b099d7 |
alloc += WIDGET_LIST_INC;
|
|
Packit |
b099d7 |
XmFontS_xlfd_only(fsw) = (WidgetList) XtRealloc((XtPointer)
|
|
Packit |
b099d7 |
XmFontS_xlfd_only(fsw),
|
|
Packit |
b099d7 |
sizeof(Widget) * alloc);
|
|
Packit |
b099d7 |
XmFontS_alloc_xlfd_only(fsw) = alloc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_xlfd_only(fsw)[num] = w;
|
|
Packit |
b099d7 |
(XmFontS_num_xlfd_only(fsw))++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: AddToXlfdSensitiveList
|
|
Packit |
b099d7 |
* Description: Adds a widget to the xlfd sensitive list.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector.
|
|
Packit |
b099d7 |
* w - the widget to add.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddToXlfdSensitiveList(XmFontSelectorWidget fsw, Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int num = (int) XmFontS_num_xlfd_sensitive(fsw);
|
|
Packit |
b099d7 |
int alloc = (int) XmFontS_alloc_xlfd_sensitive(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (num >= alloc) {
|
|
Packit |
b099d7 |
alloc += WIDGET_LIST_INC;
|
|
Packit |
b099d7 |
XmFontS_xlfd_sensitive(fsw) = (WidgetList) XtRealloc((XtPointer)
|
|
Packit |
b099d7 |
XmFontS_xlfd_sensitive(fsw),
|
|
Packit |
b099d7 |
sizeof(Widget)* alloc);
|
|
Packit |
b099d7 |
XmFontS_alloc_xlfd_sensitive(fsw) = alloc;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_xlfd_sensitive(fsw)[num] = w;
|
|
Packit |
b099d7 |
(XmFontS_num_xlfd_sensitive(fsw))++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ChangeMode
|
|
Packit |
b099d7 |
* Description: Changes the mode of the font selector.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selector widget.
|
|
Packit |
b099d7 |
* xlfd_mode - If True then change to xlfd mode,
|
|
Packit |
b099d7 |
* otherwize change to other mode.
|
|
Packit |
b099d7 |
* force - For other mode - True if we're changing modes
|
|
Packit |
b099d7 |
* false if we're displaying a font
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeMode(XmFontSelectorWidget fsw, Boolean xlfd_mode, Boolean force)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
register WidgetList widgets;
|
|
Packit |
b099d7 |
register int i, num;
|
|
Packit |
b099d7 |
XmString family_label;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_xlfd_mode(fsw) = xlfd_mode; /* remember our current mode. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = (int) XmFontS_num_xlfd_sensitive(fsw);
|
|
Packit |
b099d7 |
widgets = XmFontS_xlfd_sensitive(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, widgets++)
|
|
Packit |
b099d7 |
XtSetSensitive(*widgets, xlfd_mode);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = (int) XmFontS_num_xlfd_only(fsw);
|
|
Packit |
b099d7 |
widgets = XmFontS_xlfd_only(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, widgets++) {
|
|
Packit |
b099d7 |
if (xlfd_mode)
|
|
Packit |
b099d7 |
XtManageChild(*widgets);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtUnmanageChild(*widgets);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xlfd_mode) {
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
String temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
family_label = FAMILY_STRING(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Reset the values in the family and size boxes to "any"
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_family_box(fsw), temp);
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_size_box(fsw), temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->familyq = XrmStringToQuark(temp);
|
|
Packit |
b099d7 |
cf->point_size = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
UpdateBoldItalic(fsw);
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
family_label = OTHER_FONT_STRING(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetOtherList(fsw, force);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the proper toggle buttons.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings((xlfd_mode) ? XmFontS_xlfd_toggle(fsw) : XmFontS_other_toggle(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, family_label); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNeditable, !xlfd_mode); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_family_box(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetOtherList
|
|
Packit |
b099d7 |
* Description: Fills the other list with a complete list of
|
|
Packit |
b099d7 |
* all other fonts.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector widget.
|
|
Packit |
b099d7 |
* force - True if toggled by user, False if user
|
|
Packit |
b099d7 |
* is setting the current font
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetOtherList(XmFontSelectorWidget fsw, Boolean force)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs = 0;
|
|
Packit |
b099d7 |
register int count;
|
|
Packit |
b099d7 |
XmString *strs;
|
|
Packit |
b099d7 |
String *others = XmFontS_font_info(fsw)->others;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
register int i, num = XmFontS_font_info(fsw)->num_others;
|
|
Packit |
b099d7 |
String curFont = XmFontS_current_font(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the current font to the first one on the list.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (num > 0) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (force)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, *others); num_largs++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This only to allow FamilyChanged to be more efficient.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cf->familyq = XrmStringToQuark(*others);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, *others);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, curFont); num_largs++;
|
|
Packit |
b099d7 |
cf->familyq = XrmStringToQuark(curFont);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, curFont);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, " "); num_largs++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strs = (XmString *) XtMalloc(sizeof(XmString) * num);
|
|
Packit |
b099d7 |
for (i = count = 0; i < num; i++, others++)
|
|
Packit |
b099d7 |
strs[count++] = XmStringCreateLocalized(*others);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitems, strs); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNitemCount, count); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_family_box(fsw), largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (count--; count >= 0; count--)
|
|
Packit |
b099d7 |
XmStringFree(strs[count]);
|
|
Packit |
b099d7 |
XtFree((XtPointer) strs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These routines actually create the children of the font
|
|
Packit |
b099d7 |
* selector.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateChildren
|
|
Packit |
b099d7 |
* Description: Creates all children of the font selector.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector.
|
|
Packit |
b099d7 |
* args, num_args - the argument list.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateChildren(XmFontSelectorWidget fsw, ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
Widget temp, box;
|
|
Packit |
b099d7 |
String temp_txt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateTopWidgets(fsw, (Widget) fsw, args, num_args);
|
|
Packit |
b099d7 |
CreateMiddleArea(fsw, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfillOption, XmFillAll); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginHeight, 2); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("box", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
(Widget) fsw, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
temp_txt = _XmGetMBStringFromXmString(SAMPLE_TEXT(fsw));
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, temp_txt); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNeditMode, XmMULTI_LINE_EDIT); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNwordWrap, True); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNscrollHorizontal, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNrows, XmFontS_text_rows(fsw)); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
temp = XmCreateScrolledText(box, "text", margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtManageChild(XmFontS_text(fsw) = temp);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp_txt);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(temp, XmNlosingFocusCallback,
|
|
Packit |
b099d7 |
RemoveUserError, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(temp, XmNmodifyVerifyCallback,
|
|
Packit |
b099d7 |
RemoveUserError, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNskipAdjust, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
temp = XtCreateWidget("nameLabel", xmLabelWidgetClass,
|
|
Packit |
b099d7 |
(Widget) fsw, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_show_font_name(fsw))
|
|
Packit |
b099d7 |
XtManageChild(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_name_label(fsw) = temp;
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateTopWidgets
|
|
Packit |
b099d7 |
* Description: Creates the children in the middle area where
|
|
Packit |
b099d7 |
* fonts are selected.
|
|
Packit |
b099d7 |
* Arguments: fsw - the font selector.
|
|
Packit |
b099d7 |
* parent - the parent of the created widgets.
|
|
Packit |
b099d7 |
* args, num_args - the argument list.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateTopWidgets(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
Widget pane, button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNspacing, 2); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginWidth, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginHeight, 0); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
pane = XtCreateManagedWidget("topPane", xmPanedWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateFamilyBox(fsw, pane, args, num_args);
|
|
Packit |
b099d7 |
CreateSizesBox(fsw, pane, args, num_args);
|
|
Packit |
b099d7 |
CreateBoldItalicBox(fsw, pane, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, OPTION_STRING(fsw));num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshadowThickness, 2); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorOn, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNskipAdjust, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("optionButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
pane, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback,
|
|
Packit |
b099d7 |
ToggleMiddlePane, (XtPointer) fsw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateMiddleArea
|
|
Packit |
b099d7 |
* Description: Creates the widgets in the top left area.
|
|
Packit |
b099d7 |
* These are the family, size, bold/italic and proportional
|
|
Packit |
b099d7 |
* boxes.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateMiddleArea(XmFontSelectorWidget fsw, ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
Widget pane, top_pane;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmVERTICAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNspacing, 2); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginWidth, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginHeight, 0); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
pane = XtCreateWidget("middlePane", xmPanedWidgetClass,
|
|
Packit |
b099d7 |
(Widget) fsw, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
XmFontS_middle_pane(fsw) = pane;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNspacing, 2); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginWidth, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmarginHeight, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
top_pane = XtCreateManagedWidget("leftPane", xmPanedWidgetClass,
|
|
Packit |
b099d7 |
pane, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateFontChoiceBox(fsw, top_pane, args, num_args);
|
|
Packit |
b099d7 |
CreateResolutionBox(fsw, top_pane, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CreateSpacingBox(fsw, pane, args, num_args);
|
|
Packit |
b099d7 |
CreateOtherChoiceBox(fsw, pane, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateFamilyBox
|
|
Packit |
b099d7 |
* Description: Creates the family Family box.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateFamilyBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget c_box;
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
Arg *margs, largs[15];
|
|
Packit |
b099d7 |
String temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString,FAMILY_STRING(fsw)); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNcolumns, FAMILY_COLUMNS); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNpopupOffset, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNverticalMargin, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNhorizontalMargin, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNverify, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNeditable, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvisibleItemCount, VISIBILE_FAMILIES);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This may cause a problem in Motif I18N applications with 1.2
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, temp); num_largs++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
c_box = XtCreateManagedWidget("families", xmDropDownWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(c_box, XmNverifyTextCallback, FamilyChanged, (XtPointer)fsw);
|
|
Packit |
b099d7 |
XtAddCallback(c_box, XmNupdateTextCallback, FamilyChanged, (XtPointer)fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
XmFontS_family_box(fsw) = c_box;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateSizesBox
|
|
Packit |
b099d7 |
* Description: Creates the box for the sizes
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* NOTE: List is constructed later in UpdateSizes.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateSizesBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget c_box;
|
|
Packit |
b099d7 |
Cardinal num_largs;
|
|
Packit |
b099d7 |
Arg *margs, largs[15];
|
|
Packit |
b099d7 |
String temp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, SIZE_STRING(fsw)); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNcolumns, 4); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmaxLength, 3); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNpopupOffset, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNverticalMargin, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNhorizontalMargin, 0); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNverify, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNskipAdjust, True); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvisibleItemCount, VISIBILE_FAMILIES);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNvalue, temp); num_largs++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
c_box = XtCreateManagedWidget("sizes", xmDropDownWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree(temp);
|
|
Packit |
b099d7 |
AddToXlfdOnlyList(fsw, c_box);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(c_box, XmNverifyTextCallback, SizeChanged, (XtPointer)fsw);
|
|
Packit |
b099d7 |
XtAddCallback(c_box, XmNupdateTextCallback, SizeChanged, (XtPointer)fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
XmFontS_size_box(fsw) = c_box;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateBoldItalicBox
|
|
Packit |
b099d7 |
* Description: Creates the bold and italic choice box.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateBoldItalicBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget box, button;
|
|
Packit |
b099d7 |
Cardinal num_largs, num_str;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNskipAdjust, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("boldItalicBox", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
AddToXlfdOnlyList(fsw, box);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, BOLD_STRING(fsw));
|
|
Packit |
b099d7 |
num_str = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorType, XmN_OF_MANY); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNalignment, XmALIGNMENT_BEGINNING);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("boldButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XmFontS_bold_toggle(fsw) = button;
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, ToggleBold, (XtPointer)fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) ITALIC_STRING(fsw);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("italicButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XmFontS_italic_toggle(fsw) = button;
|
|
Packit |
b099d7 |
XtAddCallback(button,
|
|
Packit |
b099d7 |
XmNvalueChangedCallback, ToggleItalic, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateSpacingBox
|
|
Packit |
b099d7 |
* Description: Creates the spacing choice box.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateSpacingBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget box, button;
|
|
Packit |
b099d7 |
Cardinal num_largs, num_str, num_set;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfillOption, XmFillMajor); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNequalSize, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("spacingBox", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
AddToXlfdSensitiveList(fsw, box);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, False); num_set = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, PROPORTIONAL_STRING(fsw));
|
|
Packit |
b099d7 |
num_str = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorType, XmONE_OF_MANY); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNalignment, XmALIGNMENT_BEGINNING);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("proportionalButton",
|
|
Packit |
b099d7 |
xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, ToggleProportional,
|
|
Packit |
b099d7 |
(XtPointer) fsw);
|
|
Packit |
b099d7 |
XmFontS_proportional(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) MONO_SPACE_STRING(fsw);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("monoButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, ToggleFixed,
|
|
Packit |
b099d7 |
(XtPointer) fsw);
|
|
Packit |
b099d7 |
XmFontS_monospace(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) BOTH_STRING(fsw);
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) True;
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("bothButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, ToggleBothSpacing,
|
|
Packit |
b099d7 |
(XtPointer) fsw);
|
|
Packit |
b099d7 |
XmFontS_any_spacing(fsw) = button;
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED | USER_PROPORTIONAL, True);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateFontChoiceBox
|
|
Packit |
b099d7 |
* Description: Create a box to choose between xlfd fonts and others.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateFontChoiceBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget box, button;
|
|
Packit |
b099d7 |
Cardinal num_largs, num_str, num_set;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfillOption, XmFillMajor); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNequalSize, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("choiceBox", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, XLFD_STRING(fsw));
|
|
Packit |
b099d7 |
num_str = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, True); num_set = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorType, XmONE_OF_MANY); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNalignment, XmALIGNMENT_BEGINNING);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("xlfdButton",
|
|
Packit |
b099d7 |
xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XmFontS_xlfd_toggle(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, XlfdMode, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) OTHER_FONT_STRING(fsw);
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) False;
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("otherButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, OtherMode, (XtPointer) fsw);
|
|
Packit |
b099d7 |
XmFontS_other_toggle(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateResolution Box
|
|
Packit |
b099d7 |
* Description: Create the box to allow resolution choice(s).
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateResolutionBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget box, button;
|
|
Packit |
b099d7 |
Cardinal num_largs, num_str, num_set;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfillOption, XmFillMajor); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNequalSize, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("resolutionBox", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
AddToXlfdSensitiveList(fsw, box);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, False); num_set = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, DPI75_STRING(fsw));
|
|
Packit |
b099d7 |
num_str = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorType, XmONE_OF_MANY); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNalignment, XmALIGNMENT_BEGINNING);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) (XmFontS_font_info(fsw)->resolution == 75);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("dpi75Button", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, Toggle75DPI, fsw);
|
|
Packit |
b099d7 |
XmFontS_dpi75(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) DPI100_STRING(fsw);
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) (XmFontS_font_info(fsw)->resolution == 100);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("dpi100Button", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, Toggle100DPI, fsw);
|
|
Packit |
b099d7 |
XmFontS_dpi100(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) BOTH_STRING(fsw);
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) False;
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("anyButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback, ToggleBothDPI, fsw);
|
|
Packit |
b099d7 |
XmFontS_dpiAny(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateOtherChoiceBox
|
|
Packit |
b099d7 |
* Description: Creates the box to allow other choices to be made.
|
|
Packit |
b099d7 |
* Arguments: fsw - the file selection widget.
|
|
Packit |
b099d7 |
* parent - the parent of this area.
|
|
Packit |
b099d7 |
* args, num_args - arguments to the font selector (filtered).
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CreateOtherChoiceBox(XmFontSelectorWidget fsw, Widget parent,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget box, button;
|
|
Packit |
b099d7 |
Cardinal num_largs, num_str, num_set;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNorientation, XmHORIZONTAL); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNfillOption, XmFillMajor); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNequalSize, True); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNshowSash, False); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
box = XtCreateManagedWidget("otherChoiceBox", xmButtonBoxWidgetClass,
|
|
Packit |
b099d7 |
parent, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNset, False); num_set = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, SCALING_STRING(fsw));
|
|
Packit |
b099d7 |
num_str = num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNindicatorType, XmN_OF_MANY); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNalignment, XmALIGNMENT_BEGINNING);
|
|
Packit |
b099d7 |
num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) XmFontS_use_scaling(fsw);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("scalingButton", xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XmFontS_use_scaling_toggle(fsw) = button;
|
|
Packit |
b099d7 |
AddToXlfdSensitiveList(fsw, button);
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback,
|
|
Packit |
b099d7 |
ToggleScaling, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[num_str].value = (XtArgVal) SHOW_NAME_STRING(fsw);
|
|
Packit |
b099d7 |
margs[num_set].value = (XtArgVal) XmFontS_show_font_name(fsw);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("showNameButton",
|
|
Packit |
b099d7 |
xmToggleButtonWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XmFontS_show_font_toggle(fsw) = button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(button, XmNvalueChangedCallback,
|
|
Packit |
b099d7 |
ToggleNameWindow, (XtPointer) fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_option_menu(fsw) = CreateEncodingMenu(fsw, box, args, num_args);
|
|
Packit |
b099d7 |
AddToXlfdSensitiveList(fsw, XmFontS_option_menu(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CreateEncodingMenu
|
|
Packit |
b099d7 |
* Description: Creates the encoding option menu.
|
|
Packit |
b099d7 |
* Arguments: fsw - The font selector widget.
|
|
Packit |
b099d7 |
* parent - The parent of the option menu.
|
|
Packit |
b099d7 |
* args - Args used to create the font selector.
|
|
Packit |
b099d7 |
* Returns: The Id of the menu created.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget
|
|
Packit |
b099d7 |
CreateEncodingMenu(XmFontSelectorWidget fsw,
|
|
Packit |
b099d7 |
Widget box, ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget omenu, history = NULL, pulldownMenu, button, menuShell,
|
|
Packit |
b099d7 |
destroy_old_menu;
|
|
Packit |
b099d7 |
Cardinal num_largs, button_label;
|
|
Packit |
b099d7 |
int current, i;
|
|
Packit |
b099d7 |
Arg *margs, largs[10];
|
|
Packit |
b099d7 |
String *encodings;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Create the option menu only the first time through, otherwise
|
|
Packit |
b099d7 |
* simply blow away the encoding_menu_shell and recreate that.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
destroy_old_menu = XmFontS_encoding_menu_shell(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (destroy_old_menu == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs],
|
|
Packit |
b099d7 |
XmNrowColumnType, XmMENU_OPTION); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs],
|
|
Packit |
b099d7 |
XmNlabelString, ENCODING_ONLY_STRING(fsw)); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs],
|
|
Packit |
b099d7 |
XmNoptionLabel, ENCODING_ONLY_STRING(fsw)); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
omenu = XtCreateWidget("encodingOptionMenu", xmRowColumnWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
omenu = XmFontS_option_menu(fsw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNwidth, 1); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNheight, 1); num_largs++;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNancestorSensitive, True); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
menuShell = XtCreatePopupShell("menuShell", xmMenuShellWidgetClass,
|
|
Packit |
b099d7 |
box, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_encoding_menu_shell(fsw) = menuShell;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNrowColumnType, XmMENU_PULLDOWN); num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
pulldownMenu = XtCreateWidget("pulldownMenu",
|
|
Packit |
b099d7 |
xmRowColumnWidgetClass,
|
|
Packit |
b099d7 |
menuShell, margs, num_args + num_largs);
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNlabelString, ANY_STRING(fsw));
|
|
Packit |
b099d7 |
button_label = num_largs++;
|
|
Packit |
b099d7 |
margs = XtMergeArgLists(largs, num_largs, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget("button_0", xmPushButtonWidgetClass,
|
|
Packit |
b099d7 |
pulldownMenu, margs,
|
|
Packit |
b099d7 |
num_args + num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(button,
|
|
Packit |
b099d7 |
XmNactivateCallback, ChangeEncoding, (XtPointer) 0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
current = 0;
|
|
Packit |
b099d7 |
for (i = 1, encodings = ENCODING_LIST(fsw) ;
|
|
Packit |
b099d7 |
*encodings != NULL; i++, encodings++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char name[BUFSIZ];
|
|
Packit |
b099d7 |
XmString label = XmStringCreateLocalized(*encodings);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
margs[button_label].value = (XtArgVal) label;
|
|
Packit |
b099d7 |
sprintf(name, "button_%d", i);
|
|
Packit |
b099d7 |
button = XtCreateManagedWidget(name, xmPushButtonWidgetClass,
|
|
Packit |
b099d7 |
pulldownMenu, margs,
|
|
Packit |
b099d7 |
num_args + num_largs);
|
|
Packit |
b099d7 |
XmStringFree(label);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(button,
|
|
Packit |
b099d7 |
XmNactivateCallback, ChangeEncoding, (XtPointer) i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (streq(*encodings, ENCODING_STRING(fsw)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
current = i;
|
|
Packit |
b099d7 |
history = button;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) margs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNsubMenuId, pulldownMenu); num_largs++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* DMS - Fix 2/27/96
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (history)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmenuHistory, history); num_largs++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtSetValues(omenu, largs, num_largs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (destroy_old_menu != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtDestroyWidget(destroy_old_menu);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(omenu);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
if (current == 0)
|
|
Packit |
b099d7 |
ENCODING_STRING(fsw) = XtNewString(ANY_ENCODING);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
ENCODING_STRING(fsw) = XtNewString(ENCODING_LIST(fsw)[current - 1]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(omenu);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: CheckEncoding
|
|
Packit |
b099d7 |
* Description: Checks the encoding of a font to see if it matches
|
|
Packit |
b099d7 |
* the currently selected one, and returns true on a match.
|
|
Packit |
b099d7 |
* Arguments: fsw - The font selector widget.
|
|
Packit |
b099d7 |
* fam - The family that we are checking.
|
|
Packit |
b099d7 |
* Returns: True if the encodings matchd, or any is selected.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CheckEncoding(XmFontSelectorWidget fsw, FamilyInfo *fam)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
XrmQuark curr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (streq(ENCODING_STRING(fsw), ANY_ENCODING) || fam->encodings == NULL)
|
|
Packit |
b099d7 |
return(TRUE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
curr = XrmStringToQuark(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
for (i = 0; TRUE; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (fam->encodings[i] == curr)
|
|
Packit |
b099d7 |
return(True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fam->encodings[i] == 0 || i == fam->encoding_alloc)
|
|
Packit |
b099d7 |
return(False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Callbacks.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: FamilyChanged
|
|
Packit |
b099d7 |
* Description: Called when the user changes the family
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* junk - *** UNUSED ***.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
FamilyChanged(Widget w, XtPointer fsw_ptr, XtPointer junk)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
String str = XmDropDownGetValue(w);
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
XrmQuark familyq = XrmStringToQuark(str);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cf->familyq == familyq)
|
|
Packit |
b099d7 |
return; /* no change. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->familyq = familyq;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_xlfd_mode(fsw)) {
|
|
Packit |
b099d7 |
UpdateBoldItalic(fsw);
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, str);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) str);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SizeChanged
|
|
Packit |
b099d7 |
* Description: Called when the user changes the Size
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* junk - *** UNUSED ***.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SizeChanged(Widget w, XtPointer fsw_ptr, XtPointer junk)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
String str = XmDropDownGetValue(w);
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
short size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cf->point_size == (size = atoi(str) * 10))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree((char*)str);
|
|
Packit |
b099d7 |
return; /* no change. */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->point_size = size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
XtFree((XtPointer) str);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ChangeEncoding
|
|
Packit |
b099d7 |
* Description: Called when the user changes the encoding.
|
|
Packit |
b099d7 |
* Arguments: w - a widget child of the font sel.
|
|
Packit |
b099d7 |
* data - pointer to index of the option button.
|
|
Packit |
b099d7 |
* junk - ***unused
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeEncoding(Widget w, XtPointer data, XtPointer junk)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw;
|
|
Packit |
b099d7 |
FontData *cf;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ; !XtIsSubclass(w, xmFontSelectorWidgetClass); w = XtParent(w)) {}
|
|
Packit |
b099d7 |
fsw = (XmFontSelectorWidget) w;
|
|
Packit |
b099d7 |
cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((int) data == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
ENCODING_STRING(fsw) = XtNewString(ANY_ENCODING);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
ENCODING_STRING(fsw) = XtNewString(ENCODING_LIST(fsw)[(int) data - 1]);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleScaling
|
|
Packit |
b099d7 |
* Description: Called when the user toggles the Font Scaling button.
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleScaling(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
FamilyInfo *family;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
LongFlag map;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
if ((family = FindFamily(cf->familyq, XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_use_scaling(fsw) = info->set;
|
|
Packit |
b099d7 |
if (!info->set) {
|
|
Packit |
b099d7 |
Boolean map_bad = (map = SizeMapping(cf->point_size)) == 0;
|
|
Packit |
b099d7 |
Boolean bad_75 = (CheckFlag(XmFontS_user_state(fsw), DPI_75) &&
|
|
Packit |
b099d7 |
!CheckLongFlag(family->sizes_75, map));
|
|
Packit |
b099d7 |
Boolean bad_100 = (CheckFlag(XmFontS_user_state(fsw), DPI_100) &&
|
|
Packit |
b099d7 |
!CheckLongFlag(family->sizes_100, map));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (map_bad || bad_75 || (bad_100 && (cf->point_size != 0))) {
|
|
Packit |
b099d7 |
String temp = _XmGetMBStringFromXmString(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->point_size = 0; /* Reset to Any. */
|
|
Packit |
b099d7 |
SetComboValue(XmFontS_size_box(fsw), temp);
|
|
Packit |
b099d7 |
XtFree((XtPointer) temp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleBold
|
|
Packit |
b099d7 |
* Description: Called when the user toggles the bold button.
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleBold(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
FamilyInfo *family;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
if ((family = FindFamily(cf->familyq, XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (info->set)
|
|
Packit |
b099d7 |
cf->weightq = family->bold_nameq;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
cf->weightq = family->medium_nameq;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(cf->state), BOLD, info->set);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), BOLD, info->set);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleItalic
|
|
Packit |
b099d7 |
* Description: Called when the user toggles the italic button.
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleItalic(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
FamilyInfo *family;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
if ((family = FindFamily(cf->familyq, XmFontS_font_info(fsw)->family_info,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->num_families)) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String params[1];
|
|
Packit |
b099d7 |
Cardinal num = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
params[0] = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
dbg(); _XmWarningMsg((Widget) fsw, XmNcouldNotFindFamilyData,
|
|
Packit |
b099d7 |
XmNcouldNotFindFamilyDataMsg, params, num);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (info->set)
|
|
Packit |
b099d7 |
strcpy(cf->slant, XrmQuarkToString(family->italic_nameq));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
strcpy(cf->slant, XrmQuarkToString(family->upright_nameq));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(cf->state), ITALIC, info->set);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), ITALIC, info->set);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleMiddlePane
|
|
Packit |
b099d7 |
* Description: toggles whether or not the middle pane is shown
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleMiddlePane(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (info->set)
|
|
Packit |
b099d7 |
XtManageChild(XmFontS_middle_pane(fsw));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtUnmanageChild(XmFontS_middle_pane(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleNameWindow
|
|
Packit |
b099d7 |
* Description: toggles whether or not the middle pane is shown
|
|
Packit |
b099d7 |
* Arguments: w - *** UNUSED ***.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleNameWindow(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_show_font_name(fsw) = info->set;
|
|
Packit |
b099d7 |
if (info->set) {
|
|
Packit |
b099d7 |
XtManageChild(XmFontS_name_label(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_xlfd_mode(fsw)) {
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw,
|
|
Packit |
b099d7 |
BuildFontString(fsw,
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->current_font,
|
|
Packit |
b099d7 |
buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
String str = XmDropDownGetValue(XmFontS_family_box(fsw));
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, str);
|
|
Packit |
b099d7 |
XtFree((XtPointer) str);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtUnmanageChild(XmFontS_name_label(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: Toggle75DPI
|
|
Packit |
b099d7 |
* Description: Activated when the 75DPI button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Toggle75DPI(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_75, True);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_100, False);
|
|
Packit |
b099d7 |
cf->resolution_x = cf->resolution_y = 75;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: Toggle100DPI
|
|
Packit |
b099d7 |
* Description: Activated when the 100DPI button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Toggle100DPI(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_75, False);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_100, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cf->resolution_x = cf->resolution_y = 100;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleBothDPI
|
|
Packit |
b099d7 |
* Description: Activated when the Both DPI button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleBothDPI(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_75 | DPI_100, True);
|
|
Packit |
b099d7 |
cf->resolution_x = cf->resolution_y = 0; /* 0 means any */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleProportional
|
|
Packit |
b099d7 |
* Description: Activated when the Proportional button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleProportional(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL, True);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleFixed
|
|
Packit |
b099d7 |
* Description: Activated when the Fixed button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleFixed(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED, True);
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_PROPORTIONAL, False);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: ToggleBothSpacing
|
|
Packit |
b099d7 |
* Description: Activated when the Both (any) Spacing button is toggled.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ToggleBothSpacing(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
FontData * cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), USER_FIXED | USER_PROPORTIONAL, True);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateFixedProportional(fsw);
|
|
Packit |
b099d7 |
UpdateFamilies(fsw);
|
|
Packit |
b099d7 |
UpdateSizes(fsw);
|
|
Packit |
b099d7 |
DisplayCurrentFont(fsw, BuildFontString(fsw, cf, buf, BUFSIZ));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: XlfdMode
|
|
Packit |
b099d7 |
* Description: Called when the Xlfd Toggle is selected.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
XlfdMode(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ChangeMode(fsw, True, True); /* Set to Xlfd Mode. */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: OtherMode
|
|
Packit |
b099d7 |
* Description: Called when the Other Toggle is selected.
|
|
Packit |
b099d7 |
* w - the toggle button widget selected.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - the toggle button data.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
OtherMode(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
XmToggleButtonCallbackStruct *info;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
info = (XmToggleButtonCallbackStruct *) data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UnsetSiblings(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!info->set)
|
|
Packit |
b099d7 |
return; /* Do nothing on an unset. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ChangeMode(fsw, False, True); /* Set to other Mode */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: RemoveUserError
|
|
Packit |
b099d7 |
* Description: Removes a user error from the text widget.
|
|
Packit |
b099d7 |
* w - the text widget.
|
|
Packit |
b099d7 |
* fsw_ptr - pointer to the font selector widget.
|
|
Packit |
b099d7 |
* data - *** UNUSED ***.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
RemoveUserError(Widget w, XtPointer fsw_ptr, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) fsw_ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_current_text(fsw) == NULL)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DisplayUserError(fsw, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Semi-public routines.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: Class Initlialize
|
|
Packit |
b099d7 |
* Description: Initializes class-specific data (offsets)
|
|
Packit |
b099d7 |
* Arguments: none
|
|
Packit |
b099d7 |
* Returns: nothing
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* do nothing */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* ClassPartInitialize sets up the fast subclassing for the widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
#ifdef _NO_PROTO
|
|
Packit |
b099d7 |
ClassPartInitialize(w_class)
|
|
Packit |
b099d7 |
WidgetClass w_class ;
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
ClassPartInitialize(WidgetClass w_class)
|
|
Packit |
b099d7 |
#endif /* _NO_PROTO */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmFastSubclassInit (w_class, XmFONTSELECTOR_BIT);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: Initialize
|
|
Packit |
b099d7 |
* Description: Called to initialize information specific
|
|
Packit |
b099d7 |
* to this widget.
|
|
Packit |
b099d7 |
* Arguments: req - what was originally requested.
|
|
Packit |
b099d7 |
* set - what will be created (our superclassed have
|
|
Packit |
b099d7 |
* already mucked with this)
|
|
Packit |
b099d7 |
* args, num_args - The arguments passed to
|
|
Packit |
b099d7 |
* the creation call.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(Widget request, Widget set, ArgList args, Cardinal * num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget)set;
|
|
Packit |
b099d7 |
ArgList f_args;
|
|
Packit |
b099d7 |
Cardinal f_num_args;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_user_state(fsw) = 0; /* Initialize user state to 0. */
|
|
Packit |
b099d7 |
XmFontS_xlfd_mode(fsw) = True; /* We start in Xlfd Mode. */
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw) = LoadFontInfo(fsw);
|
|
Packit |
b099d7 |
XmFontS_current_text(fsw) = NULL;
|
|
Packit |
b099d7 |
XmFontS_old_fontdata(fsw) = NULL;
|
|
Packit |
b099d7 |
XmFontS_old_fontlist(fsw) = NULL;
|
|
Packit |
b099d7 |
XmFontS_encoding_menu_shell(fsw) = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_xlfd_only(fsw) = XmFontS_xlfd_sensitive(fsw) = NULL;
|
|
Packit |
b099d7 |
XmFontS_num_xlfd_only(fsw) = XmFontS_alloc_xlfd_only(fsw) = 0;
|
|
Packit |
b099d7 |
XmFontS_num_xlfd_sensitive(fsw) = XmFontS_alloc_xlfd_sensitive(fsw) = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_get_font(fsw) = (String) XtMalloc(sizeof(char) * GET_FONT_SIZE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* duplicate strings so that user can query them later */
|
|
Packit |
b099d7 |
ANY_STRING(fsw) = XmStringCopy(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
BOLD_STRING(fsw) = XmStringCopy(BOLD_STRING(fsw));
|
|
Packit |
b099d7 |
BOTH_STRING(fsw) = XmStringCopy(BOTH_STRING(fsw));
|
|
Packit |
b099d7 |
DPI100_STRING(fsw) = XmStringCopy(DPI100_STRING(fsw));
|
|
Packit |
b099d7 |
DPI75_STRING(fsw) = XmStringCopy(DPI75_STRING(fsw));
|
|
Packit |
b099d7 |
ENCODING_ONLY_STRING(fsw) = XmStringCopy(ENCODING_ONLY_STRING(fsw));
|
|
Packit |
b099d7 |
FAMILY_STRING(fsw) = XmStringCopy(FAMILY_STRING(fsw));
|
|
Packit |
b099d7 |
ITALIC_STRING(fsw) = XmStringCopy(ITALIC_STRING(fsw));
|
|
Packit |
b099d7 |
LOWER_ANY_STRING(fsw) = XmStringCopy(LOWER_ANY_STRING(fsw));
|
|
Packit |
b099d7 |
MONO_SPACE_STRING(fsw) = XmStringCopy(MONO_SPACE_STRING(fsw));
|
|
Packit |
b099d7 |
OPTION_STRING(fsw) = XmStringCopy(OPTION_STRING(fsw));
|
|
Packit |
b099d7 |
OTHER_FONT_STRING(fsw) = XmStringCopy(OTHER_FONT_STRING(fsw));
|
|
Packit |
b099d7 |
PROPORTIONAL_STRING(fsw) = XmStringCopy(PROPORTIONAL_STRING(fsw));
|
|
Packit |
b099d7 |
SAMPLE_TEXT(fsw) = XmStringCopy(SAMPLE_TEXT(fsw));
|
|
Packit |
b099d7 |
SCALING_STRING(fsw) = XmStringCopy(SCALING_STRING(fsw));
|
|
Packit |
b099d7 |
SHOW_NAME_STRING(fsw) = XmStringCopy(SHOW_NAME_STRING(fsw));
|
|
Packit |
b099d7 |
SIZE_STRING(fsw) = XmStringCopy(SIZE_STRING(fsw));
|
|
Packit |
b099d7 |
XLFD_STRING(fsw) = XmStringCopy(XLFD_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ENCODING_STRING(fsw) = XtNewString(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
/* XmFontS_current_font(fsw) handled internally */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
String *encodings = ENCODING_LIST(fsw);
|
|
Packit |
b099d7 |
String *newList;
|
|
Packit |
b099d7 |
for (i=0, encodings = ENCODING_LIST(fsw); *encodings != NULL; i++, encodings++)
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
i++;
|
|
Packit |
b099d7 |
newList = (String*)XtMalloc(sizeof(String) * i);
|
|
Packit |
b099d7 |
for (i=0, encodings = ENCODING_LIST(fsw); *encodings != NULL; i++, encodings++)
|
|
Packit |
b099d7 |
newList[i] = XtNewString(*encodings);
|
|
Packit |
b099d7 |
newList[i] = NULL;
|
|
Packit |
b099d7 |
ENCODING_LIST(fsw) = newList;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmFilterArgs(args, *num_args,
|
|
Packit |
b099d7 |
xm_std_constraint_filter, &f_args, &f_num_args);
|
|
Packit |
b099d7 |
CreateChildren(fsw, f_args, f_num_args);
|
|
Packit |
b099d7 |
XtFree((XtPointer) f_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_75,
|
|
Packit |
b099d7 |
(XmFontS_font_info(fsw)->resolution == 75));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetFlag(&(XmFontS_user_state(fsw)), DPI_100,
|
|
Packit |
b099d7 |
(XmFontS_font_info(fsw)->resolution == 100));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Load default information into the current font.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontS_font_info(fsw)->current_font = (FontData *) XtMalloc(sizeof(FontData));
|
|
Packit |
b099d7 |
SetDisplayedFont(fsw, XmFontS_current_font(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: Destroy
|
|
Packit |
b099d7 |
* Description: Called when the widget is destroyed, cleans up.
|
|
Packit |
b099d7 |
* Arguments: w - the widget.
|
|
Packit |
b099d7 |
* Returns: none.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i, num;
|
|
Packit |
b099d7 |
register String *ptr;
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget)w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_old_fontdata(fsw) != NULL) {
|
|
Packit |
b099d7 |
XFreeFont(XtDisplay(w), XmFontS_old_fontdata(fsw));
|
|
Packit |
b099d7 |
XmFontListFree(XmFontS_old_fontlist(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
num = XmFontS_font_info(fsw)->num_others;
|
|
Packit |
b099d7 |
ptr = XmFontS_font_info(fsw)->others;
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++, ptr++)
|
|
Packit |
b099d7 |
XtFree(*ptr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < XmFontS_font_info(fsw)->num_families; i++)
|
|
Packit |
b099d7 |
XtFree((char*)XmFontS_font_info(fsw)->family_info[i].encodings);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_get_font(fsw));
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_xlfd_only(fsw));
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_xlfd_sensitive(fsw));
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_font_info(fsw)->others);
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_font_info(fsw)->family_info);
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_font_info(fsw)->current_font);
|
|
Packit |
b099d7 |
XtFree((XtPointer) XmFontS_font_info(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(BOLD_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(BOTH_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(DPI100_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(DPI75_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(ENCODING_ONLY_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(FAMILY_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(ITALIC_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(LOWER_ANY_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(MONO_SPACE_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(OPTION_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(OTHER_FONT_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(PROPORTIONAL_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(SAMPLE_TEXT(fsw));
|
|
Packit |
b099d7 |
XmStringFree(SCALING_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(SHOW_NAME_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(SIZE_STRING(fsw));
|
|
Packit |
b099d7 |
XmStringFree(XLFD_STRING(fsw));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(ENCODING_STRING(fsw));
|
|
Packit |
b099d7 |
/* current font handled internally */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
String *encodings;
|
|
Packit |
b099d7 |
for (encodings = ENCODING_LIST(fsw); *encodings != NULL; i++, encodings++)
|
|
Packit |
b099d7 |
XtFree(*encodings);
|
|
Packit |
b099d7 |
XtFree((char*)ENCODING_LIST(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: SetValues
|
|
Packit |
b099d7 |
* Description: Called when some widget data needs to be modified on-
|
|
Packit |
b099d7 |
* the-fly.
|
|
Packit |
b099d7 |
* Arguments: old - the current (old) widget values.
|
|
Packit |
b099d7 |
* request - before superclassed have changed things.
|
|
Packit |
b099d7 |
* set - what will acutally be the new values.
|
|
Packit |
b099d7 |
* args, num_args - The arguments passed to the set
|
|
Packit |
b099d7 |
* values call.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(Widget old, Widget request, Widget set,
|
|
Packit |
b099d7 |
ArgList args, Cardinal * num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg largs[10];
|
|
Packit |
b099d7 |
Cardinal num_largs, i;
|
|
Packit |
b099d7 |
XmFontSelectorWidget old_fsw = (XmFontSelectorWidget) old;
|
|
Packit |
b099d7 |
XmFontSelectorWidget set_fsw = (XmFontSelectorWidget) set;
|
|
Packit |
b099d7 |
Boolean new_encoding_list = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Pass argument list through to all children.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ArgList f_args;
|
|
Packit |
b099d7 |
Cardinal f_num_args;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmFilterArgs(args, *num_args,
|
|
Packit |
b099d7 |
xm_std_constraint_filter, &f_args, &f_num_args);
|
|
Packit |
b099d7 |
_XmSetValuesOnChildren(set, f_args, f_num_args);
|
|
Packit |
b099d7 |
XtFree((XtPointer) f_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < *num_args; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (streq(args[i].name, XmNencodingList))
|
|
Packit |
b099d7 |
new_encoding_list = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* ||| Protect against any of the strings being changed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_current_font(old_fsw) != XmFontS_current_font(set_fsw)) {
|
|
Packit |
b099d7 |
SetDisplayedFont(set_fsw, XmFontS_current_font(set_fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_show_font_name(old_fsw) != XmFontS_show_font_name(set_fsw)) {
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_show_font_toggle(set_fsw),
|
|
Packit |
b099d7 |
XmFontS_show_font_name(set_fsw), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_use_scaling(old_fsw) != XmFontS_use_scaling(set_fsw)) {
|
|
Packit |
b099d7 |
XmToggleButtonSetState(XmFontS_use_scaling_toggle(set_fsw),
|
|
Packit |
b099d7 |
XmFontS_use_scaling(set_fsw), True);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (new_encoding_list)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget parent = XtParent(XmFontS_option_menu(set_fsw));
|
|
Packit |
b099d7 |
XmFontS_option_menu(set_fsw) = CreateEncodingMenu(set_fsw,
|
|
Packit |
b099d7 |
parent, NULL, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* if new_encoding_list is true, then CreateEncodingMenu has already
|
|
Packit |
b099d7 |
** freed and recreated the ENCODING_STRING, so avoid redoing it
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (new_encoding_list ||
|
|
Packit |
b099d7 |
(((ENCODING_STRING(old_fsw) != NULL) && (ENCODING_STRING(set_fsw) != NULL))
|
|
Packit |
b099d7 |
&& !streq(ENCODING_STRING(old_fsw), ENCODING_STRING(set_fsw)))
|
|
Packit |
b099d7 |
)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char buf[BUFSIZ];
|
|
Packit |
b099d7 |
int current, i;
|
|
Packit |
b099d7 |
String *encodings = ENCODING_LIST(set_fsw);
|
|
Packit |
b099d7 |
Widget button;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!new_encoding_list)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree(ENCODING_STRING(old_fsw));
|
|
Packit |
b099d7 |
ENCODING_STRING(set_fsw) = XtNewString(ENCODING_STRING(set_fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* some of this code is probably a duplicate of CreateEncodingMenu */
|
|
Packit |
b099d7 |
for (current = 0, i = 1 ; *encodings != NULL; i++, encodings++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the default encoding matches this one then make this
|
|
Packit |
b099d7 |
* the current item in the option menu.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (strcmp(*encodings, ENCODING_STRING(set_fsw)) == 0)
|
|
Packit |
b099d7 |
current = i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(buf, "*button_%d", current);
|
|
Packit |
b099d7 |
if ((button =
|
|
Packit |
b099d7 |
XtNameToWidget(XtParent(XmFontS_option_menu(set_fsw)), buf)) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNmenuHistory, button); num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_option_menu(set_fsw), largs, num_largs);
|
|
Packit |
b099d7 |
ChangeEncoding((Widget) set_fsw, (XtPointer) current, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* ||| ERROR. */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmFontS_text_rows(old_fsw) != XmFontS_text_rows(set_fsw)) {
|
|
Packit |
b099d7 |
num_largs = 0;
|
|
Packit |
b099d7 |
XtSetArg(largs[num_largs], XmNrows, XmFontS_text_rows(set_fsw));num_largs++;
|
|
Packit |
b099d7 |
XtSetValues(XmFontS_text(set_fsw), largs, num_largs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean reset = False;
|
|
Packit |
b099d7 |
#define DoCheck(old_one,new_one) { reset = False; if (old_one != new_one) { XmStringFree(old_one); new_one = XmStringCopy(new_one); reset = True; } }
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
DoCheck( ANY_STRING(old_fsw), ANY_STRING(set_fsw)); /* PUNT! or else we need to check if on-screen right now */
|
|
Packit |
b099d7 |
DoCheck( BOLD_STRING(old_fsw), BOLD_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_bold_toggle(set_fsw), XmNlabelString, BOLD_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( BOTH_STRING(old_fsw), BOTH_STRING(set_fsw)); if (reset) { XtVaSetValues( XmFontS_dpiAny(set_fsw), XmNlabelString, BOTH_STRING(set_fsw), NULL); XtVaSetValues( XmFontS_any_spacing(set_fsw), XmNlabelString, BOTH_STRING(set_fsw), NULL); }
|
|
Packit |
b099d7 |
DoCheck( DPI100_STRING(old_fsw), DPI100_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_dpi100(set_fsw), XmNlabelString, DPI100_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( DPI75_STRING(old_fsw), DPI75_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_dpi75(set_fsw), XmNlabelString, DPI75_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( ENCODING_ONLY_STRING(old_fsw), ENCODING_ONLY_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_option_menu(set_fsw), XmNlabelString, ENCODING_ONLY_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( FAMILY_STRING(old_fsw), FAMILY_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_family_box(set_fsw), XmNlabelString, FAMILY_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( ITALIC_STRING(old_fsw), ITALIC_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_italic_toggle(set_fsw), XmNlabelString, ITALIC_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( LOWER_ANY_STRING(old_fsw), LOWER_ANY_STRING(set_fsw)); /* PUNT! or else we need to check if on-screen right now */
|
|
Packit |
b099d7 |
DoCheck( MONO_SPACE_STRING(old_fsw), MONO_SPACE_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_monospace(set_fsw), XmNlabelString, MONO_SPACE_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( OPTION_STRING(old_fsw), OPTION_STRING(set_fsw)); if (reset) XtVaSetValues( XtNameToWidget((Widget)set_fsw, "*optionButton"), XmNlabelString, OPTION_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( OTHER_FONT_STRING(old_fsw), OTHER_FONT_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_other_toggle(set_fsw), XmNlabelString, OTHER_FONT_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( PROPORTIONAL_STRING(old_fsw), PROPORTIONAL_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_proportional(set_fsw), XmNlabelString, PROPORTIONAL_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( SAMPLE_TEXT(old_fsw), SAMPLE_TEXT(set_fsw));
|
|
Packit |
b099d7 |
if (reset)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char * temp_txt = _XmGetMBStringFromXmString(SAMPLE_TEXT(set_fsw));
|
|
Packit |
b099d7 |
XtVaSetValues( XmFontS_text(set_fsw), XmNlabelString, temp_txt, NULL);
|
|
Packit |
b099d7 |
XtFree(temp_txt);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
DoCheck( SCALING_STRING(old_fsw), SCALING_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_use_scaling_toggle(set_fsw), XmNlabelString, SCALING_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( SHOW_NAME_STRING(old_fsw), SHOW_NAME_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_show_font_toggle(set_fsw), XmNlabelString, SHOW_NAME_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( SIZE_STRING(old_fsw), SIZE_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_size_box(set_fsw), XmNlabelString, SIZE_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
DoCheck( XLFD_STRING(old_fsw), XLFD_STRING(set_fsw)); if (reset) XtVaSetValues( XmFontS_xlfd_toggle(set_fsw), XmNlabelString, XLFD_STRING(set_fsw), NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#undef DoCheck
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (False);
|
|
Packit |
b099d7 |
} /* SetValues */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: GetValuesHook
|
|
Packit |
b099d7 |
* Description: Packages up the value of the current font.
|
|
Packit |
b099d7 |
* Arguments: w - The widget.
|
|
Packit |
b099d7 |
* args, num_args - The arguments passed to the get
|
|
Packit |
b099d7 |
* values call.
|
|
Packit |
b099d7 |
* Returns: none
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesHook(Widget w, ArgList args, Cardinal * num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontSelectorWidget fsw = (XmFontSelectorWidget) w;
|
|
Packit |
b099d7 |
FontData * cf;
|
|
Packit |
b099d7 |
String *str_ptr;
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < *num_args; i++) {
|
|
Packit |
b099d7 |
if (streq(args[i].name, XmNcurrentFont))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cf = XmFontS_font_info(fsw)->current_font;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
str_ptr = (String *) args[i].value;
|
|
Packit |
b099d7 |
if (XmFontS_xlfd_mode(fsw)) {
|
|
Packit |
b099d7 |
BuildFontString(fsw, cf, XmFontS_get_font(fsw), GET_FONT_SIZE);
|
|
Packit |
b099d7 |
*str_ptr = XmFontS_get_font(fsw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
*str_ptr = XrmQuarkToString(cf->familyq);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNanyString)) *(XmString*)args[i].value = XmStringCopy(ANY_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNbothString)) *(XmString*)args[i].value = XmStringCopy(BOLD_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNboldString)) *(XmString*)args[i].value = XmStringCopy(BOTH_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmN100DPIstring)) *(XmString*)args[i].value = XmStringCopy(DPI100_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmN75DPIstring)) *(XmString*)args[i].value = XmStringCopy(DPI75_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNencodingString)) *(XmString*)args[i].value = XmStringCopy(ENCODING_ONLY_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNfamilyString)) *(XmString*)args[i].value = XmStringCopy(FAMILY_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNitalicString)) *(XmString*)args[i].value = XmStringCopy(ITALIC_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNanyLowerString)) *(XmString*)args[i].value = XmStringCopy(LOWER_ANY_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNmonoSpaceString)) *(XmString*)args[i].value = XmStringCopy(MONO_SPACE_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNoptionString)) *(XmString*)args[i].value = XmStringCopy(OPTION_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNotherString)) *(XmString*)args[i].value = XmStringCopy(OTHER_FONT_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNpropSpaceString)) *(XmString*)args[i].value = XmStringCopy(PROPORTIONAL_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNsampleText)) *(XmString*)args[i].value = XmStringCopy(SAMPLE_TEXT(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNscalingString)) *(XmString*)args[i].value = XmStringCopy(SCALING_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNshowNameString)) *(XmString*)args[i].value = XmStringCopy(SHOW_NAME_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNsizeString)) *(XmString*)args[i].value = XmStringCopy(SIZE_STRING(fsw));
|
|
Packit |
b099d7 |
else if (streq(args[i].name, XmNxlfdString)) *(XmString*)args[i].value = XmStringCopy(XLFD_STRING(fsw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Public routines.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Function Name: XmCreateFontSelector
|
|
Packit |
b099d7 |
* Description: Creation Routine for UIL and ADA.
|
|
Packit |
b099d7 |
* Arguments: parent - the parent widget.
|
|
Packit |
b099d7 |
* name - the name of the widget.
|
|
Packit |
b099d7 |
* args, num_args - the number and list of args.
|
|
Packit |
b099d7 |
* Returns: The created widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateFontSelector(Widget parent, String name,
|
|
Packit |
b099d7 |
ArgList args, Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return(XtCreateWidget(name, xmFontSelectorWidgetClass,
|
|
Packit |
b099d7 |
parent, args, num_args));
|
|
Packit |
b099d7 |
}
|