1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci* Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci* 4cb93a386Sopenharmony_ci* Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci* found in the LICENSE file. 6cb93a386Sopenharmony_ci*/ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef Window_unix_DEFINED 9cb93a386Sopenharmony_ci#define Window_unix_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/private/SkChecksum.h" 12cb93a386Sopenharmony_ci#include "src/core/SkTDynamicHash.h" 13cb93a386Sopenharmony_ci#include "tools/sk_app/Window.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci#include <GL/glx.h> 16cb93a386Sopenharmony_ci#include <X11/Xlib.h> 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci#include <string> 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_citypedef Window XWindow; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_cinamespace sk_app { 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ciclass Window_unix : public Window { 25cb93a386Sopenharmony_cipublic: 26cb93a386Sopenharmony_ci Window_unix() 27cb93a386Sopenharmony_ci : Window() 28cb93a386Sopenharmony_ci , fDisplay(nullptr) 29cb93a386Sopenharmony_ci , fWindow(0) 30cb93a386Sopenharmony_ci , fGC(nullptr) 31cb93a386Sopenharmony_ci , fFBConfig(nullptr) 32cb93a386Sopenharmony_ci , fVisualInfo(nullptr) 33cb93a386Sopenharmony_ci , fMSAASampleCount(1) {} 34cb93a386Sopenharmony_ci ~Window_unix() override { this->closeWindow(); } 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci bool initWindow(Display* display); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci void setTitle(const char*) override; 39cb93a386Sopenharmony_ci void show() override; 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci const char* getClipboardText() override; 42cb93a386Sopenharmony_ci void setClipboardText(const char*) override; 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci bool attach(BackendType) override; 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci void onInval() override; 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci bool handleEvent(const XEvent& event); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci static const XWindow& GetKey(const Window_unix& w) { 51cb93a386Sopenharmony_ci return w.fWindow; 52cb93a386Sopenharmony_ci } 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci static uint32_t Hash(const XWindow& w) { 55cb93a386Sopenharmony_ci return SkChecksum::Mix(w); 56cb93a386Sopenharmony_ci } 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci static SkTDynamicHash<Window_unix, XWindow> gWindowMap; 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ci void markPendingPaint() { fPendingPaint = true; } 61cb93a386Sopenharmony_ci void finishPaint() { 62cb93a386Sopenharmony_ci if (fPendingPaint) { 63cb93a386Sopenharmony_ci this->onPaint(); 64cb93a386Sopenharmony_ci fPendingPaint = false; 65cb93a386Sopenharmony_ci } 66cb93a386Sopenharmony_ci } 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci void markPendingResize(int width, int height) { 69cb93a386Sopenharmony_ci if (width != this->width() || height != this->height()){ 70cb93a386Sopenharmony_ci fPendingResize = true; 71cb93a386Sopenharmony_ci fPendingWidth = width; 72cb93a386Sopenharmony_ci fPendingHeight = height; 73cb93a386Sopenharmony_ci } 74cb93a386Sopenharmony_ci } 75cb93a386Sopenharmony_ci void finishResize() { 76cb93a386Sopenharmony_ci if (fPendingResize) { 77cb93a386Sopenharmony_ci this->onResize(fPendingWidth, fPendingHeight); 78cb93a386Sopenharmony_ci fPendingResize = false; 79cb93a386Sopenharmony_ci } 80cb93a386Sopenharmony_ci } 81cb93a386Sopenharmony_ci 82cb93a386Sopenharmony_ci void setRequestedDisplayParams(const DisplayParams&, bool allowReattach) override; 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ciprivate: 85cb93a386Sopenharmony_ci void closeWindow(); 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci Display* fDisplay; 88cb93a386Sopenharmony_ci XWindow fWindow; 89cb93a386Sopenharmony_ci GC fGC; 90cb93a386Sopenharmony_ci GLXFBConfig* fFBConfig; 91cb93a386Sopenharmony_ci XVisualInfo* fVisualInfo; 92cb93a386Sopenharmony_ci int fMSAASampleCount; 93cb93a386Sopenharmony_ci 94cb93a386Sopenharmony_ci Atom fWmDeleteMessage; 95cb93a386Sopenharmony_ci 96cb93a386Sopenharmony_ci bool fPendingPaint; 97cb93a386Sopenharmony_ci int fPendingWidth; 98cb93a386Sopenharmony_ci int fPendingHeight; 99cb93a386Sopenharmony_ci bool fPendingResize; 100cb93a386Sopenharmony_ci 101cb93a386Sopenharmony_ci BackendType fBackend = BackendType::kRaster_BackendType; 102cb93a386Sopenharmony_ci 103cb93a386Sopenharmony_ci std::string fClipboardText; 104cb93a386Sopenharmony_ci 105cb93a386Sopenharmony_ci using INHERITED = Window; 106cb93a386Sopenharmony_ci}; 107cb93a386Sopenharmony_ci 108cb93a386Sopenharmony_ci} // namespace sk_app 109cb93a386Sopenharmony_ci 110cb93a386Sopenharmony_ci#endif 111