--- /dev/null
+#include "cocoadisplay.h"
+#include "cocoawindow.h"
+#include "display.h"
+#include "display_private.h"
+#include "window.h"
+#include "window_private.h"
+
+namespace Msp {
+namespace Graphics {
+
+void Window::platform_init()
+{
+ CocoaDisplay *dpy = display.get_private().display;
+ priv->window = create_window(dpy, options.width, options.height, options.fullscreen, options.resizable);
+}
+
+void Window::platform_cleanup()
+{
+ destroy_window(priv->window);
+}
+
+void Window::set_title(const std::string &title)
+{
+ set_window_title(priv->window, title.c_str());
+}
+
+void Window::platform_reconfigure(bool /*fullscreen_changed*/)
+{
+ set_window_size(priv->window, options.width, options.height);
+}
+
+void Window::show_cursor(bool)
+{
+}
+
+void Window::warp_pointer(int, int)
+{
+}
+
+void Window::platform_show()
+{
+ show_window(priv->window);
+}
+
+void Window::platform_hide()
+{
+ hide_window(priv->window);
+}
+
+bool Window::event(const Event &ev)
+{
+ switch(ev.cevent.type)
+ {
+ case LEFT_MOUSE_DOWN:
+ case LEFT_MOUSE_UP:
+ case RIGHT_MOUSE_DOWN:
+ case RIGHT_MOUSE_UP:
+ case KEY_DOWN:
+ case KEY_UP:
+ case OTHER_MOUSE_DOWN:
+ case OTHER_MOUSE_UP:
+ signal_input_event.emit(ev);
+ break;
+ case MOUSE_MOVED:
+ if(ev.cevent.motion.x>=0 && ev.cevent.motion.x<options.width && ev.cevent.motion.y>=0 && ev.cevent.motion.y<options.height)
+ signal_input_event.emit(ev);
+ break;
+ case WINDOW_CLOSED:
+ signal_close.emit();
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace Graphics
+} // namespace Msp