michael@0: /* michael@0: * Copyright 2011 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #if defined(SK_BUILD_FOR_MAC) michael@0: michael@0: #import michael@0: #include "SkOSWindow_Mac.h" michael@0: #include "SkOSMenu.h" michael@0: #include "SkTypes.h" michael@0: #include "SkWindow.h" michael@0: #import "SkNSView.h" michael@0: #import "SkEventNotifier.h" michael@0: #define kINVAL_NSVIEW_EventType "inval-nsview" michael@0: michael@0: SK_COMPILE_ASSERT(SK_SUPPORT_GPU, not_implemented_for_non_gpu_build); michael@0: michael@0: SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd) { michael@0: fInvalEventIsPending = false; michael@0: fGLContext = NULL; michael@0: fNotifier = [[SkEventNotifier alloc] init]; michael@0: } michael@0: SkOSWindow::~SkOSWindow() { michael@0: [(SkEventNotifier*)fNotifier release]; michael@0: } michael@0: michael@0: void SkOSWindow::onHandleInval(const SkIRect& r) { michael@0: if (!fInvalEventIsPending) { michael@0: fInvalEventIsPending = true; michael@0: (new SkEvent(kINVAL_NSVIEW_EventType, this->getSinkID()))->post(); michael@0: } michael@0: } michael@0: michael@0: bool SkOSWindow::onEvent(const SkEvent& evt) { michael@0: if (evt.isType(kINVAL_NSVIEW_EventType)) { michael@0: fInvalEventIsPending = false; michael@0: const SkIRect& r = this->getDirtyBounds(); michael@0: [(SkNSView*)fHWND postInvalWithRect:&r]; michael@0: [(NSOpenGLContext*)fGLContext update]; michael@0: return true; michael@0: } michael@0: if ([(SkNSView*)fHWND onHandleEvent:evt]) { michael@0: return true; michael@0: } michael@0: return this->INHERITED::onEvent(evt); michael@0: } michael@0: michael@0: bool SkOSWindow::onDispatchClick(int x, int y, Click::State state, void* owner, michael@0: unsigned modi) { michael@0: return this->INHERITED::onDispatchClick(x, y, state, owner, modi); michael@0: } michael@0: michael@0: void SkOSWindow::onSetTitle(const char title[]) { michael@0: [(SkNSView*)fHWND setSkTitle:title]; michael@0: } michael@0: michael@0: void SkOSWindow::onAddMenu(const SkOSMenu* menu) { michael@0: [(SkNSView*)fHWND onAddMenu:menu]; michael@0: } michael@0: michael@0: void SkOSWindow::onUpdateMenu(const SkOSMenu* menu) { michael@0: [(SkNSView*)fHWND onUpdateMenu:menu]; michael@0: } michael@0: michael@0: bool SkOSWindow::attach(SkBackEndTypes attachType, int sampleCount, AttachmentInfo* info) { michael@0: return [(SkNSView*)fHWND attach:attachType withMSAASampleCount:sampleCount andGetInfo:info]; michael@0: } michael@0: michael@0: void SkOSWindow::detach() { michael@0: [(SkNSView*)fHWND detach]; michael@0: } michael@0: michael@0: void SkOSWindow::present() { michael@0: [(SkNSView*)fHWND present]; michael@0: } michael@0: michael@0: #endif