1#import <UIKit/UIKit.h>
2#include "SkCanvas.h"
3#include "SkGraphics.h"
4#import "SkEventNotifier.h"
5#include "SkOSMenu.h"
6#include "SkTime.h"
7#include "SkTypes.h"
8#import "SkUIView.h"
9#include "SkWindow.h"
10
11#define kINVAL_UIVIEW_EventType "inval-uiview"
12
13SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd) {
14    fInvalEventIsPending = false;
15    fNotifier = [[SkEventNotifier alloc] init];
16}
17SkOSWindow::~SkOSWindow() {
18    [(SkEventNotifier*)fNotifier release];
19}
20
21void SkOSWindow::onHandleInval(const SkIRect& r) {
22    if (!fInvalEventIsPending) {
23        fInvalEventIsPending = true;
24        (new SkEvent(kINVAL_UIVIEW_EventType, this->getSinkID()))->post();
25    }
26}
27
28bool SkOSWindow::onEvent(const SkEvent& evt) {
29    if (evt.isType(kINVAL_UIVIEW_EventType)) {
30        fInvalEventIsPending = false;
31        const SkIRect& r = this->getDirtyBounds();
32        [(SkUIView*)fHWND postInvalWithRect:&r];
33        return true;
34    }
35    if ([(SkUIView*)fHWND onHandleEvent:evt]) {
36        return true;
37    }
38    return this->INHERITED::onEvent(evt);
39}
40
41void SkOSWindow::onSetTitle(const char title[]) {
42    [(SkUIView*)fHWND setSkTitle:title];
43}
44
45void SkOSWindow::onAddMenu(const SkOSMenu* menu) {
46    [(SkUIView*)fHWND onAddMenu:menu];
47}
48
49void SkOSWindow::onUpdateMenu(SkOSMenu* menu) {
50    [(SkUIView*)fHWND onUpdateMenu:menu];
51}
52
53bool SkOSWindow::attach(SkBackEndTypes /* attachType */,
54                        int /* msaaSampleCount */,
55                        AttachmentInfo* info) {
56    [(SkUIView*)fHWND getAttachmentInfo:info];
57    bool success = true;
58    return success;
59}
60
61void SkOSWindow::detach() {}
62
63void SkOSWindow::present() {
64}
65