Skip to content

Latest commit

 

History

History
233 lines (182 loc) · 6.63 KB

SDL_bwindow.cc

File metadata and controls

233 lines (182 loc) · 6.63 KB
 
1
2
/*
Simple DirectMedia Layer
Jan 3, 2018
Jan 3, 2018
3
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
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
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_HAIKU
#include "../SDL_sysvideo.h"
#include "SDL_BWin.h"
#include <new>
/* Define a path to window's BWIN data */
#ifdef __cplusplus
extern "C" {
#endif
static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) {
Sep 24, 2018
Sep 24, 2018
35
return ((SDL_BWin*)(window->driverdata));
36
37
38
}
static SDL_INLINE SDL_BApp *_GetBeApp() {
Sep 24, 2018
Sep 24, 2018
39
return ((SDL_BApp*)be_app);
40
41
42
}
static int _InitWindow(_THIS, SDL_Window *window) {
Sep 24, 2018
Sep 24, 2018
43
44
uint32 flags = 0;
window_look look = B_TITLED_WINDOW_LOOK;
Sep 24, 2018
Sep 24, 2018
46
BRect bounds(
47
48
window->x,
window->y,
Sep 24, 2018
Sep 24, 2018
49
window->x + window->w - 1, //BeWindows have an off-by-one px w/h thing
50
51
52
53
window->y + window->h - 1
);
if(window->flags & SDL_WINDOW_FULLSCREEN) {
Sep 24, 2018
Sep 24, 2018
54
55
/* TODO: Add support for this flag */
printf(__FILE__": %d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",__LINE__);
56
57
}
if(window->flags & SDL_WINDOW_OPENGL) {
Sep 24, 2018
Sep 24, 2018
58
/* TODO: Add support for this flag */
59
60
}
if(!(window->flags & SDL_WINDOW_RESIZABLE)) {
Sep 24, 2018
Sep 24, 2018
61
flags |= B_NOT_RESIZABLE | B_NOT_ZOOMABLE;
62
63
}
if(window->flags & SDL_WINDOW_BORDERLESS) {
Sep 24, 2018
Sep 24, 2018
64
look = B_NO_BORDER_WINDOW_LOOK;
65
66
67
68
}
SDL_BWin *bwin = new(std::nothrow) SDL_BWin(bounds, look, flags);
if(bwin == NULL)
Jul 2, 2017
Jul 2, 2017
69
return -1;
70
71
72
73
74
75
76
77
window->driverdata = bwin;
int32 winID = _GetBeApp()->GetID(window);
bwin->SetID(winID);
return 0;
}
Aug 7, 2018
Aug 7, 2018
78
int HAIKU_CreateWindow(_THIS, SDL_Window *window) {
Jul 2, 2017
Jul 2, 2017
79
80
81
if (_InitWindow(_this, window) < 0) {
return -1;
}
Sep 24, 2018
Sep 24, 2018
82
83
/* Start window loop */
84
85
86
87
_ToBeWin(window)->Show();
return 0;
}
Aug 7, 2018
Aug 7, 2018
88
int HAIKU_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) {
Sep 24, 2018
Sep 24, 2018
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
SDL_BWin *otherBWin = (SDL_BWin*)data;
if(!otherBWin->LockLooper())
return -1;
/* Create the new window and initialize its members */
window->x = (int)otherBWin->Frame().left;
window->y = (int)otherBWin->Frame().top;
window->w = (int)otherBWin->Frame().Width();
window->h = (int)otherBWin->Frame().Height();
/* Set SDL flags */
if(!(otherBWin->Flags() & B_NOT_RESIZABLE)) {
window->flags |= SDL_WINDOW_RESIZABLE;
}
/* If we are out of memory, return the error code */
Jul 2, 2017
Jul 2, 2017
106
107
108
if (_InitWindow(_this, window) < 0) {
return -1;
}
Sep 24, 2018
Sep 24, 2018
109
110
/* TODO: Add any other SDL-supported window attributes here */
111
112
113
114
115
116
117
118
119
_ToBeWin(window)->SetTitle(otherBWin->Title());
/* Start window loop and unlock the other window */
_ToBeWin(window)->Show();
otherBWin->UnlockLooper();
return 0;
}
Aug 7, 2018
Aug 7, 2018
120
void HAIKU_SetWindowTitle(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
121
122
123
BMessage msg(BWIN_SET_TITLE);
msg.AddString("window-title", window->title);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
126
void HAIKU_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) {
Sep 24, 2018
Sep 24, 2018
127
/* FIXME: Icons not supported by Haiku */
Aug 7, 2018
Aug 7, 2018
130
void HAIKU_SetWindowPosition(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
131
132
133
134
BMessage msg(BWIN_MOVE_WINDOW);
msg.AddInt32("window-x", window->x);
msg.AddInt32("window-y", window->y);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
137
void HAIKU_SetWindowSize(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
138
139
140
141
BMessage msg(BWIN_RESIZE_WINDOW);
msg.AddInt32("window-w", window->w - 1);
msg.AddInt32("window-h", window->h - 1);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
144
void HAIKU_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) {
Sep 24, 2018
Sep 24, 2018
145
146
147
BMessage msg(BWIN_SET_BORDERED);
msg.AddBool("window-border", bordered != SDL_FALSE);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
150
void HAIKU_SetWindowResizable(_THIS, SDL_Window * window, SDL_bool resizable) {
Sep 24, 2018
Sep 24, 2018
151
152
153
BMessage msg(BWIN_SET_RESIZABLE);
msg.AddBool("window-resizable", resizable != SDL_FALSE);
_ToBeWin(window)->PostMessage(&msg);
Sep 30, 2016
Sep 30, 2016
154
155
}
Aug 7, 2018
Aug 7, 2018
156
void HAIKU_ShowWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
157
158
BMessage msg(BWIN_SHOW_WINDOW);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
161
void HAIKU_HideWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
162
163
BMessage msg(BWIN_HIDE_WINDOW);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
166
void HAIKU_RaiseWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
167
168
BMessage msg(BWIN_SHOW_WINDOW); /* Activate this window and move to front */
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
171
void HAIKU_MaximizeWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
172
173
BMessage msg(BWIN_MAXIMIZE_WINDOW);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
176
void HAIKU_MinimizeWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
177
178
BMessage msg(BWIN_MINIMIZE_WINDOW);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
181
void HAIKU_RestoreWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
182
183
BMessage msg(BWIN_RESTORE_WINDOW);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
186
void HAIKU_SetWindowFullscreen(_THIS, SDL_Window * window,
Sep 24, 2018
Sep 24, 2018
187
188
189
190
191
192
SDL_VideoDisplay * display, SDL_bool fullscreen) {
/* Haiku tracks all video display information */
BMessage msg(BWIN_FULLSCREEN);
msg.AddBool("fullscreen", fullscreen);
_ToBeWin(window)->PostMessage(&msg);
Aug 7, 2018
Aug 7, 2018
195
int HAIKU_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp) {
Sep 24, 2018
Sep 24, 2018
196
197
/* FIXME: Not Haiku supported */
return -1;
Aug 7, 2018
Aug 7, 2018
200
int HAIKU_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp) {
Sep 24, 2018
Sep 24, 2018
201
202
/* FIXME: Not Haiku supported */
return -1;
Aug 7, 2018
Aug 7, 2018
206
void HAIKU_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed) {
Sep 24, 2018
Sep 24, 2018
207
/* TODO: Implement this! */
Aug 7, 2018
Aug 7, 2018
210
void HAIKU_DestroyWindow(_THIS, SDL_Window * window) {
Sep 24, 2018
Sep 24, 2018
211
212
213
214
_ToBeWin(window)->LockLooper(); /* This MUST be locked */
_GetBeApp()->ClearID(_ToBeWin(window));
_ToBeWin(window)->Quit();
window->driverdata = NULL;
Aug 7, 2018
Aug 7, 2018
217
SDL_bool HAIKU_GetWindowWMInfo(_THIS, SDL_Window * window,
218
struct SDL_SysWMinfo *info) {
Sep 24, 2018
Sep 24, 2018
219
220
/* FIXME: What is the point of this? What information should be included? */
return SDL_FALSE;
221
222
223
224
225
226
227
228
229
230
231
}
#ifdef __cplusplus
}
#endif
#endif /* SDL_VIDEO_DRIVER_HAIKU */
Dec 9, 2016
Dec 9, 2016
232
233
/* vi: set ts=4 sw=4 expandtab: */