Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5098 clevermous 1
/*
2
 * Demonstration program for Nano-X graphics.
3
 */
4
#include 
5
#include 
6
#include 
7
#define MWINCLUDECOLORS
8
#include 
9
#include 
10
#include 
11
#include "ui.h"
12
 
13
static	GR_WINDOW_ID	w1;		/* id for large window */
14
static	GR_GC_ID	gc1;		/* graphics context for text */
15
 
16
void errorcatcher();			/* routine to handle errors */
17
 
18
void tkSwapBuffers(void)
19
{
20
    nglXSwapBuffers(w1);
21
}
22
 
23
int
24
ui_loop(int argc,char **argv, const char *name)
25
{
26
	GR_EVENT	event;		/* current event */
27
	GR_IMAGE_ID	id = 0;
28
        NGLXContext cx;
29
        int width, height, k;
30
 
31
	if (GrOpen() < 0) {
32
		fprintf(stderr, "cannot open graphics\n");
33
		exit(1);
34
	}
35
 
36
        width = 400;
37
        height = 300;
38
 
39
	GrSetErrorHandler(errorcatcher);
40
 
41
	w1 = GrNewWindow(GR_ROOT_WINDOW_ID, 10, 10, width, height, 4, BLACK, WHITE);
42
 
43
	GrSelectEvents(w1, GR_EVENT_MASK_CLOSE_REQ|GR_EVENT_MASK_EXPOSURE|GR_EVENT_MASK_KEY_DOWN);
44
 
45
	GrMapWindow(w1);
46
 
47
	gc1 = GrNewGC();
48
 
49
	GrSetGCForeground(gc1, WHITE);
50
 
51
        cx = nglXCreateContext(NULL, 0);
52
        nglXMakeCurrent(w1, cx);
53
 
54
        init();
55
        reshape(width, height);
56
 
57
	while (1) {
58
            GrCheckNextEvent(&event);
59
            switch(event.type) {
60
            case GR_EVENT_TYPE_CLOSE_REQ:
61
                GrFreeImage(id);
62
                GrClose();
63
                exit(0);
64
            case GR_EVENT_TYPE_EXPOSURE:
65
                break;
66
            case GR_EVENT_TYPE_KEY_DOWN:
67
                {
68
                    GR_EVENT_KEYSTROKE *kp = &event.keystroke;
69
                    /* XXX: nanoX special keys are totally bugged ! */
70
                    switch(kp->ch) {
71
                    case 81:
72
                        k = KEY_LEFT;
73
                        break;
74
                    case 83:
75
                        k = KEY_RIGHT;
76
                        break;
77
                    case 82:
78
                        k = KEY_UP;
79
                        break;
80
                    case 84:
81
                        k = KEY_DOWN;
82
                        break;
83
                    default:
84
                        k = kp->ch;
85
                        break;
86
                    }
87
                    key(k, 0);
88
                }
89
                break;
90
            default:
91
                idle();
92
                break;
93
            }
94
        }
95
 
96
	return 0;
97
}
98
 
99
 
100
/*
101
 * Here on an unrecoverable error.
102
 */
103
void
104
errorcatcher(code, name, id)
105
	GR_ERROR	code;		/* error code */
106
	GR_FUNC_NAME	name;		/* function name which failed */
107
	GR_ID		id;		/* resource id */
108
{
109
	GrClose();
110
	fprintf(stderr, "DEMO ERROR: code %d, function %s, resource id %d\n",
111
		code, name, id);
112
	exit(1);
113
}