/* 
 * FontSB.h
 *
 * (c) Copyright 1991-1994 Adobe Systems Incorporated.
 * All rights reserved.
 * 
 * Permission to use, copy, modify, distribute, and sublicense this software
 * and its documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notices appear in all copies and that
 * both those copyright notices and this permission notice appear in
 * supporting documentation and that the name of Adobe Systems Incorporated
 * not be used in advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.  No trademark license
 * to use the Adobe trademarks is hereby granted.  If the Adobe trademark
 * "Display PostScript"(tm) is used to describe this software, its
 * functionality or for any other purpose, such use shall be limited to a
 * statement that this software works in conjunction with the Display
 * PostScript system.  Proper trademark attribution to reflect Adobe's
 * ownership of the trademark shall be given whenever any such reference to
 * the Display PostScript system is made.
 * 
 * ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR
 * ANY PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
 * ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NON- INFRINGEMENT OF THIRD PARTY RIGHTS.  IN NO EVENT SHALL ADOBE BE LIABLE
 * TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  ADOBE WILL NOT
 * PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE SOFTWARE.
 * 
 * Adobe, PostScript, and Display PostScript are trademarks of Adobe Systems
 * Incorporated which may be registered in certain jurisdictions
 * 
 * Author:  Adobe Systems Incorporated
 */

#ifndef _FontSelectionBox_h
#define _FontSelectionBox_h

/* New resouce names and classes */

#define XtNcontext "context"
#define XtCContext "Context"
#define XtNpreviewString "previewString"
#define XtCPreviewString "PreviewString"
#define XtNsizes "sizes"
#define XtCSizes "Sizes"
#define XtNsizeCount "sizeCount"
#define XtCSizeCount "SizeCount"
#define XtNdefaultResourcePath "defaultResourcePath"
#define XtCDefaultResourcePath "DefaultResourcePath"
#define XtNresourcePathOverride "resourcePathOverride"
#define XtCResourcePathOverride "ResourcePathOverride"
#define XtNuseFontName "useFontName"
#define XtCUseFontName "UseFontName"
#define XtNfontName "fontName"
#define XtCFontName "FontName"
#define XtNfontFamily "fontFamily"
#define XtCFontFamily "FontFamily"
#define XtNfontFace "fontFace"
#define XtCFontFace "FontFace"
#define XtNfontSize "fontSize"
#define XtCFontSize "FontSize"
#define XtNfontBlend "fontBlend"
#define XtCFontBlend "FontBlend"
#define XtNfontNameMultiple "fontNameMultiple"
#define XtCFontNameMultiple "FontNameMultiple"
#define XtNfontFamilyMultiple "fontFamilyMultiple"
#define XtCFontFamilyMultiple "FontFamilyMultiple"
#define XtNfontFaceMultiple "fontFaceMultiple"
#define XtCFontFaceMultiple "FontFaceMultiple"
#define XtNfontSizeMultiple "fontSizeMultiple"
#define XtCFontSizeMultiple "FontSizeMultiple"
#define XtNgetServerFonts "getServerFonts"
#define XtCGetServerFonts "GetServerFonts"
#define XtNgetAFM "getAFM"
#define XtCGetAFM "GetAFM"
#define XtNautoPreview "autoPreview"
#define XtCAutoPreview "AutoPreview"
#define XtNpreviewOnChange "previewOnChange"
#define XtCPreviewOnChange "PreviewOnChange"
#define XtNundefUnusedFonts "undefUnusedFonts"
#define XtCUndefUnusedFonts "UndefUnusedFonts"
#define XtNmaxPendingDeletes "maxPendingDeletes"
#define XtCMaxPendingDeletes "MaxPendingDeletes"
#define XtNmakeFontsShared "makeFontsShared"
#define XtCMakeFontsShared "MakeFontsShared"
#define XtNshowSampler "showSampler"
#define XtCShowSampler "ShowSampler"
#define XtNshowSamplerButton "showSamplerButton"
#define XtCShowSamplerButton "ShowSamplerButton"
#define XtNtypographicSort "typographicSort"
#define XtCTypographicSort "TypographicSort"
#define XtNokCallback "okCallback"
#define XtNapplyCallback "applyCallback"
#define XtNresetCallback "resetCallback"
#define XtNcancelCallback "cancelCallback"
#define XtNvalidateCallback "validateCallback"
#define XtNfaceSelectCallback "faceSelectCallback"
#define XtNvalueChangedCallback "valueChangedCallback"
#define XtNcreateSamplerCallback "createSamplerCallback"
#define XtNcreateCreatorCallback "createCreatorCallback"

/* Read-only resources for all the subwidgets */

#define XtNpaneChild "paneChild"
#define XtNpreviewChild "previewChild"
#define XtNpanelChild "panelChild"
#define XtNfamilyLabelChild "familyLabelChild"
#define XtNfamilyMultipleLabelChild "familyMultipleLabelChild"
#define XtNfamilyScrolledListChild "familyScrolledListChild"
#define XtNfaceLabelChild "faceLabelChild"
#define XtNfaceMultipleLabelChild "faceMultipleLabelChild"
#define XtNfaceScrolledListChild "faceScrolledListChild"
#define XtNsizeLabelChild "sizeLabelChild"
#define XtNsizeTextFieldChild "sizeTextFieldChild"
#define XtNsizeOptionMenuChild "sizeOptionMenuChild"
#define XtNsizeMultipleLabelChild "sizeMultipleLabelChild"
#define XtNsamplerButtonChild "samplerButtonChild"
#define XtNpreviewButtonChild "previewButtonChild"
#define XtNseparatorChild "separatorChild"
#define XtNokButtonChild "okButtonChild"
#define XtNapplyButtonChild "applyButtonChild"
#define XtNresetButtonChild "resetButtonChild"
#define XtNcancelButtonChild "cancelButtonChild"
#define XtNmultipleMasterButtonChild "multipleMasterButtonChild"

/* New resource types */

#define XtRFloatList "FloatList"
#define XtRDPSContext "DPSContext"

/* Class record constants */

extern WidgetClass fontSelectionBoxWidgetClass;

typedef struct _FontSelectionBoxRec *FontSelectionBoxWidget;

typedef enum {FSBNone, FSBOne, FSBMultiple} FSBSelectionType;
typedef enum {FSBOK, FSBApply, FSBReset, FSBCancel,
	      FSBValueChanged} FSBCallbackReason;

typedef struct {
    FSBCallbackReason reason;
    String family;
    String face;
    float size;
    String name;
    String afm_filename;
    FSBSelectionType family_selection;
    FSBSelectionType face_selection;
    FSBSelectionType size_selection;
    FSBSelectionType name_selection;
    Boolean afm_present;
    Boolean unused;
    String blend;
    String base_name;
    float axis_percent[4];
} FSBCallbackRec;

typedef struct {
    FSBCallbackReason reason;
    String family;
    String face;
    float size;
    String name;
    String afm_filename;
    FSBSelectionType family_selection;
    FSBSelectionType face_selection;
    FSBSelectionType size_selection;
    FSBSelectionType name_selection;
    Boolean afm_present;
    Boolean doit;
    String blend;
    String base_name;
    float axis_percent[4];
} FSBValidateCallbackRec;

typedef struct {
    String *available_faces;
    int num_available_faces;
    String current_face;
    String new_face;
} FSBFaceSelectCallbackRec;

typedef struct {
    Widget sampler;
    Widget sampler_shell;
} FSBCreateSamplerCallbackRec;

typedef struct {
    Widget creator;
    Widget creator_shell;
} FSBCreateCreatorCallbackRec;

typedef enum {FSBAddBlend, FSBReplaceBlend, FSBDeleteBlend} FSBBlendAction;

/* Convenience and info routines */

#ifdef _NO_PROTO

extern void FSBSetFontName();
extern void FSBSetFontFamilyFace();
extern void FSBSetFontSize();
extern void FSBRefreshFontList();
extern void FSBGetFamilyList();
extern void FSBGetFaceList();
extern void FSBUndefineUnusedFonts();
extern Boolean FSBDownloadFontName();
extern Boolean FSBMatchFontFace();
extern void FSBFontNameToFamilyFace();
extern void FSBFontFamilyFaceToName();
extern String FSBFindAFM();
extern String FSBFindFontFile();
extern void FSBGetTextDimensions();
extern void FSBSetFontFamilyFaceBlend();
extern void FSBFontNameToFamilyFaceBlend();
extern void FSBFontFamilyFaceBlendToName();
extern void FSBGetBlendList();
extern void FSBGetBlendInfo();
extern Boolean FSBChangeBlends();

#else /* _NO_PROTO */

#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif

/* Note use of Bool and double in prototypes:  this makes the library
   work correctly when linked with no-prototype compiled objects */

extern void FSBSetFontName(Widget w,
			   String font_name,
			   Bool font_name_multiple);

extern void FSBSetFontFamilyFace(Widget w,
				 String font_family, String font_face,
				 Bool font_family_multiple,
				 Bool font_face_multiple);

extern void FSBSetFontSize(Widget w, double font_size,
			   Bool font_size_multiple);

extern void FSBRefreshFontList(Widget w);

extern void FSBGetFamilyList(Widget w, int *count_return,
			     String **family_return);

extern void FSBGetFaceList(Widget w, String family, int *count_return,
		      String **face_return, String **font_return);

extern void FSBUndefineUnusedFonts(Widget w);

extern Boolean FSBDownloadFontName(Widget w, String font_name);

extern Boolean FSBMatchFontFace(Widget w, String old_face, String new_family,
				String *new_face);

extern void FSBFontNameToFamilyFace(Widget w, String font_name,
				    String *family, String *face);

extern void FSBFontFamilyFaceToName(Widget w, String family, String face,
				    String *font_name);

extern String FSBFindAFM(Widget w, String font_name);

extern String FSBFindFontFile(Widget w, String font_name);

extern void FSBGetTextDimensions(Widget w, String text, String font,
				 double size, double x, double y,
				 float *dx, float *dy,
				 float *left, float *right,
				 float *top, float *bottom);

extern void FSBSetFontFamilyFaceBlend(Widget w, String family, String face,
				      String blend, Bool family_multiple,
				      Bool face_multiple);

extern void FSBFontNameToFamilyFaceBlend(Widget w, String font_name,
					 String *family, String *face,
					 String *blend);

extern void FSBFontFamilyFaceBlendToName(Widget w, String family, String face,
					 String blend, String *font_name);

extern void FSBGetBlendList(Widget w, String font_name, int *count_return,
			    String **blend_return, String **font_name_return,
			    float **axis_values_return);

extern void FSBGetBlendInfo(Widget w, String name, int *num_axes_return,
			    int *num_designs_return,
			    String **axis_names_return,
			    float **blend_positions_return, 
			    int **blend_map_count_return, 
			    int **blend_design_coords_return,
			    float **blend_normalized_coords_return);

extern Boolean FSBChangeBlends(Widget w, String base_name, String blend_name,
			       FSBBlendAction action, int *axis_values,
			       float *axis_percents);

#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
#endif /* _NO_PROTO */

#endif /* _FontSelectionBox_h */
/* DON'T ADD ANYTHING AFTER THIS #endif */
