annotate src/modules/window/sdl/Window.cpp @ 1418:357697c2e2a8

More internal code cleanup
author Alex Szpakowski <slime73@gmail.com>
date Sun, 31 Mar 2013 19:02:27 -0300
parents 9115e52f5350
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
1 /**
1282
b7f097053d74 Updated copyright text for the new year
Alex Szpakowski <slime73@gmail.com>
parents: 1250
diff changeset
2 * Copyright (c) 2006-2013 LOVE Development Team
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
3 *
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
4 * This software is provided 'as-is', without any express or implied
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
5 * warranty. In no event will the authors be held liable for any damages
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
6 * arising from the use of this software.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
7 *
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
8 * Permission is granted to anyone to use this software for any purpose,
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
9 * including commercial applications, and to alter it and redistribute it
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
10 * freely, subject to the following restrictions:
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
11 *
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
12 * 1. The origin of this software must not be misrepresented; you must not
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
13 * claim that you wrote the original software. If you use this software
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
14 * in a product, an acknowledgment in the product documentation would be
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
15 * appreciated but is not required.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
16 * 2. Altered source versions must be plainly marked as such, and must not be
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
17 * misrepresented as being the original software.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
18 * 3. This notice may not be removed or altered from any source distribution.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
19 **/
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
20
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
21 // STL
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
22 #include <iostream>
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
23
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
24 // SDL
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
25 #include <SDL.h>
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
26
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
27 // LOVE
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
28 #include "common/config.h"
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
29 #include "Window.h"
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
30
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
31 namespace love
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
32 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
33 namespace window
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
34 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
35 namespace sdl
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
36 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
37
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
38 Window::Window()
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
39 : windowTitle("")
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
40 , created(false)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
41 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
42 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
43 throw love::Exception(SDL_GetError());
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
44 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
45
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
46 Window::~Window()
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
47 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
48 SDL_QuitSubSystem(SDL_INIT_VIDEO);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
49 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
50
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
51 Window::_currentMode::_currentMode()
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
52 : width(800), height(600), fullscreen(false), vsync(true), fsaa(0)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
53 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
54 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
55
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
56 bool Window::setWindow(int width, int height, WindowFlags *flags)
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
57 {
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
58 bool fullscreen = false;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
59 bool vsync = true;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
60 int fsaa = 0;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
61 bool resizable = false;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
62 bool borderless = false;
1356
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
63 bool centered = true;
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
64
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
65 if (flags)
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
66 {
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
67 fullscreen = flags->fullscreen;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
68 vsync = flags->vsync;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
69 fsaa = flags->fsaa;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
70 resizable = flags->resizable;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
71 borderless = flags->borderless;
1356
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
72 centered = flags->centered;
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
73 }
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
74
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
75 bool mouseVisible = getMouseVisible();
1198
4fede85debc1 Reapply sdl's keyrepeat settings after setWindow
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
76 int keyrepeatDelay, keyrepeatInterval;
4fede85debc1 Reapply sdl's keyrepeat settings after setWindow
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
77 SDL_GetKeyRepeat(&keyrepeatDelay, &keyrepeatInterval);
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
78
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
79 // We need to restart the subsystem for two reasons:
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
80 // 1) Special case for fullscreen -> windowed. Windows XP did not
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
81 // work well with "normal" display mode change in this case.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
82 // The application window does leave fullscreen, but the desktop
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
83 // resolution does not revert to the correct one. Restarting the
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
84 // SDL video subsystem does the trick, though.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
85 // 2) Restart the event system (for whatever reason the event system
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
86 // started and stopped with SDL_INIT_VIDEO, see:
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
87 // http://sdl.beuc.net/sdl.wiki/Introduction_to_Events)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
88 // because the mouse position will not be able to exceed
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
89 // the previous' video mode window size (i.e. alway
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
90 // love.mouse.getX() < 800 when switching from 800x600 to a
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
91 // higher resolution)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
92 SDL_QuitSubSystem(SDL_INIT_VIDEO);
1356
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
93
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
94 if (centered) // Window should be centered.
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
95 SDL_putenv(const_cast<char *>("SDL_VIDEO_CENTERED=center"));
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
96 else
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
97 SDL_putenv(const_cast<char *>("SDL_VIDEO_CENTERED="));
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
98
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
99 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
100 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
101 std::cout << "Could not init SDL_VIDEO: " << SDL_GetError() << std::endl;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
102 return false;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
103 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
104
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
105 // Set caption.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
106 setWindowTitle(windowTitle);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
107 setMouseVisible(mouseVisible);
1198
4fede85debc1 Reapply sdl's keyrepeat settings after setWindow
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
108 SDL_EnableKeyRepeat(keyrepeatDelay, keyrepeatInterval);
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
109
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
110 // Set GL attributes
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
111 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
112 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
113 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
114 SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
115 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
116 SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, (vsync ? 1 : 0));
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
117 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
118
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
119 // FSAA
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
120 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, (fsaa > 0) ? 1 : 0);
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
121 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, (fsaa > 0) ? fsaa : 0);
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
122
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
123 Uint32 sdlflags = SDL_OPENGL;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
124 // Flags
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
125 if (fullscreen)
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
126 sdlflags |= SDL_FULLSCREEN;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
127 if (resizable)
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
128 sdlflags |= SDL_RESIZABLE;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
129 if (borderless)
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
130 sdlflags |= SDL_NOFRAME;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
131
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
132 // Have SDL set the video mode.
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
133 SDL_Surface *surface;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
134 if ((surface = SDL_SetVideoMode(width, height, 32, sdlflags)) == 0)
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
135 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
136 bool failed = true;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
137 if (fsaa > 0)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
138 {
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
139 // FSAA might have caused the failure, disable it and try again
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
140 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
141 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
1339
9dc7d74bbc58 Fixed some potential instability or crash issues
Alex Szpakowski <slime73@gmail.com>
parents: 1333
diff changeset
142 failed = (surface = SDL_SetVideoMode(width, height, 32, sdlflags)) == 0;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
143 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
144 if (failed)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
145 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
146 std::cerr << "Could not set video mode: " << SDL_GetError() << std::endl;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
147 return false;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
148 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
149 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
150
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
151 created = true;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
152
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
153 if (width == 0 || height == 0)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
154 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
155 const SDL_VideoInfo *videoinfo = SDL_GetVideoInfo();
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
156 width = videoinfo->current_w;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
157 height = videoinfo->current_h;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
158 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
159
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
160 int buffers;
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
161 int samples;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
162
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
163 SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &buffers);
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
164 SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &samples);
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
165
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
166 // Don't fail because of this, but issue a warning.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
167 if ((!buffers && fsaa) || (samples != fsaa))
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
168 {
1250
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
169 std::cerr << "Warning, FSAA setting failed! (Result: buffers: " << buffers << ", samples: " << samples << ")" << std::endl;
8c3108ab0e95 Removed direct OpenGL calls in the SDL Window module
Alex Szpakowski <slime73@gmail.com>
parents: 1198
diff changeset
170 fsaa = (buffers > 0) ? samples : 0;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
171 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
172
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
173 // Get the actual vsync status
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
174 int real_vsync;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
175 SDL_GL_GetAttribute(SDL_GL_SWAP_CONTROL, &real_vsync);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
176
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
177 // Set the new display mode as the current display mode.
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
178 currentMode.width = width;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
179 currentMode.height = height;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
180 currentMode.fsaa = fsaa;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
181 currentMode.fullscreen = fullscreen;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
182 currentMode.vsync = (real_vsync != 0);
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
183 currentMode.resizable = ((surface->flags & SDL_RESIZABLE) != 0);
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
184 currentMode.borderless = ((surface->flags & SDL_NOFRAME) != 0);
1356
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
185 currentMode.centered = centered;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
186
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
187 return true;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
188 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
189
1333
730ed5f01ab0 Merge in default, update changelog
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1111 1310
diff changeset
190 void Window::getWindow(int &width, int &height, WindowFlags &flags) const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
191 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
192 width = currentMode.width;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
193 height = currentMode.height;
1111
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
194 flags.fullscreen = currentMode.fullscreen;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
195 flags.vsync = currentMode.vsync;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
196 flags.fsaa = currentMode.fsaa;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
197 flags.resizable = currentMode.resizable;
9a6a533ac832 Use a flags table for setMode now, implement resizable and borderless windows, and add resize event
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1096
diff changeset
198 flags.borderless = currentMode.borderless;
1356
9115e52f5350 Add centered flag to setMode, optionally centers the window (on by default, as before) (issue #463)
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1339
diff changeset
199 flags.centered = currentMode.centered;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
200 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
201
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
202 bool Window::checkWindowSize(int width, int height, bool fullscreen) const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
203 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
204 Uint32 sdlflags = fullscreen ? (SDL_OPENGL | SDL_FULLSCREEN) : SDL_OPENGL;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
205
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
206 // Check if mode is supported
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
207 int bpp = SDL_VideoModeOK(width, height, 32, sdlflags);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
208
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
209 return (bpp >= 16);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
210 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
211
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
212 typedef Window::WindowSize WindowSize;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
213
1418
357697c2e2a8 More internal code cleanup
Alex Szpakowski <slime73@gmail.com>
parents: 1356
diff changeset
214 WindowSize *Window::getFullscreenSizes(int &n) const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
215 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
216 SDL_Rect **modes = SDL_ListModes(0, SDL_OPENGL | SDL_FULLSCREEN);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
217
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
218 if (modes == (SDL_Rect **)0 || modes == (SDL_Rect **)-1)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
219 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
220 n = 0;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
221 return NULL;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
222 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
223
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
224 n = 0;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
225 for (int i = 0; modes[i]; i++)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
226 n++;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
227
1418
357697c2e2a8 More internal code cleanup
Alex Szpakowski <slime73@gmail.com>
parents: 1356
diff changeset
228 WindowSize *sizes = new WindowSize[n];
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
229
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
230 for (int i = 0; i < n; i++)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
231 {
1418
357697c2e2a8 More internal code cleanup
Alex Szpakowski <slime73@gmail.com>
parents: 1356
diff changeset
232 WindowSize w = {modes[i]->w, modes[i]->h};
357697c2e2a8 More internal code cleanup
Alex Szpakowski <slime73@gmail.com>
parents: 1356
diff changeset
233 sizes[i] = w;
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
234 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
235 return sizes;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
236 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
237
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
238 int Window::getWidth() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
239 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
240 return currentMode.width;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
241 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
242
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
243 int Window::getHeight() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
244 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
245 return currentMode.height;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
246 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
247
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
248 bool Window::isCreated() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
249 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
250 return created;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
251 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
252
1418
357697c2e2a8 More internal code cleanup
Alex Szpakowski <slime73@gmail.com>
parents: 1356
diff changeset
253 void Window::setWindowTitle(const std::string &title)
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
254 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
255 windowTitle = title;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
256 SDL_WM_SetCaption(windowTitle.c_str(), 0);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
257 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
258
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
259 std::string Window::getWindowTitle() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
260 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
261 // not a reference
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
262 // because we want this untouched
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
263 // const std::string& might be an option
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
264 return windowTitle;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
265 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
266
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
267 bool Window::setIcon(love::image::ImageData *imgd)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
268 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
269 Uint32 rmask, gmask, bmask, amask;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
270 #ifdef LOVE_BIG_ENDIAN
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
271 rmask = 0xFF000000;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
272 gmask = 0x00FF0000;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
273 bmask = 0x0000FF00;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
274 amask = 0x000000FF;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
275 #else
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
276 rmask = 0x000000FF;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
277 gmask = 0x0000FF00;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
278 bmask = 0x00FF0000;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
279 amask = 0xFF000000;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
280 #endif
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
281
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
282 int w = static_cast<int>(imgd->getWidth());
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
283 int h = static_cast<int>(imgd->getHeight());
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
284 int pitch = static_cast<int>(imgd->getWidth() * 4);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
285
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
286 SDL_Surface *icon = SDL_CreateRGBSurfaceFrom(imgd->getData(), w, h, 32, pitch, rmask, gmask, bmask, amask);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
287 SDL_WM_SetIcon(icon, NULL);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
288 SDL_FreeSurface(icon);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
289 return true;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
290 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
291
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
292 void Window::swapBuffers()
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
293 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
294 SDL_GL_SwapBuffers();
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
295 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
296
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
297 bool Window::hasFocus() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
298 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
299 return (SDL_GetAppState() & SDL_APPINPUTFOCUS) != 0;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
300 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
301
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
302 void Window::setMouseVisible(bool visible)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
303 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
304 SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE);
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
305 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
306
1310
2061cc4dc762 Constified many Graphics and Window methods
Alex Szpakowski <slime73@gmail.com>
parents: 1282
diff changeset
307 bool Window::getMouseVisible() const
1096
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
308 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
309 return (SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE) ? true : false;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
310 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
311
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
312 love::window::Window *Window::getSingleton()
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
313 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
314 if (!singleton)
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
315 singleton = new Window();
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
316 else
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
317 singleton->retain();
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
318
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
319 return singleton;
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
320 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
321
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
322 const char *Window::getName() const
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
323 {
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
324 return "love.window.sdl";
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
325 }
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
326
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
327 } // sdl
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
328 } // window
86a44f2bc38f CRLF to LF
Bart van Strien <bart.bes+projects@gmail.com>
parents: 1086
diff changeset
329 } // love