gosu 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gosu/Bitmap.hpp +3 -3
  3. data/Gosu/Directories.hpp +6 -3
  4. data/Gosu/Gosu.hpp +0 -1
  5. data/Gosu/GraphicsBase.hpp +12 -8
  6. data/Gosu/Input.hpp +5 -16
  7. data/Gosu/Platform.hpp +1 -0
  8. data/Gosu/Version.hpp +3 -5
  9. data/Gosu/Window.hpp +7 -8
  10. data/README.txt +3 -3
  11. data/ext/gosu/extconf.rb +17 -16
  12. data/ext/gosu/gosu_wrap.cxx +59 -58
  13. data/ext/gosu/gosu_wrap.h +1 -1
  14. data/rdoc/gosu.rb +285 -283
  15. data/src/{MacUtility.hpp → AppleUtility.hpp} +24 -42
  16. data/src/Audio/ALChannelManagement.hpp +1 -1
  17. data/src/Audio/{AudioOpenAL.cpp → Audio.cpp} +6 -7
  18. data/src/Audio/Audio.mm +1 -0
  19. data/src/Audio/AudioFile.hpp +2 -2
  20. data/src/Audio/AudioToolboxFile.hpp +5 -20
  21. data/src/Audio/OggFile.hpp +44 -56
  22. data/src/Audio/SndFile.hpp +2 -2
  23. data/src/Bitmap/Bitmap.cpp +98 -2
  24. data/src/Bitmap/BitmapIO.cpp +156 -0
  25. data/src/DirectoriesApple.mm +76 -0
  26. data/src/DirectoriesUnix.cpp +5 -12
  27. data/src/DirectoriesWin.cpp +5 -0
  28. data/src/Graphics/BlockAllocator.hpp +2 -2
  29. data/src/Graphics/ClipRectStack.hpp +2 -2
  30. data/src/Graphics/Common.hpp +2 -2
  31. data/src/Graphics/DrawOp.hpp +2 -2
  32. data/src/Graphics/DrawOpQueue.hpp +2 -2
  33. data/src/Graphics/Graphics.cpp +7 -2
  34. data/src/Graphics/LargeImageData.cpp +6 -6
  35. data/src/Graphics/LargeImageData.hpp +3 -3
  36. data/src/Graphics/Macro.hpp +2 -2
  37. data/src/Graphics/RenderState.hpp +2 -2
  38. data/src/Graphics/Resolution.cpp +1 -1
  39. data/src/Graphics/TexChunk.hpp +2 -2
  40. data/src/Graphics/Texture.cpp +21 -16
  41. data/src/Graphics/Texture.hpp +7 -5
  42. data/src/Graphics/TransformStack.hpp +2 -2
  43. data/src/Iconv.hpp +2 -2
  44. data/src/Input/Input.cpp +3 -1
  45. data/src/Input/{InputTouch.mm → InputUIKit.mm} +32 -26
  46. data/src/Input/TextInput.cpp +1 -1
  47. data/src/Text/FormattedString.hpp +2 -2
  48. data/src/Text/TextApple.mm +8 -8
  49. data/src/Text/TextMac.cpp +1 -1
  50. data/src/Text/TextUnix.cpp +1 -1
  51. data/src/UIKit/GosuAppDelegate.h +8 -0
  52. data/src/UIKit/GosuAppDelegate.mm +24 -0
  53. data/src/UIKit/GosuGLView.h +8 -0
  54. data/src/UIKit/GosuGLView.mm +130 -0
  55. data/src/UIKit/GosuViewController.h +13 -0
  56. data/src/UIKit/GosuViewController.mm +214 -0
  57. data/src/UtilityApple.mm +5 -18
  58. data/src/Window.cpp +1 -3
  59. data/src/WindowUIKit.mm +124 -0
  60. data/src/stb_image.h +6437 -0
  61. data/src/stb_image_write.h +730 -0
  62. data/src/stb_vorbis.c +5459 -0
  63. metadata +18 -26
  64. data/Gosu/Sockets.hpp +0 -156
  65. data/src/Audio/AudioOpenAL.mm +0 -1
  66. data/src/Bitmap/BitmapApple.mm +0 -226
  67. data/src/Bitmap/BitmapBMP.cpp +0 -79
  68. data/src/Bitmap/BitmapColorKey.cpp +0 -50
  69. data/src/Bitmap/BitmapFreeImage.cpp +0 -174
  70. data/src/Bitmap/BitmapGDIplus.cpp +0 -212
  71. data/src/Bitmap/BitmapUtils.cpp +0 -76
  72. data/src/DirectoriesMac.mm +0 -38
  73. data/src/DirectoriesTouch.mm +0 -38
  74. data/src/GosuView.hpp +0 -15
  75. data/src/GosuView.mm +0 -208
  76. data/src/Input/AccelerometerReader.hpp +0 -10
  77. data/src/Input/AccelerometerReader.mm +0 -31
  78. data/src/Sockets/CommSocket.cpp +0 -305
  79. data/src/Sockets/ListenerSocket.cpp +0 -59
  80. data/src/Sockets/MessageSocket.cpp +0 -128
  81. data/src/Sockets/Socket.cpp +0 -145
  82. data/src/Sockets/Socket.hpp +0 -66
  83. data/src/WindowTouch.mm +0 -243
  84. data/src/X11vroot.h +0 -118
@@ -1,59 +0,0 @@
1
- #include <Gosu/Sockets.hpp>
2
- #include "Socket.hpp"
3
- #include <cassert>
4
- #include <cstring>
5
-
6
- struct Gosu::ListenerSocket::Impl
7
- {
8
- Socket socket;
9
- };
10
-
11
- Gosu::ListenerSocket::ListenerSocket(SocketPort port)
12
- : pimpl(new Impl)
13
- {
14
- pimpl->socket.setHandle(socketCheck(::socket(AF_INET, SOCK_STREAM, 0)));
15
- pimpl->socket.setBlocking(false);
16
-
17
- int enable = 1;
18
- socketCheck(::setsockopt(pimpl->socket.handle(), SOL_SOCKET, SO_REUSEADDR,
19
- reinterpret_cast<char*>(&enable), sizeof enable));
20
-
21
- sockaddr_in addr;
22
- std::memset(&addr, 0, sizeof addr);
23
- addr.sin_family = AF_INET;
24
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
25
- addr.sin_port = htons(port);
26
- socketCheck(::bind(pimpl->socket.handle(),
27
- reinterpret_cast<sockaddr*>(&addr), sizeof addr));
28
- socketCheck(::listen(pimpl->socket.handle(), 10));
29
- }
30
-
31
- Gosu::ListenerSocket::~ListenerSocket()
32
- {
33
- }
34
-
35
- Gosu::SocketAddress Gosu::ListenerSocket::address() const
36
- {
37
- return pimpl->socket.address();
38
- }
39
-
40
- Gosu::SocketPort Gosu::ListenerSocket::port() const
41
- {
42
- return pimpl->socket.port();
43
- }
44
-
45
- void Gosu::ListenerSocket::update()
46
- {
47
- while (onConnection)
48
- {
49
- SocketHandle newHandle =
50
- socketCheck(::accept(pimpl->socket.handle(), 0, 0));
51
-
52
- if (newHandle == INVALID_SOCKET)
53
- break;
54
-
55
- Socket newSocket;
56
- newSocket.setHandle(newHandle);
57
- onConnection(newSocket);
58
- }
59
- }
@@ -1,128 +0,0 @@
1
- #include <Gosu/Sockets.hpp>
2
- #include "Socket.hpp"
3
- #include <cassert>
4
- #include <cstring>
5
- #include <vector>
6
-
7
- struct Gosu::MessageSocket::Impl
8
- {
9
- Socket socket;
10
- std::size_t maxMessageSize;
11
- };
12
-
13
- Gosu::MessageSocket::MessageSocket(SocketPort port)
14
- : pimpl(new Impl)
15
- {
16
- pimpl->socket.setHandle(socketCheck(::socket(AF_INET, SOCK_DGRAM, 0)));
17
- pimpl->socket.setBlocking(false);
18
- sockaddr_in addr;
19
- std::memset(&addr, 0, sizeof addr);
20
- addr.sin_family = AF_INET;
21
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
22
- addr.sin_port = htons(port);
23
- socketCheck(::bind(pimpl->socket.handle(),
24
- reinterpret_cast<sockaddr*>(&addr), sizeof addr));
25
-
26
- unsigned maxMessageSize;
27
- socklen_t size = sizeof maxMessageSize;
28
- #ifdef GOSU_IS_WIN
29
- socketCheck(::getsockopt(pimpl->socket.handle(), SOL_SOCKET, SO_MAX_MSG_SIZE,
30
- reinterpret_cast<char*>(&maxMessageSize), &size));
31
- #else
32
- socketCheck(::getsockopt(pimpl->socket.handle(), SOL_SOCKET, SO_SNDBUF,
33
- reinterpret_cast<char*>(&maxMessageSize), &size));
34
- #endif
35
- pimpl->maxMessageSize = maxMessageSize;
36
- }
37
-
38
- Gosu::MessageSocket::~MessageSocket()
39
- {
40
- }
41
-
42
- Gosu::SocketAddress Gosu::MessageSocket::address() const
43
- {
44
- return pimpl->socket.address();
45
- }
46
-
47
- Gosu::SocketPort Gosu::MessageSocket::port() const
48
- {
49
- return pimpl->socket.port();
50
- }
51
-
52
- std::size_t Gosu::MessageSocket::maxMessageSize() const
53
- {
54
- return pimpl->maxMessageSize;
55
- }
56
-
57
- void Gosu::MessageSocket::update()
58
- {
59
- std::vector<char> buffer(maxMessageSize());
60
-
61
- sockaddr_in addr;
62
- socklen_t size = sizeof addr;
63
-
64
- for (;;)
65
- {
66
- int received = ::recvfrom(pimpl->socket.handle(), &buffer.front(),
67
- buffer.size(), 0, reinterpret_cast<sockaddr*>(&addr),
68
- &size);
69
-
70
- if (received != SOCKET_ERROR && onReceive)
71
- {
72
- onReceive(ntohl(addr.sin_addr.s_addr),
73
- ntohs(addr.sin_port), &buffer.front(), received);
74
- }
75
- else switch (lastSocketError())
76
- {
77
- // Ignore some of the errors.
78
- case GOSU_SOCK_ERR(EWOULDBLOCK):
79
- case GOSU_SOCK_ERR(ENETDOWN):
80
- case GOSU_SOCK_ERR(ENETRESET):
81
- case GOSU_SOCK_ERR(ETIMEDOUT):
82
- case GOSU_SOCK_ERR(ECONNRESET):
83
- return;
84
-
85
- // Everything else is unexpected.
86
- default:
87
- throwLastSocketError();
88
- }
89
- }
90
- }
91
-
92
- void Gosu::MessageSocket::send(SocketAddress address, SocketPort port,
93
- const void* buffer, std::size_t size)
94
- {
95
- sockaddr_in addr;
96
- std::memset(&addr, 0, sizeof addr);
97
- addr.sin_family = AF_INET;
98
- addr.sin_addr.s_addr = htonl(address);
99
- addr.sin_port = htons(port);
100
-
101
- int sent = ::sendto(pimpl->socket.handle(),
102
- reinterpret_cast<const char*>(buffer), size, 0,
103
- reinterpret_cast<sockaddr*>(&addr), sizeof addr);
104
-
105
- if (sent == static_cast<int>(size))
106
- return; // Yay, did it!
107
-
108
- assert(sent == SOCKET_ERROR); // Don't expect partial sends.
109
-
110
- switch (lastSocketError())
111
- {
112
- // Just ignore a lot of errors... this is UDP, right?
113
- case GOSU_SOCK_ERR(ENETDOWN):
114
- case GOSU_SOCK_ERR(ENETRESET):
115
- case GOSU_SOCK_ERR(ENOBUFS):
116
- case GOSU_SOCK_ERR(EWOULDBLOCK):
117
- case GOSU_SOCK_ERR(EHOSTUNREACH):
118
- case GOSU_SOCK_ERR(ECONNABORTED):
119
- case GOSU_SOCK_ERR(ECONNRESET):
120
- case GOSU_SOCK_ERR(ENETUNREACH):
121
- case GOSU_SOCK_ERR(ETIMEDOUT):
122
- break;
123
-
124
- // Everything else means more than just another lost packet, though.
125
- default:
126
- throwLastSocketError();
127
- }
128
- }
@@ -1,145 +0,0 @@
1
- #include <Gosu/Sockets.hpp>
2
- #include "Socket.hpp"
3
- #ifdef GOSU_IS_WIN
4
- #include <Gosu/WinUtility.hpp>
5
- #endif
6
- #include <cstdlib>
7
- #include <cstring>
8
- #include <algorithm>
9
- #include <stdexcept>
10
-
11
- namespace Gosu
12
- {
13
- namespace
14
- {
15
- void cleanup()
16
- {
17
- #ifdef GOSU_IS_WIN
18
- ::WSACleanup();
19
- #endif
20
- }
21
-
22
- void needsSockLib()
23
- {
24
- #ifdef GOSU_IS_WIN
25
- static bool initialized = false;
26
- if (!initialized)
27
- {
28
- WSADATA data;
29
- if (::WSAStartup(0x0202, &data) != 0)
30
- throw std::runtime_error("Could not initialize "
31
- "Windows sockets");
32
-
33
- initialized = true;
34
- std::atexit(cleanup);
35
- }
36
- #endif
37
- }
38
- }
39
- }
40
-
41
- int Gosu::lastSocketError()
42
- {
43
- #ifdef GOSU_IS_WIN
44
- needsSockLib();
45
- return ::WSAGetLastError();
46
- #else
47
- return errno;
48
- #endif
49
- }
50
-
51
- GOSU_NORETURN void Gosu::throwLastSocketError()
52
- {
53
- #ifdef GOSU_IS_WIN
54
- Win::throwLastError();
55
- #else
56
- throw std::runtime_error(strerror(errno));
57
- #endif
58
- }
59
-
60
- Gosu::SocketAddress Gosu::stringToAddress(const std::string& s)
61
- {
62
- needsSockLib();
63
-
64
- SocketAddress address;
65
-
66
- // Try to interpret name as an IP number string.
67
- address = ntohl(::inet_addr(s.c_str()));
68
- if (address != INADDR_NONE)
69
- return address;
70
-
71
- // This didn't work: Resolve host name via DNS.
72
- hostent* host = ::gethostbyname(s.c_str());
73
- if (!host)
74
- return 0;
75
- in_addr addr = *reinterpret_cast<in_addr*>(host->h_addr_list[0]);
76
- return ntohl(addr.s_addr);
77
- }
78
-
79
- std::string Gosu::addressToString(SocketAddress address)
80
- {
81
- needsSockLib();
82
-
83
- in_addr addr;
84
- addr.s_addr = htonl(address);
85
- return ::inet_ntoa(addr);
86
- }
87
-
88
- Gosu::Socket::Socket()
89
- : handle_(INVALID_SOCKET)
90
- {
91
- needsSockLib();
92
- }
93
-
94
- Gosu::Socket::~Socket()
95
- {
96
- setHandle(INVALID_SOCKET);
97
- }
98
-
99
- Gosu::SocketHandle Gosu::Socket::handle() const
100
- {
101
- return handle_;
102
- }
103
-
104
- void Gosu::Socket::setHandle(SocketHandle value)
105
- {
106
- if (handle() != INVALID_SOCKET)
107
- {
108
- ::closesocket(handle());
109
- }
110
-
111
- handle_ = value;
112
- }
113
-
114
- void Gosu::Socket::setBlocking(bool value)
115
- {
116
- unsigned long enable = !value;
117
- socketCheck(::ioctlsocket(handle(), FIONBIO, &enable));
118
- }
119
-
120
- Gosu::SocketAddress Gosu::Socket::address() const
121
- {
122
- sockaddr_in addr;
123
- int size = sizeof addr;
124
- socketCheck(::getsockname(handle(),
125
- reinterpret_cast<sockaddr*>(&addr),
126
- reinterpret_cast<socklen_t*>(&size)));
127
-
128
- return ntohl(addr.sin_addr.s_addr);
129
- }
130
-
131
- Gosu::SocketPort Gosu::Socket::port() const
132
- {
133
- sockaddr_in addr;
134
- int size = sizeof addr;
135
- socketCheck(::getsockname(handle(),
136
- reinterpret_cast<sockaddr*>(&addr),
137
- reinterpret_cast<socklen_t*>(&size)));
138
-
139
- return ntohs(addr.sin_port);
140
- }
141
-
142
- void Gosu::Socket::swap(Socket& other)
143
- {
144
- std::swap(handle_, other.handle_);
145
- }
@@ -1,66 +0,0 @@
1
- #ifndef GOSUIMPL_SOCKETS_HPP
2
- #define GOSUIMPL_SOCKETS_HPP
3
-
4
- #include <Gosu/Platform.hpp>
5
-
6
- #ifdef GOSU_IS_WIN
7
- #include "winsock2.h"
8
- #define GOSU_SOCK_ERR(code) WSA##code
9
- namespace Gosu { typedef SOCKET SocketHandle; }
10
- typedef int socklen_t;
11
- #else
12
- #include <unistd.h>
13
- #include <sys/errno.h>
14
- #include <sys/socket.h>
15
- #include <netinet/in.h>
16
- #include <arpa/inet.h>
17
- #include <netdb.h>
18
- #include <sys/ioctl.h>
19
- #define GOSU_SOCK_ERR(code) code
20
- #define INVALID_SOCKET -1
21
- #define SOCKET_ERROR -1
22
- #define closesocket close
23
- #define ioctlsocket ioctl
24
- namespace Gosu { typedef int SocketHandle; }
25
- #endif
26
-
27
- namespace Gosu
28
- {
29
- // Owns a socket and manages library initialization.
30
- class Socket {
31
- Socket(const Socket&);
32
- Socket& operator=(const Socket&);
33
-
34
- SocketHandle handle_;
35
- public:
36
- Socket();
37
- ~Socket();
38
-
39
- SocketHandle handle() const;
40
- void setHandle(SocketHandle value);
41
- void setBlocking(bool value);
42
-
43
- SocketAddress address() const;
44
- SocketPort port() const;
45
-
46
- void swap(Socket& other);
47
- };
48
-
49
- int lastSocketError();
50
-
51
- GOSU_NORETURN void throwLastSocketError();
52
-
53
- template<typename T>
54
- T socketCheck(T retVal)
55
- {
56
- if (retVal == SOCKET_ERROR &&
57
- lastSocketError() != GOSU_SOCK_ERR(EWOULDBLOCK))
58
- {
59
- throwLastSocketError();
60
- }
61
-
62
- return retVal;
63
- }
64
- }
65
-
66
- #endif
@@ -1,243 +0,0 @@
1
- #include <Gosu/Window.hpp>
2
- #include <Gosu/Graphics.hpp>
3
- #include <Gosu/Audio.hpp>
4
- #include <Gosu/Input.hpp>
5
- #include "MacUtility.hpp"
6
- #include "GosuView.hpp"
7
-
8
- #import <CoreGraphics/CoreGraphics.h>
9
- #import <UIKit/UIKit.h>
10
- #import <OpenGLES/EAGL.h>
11
- #import <QuartzCore/QuartzCore.h>
12
-
13
- #include <OpenAL/alc.h>
14
- #include <AudioToolbox/AudioSession.h>
15
-
16
- using namespace std::tr1::placeholders;
17
-
18
- namespace Gosu
19
- {
20
- static CGRect &screenRect()
21
- {
22
- static CGRect screenRect = [[UIScreen mainScreen] nativeBounds];
23
- return screenRect;
24
- }
25
-
26
- unsigned screenWidth()
27
- {
28
- return screenRect().size.width;
29
- }
30
-
31
- unsigned screenHeight()
32
- {
33
- return screenRect().size.height;
34
- }
35
-
36
- ALCcontext *sharedContext();
37
- }
38
-
39
- static void handleAudioInterruption(void *unused, UInt32 inInterruptionState)
40
- {
41
- if (inInterruptionState == kAudioSessionBeginInterruption) {
42
- alcMakeContextCurrent(NULL);
43
- } else if (inInterruptionState == kAudioSessionEndInterruption) {
44
- alcMakeContextCurrent(Gosu::sharedContext());
45
- }
46
- }
47
-
48
- int main(int argc, char *argv[])
49
- {
50
- try
51
- {
52
- [[NSAutoreleasePool alloc] init];
53
- return UIApplicationMain(argc, argv, nil, @"GosuAppDelegate");
54
- }
55
- catch (const std::exception& e)
56
- {
57
- NSLog(@"Terminating due to C++ exception: %s", e.what());
58
- throw;
59
- }
60
- }
61
-
62
- class Gosu::Audio {};
63
-
64
- struct Gosu::Window::Impl
65
- {
66
- ObjRef<UIWindow> window;
67
- ObjRef<GosuViewController> controller;
68
- std::auto_ptr<Graphics> graphics;
69
- std::auto_ptr<Input> input;
70
- double interval;
71
- };
72
-
73
- Gosu::Window& windowInstance();
74
-
75
- @interface GosuAppDelegate : NSObject <UIApplicationDelegate>
76
- @end
77
-
78
- namespace
79
- {
80
- // Ugly patching to bridge the C++ and ObjC sides.
81
- GosuView* gosuView = nil;
82
- bool pausedSong = false;
83
- bool paused = false;
84
-
85
- id timerOrDisplayLink = nil;
86
- }
87
-
88
- @implementation GosuAppDelegate
89
- - (void)setupTimerOrDisplayLink
90
- {
91
- if (timerOrDisplayLink)
92
- return;
93
-
94
- NSInteger targetFPS = round(1000.0 / windowInstance().updateInterval());
95
-
96
- if (60 % targetFPS != 0) {
97
- NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:windowInstance().updateInterval() / 1000.0 target:self selector:@selector(doTick:) userInfo:nil repeats:YES];
98
-
99
- timerOrDisplayLink = [timer retain];
100
- }
101
- else {
102
- CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(doTick:)];
103
- displayLink.frameInterval = 60 / targetFPS;
104
- [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
105
-
106
- timerOrDisplayLink = [displayLink retain];
107
- }
108
- }
109
-
110
- - (void)applicationDidFinishLaunching:(UIApplication *)application
111
- {
112
- [UIApplication sharedApplication].statusBarHidden = YES;
113
- [self setupTimerOrDisplayLink];
114
-
115
- AudioSessionInitialize(NULL, NULL, handleAudioInterruption, NULL);
116
- }
117
-
118
- - (void)applicationWillResignActive:(UIApplication *)application
119
- {
120
- if (Gosu::Song::currentSong()) {
121
- Gosu::Song::currentSong()->pause();
122
- pausedSong = true;
123
- }
124
- paused = true;
125
- windowInstance().loseFocus();
126
- }
127
-
128
- - (void)applicationDidBecomeActive:(UIApplication *)application
129
- {
130
- if (pausedSong) {
131
- if (Gosu::Song::currentSong())
132
- Gosu::Song::currentSong()->play();
133
- pausedSong = false;
134
- }
135
- paused = false;
136
- }
137
-
138
- - (void)applicationDidEnterBackground:(UIApplication *)application
139
- {
140
- [timerOrDisplayLink invalidate];
141
- [timerOrDisplayLink release];
142
- timerOrDisplayLink = nil;
143
- }
144
-
145
- - (void)applicationWillEnterForeground:(UIApplication *)application
146
- {
147
- [self setupTimerOrDisplayLink];
148
- }
149
-
150
- - (void)doTick:(id)sender
151
- {
152
- if (!paused)
153
- windowInstance().update();
154
- [gosuView drawView];
155
- Gosu::Song::update();
156
- windowInstance().input().update();
157
- }
158
- @end
159
-
160
- Gosu::Window::Window(unsigned width, unsigned height,
161
- bool fullscreen, double updateInterval)
162
- : pimpl(new Impl)
163
- {
164
- pimpl->window.reset([[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]);
165
- pimpl->controller.reset([[GosuViewController alloc] init]);
166
- gosuView = (GosuView*)pimpl->controller.obj().view;
167
- pimpl->window.obj().rootViewController = pimpl->controller.obj();
168
-
169
- pimpl->graphics.reset(new Graphics(screenHeight(), screenWidth(), false));
170
- pimpl->graphics->setResolution(width, height);
171
- pimpl->input.reset(new Input(gosuView, updateInterval));
172
- pimpl->input->onTouchBegan = std::tr1::bind(&Window::touchBegan, this, _1);
173
- pimpl->input->onTouchMoved = std::tr1::bind(&Window::touchMoved, this, _1);
174
- pimpl->input->onTouchEnded = std::tr1::bind(&Window::touchEnded, this, _1);
175
- pimpl->interval = updateInterval;
176
-
177
- // TODO: Get rid of performSelector:withObject:afterDelay:, without causing a C++ static initialization error
178
- [pimpl->window.obj() performSelector:@selector(makeKeyAndVisible) withObject:nil afterDelay:0];
179
- }
180
-
181
- Gosu::Window::~Window()
182
- {
183
- }
184
-
185
- std::wstring Gosu::Window::caption() const
186
- {
187
- return L"";
188
- }
189
-
190
- void Gosu::Window::setCaption(const std::wstring& caption)
191
- {
192
- }
193
-
194
- double Gosu::Window::updateInterval() const
195
- {
196
- return pimpl->interval;
197
- }
198
-
199
- const Gosu::Graphics& Gosu::Window::graphics() const
200
- {
201
- return *pimpl->graphics;
202
- }
203
-
204
- Gosu::Graphics& Gosu::Window::graphics()
205
- {
206
- return *pimpl->graphics;
207
- }
208
-
209
- const Gosu::Audio& Gosu::Window::audio() const
210
- {
211
- static Gosu::Audio audio;
212
- return audio;
213
- }
214
-
215
- Gosu::Audio& Gosu::Window::audio()
216
- {
217
- static Gosu::Audio audio;
218
- return audio;
219
- }
220
-
221
- const Gosu::Input& Gosu::Window::input() const
222
- {
223
- return *pimpl->input;
224
- }
225
-
226
- Gosu::Input& Gosu::Window::input()
227
- {
228
- return *pimpl->input;
229
- }
230
-
231
- void Gosu::Window::show()
232
- {
233
- }
234
-
235
- void Gosu::Window::close()
236
- {
237
- throw std::logic_error("Cannot close windows manually on iOS");
238
- }
239
-
240
- void* Gosu::Window::rootViewController() const
241
- {
242
- return pimpl->controller.get();
243
- }