aboutsummaryrefslogtreecommitdiffstats
path: root/demos/modules/gdisp/multiple_displays/main.c
blob: 4e8a5a08108c7c1f5d723c5797280fd9868e86b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
 * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu <joel@unormal.org>
 * Copyright (c) 2012, 2013, Andrew Hannam aka inmarket
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *    * Neither the name of the <organization> nor the
 *      names of its contributors may be used to endorse or promote products
 *      derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "gfx.h"

#include <stdio.h>

/*
 * This demo demonstrates two ways to talk to multiple displays.
 *
 * Method 1 is the preferred way however Method 2 would be useful
 * when quickly converting existing single display applications.
 *
 * Note you can combine the methods using method 2 for the first display
 * and method 1 for any extra displays.
 */

#define USE_METHOD_1		FALSE

#if USE_METHOD_1
	int main(void) {
		coord_t		width, height;
		coord_t		display, i, j;
		font_t		f;
		GDisplay	*g;
		char		buf[16];

		/* Initialize and clear the display */
		gfxInit();

		/* Get a font to write with */
		f = gdispOpenFont("*");

		/* Cycle through each display */
		for(display = 0; display < GDISP_TOTAL_DISPLAYS; display++) {

			// Get the specified display
			g = gdispGetDisplay(display);

			// Get the screen size
			width = gdispGGetWidth(g);
			height = gdispGGetHeight(g);

			/* Draw draw draw */
			gdispGDrawBox(g, 10, 10, width/2, height/2, Yellow);
			sprintf(buf, "Display %u", display);
			gdispGFillStringBox(g, width/2, height/2, width/2-10, height/2-10, buf, f, White, Blue, justifyCenter);
			gdispGDrawLine(g, 5, 30, width-50, height-40, Red);

			for(i = 5, j = 0; i < width && j < height; i += 7, j += i/20)
				gdispGDrawPixel(g, i, j, White);
		}

		while(TRUE) {
			gfxSleepMilliseconds(500);
		}
	}
#else
	int main(void) {
		coord_t		width, height;
		coord_t		display, i, j;
		font_t		f;
		char		buf[16];

		/* Initialize and clear the display */
		gfxInit();

		/* Get a font to write with */
		f = gdispOpenFont("*");

		/* Cycle through each display */
		for(display = 0; display < GDISP_TOTAL_DISPLAYS; display++) {

			// Set the default display to the specified display
			gdispSetDisplay(gdispGetDisplay(display));

			// Get the screen size
			width = gdispGetWidth();
			height = gdispGetHeight();

			/* Draw draw draw */
			gdispDrawBox(10, 10, width/2, height/2, Yellow);
			sprintf(buf, "Display %u", display);
			gdispFillStringBox(width/2, height/2, width/2-10, height/2-10, buf, f, White, Blue, justifyCenter);
			gdispDrawLine(5, 30, width-50, height-40, Red);

			for(i = 5, j = 0; i < width && j < height; i += 7, j += i/20)
				gdispDrawPixel(i, j, White);
		}

		while(TRUE) {
			gfxSleepMilliseconds(500);
		}
	}
#endif