Home | History | Annotate | Download | only in views
      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();
     30 
     31     void* getHWND() const { return (void*)fUnixWindow.fWin; }
     32     void* getDisplay() const { return (void*)fUnixWindow.fDisplay; }
     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 #if SK_COMMAND_BUFFER
     43         kCommandBufferES2_BackEndType,
     44 #endif // SK_COMMAND_BUFFER
     45     };
     46 
     47     bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*);
     48     void detach();
     49     void present();
     50 
     51     int getMSAASampleCount() const { return fMSAASampleCount; }
     52 
     53     //static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay);
     54 
     55     bool makeFullscreen();
     56     void setVsync(bool);
     57     void closeWindow();
     58 
     59 protected:
     60     // Overridden from from SkWindow:
     61     void onSetTitle(const char title[]) override;
     62 
     63 private:
     64     enum NextXEventResult {
     65         kContinue_NextXEventResult,
     66         kQuitRequest_NextXEventResult,
     67         kPaintRequest_NextXEventResult
     68     };
     69 
     70     NextXEventResult nextXEvent();
     71     void doPaint();
     72     void mapWindowAndWait();
     73 
     74     // Forcefully closes the window.  If a graceful shutdown is desired then call the public
     75     // closeWindow method
     76     void internalCloseWindow();
     77     void initWindow(int newMSAASampleCount, AttachmentInfo* info);
     78 
     79     SkUnixWindow fUnixWindow;
     80 
     81     // Needed for GL
     82     XVisualInfo* fVi;
     83     // we recreate the underlying xwindow if this changes
     84     int fMSAASampleCount;
     85 
     86     typedef SkWindow INHERITED;
     87 };
     88 
     89 #endif
     90