aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer/sk_app/mac/main_mac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/viewer/sk_app/mac/main_mac.cpp')
-rw-r--r--tools/viewer/sk_app/mac/main_mac.cpp77
1 files changed, 29 insertions, 48 deletions
diff --git a/tools/viewer/sk_app/mac/main_mac.cpp b/tools/viewer/sk_app/mac/main_mac.cpp
index 94bc99e01e..c7040b5adb 100644
--- a/tools/viewer/sk_app/mac/main_mac.cpp
+++ b/tools/viewer/sk_app/mac/main_mac.cpp
@@ -7,69 +7,50 @@
#include "SkTypes.h"
#include "SkTHash.h"
+#include "SDL.h"
#include "Timer.h"
#include "Window_mac.h"
#include "../Application.h"
using sk_app::Application;
-int main(int argc, char**argv) {
-#if 0
- // TODO: use Mac main loop
-
- Display* display = XOpenDisplay(nullptr);
-
- Application* app = Application::Create(argc, argv, (void*)display);
+int main(int argc, char* argv[]) {
+ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) {
+ SkDebugf("Could not initialize SDL!\n");
+ return 1;
+ }
- // Get the file descriptor for the X display
- int x11_fd = ConnectionNumber(display);
- fd_set in_fds;
+ Application* app = Application::Create(argc, argv, nullptr);
- SkTHashSet<sk_app::Window_mac*> pendingWindows;
+ SDL_Event event;
bool done = false;
while (!done) {
- // Create a file description set containing x11_fd
- FD_ZERO(&in_fds);
- FD_SET(x11_fd, &in_fds);
-
- // Set a sleep timer
- struct timeval tv;
- tv.tv_usec = 100;
- tv.tv_sec = 0;
-
- // Wait for an event on the file descriptor or for timer expiration
- (void) select(1, &in_fds, NULL, NULL, &tv);
-
- // Handle XEvents (if any) and flush the input
- XEvent event;
- while (XPending(display) && !done) {
- XNextEvent(display, &event);
-
- sk_app::Window_mac* win = sk_app::Window_mac::gWindowMap.find(event.xany.window);
- // paint and resize events get collapsed
+ while (SDL_PollEvent(&event)) {
switch (event.type) {
- case Expose:
- win->markPendingPaint();
- pendingWindows.add(win);
- break;
- case ConfigureNotify:
- win->markPendingResize(event.xconfigurerequest.width,
- event.xconfigurerequest.height);
- pendingWindows.add(win);
- break;
- default:
- if (win->handleEvent(event)) {
+ // events handled by the windows
+ case SDL_WINDOWEVENT:
+ case SDL_MOUSEMOTION:
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ case SDL_KEYDOWN:
+ case SDL_KEYUP:
+ done = sk_app::Window_mac::HandleWindowEvent(event);
+ break;
+
+ case SDL_QUIT:
done = true;
- }
- break;
- }
+ break;
+
+ default:
+ break;
+ }
}
- }
+ app->onIdle();
+ }
delete app;
- XCloseDisplay(display);
-#endif
-
+ SDL_Quit();
+
return 0;
}