Beginning work on graphic windows. Hopelessly broken still....
[rodin/chimara.git] / libchimara / chimara-glk-private.h
1 #ifndef __CHIMARA_GLK_PRIVATE_H__
2 #define __CHIMARA_GLK_PRIVATE_H__
3
4 #include <glib.h>
5 #include <gmodule.h>
6 #include <pango/pango.h>
7 #include "glk.h"
8 #include "style.h"
9 #include "gi_blorb.h"
10 #include "gi_dispa.h"
11 #include "chimara-glk.h"
12
13 G_BEGIN_DECLS
14
15 typedef struct _ChimaraGlkPrivate ChimaraGlkPrivate;
16
17 struct _ChimaraGlkPrivate {
18     /* Pointer back to the widget itself for use in thread */
19     ChimaraGlk *self;
20
21         /* *** Widget properties *** */
22     /* Whether user input is expected */
23     gboolean interactive;
24     /* Whether file operations are allowed */
25     gboolean protect;
26         /* Font description of proportional font */
27         PangoFontDescription *default_font_desc;
28         /* Font description of monospace font */
29         PangoFontDescription *monospace_font_desc;
30         /* Spacing between Glk windows */
31         guint spacing;
32         /* The CSS file to read style defaults from */
33         gchar *css_file;
34         /* Hashtable containing the default and current style */
35         struct StyleSet *default_styles;
36         struct StyleSet *current_styles;
37         gboolean style_initialized; /* Have styles been initialized */
38         /* Final message displayed when game exits */
39         gchar *final_message;
40
41         /* *** Threading data *** */
42         /* Whether program is running */
43         gboolean running;
44     /* Glk program loaded in widget */
45     GModule *program;
46     /* Thread in which Glk program is run */
47     GThread *thread;
48     /* Event queue and threading stuff */
49     GQueue *event_queue;
50     GMutex *event_lock;
51     GCond *event_queue_not_empty;
52     GCond *event_queue_not_full;
53     /* Abort mechanism */
54     GMutex *abort_lock;
55     gboolean abort_signalled;
56         /* Key press after shutdown mechanism */
57         GMutex *shutdown_lock;
58         GCond *shutdown_key_pressed;
59         /* Window arrangement locks */
60         GMutex *arrange_lock;
61         GCond *rearranged;
62         gboolean needs_rearrange;
63         gboolean ignore_next_arrange_event;
64         /* Input queues */
65         GAsyncQueue *char_input_queue;
66         GAsyncQueue *line_input_queue;
67         /* Resource loading locks */
68         GMutex *resource_lock;
69         GCond *resource_loaded;
70         GCond *resource_info_available;
71         guint32 resource_available;
72
73         /* *** Glk library data *** */
74     /* User-defined interrupt handler */
75     void (*interrupt_handler)(void);
76     /* Global tree of all windows */
77     GNode *root_window;
78     /* List of filerefs currently in existence */
79     GList *fileref_list;
80     /* Current stream */
81     strid_t current_stream;
82     /* List of streams currently in existence */
83     GList *stream_list;
84         /* Current timer */
85         guint timer_id;
86         /* Current resource blorb map */
87         giblorb_map_t *resource_map;
88         /* File stream pointing to the blorb used as current resource map */
89         strid_t resource_file;
90         /* Callbacks for registering and unregistering dispatch objects */
91         gidispatch_rock_t (*register_obj)(void *, glui32);
92         void (*unregister_obj)(void *, glui32, gidispatch_rock_t);
93         gidispatch_rock_t (*register_arr)(void *, glui32, char *);
94         void (*unregister_arr)(void *, glui32, char *, gidispatch_rock_t);
95
96         /* *** Platform-dependent Glk library data *** */
97         /* Flag for functions to find out if they are being called from startup code */
98         gboolean in_startup;
99         /* "Current directory" for creating filerefs */
100         gchar *current_dir;
101 };
102
103 #define CHIMARA_GLK_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), CHIMARA_TYPE_GLK, ChimaraGlkPrivate))
104 #define CHIMARA_GLK_USE_PRIVATE(o, n) ChimaraGlkPrivate *n = CHIMARA_GLK_PRIVATE(o)
105
106 G_END_DECLS
107
108 #endif /* __CHIMARA_GLK_PRIVATE_H__ */