00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #if !defined(__drawfile_h)
00020 #define __drawfile_h
00021
00022 #include "DeskLib:Sprite.h"
00023 #include "DeskLib:Wimp.h"
00024
00025 #if !defined(BOOL)
00026 #define BOOL int
00027 #define TRUE 1
00028 #define FALSE 0
00029 #endif
00030
00031
00032
00033
00034 #define Drawfile_DrawToScreen(i) ((i) / 256)
00035 #define Drawfile_ScreenToDraw(i) ((i) * 256)
00036
00037
00038
00039
00040 #define DrawFile_Render 0x45540
00041 #define DrawFile_BBox 0x45541
00042 #define DrawFile_DeclareFonts 0x45542
00043
00044
00045
00046
00047 typedef unsigned int bits;
00048 typedef unsigned char byte;
00049
00050 typedef byte drawfile_fontref;
00051
00052 typedef byte drawfile_path_style_flags;
00053
00054 typedef bits drawfile_text_flags;
00055
00056 typedef bits drawfile_render_flags;
00057
00058 typedef bits drawfile_declare_fonts_flags;
00059
00060 typedef bits drawfile_paper_options;
00061
00062 typedef bits drawfile_entry_mode;
00063
00064 typedef enum {
00065 drawfile_TYPE_FONT_TABLE = 0,
00066 drawfile_TYPE_TEXT = 1,
00067 drawfile_TYPE_PATH = 2,
00068 drawfile_TYPE_SPRITE = 5,
00069 drawfile_TYPE_GROUP = 6,
00070 drawfile_TYPE_TAGGED = 7,
00071 drawfile_TYPE_TEXT_AREA = 9,
00072 drawfile_TYPE_TEXT_COLUMN = 10,
00073 drawfile_TYPE_OPTIONS = 11,
00074 drawfile_TYPE_TRFM_TEXT = 12,
00075 drawfile_TYPE_TRFM_SPRITE = 13,
00076 drawfile_TYPE_JPEG = 16
00077 } drawfile_type;
00078
00079 typedef enum {
00080 drawfile_PATH_END_PATH = 0,
00081 drawfile_PATH_CONTINUATION = 1,
00082 drawfile_PATH_MOVE_TO = 2,
00083 drawfile_PATH_SPECIAL_MOVE_TO = 3,
00084 drawfile_PATH_CLOSE_GAP = 4,
00085 drawfile_PATH_CLOSE_LINE = 5,
00086 drawfile_PATH_BEZIER_TO = 6,
00087 drawfile_PATH_GAP_TO = 7,
00088 drawfile_PATH_LINE_TO = 8
00089 } drawfile_path_type;
00090
00091 typedef struct {
00092 int start;
00093 int element_count;
00094 int elements [6];
00095 } draw_dash_pattern;
00096
00097 typedef struct {
00098 int entries [3] [2];
00099 } os_trfm;
00100
00101 typedef struct {
00102 void *data;
00103 size_t length;
00104 } drawfile_info;
00105
00106 typedef struct {
00107 drawfile_fontref font_ref;
00108 char font_name [1];
00109 } drawfile_font_def;
00110
00111 typedef struct {
00112 drawfile_fontref font_ref;
00113 byte reserved [3];
00114 } drawfile_text_style;
00115
00116 typedef struct {
00117 drawfile_path_style_flags flags;
00118 byte reserved;
00119 byte cap_width;
00120 byte cap_length;
00121 } drawfile_path_style;
00122
00123 typedef struct {
00124 drawfile_font_def font_def[1];
00125 } drawfile_font_table;
00126
00127 typedef struct {
00128 wimp_box bbox;
00129 palette_entry fill;
00130 palette_entry bg_hint;
00131 drawfile_text_style style;
00132 int xsize;
00133 int ysize;
00134 wimp_coord base;
00135 char text [1];
00136 } drawfile_text;
00137
00138 typedef struct {
00139 wimp_box bbox;
00140 palette_entry fill;
00141 palette_entry outline;
00142 int width;
00143 drawfile_path_style style;
00144 int path [1];
00145 } drawfile_path;
00146
00147 typedef struct {
00148 wimp_box bbox;
00149 palette_entry fill;
00150 palette_entry outline;
00151 int width;
00152 drawfile_path_style style;
00153 draw_dash_pattern pattern;
00154 int path [1];
00155 } drawfile_path_with_pattern;
00156
00157 typedef struct {
00158 wimp_box bbox;
00159 sprite_header header;
00160 byte data [1];
00161 } drawfile_sprite;
00162
00163 typedef struct {
00164 wimp_box bbox;
00165 char name [12];
00166 int objects [1];
00167 } drawfile_group;
00168
00169 typedef struct {
00170 wimp_box bbox;
00171 drawfile_type tag;
00172 int object [1];
00173 } drawfile_tagged;
00174
00175 typedef struct {
00176 wimp_box box;
00177 } drawfile_text_column;
00178
00179 typedef struct {
00180 struct {
00181 drawfile_type type;
00182 int size;
00183 drawfile_text_column data;
00184 } columns [1];
00185 } drawfile_text_column_list;
00186
00187 typedef struct {
00188 drawfile_type type;
00189 int reserved [2];
00190 palette_entry fill;
00191 palette_entry bg_hint;
00192 char text [1];
00193 } drawfile_area_text;
00194
00195 typedef struct {
00196 wimp_box bbox;
00197 drawfile_text_column_list header;
00198 drawfile_area_text area_text;
00199 } drawfile_text_area;
00200
00201 typedef struct {
00202 wimp_box bbox;
00203 int paper_size;
00204 drawfile_paper_options paper_options;
00205 double grid_spacing;
00206 int grid_division;
00207 BOOL isometric;
00208 BOOL auto_adjust;
00209 BOOL show;
00210 BOOL lock;
00211 BOOL cm;
00212 int zoom_mul;
00213 int zoom_div;
00214 BOOL zoom_lock;
00215 BOOL toolbox;
00216 drawfile_entry_mode entry_mode;
00217 int undo_size;
00218 } drawfile_options;
00219
00220 typedef struct {
00221 wimp_box bbox;
00222 os_trfm trfm;
00223 drawfile_text_flags flags;
00224 palette_entry fill;
00225 palette_entry bg_hint;
00226 drawfile_text_style style;
00227 int xsize;
00228 int ysize;
00229 wimp_coord base;
00230 char text [1];
00231 } drawfile_trfm_text;
00232
00233 typedef struct {
00234 wimp_box bbox;
00235 os_trfm trfm;
00236 sprite_header header;
00237 byte data [1];
00238 } drawfile_trfm_sprite;
00239
00240 typedef struct {
00241 wimp_box bbox;
00242 int width;
00243 int height;
00244 int xdpi;
00245 int ydpi;
00246 os_trfm trfm;
00247 int len;
00248 byte data [1];
00249 } drawfile_jpeg;
00250
00251
00252
00253
00254
00255
00256
00257 typedef struct {
00258 drawfile_type type;
00259 int size;
00260 union {
00261 drawfile_font_table font_table;
00262 drawfile_text text;
00263 drawfile_path path;
00264 drawfile_path_with_pattern path_with_pattern;
00265 drawfile_sprite sprite;
00266 drawfile_group group;
00267 drawfile_tagged tagged;
00268 drawfile_text_column text_column;
00269 drawfile_text_area text_area;
00270 drawfile_options options;
00271 drawfile_trfm_text trfm_text;
00272 drawfile_trfm_sprite trfm_sprite;
00273 drawfile_jpeg jpeg;
00274 } data;
00275 } drawfile_object;
00276
00277 typedef struct {
00278 char tag [4];
00279 int major_version;
00280 int minor_version;
00281 char source [12];
00282 wimp_box bbox;
00283 drawfile_object objects [1];
00284 } drawfile_diagram;
00285
00286 typedef bits drawfile_bbox_flags;
00287
00288 typedef struct {
00289 drawfile_object *object;
00290 drawfile_diagram *diagram;
00291 drawfile_object *font_table;
00292 drawfile_declare_fonts_flags flags;
00293 os_error *error;
00294 } drawfile_declare_fonts_state;
00295
00296
00297
00298
00299 #define error_DRAW_FILE_NOT_DRAW 0x20C00u
00300 #define error_DRAW_FILE_VERSION 0x20C01u
00301 #define error_DRAW_FILE_FONT_TAB 0x20C02u
00302 #define error_DRAW_FILE_BAD_FONT_NO 0x20C03u
00303 #define error_DRAW_FILE_BAD_MODE 0x20C04u
00304 #define error_DRAW_FILE_BAD_FILE 0x20C05u
00305 #define error_DRAW_FILE_BAD_GROUP 0x20C06u
00306 #define error_DRAW_FILE_BAD_TAG 0x20C07u
00307 #define error_DRAW_FILE_SYNTAX 0x20C08u
00308 #define error_DRAW_FILE_FONT_NO 0x20C09u
00309 #define error_DRAW_FILE_AREA_VER 0x20C0Au
00310 #define error_DRAW_FILE_NO_AREA_VER 0x20C0Bu
00311
00312 #define drawfile_PATH_MITRED ((drawfile_path_style_flags) 0x0u)
00313 #define drawfile_PATH_ROUND ((drawfile_path_style_flags) 0x1u)
00314 #define drawfile_PATH_BEVELLED ((drawfile_path_style_flags) 0x2u)
00315 #define drawfile_PATH_BUTT ((drawfile_path_style_flags) 0x0u)
00316 #define drawfile_PATH_SQUARE ((drawfile_path_style_flags) 0x2u)
00317 #define drawfile_PATH_TRIANGLE ((drawfile_path_style_flags) 0x3u)
00318 #define drawfile_PATH_JOIN_SHIFT 0
00319 #define drawfile_PATH_JOIN ((drawfile_path_style_flags) 0x3u)
00320 #define drawfile_PATH_END_SHIFT 2
00321 #define drawfile_PATH_END ((drawfile_path_style_flags) 0xCu)
00322 #define drawfile_PATH_START_SHIFT 4
00323 #define drawfile_PATH_START ((drawfile_path_style_flags) 0x30u)
00324 #define drawfile_PATH_WINDING_EVEN_ODD ((drawfile_path_style_flags) 0x40u)
00325 #define drawfile_PATH_DASHED ((drawfile_path_style_flags) 0x80u)
00326 #define drawfile_PATH_CAP_WIDTH_SHIFT 16
00327 #define drawfile_PATH_CAP_WIDTH ((drawfile_path_style_flags) 0xFF0000u)
00328 #define drawfile_PATH_CAP_LENGTH_SHIFT 24
00329 #define drawfile_PATH_CAP_LENGTH ((drawfile_path_style_flags) 0xFF000000u)
00330 #define drawfile_TEXT_KERN ((drawfile_text_flags) 0x1u)
00331 #define drawfile_TEXT_RIGHT_TO_LEFT ((drawfile_text_flags) 0x2u)
00332 #define drawfile_TEXT_UNDERLINE ((drawfile_text_flags) 0x4u)
00333 #define drawfile_RENDER_BBOXES ((drawfile_render_flags) 0x1u)
00334 #define drawfile_RENDER_SUPPRESS ((drawfile_render_flags) 0x2u)
00335 #define drawfile_RENDER_GIVEN_FLATNESS ((drawfile_render_flags) 0x4u)
00336 #define drawfile_RENDER_GIVEN_COLOUR_MAPPING ((drawfile_render_flags) 0x8u)
00337 #define drawfile_NO_DOWNLOAD ((drawfile_declare_fonts_flags) 0x1u)
00338 #define drawfile_PAPER_SHOW ((drawfile_paper_options) 0x1u)
00339 #define drawfile_PAPER_LANDSCAPE ((drawfile_paper_options) 0x10u)
00340 #define drawfile_PAPER_DEFAULT ((drawfile_paper_options) 0x100u)
00341 #define drawfile_ENTRY_MODE_LINE ((drawfile_entry_mode) 0x1u)
00342 #define drawfile_ENTRY_MODE_CLOSED_LINE ((drawfile_entry_mode) 0x2u)
00343 #define drawfile_ENTRY_MODE_CURVE ((drawfile_entry_mode) 0x4u)
00344 #define drawfile_ENTRY_MODE_CLOSED_CURVE ((drawfile_entry_mode) 0x8u)
00345 #define drawfile_ENTRY_MODE_RECTANGLE ((drawfile_entry_mode) 0x10u)
00346 #define drawfile_ENTRY_MODE_ELLIPSE ((drawfile_entry_mode) 0x20u)
00347 #define drawfile_ENTRY_MODE_TEXT_LINE ((drawfile_entry_mode) 0x40u)
00348 #define drawfile_ENTRY_MODE_SELECT ((drawfile_entry_mode) 0x80u)
00349
00350
00351
00352
00353
00354 #if defined(__cplusplus)
00355 extern "C" {
00356 #endif
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371 extern os_error *Drawfile_Render (drawfile_render_flags flags,
00372 drawfile_diagram const *diagram,
00373 int size,
00374 os_trfm const *trfm,
00375 wimp_box const *clip,
00376 int flatness);
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390 extern os_error *Drawfile_Bbox (drawfile_bbox_flags flags,
00391 drawfile_diagram const *diagram,
00392 int size,
00393 os_trfm const *trfm,
00394 wimp_box *bbox);
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406 extern os_error *Drawfile_DeclareFonts (drawfile_declare_fonts_flags flags,
00407 drawfile_diagram const *diagram,
00408 int size);
00409
00410
00411
00412
00413
00414
00415 extern os_error * Drawfile_CreateDiagram(drawfile_info *info, size_t memory,
00416 const char *creator, wimp_box box);
00417
00418 extern os_error *Drawfile_AppendObject(drawfile_info *info, size_t memory,
00419 const drawfile_object *object, BOOL rebind);
00420
00421 extern os_error *Drawfile_RenderDiagram(drawfile_info *info,
00422 window_redrawblock *redraw, double scale);
00423
00424 extern os_error *Drawfile_VerifyDiagram(drawfile_info *info);
00425
00426 extern void Drawfile_QueryBox(drawfile_info *info,
00427 wimp_box *rect, BOOL screenUnits);
00428
00429 #if defined(__cplusplus)
00430 }
00431 #endif
00432
00433 #endif