home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format 74
/
af074a.adf
/
archives
/
af74a3.lzx
/
Typeface
/
Source
/
typeface.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-08
|
7KB
|
264 lines
#include <stdarg.h>
#include <string.h>
#include <clib/alib_protos.h>
#include <clib/asl_protos.h>
#include <clib/bgui_protos.h>
#include <clib/diskfont_protos.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <clib/utility_protos.h>
#include <exec/exec.h>
#include <graphics/gfxbase.h>
#include <graphics/gfxmacros.h>
#include <intuition/icclass.h>
#include <intuition/intuitionbase.h>
#include <libraries/bgui_macros.h>
#define PROJECT_MENU \
Title("Project"), \
Item("Open Font...","O",ID_OPEN), \
Item("Save Font...","S",ID_SAVE), \
Item("Change Dir...","D",ID_CHANGEDIR), \
ItemBar, \
Item("Edit Font...","E",ID_EDITFONT), \
ItemBar, \
Item("Preferences...","P",ID_PREFS), \
Item("About...","?",ID_ABOUT), \
ItemBar, \
Item("Quit","Q",ID_QUIT)
#define CHARACTER_MENU \
Title("Character"), \
Item("Copy","C",ID_COPY), \
Item("Paste","V",ID_PASTE), \
ItemBar, \
Item("Move Left",NULL,ID_MOVEL), \
Item("Move Right",NULL,ID_MOVER), \
Item("Move Up",NULL,ID_MOVEU), \
Item("Move Down",NULL,ID_MOVED), \
ItemBar, \
Item("Change Width...","W",ID_WIDTHC), \
Item("Kerning...","K",ID_KERNING)
#define NAME "Typeface"
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
struct Character
{
UWORD chr_Width,chr_Height;
UBYTE *chr_Data;
};
struct Preferences
{
UWORD Version;
ULONG Flags, ScrModeID, ScrDepth;
ULONG VecHeight, PixelX, PixelY;
ULONG SaveTo;
};
#define PREFS_CUSTOMSCREEN (1<<0)
#define PREFS_PIXELBORDER (1<<1)
/* typeface.c */
enum id { ID_OPEN = 1,
ID_SAVE,
ID_CHANGEDIR,
ID_EDITFONT,
ID_PREFS,
ID_ABOUT,
ID_QUIT,
ID_CHARS,
ID_CHARSCROLL,
ID_EDIT,
ID_WIDTHL,
ID_WIDTHR,
ID_WIDTHC,
ID_MOVEL,
ID_MOVER,
ID_MOVEU,
ID_MOVED,
ID_KERNING,
ID_COPY,
ID_PASTE,
ID_ACCEPT,
ID_CANCEL,
ID_PROP,
ID_HEIGHT,
ID_WIDTH,
ID_BASELINE,
ID_SMEAR,
ID_NORMAL,
ID_BOLD,
ID_ITALIC,
ID_ULINE,
ID_EXTEND,
ID_REVERSE,
ID_ASPECT,
ID_VECHEIGHT,
ID_PIXELWIDTH,
ID_PIXELHEIGHT,
ID_PIXELBORDER,
ID_ASSIGNSTR,
ID_ASSIGNPATH,
ID_ASSIGN,
ID_ASSIGNADD,
ID_CHARWIDTH,
ID_WIDTHPOS,
ID_SPACE,
ID_KERN,
ID_CUSTOM,
ID_CHOOSE,
ID_SAVETO,
ID_USE,
ID_FONTNAME,
ID_GETSAVEDIR,
ID_FIRST,
ID_LAST,
ID_KERNTABLE,
ID_SAVEDIR,
ID_BLANK };
enum scroll { GADG_HORIZ,
GADG_VERT,
GADG_LEFT,
GADG_RIGHT,
GADG_UP,
GADG_DOWN,
GADG_NONE };
#define GETBIT(buffer,offset) \
((((*((UBYTE *)(buffer)+((offset)>>3)))&(128>>((offset)&7))) != 0) \
? 1 : 0)
struct charDef
{
WORD charOffset,charBitWidth;
};
void Setup(void);
void SetupScreen(void);
void Quit(void);
void QuitScreen(void);
void MsgLoop(void);
ULONG CheckObjMsg(struct Window *wnd, Object *obj);
void CheckOpenCharWin(ULONG pressed);
void SharedMsgs(ULONG code,struct CharNode *node);
void Error(char *message);
void ShowReq(char *text,char *gadgets,...);
void ClrDisposeObject(Object **obj);
void ClrWindowClose(Object **obj,struct Window **wnd);
void SleepWindows(void);
void WakeWindows(void);
void LoadFont(struct TextAttr *font);
BOOL UnpackChar(struct Character *chr,struct TextFont *font,ULONG i);
void KernTables(ULONG to, ULONG from);
void ClearCurrentFont(void);
void OpenEditFontWnd(void);
void CloseEditFontWnd(BOOL obj);
void OpenPrefsWnd(void);
void ClosePrefsWnd(BOOL obj);
void OpenAssignWnd(void);
void CloseAssignWnd(BOOL obj);
void OpenWidthWnd(struct CharNode *node);
void CloseWidthWnd(BOOL obj);
void OpenKernWnd(struct CharNode *node);
void CloseKernWnd(BOOL obj);
void OpenSaveWnd(void);
void CloseSaveWnd(BOOL obj);
void PutPositive(struct Window *wnd,char *name,LONG value,LONG min,
LONG *dest);
void NewHeights(void);
void NewWidths(void);
void ChangeCharWidth(struct Character *chr, ULONG width, ULONG newoffset,
ULONG oldoffset);
void CheckWidthKern(struct Character *chr);
void SavePrefs(char *filename);
void LoadPrefs(void);
void CopyChar(struct CharNode *node);
void PasteChar(struct CharNode *node);
void SaveFont(BOOL tables);
ULONG SaveShowReq(char *text,char *gadgets,...);
void WriteCharData(struct charDef *cd, UBYTE *fontdataptr, ULONG dest,
ULONG src, ULONG *off, ULONG mod);
void FlushAllFonts(void);
/* char.c */
#define DATA(i,j) *(chr->chr_Data+((j)*chr->chr_Width)+(i))
struct CharNode
{
struct Node chln_Node;
Object *chln_Object;
struct Window *chln_Window;
char *chln_Title;
Object *chln_HorizGadg, *chln_VertGadg;
Object *chln_LeftGadg, *chln_RightGadg;
Object *chln_UpGadg, *chln_DownGadg;
struct Hook *chln_Hook;
Object *chln_EditGadg;
struct Character *chln_Character;
ULONG chln_Number;
Object *chln_WidthLObj, *chln_WidthRObj, *chln_KernObj;
};
struct CharNode *OpenCharWin(ULONG charnum,struct IBox size);
void CloseCharWin(struct CharNode *node);
Object *CreateSysImage(ULONG which,struct DrawInfo *dri);
Object *CreatePropGadg(ULONG freedom,Tag tag1,...);
Object *CreateButtonGadg(Object *image,Tag tag1,...);
__geta4 void CharHook(__a0 struct Hook *hook, __a2 Object *o,
__a1 struct IntuiMessage *msg);
void ForceResizeChar(struct CharNode *node);
void SetScrollers(struct CharNode *node);
void RedrawEdit(struct CharNode *node);
void MoveLeft(struct CharNode *node);
void MoveRight(struct CharNode *node);
void MoveUp(struct CharNode *node);
void MoveDown(struct CharNode *node);
/* node.c */
struct List *GetNewList(struct List **list);
struct Node *CreateNode(ULONG size,struct List *list);
void RemoveList(struct List **list,BOOL all,(*hook)());
/* gadget.c */
#define CG_TAGBASE (TAG_USER+1000)
#define CG_Pos (CG_TAGBASE+0)
#define CG_Pressed (CG_TAGBASE+1)
Class *InitCharGadgClass(void);
BOOL FreeCharGadgClass(Class *cl);
ULONG GetCharGadgWidth(void);
ULONG GetCharGadgHeight(void);
#define EG_XOFFSET 4
#define EG_YOFFSET 2
#define EG_TAGBASE (TAG_USER+1000)
#define EG_PixelX (EG_TAGBASE+1)
#define EG_PixelY (EG_TAGBASE+2)
#define EG_CharStruct (EG_TAGBASE+3)
#define EG_Update (EG_TAGBASE+4)
#define EG_Width (EG_TAGBASE+5)
#define EG_Height (EG_TAGBASE+6)
#define EG_XOffset (EG_TAGBASE+7)
#define EG_YOffset (EG_TAGBASE+8)
#define EG_CharNode (EG_TAGBASE+9)
#define EG_PixelBorder (EG_TAGBASE+10)
Class *InitEditGadgClass(void);
BOOL FreeEditGadgClass(Class *cl);
#define SCRL_TAGBASE (TAG_USER+1000)
#define SCRL_Right (SCRL_TAGBASE+1)
Class *InitSlideGadgClass(void);
BOOL FreeSlideGadgClass(Class *cl);