diff options
Diffstat (limited to 'tools/viewer/sk_app/mac/main_mac.cpp')
-rw-r--r-- | tools/viewer/sk_app/mac/main_mac.cpp | 77 |
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; } |