all repos — openbox @ 16f46c296d1fcd3f27fc62a18e71c55fb3fd3e88

openbox fork - make it a bit more like ryudo

render/test.c (raw)

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
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-

   test.c for the Openbox window manager
   Copyright (c) 2003        Ben Jansens
   Copyright (c) 2003        Derek Foreman

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   See the COPYING file for a copy of the GNU General Public License.
*/

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/shape.h>
#include <string.h>
#include <stdlib.h>
#include "render.h"
#include <glib.h>

static int x_error_handler(Display * disp, XErrorEvent * error)
{
	char buf[1024];
	XGetErrorText(disp, error->error_code, buf, 1024);
	printf("%s\n", buf);
	return 0;
}

Display *ob_display;
int ob_screen;
Window ob_root;

int main()
{
	Window win;
	RrInstance *inst;
	RrAppearance *look;

	Window root;
	XEvent report;
	int h = 500, w = 500;

	ob_display = XOpenDisplay(NULL);
	XSetErrorHandler(x_error_handler);
	ob_screen = DefaultScreen(ob_display);
	ob_root = RootWindow(ob_display, ob_screen);
	win =
	    XCreateWindow(ob_display, RootWindow(ob_display, 0),
					  10, 10, w, h, 10, 
					  CopyFromParent,	/* depth */
					  CopyFromParent,	/* class */
					  CopyFromParent,	/* visual */
					  0,	                /* valuemask */
					  0);	                /* attributes */
	XMapWindow(ob_display, win);
	XSelectInput(ob_display, win, ExposureMask | StructureNotifyMask);
	root = RootWindow (ob_display, DefaultScreen (ob_display));
	inst = RrInstanceNew(ob_display, ob_screen);

	look = RrAppearanceNew(inst, 0);
	look->surface.grad = RR_SURFACE_PYRAMID;
	look->surface.secondary = RrColorParse(inst, "Yellow");
	look->surface.primary = RrColorParse(inst, "Blue");
	look->surface.interlaced = FALSE;
	if (ob_display == NULL) {
		fprintf(stderr, "couldn't connect to X server :0\n");
		return 0;
	}

	RrPaint(look, win, w, h);
	while (1) {
		XNextEvent(ob_display, &report);
		switch (report.type) {
		case Expose:
			break;
		case ConfigureNotify:
			RrPaint(look, win,
					report.xconfigure.width,
					report.xconfigure.height);
			break;
		}

	}

	RrAppearanceFree (look);
	RrInstanceFree (inst);

	return 1;
}