1 /* 2 * Copyright 2006 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkOSWindow_Unix_DEFINED 9 #define SkOSWindow_Unix_DEFINED 10 11 #include <GL/glx.h> 12 #include <X11/Xlib.h> 13 14 #include "SkWindow.h" 15 16 class SkEvent; 17 18 struct SkUnixWindow { 19 Display* fDisplay; 20 Window fWin; 21 size_t fOSWin; 22 GC fGc; 23 GLXContext fGLContext; 24 }; 25 26 class SkOSWindow : public SkWindow { 27 public: 28 SkOSWindow(void*); 29 ~SkOSWindow() override; 30 getHWND()31 void* getHWND() const { return (void*)fUnixWindow.fWin; } getDisplay()32 void* getDisplay() const { return (void*)fUnixWindow.fDisplay; } getUnixWindow()33 void* getUnixWindow() const { return (void*)&fUnixWindow; } 34 void loop(); 35 36 enum SkBackEndTypes { 37 kNone_BackEndType, 38 kNativeGL_BackEndType, 39 #if SK_ANGLE 40 kANGLE_BackEndType, 41 #endif // SK_ANGLE 42 }; 43 44 bool attach(SkBackEndTypes attachType, int msaaSampleCount, bool deepColor, AttachmentInfo*); 45 void release(); 46 void present(); 47 getMSAASampleCount()48 int getMSAASampleCount() const { return fMSAASampleCount; } 49 50 //static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay); 51 52 bool makeFullscreen(); 53 void setVsync(bool); 54 void closeWindow(); 55 56 protected: 57 // Overridden from from SkWindow: 58 void onSetTitle(const char title[]) override; 59 60 private: 61 enum NextXEventResult { 62 kContinue_NextXEventResult, 63 kQuitRequest_NextXEventResult, 64 kPaintRequest_NextXEventResult 65 }; 66 67 NextXEventResult nextXEvent(); 68 void doPaint(); 69 void mapWindowAndWait(); 70 71 // Forcefully closes the window. If a graceful shutdown is desired then call the public 72 // closeWindow method 73 void internalCloseWindow(); 74 void initWindow(int newMSAASampleCount, AttachmentInfo* info); 75 76 SkUnixWindow fUnixWindow; 77 78 // Needed for GL 79 XVisualInfo* fVi; 80 // we recreate the underlying xwindow if this changes 81 int fMSAASampleCount; 82 83 typedef SkWindow INHERITED; 84 }; 85 86 #endif 87