blob: 40059bf8d4a7dfa237406ff48833497657f85ff4 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00003 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00004 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00006 */
7
8#ifndef SkOSWindow_Unix_DEFINED
9#define SkOSWindow_Unix_DEFINED
10
Scroggo9df214e2011-04-15 14:48:08 +000011#include <GL/glx.h>
tomhudson@google.com178b8e02012-03-05 18:29:23 +000012#include <X11/Xlib.h>
reed@android.com8a1c16f2008-12-17 15:59:43 +000013
tomhudson@google.com178b8e02012-03-05 18:29:23 +000014#include "SkWindow.h"
15
scroggob7e9aee2011-03-15 15:15:15 +000016class SkEvent;
17
reed@android.com8a1c16f2008-12-17 15:59:43 +000018struct SkUnixWindow {
19 Display* fDisplay;
20 Window fWin;
21 size_t fOSWin;
scroggob7e9aee2011-03-15 15:15:15 +000022 GC fGc;
Scroggo9df214e2011-04-15 14:48:08 +000023 GLXContext fGLContext;
24 bool fGLCreated;
reed@android.com8a1c16f2008-12-17 15:59:43 +000025};
26
27class SkOSWindow : public SkWindow {
28public:
scroggob7e9aee2011-03-15 15:15:15 +000029 SkOSWindow(void*);
30 ~SkOSWindow();
reed@android.com8a1c16f2008-12-17 15:59:43 +000031
scroggob7e9aee2011-03-15 15:15:15 +000032 void* getHWND() const { return (void*)fUnixWindow.fWin; }
33 void* getDisplay() const { return (void*)fUnixWindow.fDisplay; }
34 void* getUnixWindow() const { return (void*)&fUnixWindow; }
Scroggo9df214e2011-04-15 14:48:08 +000035 void loop();
36 void post_linuxevent();
robertphillips@google.comb442a6d2012-04-02 19:24:21 +000037
38 enum SkBackEndTypes {
39 kNone_BackEndType,
40 kNativeGL_BackEndType,
41 };
42
bsalomon@google.com3c4d0322012-04-03 18:04:51 +000043 bool attach(SkBackEndTypes attachType);
robertphillips@google.comb442a6d2012-04-02 19:24:21 +000044 void detach();
45 void present();
reed@android.com8a1c16f2008-12-17 15:59:43 +000046
scroggob7e9aee2011-03-15 15:15:15 +000047 //static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay);
reed@android.com8a1c16f2008-12-17 15:59:43 +000048
scroggob7e9aee2011-03-15 15:15:15 +000049 //static bool WndProc(SkUnixWindow* w, XEvent &e);
reed@android.com8a1c16f2008-12-17 15:59:43 +000050
51protected:
tomhudson@google.com178b8e02012-03-05 18:29:23 +000052 // Overridden from from SkWindow:
53 virtual bool onEvent(const SkEvent&) SK_OVERRIDE;
54 virtual void onHandleInval(const SkIRect&) SK_OVERRIDE;
55 virtual bool onHandleChar(SkUnichar) SK_OVERRIDE;
56 virtual bool onHandleKey(SkKey) SK_OVERRIDE;
57 virtual bool onHandleKeyUp(SkKey) SK_OVERRIDE;
58 virtual void onSetTitle(const char title[]) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000059
60private:
tomhudson@google.com178b8e02012-03-05 18:29:23 +000061 void doPaint();
62 void mapWindowAndWait();
63
64 SkUnixWindow fUnixWindow;
Scroggo9df214e2011-04-15 14:48:08 +000065 bool fGLAttached;
Scroggo9df214e2011-04-15 14:48:08 +000066
67 // Needed for GL
68 XVisualInfo* fVi;
reed@android.com8a1c16f2008-12-17 15:59:43 +000069
reed@android.com8a1c16f2008-12-17 15:59:43 +000070 typedef SkWindow INHERITED;
71};
72
73#endif