SDL  2.0
SDL_bwindow.cc
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "../../SDL_internal.h"
22 
23 #if SDL_VIDEO_DRIVER_HAIKU
24 #include "../SDL_sysvideo.h"
25 
26 #include "SDL_BWin.h"
27 #include <new>
28 
29 /* Define a path to window's BWIN data */
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) {
35  return ((SDL_BWin*)(window->driverdata));
36 }
37 
38 static SDL_INLINE SDL_BApp *_GetBeApp() {
39  return ((SDL_BApp*)be_app);
40 }
41 
42 static int _InitWindow(_THIS, SDL_Window *window) {
43  uint32 flags = 0;
44  window_look look = B_BORDERED_WINDOW_LOOK;
45 
46  BRect bounds(
47  window->x,
48  window->y,
49  window->x + window->w - 1, //BeWindows have an off-by-one px w/h thing
50  window->y + window->h - 1
51  );
52 
53  if(window->flags & SDL_WINDOW_FULLSCREEN) {
54  /* TODO: Add support for this flag */
55  printf(__FILE__": %d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",__LINE__);
56  }
57  if(window->flags & SDL_WINDOW_OPENGL) {
58  /* TODO: Add support for this flag */
59  }
60  if(!(window->flags & SDL_WINDOW_RESIZABLE)) {
61  flags |= B_NOT_RESIZABLE | B_NOT_ZOOMABLE;
62  }
63  if(window->flags & SDL_WINDOW_BORDERLESS) {
64  look = B_NO_BORDER_WINDOW_LOOK;
65  }
66 
67  SDL_BWin *bwin = new(std::nothrow) SDL_BWin(bounds, look, flags);
68  if(bwin == NULL)
69  return ENOMEM;
70 
71  window->driverdata = bwin;
72  int32 winID = _GetBeApp()->GetID(window);
73  bwin->SetID(winID);
74 
75  return 0;
76 }
77 
78 int BE_CreateWindow(_THIS, SDL_Window *window) {
79  if(_InitWindow(_this, window) == ENOMEM)
80  return ENOMEM;
81 
82  /* Start window loop */
83  _ToBeWin(window)->Show();
84  return 0;
85 }
86 
87 int BE_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) {
88 
89  SDL_BWin *otherBWin = (SDL_BWin*)data;
90  if(!otherBWin->LockLooper())
91  return -1;
92 
93  /* Create the new window and initialize its members */
94  window->x = (int)otherBWin->Frame().left;
95  window->y = (int)otherBWin->Frame().top;
96  window->w = (int)otherBWin->Frame().Width();
97  window->h = (int)otherBWin->Frame().Height();
98 
99  /* Set SDL flags */
100  if(!(otherBWin->Flags() & B_NOT_RESIZABLE)) {
101  window->flags |= SDL_WINDOW_RESIZABLE;
102  }
103 
104  /* If we are out of memory, return the error code */
105  if(_InitWindow(_this, window) == ENOMEM)
106  return ENOMEM;
107 
108  /* TODO: Add any other SDL-supported window attributes here */
109  _ToBeWin(window)->SetTitle(otherBWin->Title());
110 
111  /* Start window loop and unlock the other window */
112  _ToBeWin(window)->Show();
113 
114  otherBWin->UnlockLooper();
115  return 0;
116 }
117 
118 void BE_SetWindowTitle(_THIS, SDL_Window * window) {
119  BMessage msg(BWIN_SET_TITLE);
120  msg.AddString("window-title", window->title);
121  _ToBeWin(window)->PostMessage(&msg);
122 }
123 
124 void BE_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) {
125  /* FIXME: Icons not supported by Haiku */
126 }
127 
128 void BE_SetWindowPosition(_THIS, SDL_Window * window) {
129  BMessage msg(BWIN_MOVE_WINDOW);
130  msg.AddInt32("window-x", window->x);
131  msg.AddInt32("window-y", window->y);
132  _ToBeWin(window)->PostMessage(&msg);
133 }
134 
135 void BE_SetWindowSize(_THIS, SDL_Window * window) {
136  BMessage msg(BWIN_RESIZE_WINDOW);
137  msg.AddInt32("window-w", window->w - 1);
138  msg.AddInt32("window-h", window->h - 1);
139  _ToBeWin(window)->PostMessage(&msg);
140 }
141 
142 void BE_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) {
143  BMessage msg(BWIN_SET_BORDERED);
144  msg.AddBool("window-border", bordered != SDL_FALSE);
145  _ToBeWin(window)->PostMessage(&msg);
146 }
147 
148 void BE_SetWindowResizable(_THIS, SDL_Window * window, SDL_bool resizable) {
149  BMessage msg(BWIN_SET_RESIZABLE);
150  msg.AddBool("window-resizable", resizable != SDL_FALSE);
151  _ToBeWin(window)->PostMessage(&msg);
152 }
153 
154 void BE_ShowWindow(_THIS, SDL_Window * window) {
155  BMessage msg(BWIN_SHOW_WINDOW);
156  _ToBeWin(window)->PostMessage(&msg);
157 }
158 
159 void BE_HideWindow(_THIS, SDL_Window * window) {
160  BMessage msg(BWIN_HIDE_WINDOW);
161  _ToBeWin(window)->PostMessage(&msg);
162 }
163 
164 void BE_RaiseWindow(_THIS, SDL_Window * window) {
165  BMessage msg(BWIN_SHOW_WINDOW); /* Activate this window and move to front */
166  _ToBeWin(window)->PostMessage(&msg);
167 }
168 
169 void BE_MaximizeWindow(_THIS, SDL_Window * window) {
170  BMessage msg(BWIN_MAXIMIZE_WINDOW);
171  _ToBeWin(window)->PostMessage(&msg);
172 }
173 
174 void BE_MinimizeWindow(_THIS, SDL_Window * window) {
175  BMessage msg(BWIN_MINIMIZE_WINDOW);
176  _ToBeWin(window)->PostMessage(&msg);
177 }
178 
179 void BE_RestoreWindow(_THIS, SDL_Window * window) {
180  BMessage msg(BWIN_RESTORE_WINDOW);
181  _ToBeWin(window)->PostMessage(&msg);
182 }
183 
185  SDL_VideoDisplay * display, SDL_bool fullscreen) {
186  /* Haiku tracks all video display information */
187  BMessage msg(BWIN_FULLSCREEN);
188  msg.AddBool("fullscreen", fullscreen);
189  _ToBeWin(window)->PostMessage(&msg);
190 
191 }
192 
193 int BE_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp) {
194  /* FIXME: Not Haiku supported */
195  return -1;
196 }
197 
198 int BE_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp) {
199  /* FIXME: Not Haiku supported */
200  return -1;
201 }
202 
203 
204 void BE_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed) {
205  /* TODO: Implement this! */
206 }
207 
208 void BE_DestroyWindow(_THIS, SDL_Window * window) {
209  _ToBeWin(window)->LockLooper(); /* This MUST be locked */
210  _GetBeApp()->ClearID(_ToBeWin(window));
211  _ToBeWin(window)->Quit();
212  window->driverdata = NULL;
213 }
214 
216  struct SDL_SysWMinfo *info) {
217  /* FIXME: What is the point of this? What information should be included? */
218  return SDL_FALSE;
219 }
220 
221 
222 
223 
224 
225 #ifdef __cplusplus
226 }
227 #endif
228 
229 #endif /* SDL_VIDEO_DRIVER_HAIKU */
void BE_DestroyWindow(_THIS, SDL_Window *window)
int BE_SetWindowGammaRamp(_THIS, SDL_Window *window, const Uint16 *ramp)
int BE_CreateWindowFrom(_THIS, SDL_Window *window, const void *data)
void BE_RaiseWindow(_THIS, SDL_Window *window)
void BE_SetWindowBordered(_THIS, SDL_Window *window, SDL_bool bordered)
void BE_HideWindow(_THIS, SDL_Window *window)
void BE_SetWindowResizable(_THIS, SDL_Window *window, SDL_bool resizable)
static SDL_Window * window
void BE_RestoreWindow(_THIS, SDL_Window *window)
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
void BE_MinimizeWindow(_THIS, SDL_Window *window)
SDL_bool BE_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
int BE_CreateWindow(_THIS, SDL_Window *window)
int BE_GetWindowGammaRamp(_THIS, SDL_Window *window, Uint16 *ramp)
void BE_SetWindowPosition(_THIS, SDL_Window *window)
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
void BE_SetWindowGrab(_THIS, SDL_Window *window, SDL_bool grabbed)
void SetID(int32 id)
Definition: SDL_BWin.h:448
void BE_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
#define _THIS
char * title
Definition: SDL_sysvideo.h:75
void BE_SetWindowIcon(_THIS, SDL_Window *window, SDL_Surface *icon)
int32 GetID()
Definition: SDL_BWin.h:429
#define NULL
Definition: begin_code.h:143
SDL_bool
Definition: SDL_stdinc.h:130
The type used to identify a window.
Definition: SDL_sysvideo.h:71
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:151
GLbitfield flags
#define SDL_INLINE
Definition: begin_code.h:120
void BE_SetWindowTitle(_THIS, SDL_Window *window)
void * driverdata
Definition: SDL_sysvideo.h:109
void BE_MaximizeWindow(_THIS, SDL_Window *window)
Uint32 flags
Definition: SDL_sysvideo.h:81
void BE_ShowWindow(_THIS, SDL_Window *window)
void BE_SetWindowSize(_THIS, SDL_Window *window)