File: root.c

package info (click to toggle)
s3d 0.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,708 kB
  • sloc: ansic: 23,609; python: 488; perl: 98; makefile: 31; sh: 29
file content (144 lines) | stat: -rw-r--r-- 4,416 bytes parent folder | download | duplicates (4)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// SPDX-License-Identifier: LGPL-2.1-or-later
/* SPDX-FileCopyrightText: 2006-2015  Simon Wunderlich <sw@simonwunderlich.de>
 */

#include <s3d.h>
#include <s3dw.h>
#include <s3dw_int.h>
#include <s3dlib.h>
#include <stdlib.h> /* malloc() */
#include <stdio.h>   /* printf() */
s3dw_callback   s3dwcb_show[S3DW_NTYPES];
s3dw_callback   s3dwcb_hide[S3DW_NTYPES];
s3dw_callback   s3dwcb_destroy[S3DW_NTYPES];
s3dw_click_callback s3dwcb_click[S3DW_NTYPES];
s3dw_key_callback s3dwcb_key[S3DW_NTYPES];


static s3dw_widget *root = NULL;

/* just destroy the widget */
void s3dw_root_destroy(s3dw_widget *widget)
{
	free(widget);
}
/*  do plain nothing. interesting, isn't it? ;) */
void s3dw_nothing(s3dw_widget *S3DUNUSED(widget))
{
}
int s3dw_click_nothing(s3dw_widget *S3DUNUSED(widget), uint32_t S3DUNUSED(dummy))
{
	return 0;
}
int s3dw_key_nothing(s3dw_widget *S3DUNUSED(widget), struct s3d_key_event *S3DUNUSED(dummy))
{
	return 0;
}

const char *s3dw_get_type_string(int type)
{
	switch (type) {
	case S3DW_TROOT:
		return "root";
	case S3DW_TCAM:
		return "cam";
	case S3DW_TSURFACE:
		return "surface";
	case S3DW_TBUTTON:
		return "button";
	case S3DW_TLABEL:
		return "label";
	case S3DW_TINPUT:
		return "input";
	case S3DW_TTEXTBOX:
		return "textbox";
	case S3DW_TSCROLLBAR:
		return "scrollbar";
	}
	return NULL;
}

/** \brief get the root
 *
 * Returns the root-widget, which holds all the surfaces. E.g. if you want to
 * move all widgets at once, adjust the root-widgets x,y,z and use s3dw_moveit()
 *
 * \code
 * s3dw_widget *root = s3dw_getroot();
 * // move widget center to (0,5,0). upon creation, it's centered at (0,0,0),
 * // so this might move it up
 * root->x=0;
 * root->y=5;
 * root->z=0;
 * s3dw_moveit(root);
 * \endcode
 */
s3dw_widget* s3dw_getroot(void)
{
	if (root == NULL) {
		root = (s3dw_widget *)malloc(sizeof(s3dw_widget));
		root = s3dw_widget_new(root);
		root->type = S3DW_TROOT;
		root->oid = s3d_new_object();
		root->style = &def_style;
		root->flags = S3DW_VISIBLE | S3DW_ACTIVE;
		_s3dw_cam = (s3dw_widget *)malloc(sizeof(s3dw_widget));
		s3dw_widget_new(_s3dw_cam);
		_s3dw_cam->type = S3DW_TCAM;
		_s3dw_cam->oid = 0;
		_s3dw_cam->style = &def_style;
		_s3dw_cam->s = 10;
		_s3dw_cam->width = 1;
		_s3dw_cam->height = 0;
		_s3dw_cam->flags = S3DW_VISIBLE | S3DW_ACTIVE;

		s3dw_widget_append(root, _s3dw_cam);
		/* setup callback tables */
		s3dwcb_show[S3DW_TROOT] =  s3dw_nothing;
		s3dwcb_show[S3DW_TCAM] =   s3dw_nothing;
		s3dwcb_show[S3DW_TSURFACE] =  s3dw_surface_show;
		s3dwcb_show[S3DW_TBUTTON] =  s3dw_button_show;
		s3dwcb_show[S3DW_TLABEL] =  s3dw_label_show;
		s3dwcb_show[S3DW_TINPUT] =  s3dw_input_show;
		s3dwcb_show[S3DW_TTEXTBOX] =  s3dw_textbox_show;
		s3dwcb_show[S3DW_TSCROLLBAR] = s3dw_scrollbar_show;

		s3dwcb_hide[S3DW_TROOT] =  s3dw_nothing;
		s3dwcb_hide[S3DW_TSURFACE] =  s3dw_surface_hide;
		s3dwcb_hide[S3DW_TBUTTON] =  s3dw_button_hide;
		s3dwcb_hide[S3DW_TLABEL] =  s3dw_label_hide;
		s3dwcb_hide[S3DW_TINPUT] =  s3dw_input_hide;
		s3dwcb_hide[S3DW_TTEXTBOX] =  s3dw_textbox_hide;
		s3dwcb_hide[S3DW_TSCROLLBAR] = s3dw_scrollbar_hide;

		s3dwcb_destroy[S3DW_TROOT] =  s3dw_root_destroy;
		s3dwcb_destroy[S3DW_TCAM] =  s3dw_root_destroy;
		s3dwcb_destroy[S3DW_TSURFACE] = s3dw_surface_destroy;
		s3dwcb_destroy[S3DW_TBUTTON] = s3dw_button_destroy;
		s3dwcb_destroy[S3DW_TLABEL] = s3dw_label_destroy;
		s3dwcb_destroy[S3DW_TINPUT] = s3dw_input_destroy;
		s3dwcb_destroy[S3DW_TTEXTBOX] = s3dw_textbox_destroy;
		s3dwcb_destroy[S3DW_TSCROLLBAR] = s3dw_scrollbar_destroy;

		s3dwcb_click[S3DW_TROOT] =  s3dw_click_nothing;
		s3dwcb_click[S3DW_TCAM] =  s3dw_click_nothing;
		s3dwcb_click[S3DW_TSURFACE] = s3dw_surface_event_click;
		s3dwcb_click[S3DW_TBUTTON] =  s3dw_button_event_click;
		s3dwcb_click[S3DW_TLABEL] =  s3dw_label_event_click;
		s3dwcb_click[S3DW_TINPUT] =  s3dw_input_event_click;
		s3dwcb_click[S3DW_TTEXTBOX] = s3dw_textbox_event_click;
		s3dwcb_click[S3DW_TSCROLLBAR] = s3dw_scrollbar_event_click;

		s3dwcb_key[S3DW_TROOT] =   s3dw_key_nothing;
		s3dwcb_key[S3DW_TCAM] =   s3dw_key_nothing;
		s3dwcb_key[S3DW_TSURFACE] =  s3dw_surface_event_key;
		s3dwcb_key[S3DW_TBUTTON] =  s3dw_button_event_key;
		s3dwcb_key[S3DW_TLABEL] =  s3dw_label_event_key;
		s3dwcb_key[S3DW_TINPUT] =  s3dw_input_event_key;
		s3dwcb_key[S3DW_TTEXTBOX] =  s3dw_key_nothing;
		s3dwcb_key[S3DW_TSCROLLBAR] = s3dw_key_nothing;

	}
	return root;
}