1 module allegro5.display;
2 
3 import allegro5.bitmap;
4 import allegro5.color;
5 import allegro5.events;
6 
7 extern (C)
8 {
9 	enum
10 	{
11 		ALLEGRO_WINDOWED                    = 1 << 0,
12 		ALLEGRO_FULLSCREEN                  = 1 << 1,
13 		ALLEGRO_OPENGL                      = 1 << 2,
14 		ALLEGRO_DIRECT3D_INTERNAL           = 1 << 3,
15 		ALLEGRO_RESIZABLE                   = 1 << 4,
16 		ALLEGRO_FRAMELESS                   = 1 << 5,
17 		ALLEGRO_NOFRAME                     = ALLEGRO_FRAMELESS, /* older synonym */
18 		ALLEGRO_GENERATE_EXPOSE_EVENTS      = 1 << 6,
19 		ALLEGRO_OPENGL_3_0                  = 1 << 7,
20 		ALLEGRO_OPENGL_FORWARD_COMPATIBLE   = 1 << 8,
21 		ALLEGRO_FULLSCREEN_WINDOW           = 1 << 9,
22 		ALLEGRO_MINIMIZED                   = 1 << 10,
23 		ALLEGRO_PROGRAMMABLE_PIPELINE       = 1 << 11,
24 		ALLEGRO_GTK_TOPLEVEL_INTERNAL       = 1 << 12
25 	}
26 
27 	enum ALLEGRO_DISPLAY_OPTIONS
28 	{
29 		ALLEGRO_RED_SIZE = 0,
30 		ALLEGRO_GREEN_SIZE = 1,
31 		ALLEGRO_BLUE_SIZE = 2,
32 		ALLEGRO_ALPHA_SIZE = 3,
33 		ALLEGRO_RED_SHIFT = 4,
34 		ALLEGRO_GREEN_SHIFT = 5,
35 		ALLEGRO_BLUE_SHIFT = 6,
36 		ALLEGRO_ALPHA_SHIFT = 7,
37 		ALLEGRO_ACC_RED_SIZE = 8,
38 		ALLEGRO_ACC_GREEN_SIZE = 9,
39 		ALLEGRO_ACC_BLUE_SIZE = 10,
40 		ALLEGRO_ACC_ALPHA_SIZE = 11,
41 		ALLEGRO_STEREO = 12,
42 		ALLEGRO_AUX_BUFFERS = 13,
43 		ALLEGRO_COLOR_SIZE = 14,
44 		ALLEGRO_DEPTH_SIZE = 15,
45 		ALLEGRO_STENCIL_SIZE = 16,
46 		ALLEGRO_SAMPLE_BUFFERS = 17,
47 		ALLEGRO_SAMPLES = 18,
48 		ALLEGRO_RENDER_METHOD = 19,
49 		ALLEGRO_FLOAT_COLOR = 20,
50 		ALLEGRO_FLOAT_DEPTH = 21,
51 		ALLEGRO_SINGLE_BUFFER = 22,
52 		ALLEGRO_SWAP_METHOD = 23,
53 		ALLEGRO_COMPATIBLE_DISPLAY = 24,
54 		ALLEGRO_UPDATE_DISPLAY_REGION = 25,
55 		ALLEGRO_VSYNC = 26,
56 		ALLEGRO_MAX_BITMAP_SIZE = 27,
57 		ALLEGRO_SUPPORT_NPOT_BITMAP = 28,
58 		ALLEGRO_CAN_DRAW_INTO_BITMAP = 29,
59 		ALLEGRO_SUPPORT_SEPARATE_ALPHA = 30,
60 		ALLEGRO_AUTO_CONVERT_BITMAPS = 31,
61 		ALLEGRO_SUPPORTED_ORIENTATIONS = 32,
62 		ALLEGRO_DISPLAY_OPTIONS_COUNT
63 	}
64 
65 	enum
66 	{
67 		ALLEGRO_DONTCARE,
68 		ALLEGRO_REQUIRE,
69 		ALLEGRO_SUGGEST
70 	}
71 	
72 	enum ALLEGRO_DISPLAY_ORIENTATION
73 	{
74 		ALLEGRO_DISPLAY_ORIENTATION_UNKNOWN = 0,
75 		ALLEGRO_DISPLAY_ORIENTATION_0_DEGREES = 1,
76 		ALLEGRO_DISPLAY_ORIENTATION_90_DEGREES = 2,
77 		ALLEGRO_DISPLAY_ORIENTATION_180_DEGREES = 4,
78 		ALLEGRO_DISPLAY_ORIENTATION_270_DEGREES = 8,
79 		ALLEGRO_DISPLAY_ORIENTATION_PORTRAIT = 5,
80 		ALLEGRO_DISPLAY_ORIENTATION_LANDSCAPE = 10,
81 		ALLEGRO_DISPLAY_ORIENTATION_ALL = 15,
82 		ALLEGRO_DISPLAY_ORIENTATION_FACE_UP = 16,
83 		ALLEGRO_DISPLAY_ORIENTATION_FACE_DOWN = 32
84 	}
85 
86 	enum
87 	{
88 		_ALLEGRO_PRIM_MAX_USER_ATTR = 10
89 	}
90 
91 	struct ALLEGRO_DISPLAY {};
92 
93 	void al_set_new_display_refresh_rate(int refresh_rate);
94 	void al_set_new_display_flags(int flags);
95 	int  al_get_new_display_refresh_rate();
96 	int  al_get_new_display_flags();
97 
98 	int al_get_display_width(ALLEGRO_DISPLAY* display);
99 	int al_get_display_height(ALLEGRO_DISPLAY* display);
100 	int al_get_display_format(ALLEGRO_DISPLAY* display);
101 	int al_get_display_refresh_rate(ALLEGRO_DISPLAY* display);
102 	int al_get_display_flags(ALLEGRO_DISPLAY* display);
103 	int al_get_display_orientation(ALLEGRO_DISPLAY* display);
104 	bool al_set_display_flag(ALLEGRO_DISPLAY* display, int flag, bool onoff);
105 
106 	ALLEGRO_DISPLAY* al_create_display(int w, int h);
107 	void al_destroy_display(ALLEGRO_DISPLAY* display);
108 	ALLEGRO_DISPLAY* al_get_current_display();
109 	void al_set_target_bitmap(ALLEGRO_BITMAP* bitmap);
110 	void al_set_target_backbuffer(ALLEGRO_DISPLAY* display);
111 	ALLEGRO_BITMAP* al_get_backbuffer(ALLEGRO_DISPLAY* display);
112 	ALLEGRO_BITMAP* al_get_target_bitmap();
113 
114 	bool al_acknowledge_resize(ALLEGRO_DISPLAY* display);
115 	bool al_resize_display(ALLEGRO_DISPLAY* display, int width, int height);
116 	void al_flip_display();
117 	void al_update_display_region(int x, int y, int width, int height);
118 	bool al_is_compatible_bitmap(ALLEGRO_BITMAP* bitmap);
119 
120 	bool al_wait_for_vsync();
121 
122 	ALLEGRO_EVENT_SOURCE* al_get_display_event_source(ALLEGRO_DISPLAY* display);
123 
124 	void al_set_display_icon(ALLEGRO_DISPLAY* display, ALLEGRO_BITMAP* icon);
125 	void al_set_display_icons(ALLEGRO_DISPLAY* display, int num_icons, ALLEGRO_BITMAP** icons);
126 
127 	/* Stuff for multihead/window management */
128 	int al_get_new_display_adapter();
129 	void al_set_new_display_adapter(int adapter);
130 	void al_set_new_window_position(int x, int y);
131 	void al_get_new_window_position(int* x, int* y);
132 	void al_set_window_position(ALLEGRO_DISPLAY* display, int x, int y);
133 	void al_get_window_position(ALLEGRO_DISPLAY* display, int* x, int* y);
134 	bool al_set_window_constraints(ALLEGRO_DISPLAY* display, int min_w, int min_h, int max_w, int max_h);
135 	bool al_get_window_constraints(ALLEGRO_DISPLAY* display, int* min_w, int* min_h, int* max_w, int* max_h);
136 
137 	void al_set_window_title(ALLEGRO_DISPLAY* display, in char* title);
138 
139 	/* Defined in display_settings.c */
140 	void al_set_new_display_option(int option, int value, int importance);
141 	int al_get_new_display_option(int option, int* importance);
142 	void al_reset_new_display_options();
143 	void al_set_display_option(ALLEGRO_DISPLAY* display, int option, int value);
144 	int al_get_display_option(ALLEGRO_DISPLAY* display, int option);
145 	
146 	/*Deferred drawing*/
147 	void al_hold_bitmap_drawing(bool hold);
148 	bool al_is_bitmap_drawing_held();
149 	
150 	void al_acknowledge_drawing_halt(ALLEGRO_DISPLAY* display);
151 	void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display);
152 }