/* * drawfile.h * Copyright (C) 2005 A.J. van Os; Released under GNU GPL * * Description: * Include file to deal with drawfiles * * Based on: * C header file for DrawFile * written by DefMod (May 4 2004) on Tue May 4 13:34:17 2004 * Jonathan Coxhead, jonathan@doves.demon.co.uk, 21 Aug 1995 * OSLib---efficient, type-safe, transparent, extensible, * register-safe A P I coverage of RISC O S * Copyright (C) 1994 Jonathan Coxhead * * All credit should go to him, but all the bugs are mine */ #if !defined(__drawfile_h) #define __drawfile_h #include "DeskLib:Sprite.h" #include "DeskLib:Wimp.h" #if !defined(BOOL) #define BOOL int #define TRUE 1 #define FALSE 0 #endif /* !BOOL */ /********************* * Conversion macros * *********************/ #define Drawfile_DrawToScreen(i) ((i) / 256) #define Drawfile_ScreenToDraw(i) ((i) * 256) /********************************** * SWI names and SWI reason codes * **********************************/ #define DrawFile_Render 0x45540 #define DrawFile_BBox 0x45541 #define DrawFile_DeclareFonts 0x45542 /******************** * Type definitions * ********************/ typedef unsigned int bits; typedef unsigned char byte; typedef byte drawfile_fontref; typedef byte drawfile_path_style_flags; typedef bits drawfile_text_flags; typedef bits drawfile_render_flags; typedef bits drawfile_declare_fonts_flags; typedef bits drawfile_paper_options; typedef bits drawfile_entry_mode; typedef enum { drawfile_TYPE_FONT_TABLE = 0, drawfile_TYPE_TEXT = 1, drawfile_TYPE_PATH = 2, drawfile_TYPE_SPRITE = 5, drawfile_TYPE_GROUP = 6, drawfile_TYPE_TAGGED = 7, drawfile_TYPE_TEXT_AREA = 9, drawfile_TYPE_TEXT_COLUMN = 10, drawfile_TYPE_OPTIONS = 11, drawfile_TYPE_TRFM_TEXT = 12, drawfile_TYPE_TRFM_SPRITE = 13, drawfile_TYPE_JPEG = 16 } drawfile_type; typedef enum { drawfile_PATH_END_PATH = 0, drawfile_PATH_CONTINUATION = 1, drawfile_PATH_MOVE_TO = 2, drawfile_PATH_SPECIAL_MOVE_TO = 3, drawfile_PATH_CLOSE_GAP = 4, drawfile_PATH_CLOSE_LINE = 5, drawfile_PATH_BEZIER_TO = 6, drawfile_PATH_GAP_TO = 7, drawfile_PATH_LINE_TO = 8 } drawfile_path_type; typedef struct { int start; int element_count; int elements [6]; } draw_dash_pattern; typedef struct { int entries [3] [2]; } os_trfm; typedef struct { void *data; size_t length; } drawfile_info; typedef struct { drawfile_fontref font_ref; char font_name [1]; } drawfile_font_def; typedef struct { drawfile_fontref font_ref; byte reserved [3]; } drawfile_text_style; typedef struct { drawfile_path_style_flags flags; byte reserved; byte cap_width; byte cap_length; } drawfile_path_style; typedef struct { drawfile_font_def font_def[1]; } drawfile_font_table; typedef struct { wimp_box bbox; palette_entry fill; palette_entry bg_hint; drawfile_text_style style; int xsize; int ysize; wimp_coord base; char text [1]; } drawfile_text; typedef struct { wimp_box bbox; palette_entry fill; palette_entry outline; int width; drawfile_path_style style; int path [1]; } drawfile_path; typedef struct { wimp_box bbox; palette_entry fill; palette_entry outline; int width; drawfile_path_style style; draw_dash_pattern pattern; int path [1]; } drawfile_path_with_pattern; typedef struct { wimp_box bbox; sprite_header header; byte data [1]; } drawfile_sprite; typedef struct { wimp_box bbox; char name [12]; int objects [1]; } drawfile_group; typedef struct { wimp_box bbox; drawfile_type tag; int object [1]; } drawfile_tagged; typedef struct { wimp_box box; } drawfile_text_column; typedef struct { struct { drawfile_type type; int size; drawfile_text_column data; } columns [1]; } drawfile_text_column_list; typedef struct { drawfile_type type; int reserved [2]; palette_entry fill; palette_entry bg_hint; char text [1]; } drawfile_area_text; typedef struct { wimp_box bbox; drawfile_text_column_list header; drawfile_area_text area_text; } drawfile_text_area; typedef struct { wimp_box bbox; int paper_size; drawfile_paper_options paper_options; double grid_spacing; int grid_division; BOOL isometric; BOOL auto_adjust; BOOL show; BOOL lock; BOOL cm; int zoom_mul; int zoom_div; BOOL zoom_lock; BOOL toolbox; drawfile_entry_mode entry_mode; int undo_size; } drawfile_options; typedef struct { wimp_box bbox; os_trfm trfm; drawfile_text_flags flags; palette_entry fill; palette_entry bg_hint; drawfile_text_style style; int xsize; int ysize; wimp_coord base; char text [1]; } drawfile_trfm_text; typedef struct { wimp_box bbox; os_trfm trfm; sprite_header header; byte data [1]; } drawfile_trfm_sprite; typedef struct { wimp_box bbox; int width; int height; int xdpi; int ydpi; os_trfm trfm; int len; byte data [1]; } drawfile_jpeg; /* ------------------------------------------------------------------------ * Type: drawfile_object * * Description: This type is used to declare pointers rather than objects */ typedef struct { drawfile_type type; int size; union { drawfile_font_table font_table; drawfile_text text; drawfile_path path; drawfile_path_with_pattern path_with_pattern; drawfile_sprite sprite; drawfile_group group; drawfile_tagged tagged; drawfile_text_column text_column; drawfile_text_area text_area; drawfile_options options; drawfile_trfm_text trfm_text; drawfile_trfm_sprite trfm_sprite; drawfile_jpeg jpeg; } data; } drawfile_object; typedef struct { char tag [4]; int major_version; int minor_version; char source [12]; wimp_box bbox; drawfile_object objects [1]; } drawfile_diagram; typedef bits drawfile_bbox_flags; typedef struct { drawfile_object *object; drawfile_diagram *diagram; drawfile_object *font_table; drawfile_declare_fonts_flags flags; os_error *error; } drawfile_declare_fonts_state; /************************ * Constant definitions * ************************/ #define error_DRAW_FILE_NOT_DRAW 0x20C00u #define error_DRAW_FILE_VERSION 0x20C01u #define error_DRAW_FILE_FONT_TAB 0x20C02u #define error_DRAW_FILE_BAD_FONT_NO 0x20C03u #define error_DRAW_FILE_BAD_MODE 0x20C04u #define error_DRAW_FILE_BAD_FILE 0x20C05u #define error_DRAW_FILE_BAD_GROUP 0x20C06u #define error_DRAW_FILE_BAD_TAG 0x20C07u #define error_DRAW_FILE_SYNTAX 0x20C08u #define error_DRAW_FILE_FONT_NO 0x20C09u #define error_DRAW_FILE_AREA_VER 0x20C0Au #define error_DRAW_FILE_NO_AREA_VER 0x20C0Bu #define drawfile_PATH_MITRED ((drawfile_path_style_flags) 0x0u) #define drawfile_PATH_ROUND ((drawfile_path_style_flags) 0x1u) #define drawfile_PATH_BEVELLED ((drawfile_path_style_flags) 0x2u) #define drawfile_PATH_BUTT ((drawfile_path_style_flags) 0x0u) #define drawfile_PATH_SQUARE ((drawfile_path_style_flags) 0x2u) #define drawfile_PATH_TRIANGLE ((drawfile_path_style_flags) 0x3u) #define drawfile_PATH_JOIN_SHIFT 0 #define drawfile_PATH_JOIN ((drawfile_path_style_flags) 0x3u) #define drawfile_PATH_END_SHIFT 2 #define drawfile_PATH_END ((drawfile_path_style_flags) 0xCu) #define drawfile_PATH_START_SHIFT 4 #define drawfile_PATH_START ((drawfile_path_style_flags) 0x30u) #define drawfile_PATH_WINDING_EVEN_ODD ((drawfile_path_style_flags) 0x40u) #define drawfile_PATH_DASHED ((drawfile_path_style_flags) 0x80u) #define drawfile_PATH_CAP_WIDTH_SHIFT 16 #define drawfile_PATH_CAP_WIDTH ((drawfile_path_style_flags) 0xFF0000u) #define drawfile_PATH_CAP_LENGTH_SHIFT 24 #define drawfile_PATH_CAP_LENGTH ((drawfile_path_style_flags) 0xFF000000u) #define drawfile_TEXT_KERN ((drawfile_text_flags) 0x1u) #define drawfile_TEXT_RIGHT_TO_LEFT ((drawfile_text_flags) 0x2u) #define drawfile_TEXT_UNDERLINE ((drawfile_text_flags) 0x4u) #define drawfile_RENDER_BBOXES ((drawfile_render_flags) 0x1u) #define drawfile_RENDER_SUPPRESS ((drawfile_render_flags) 0x2u) #define drawfile_RENDER_GIVEN_FLATNESS ((drawfile_render_flags) 0x4u) #define drawfile_RENDER_GIVEN_COLOUR_MAPPING ((drawfile_render_flags) 0x8u) #define drawfile_NO_DOWNLOAD ((drawfile_declare_fonts_flags) 0x1u) #define drawfile_PAPER_SHOW ((drawfile_paper_options) 0x1u) #define drawfile_PAPER_LANDSCAPE ((drawfile_paper_options) 0x10u) #define drawfile_PAPER_DEFAULT ((drawfile_paper_options) 0x100u) #define drawfile_ENTRY_MODE_LINE ((drawfile_entry_mode) 0x1u) #define drawfile_ENTRY_MODE_CLOSED_LINE ((drawfile_entry_mode) 0x2u) #define drawfile_ENTRY_MODE_CURVE ((drawfile_entry_mode) 0x4u) #define drawfile_ENTRY_MODE_CLOSED_CURVE ((drawfile_entry_mode) 0x8u) #define drawfile_ENTRY_MODE_RECTANGLE ((drawfile_entry_mode) 0x10u) #define drawfile_ENTRY_MODE_ELLIPSE ((drawfile_entry_mode) 0x20u) #define drawfile_ENTRY_MODE_TEXT_LINE ((drawfile_entry_mode) 0x40u) #define drawfile_ENTRY_MODE_SELECT ((drawfile_entry_mode) 0x80u) /************************* * Function declarations * *************************/ #if defined(__cplusplus) extern "C" { #endif /* __cplusplus */ /* ------------------------------------------------------------------------ * Function: drawfile_render() * * Description: Calls SWI 0x45540 * * Input: flags - value of R0 on entry * diagram - value of R1 on entry * size - value of R2 on entry * trfm - value of R3 on entry * clip - value of R4 on entry * flatness - value of R5 on entry */ extern os_error *Drawfile_Render (drawfile_render_flags flags, drawfile_diagram const *diagram, int size, os_trfm const *trfm, wimp_box const *clip, int flatness); /* ------------------------------------------------------------------------ * Function: drawfile_bbox() * * Description: Calls SWI 0x45541 * * Input: flags - value of R0 on entry * diagram - value of R1 on entry * size - value of R2 on entry * trfm - value of R3 on entry * bbox - value of R4 on entry */ extern os_error *Drawfile_Bbox (drawfile_bbox_flags flags, drawfile_diagram const *diagram, int size, os_trfm const *trfm, wimp_box *bbox); /* ------------------------------------------------------------------------ * Function: Drawfile_DeclareFonts() * * Description: Calls SWI 0x45542 * * Input: flags - value of R0 on entry * diagram - value of R1 on entry * size - value of R2 on entry */ extern os_error *Drawfile_DeclareFonts (drawfile_declare_fonts_flags flags, drawfile_diagram const *diagram, int size); /* ------------------------------------------------------------------------ * Function: Drawfile_CreateDiagram() * */ extern os_error * Drawfile_CreateDiagram(drawfile_info *info, size_t memory, const char *creator, wimp_box box); extern os_error *Drawfile_AppendObject(drawfile_info *info, size_t memory, const drawfile_object *object, BOOL rebind); extern os_error *Drawfile_RenderDiagram(drawfile_info *info, window_redrawblock *redraw, double scale); extern os_error *Drawfile_VerifyDiagram(drawfile_info *info); extern void Drawfile_QueryBox(drawfile_info *info, wimp_box *rect, BOOL screenUnits); #if defined(__cplusplus) } #endif /* __cplusplus */ #endif /* __drawfile.h */