15bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
2f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/*
35bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2006 The Android Open Source Project
4f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com *
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
65bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */
8f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
95bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkOSWindow_Win_DEFINED
11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkOSWindow_Win_DEFINED
12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
13f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkWindow.h"
14f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
15d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#if SK_ANGLE
16d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#include "EGL/egl.h"
17d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#endif
18d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com
19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comclass SkOSWindow : public SkWindow {
20f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic:
21f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkOSWindow(void* hwnd);
22982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    virtual ~SkOSWindow();
23f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
24f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void*   getHWND() const { return fHWND; }
25f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    setSize(int width, int height);
26f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    void    updateSize();
27f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
28f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay);
29982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
30afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    enum SkBackEndTypes {
31afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com        kNone_BackEndType,
3220b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#if SK_SUPPORT_GPU
33afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com        kNativeGL_BackEndType,
34d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#if SK_ANGLE
35afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com        kANGLE_BackEndType,
3620b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_ANGLE
3720b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_SUPPORT_GPU
38afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    };
39d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com
40bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    struct AttachmentInfo {
41bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com        int fSampleCount;
42bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com        int fStencilBits;
43bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    };
44bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com
45bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*);
46afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    void detach();
47afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    void present();
48982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
494bc15967ffb183bb6d89c41abd6e8a4f5e9490ccreed@android.com    bool wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
504bc15967ffb183bb6d89c41abd6e8a4f5e9490ccreed@android.com    static bool QuitOnDeactivate(HWND hWnd);
51f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
52f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    enum {
53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        SK_WM_SkEvent = WM_APP + 1000,
54f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        SK_WM_SkTimerID = 0xFFFF    // just need a non-zero value
55f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    };
56f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
57f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprotected:
58f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual bool quitOnDeactivate() { return true; }
59f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
60f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // overrides from SkWindow
61f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual void onHandleInval(const SkIRect&);
62f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // overrides from SkView
63f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual void onAddMenu(const SkOSMenu*);
64f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
65982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    virtual void onSetTitle(const char title[]);
66982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
67f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate:
68982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void*               fHWND;
691fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
70982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void                doPaint(void* ctx);
71982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
7220b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#if SK_SUPPORT_GPU
73982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    void*               fHGLRC;
74d31cd57a80369db0d73c3ca874c3637d71bafb6brobertphillips@google.com#if SK_ANGLE
75b341fc2437946fc50e6f6877d7d4ab69ca0b934crobertphillips@google.com    EGLDisplay          fDisplay;
76b341fc2437946fc50e6f6877d7d4ab69ca0b934crobertphillips@google.com    EGLContext          fContext;
77b341fc2437946fc50e6f6877d7d4ab69ca0b934crobertphillips@google.com    EGLSurface          fSurface;
78bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    EGLConfig           fConfig;
7920b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_ANGLE
8020b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_SUPPORT_GPU
81982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com
82982b0d497ffd4f50916124e5f2dd95623883e670reed@android.com    HMENU               fMBar;
83f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
84afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    SkBackEndTypes      fAttached;
85afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com
8620b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#if SK_SUPPORT_GPU
87bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    bool attachGL(int msaaSampleCount, AttachmentInfo* info);
88afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    void detachGL();
89afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    void presentGL();
90afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com
91afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com#if SK_ANGLE
92bc4833a94d8967b6c0d2017490456997b788bf49bsalomon@google.com    bool attachANGLE(int msaaSampleCount, AttachmentInfo* info);
9396fb343ef5110cf686c85dbc56cfdff82cc45e74bsalomon@google.com    void detachANGLE();
94afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com    void presentANGLE();
9520b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_ANGLE
9620b869755d3849fcde285022f7508baba81f15b6bsalomon@google.com#endif // SK_SUPPORT_GPU
97afa59377e87095c5d5128a544ce8d21d908de615robertphillips@google.com
981fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com    typedef SkWindow INHERITED;
99f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com};
100f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
101f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
102