aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/sk_app/unix/Window_unix.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/sk_app/unix/Window_unix.h')
-rw-r--r--tools/sk_app/unix/Window_unix.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/sk_app/unix/Window_unix.h b/tools/sk_app/unix/Window_unix.h
new file mode 100644
index 0000000000..b59f502eb9
--- /dev/null
+++ b/tools/sk_app/unix/Window_unix.h
@@ -0,0 +1,95 @@
+/*
+* Copyright 2016 Google Inc.
+*
+* Use of this source code is governed by a BSD-style license that can be
+* found in the LICENSE file.
+*/
+
+#ifndef Window_unix_DEFINED
+#define Window_unix_DEFINED
+
+#include <X11/Xlib.h>
+#include <GL/glx.h>
+#include "../Window.h"
+#include "SkChecksum.h"
+#include "SkTDynamicHash.h"
+
+typedef Window XWindow;
+
+namespace sk_app {
+
+class Window_unix : public Window {
+public:
+ Window_unix() : Window()
+ , fDisplay(nullptr)
+ , fWindow(0)
+ , fGC(nullptr)
+ , fFBConfig(nullptr)
+ , fVisualInfo(nullptr)
+ , fMSAASampleCount(0) {}
+ ~Window_unix() override { this->closeWindow(); }
+
+ bool initWindow(Display* display);
+
+ void setTitle(const char*) override;
+ void show() override;
+
+ bool attach(BackendType) override;
+
+ void onInval() override;
+
+ bool handleEvent(const XEvent& event);
+
+ static const XWindow& GetKey(const Window_unix& w) {
+ return w.fWindow;
+ }
+
+ static uint32_t Hash(const XWindow& w) {
+ return SkChecksum::Mix(w);
+ }
+
+ static SkTDynamicHash<Window_unix, XWindow> gWindowMap;
+
+ void markPendingPaint() { fPendingPaint = true; }
+ void finishPaint() {
+ if (fPendingPaint) {
+ this->onPaint();
+ fPendingPaint = false;
+ }
+ }
+
+ void markPendingResize(int width, int height) {
+ if (width != this->width() || height != this->height()){
+ fPendingResize = true;
+ fPendingWidth = width;
+ fPendingHeight = height;
+ }
+ }
+ void finishResize() {
+ if (fPendingResize) {
+ this->onResize(fPendingWidth, fPendingHeight);
+ fPendingResize = false;
+ }
+ }
+
+private:
+ void closeWindow();
+
+ Display* fDisplay;
+ XWindow fWindow;
+ GC fGC;
+ GLXFBConfig* fFBConfig;
+ XVisualInfo* fVisualInfo;
+ int fMSAASampleCount;
+
+ Atom fWmDeleteMessage;
+
+ bool fPendingPaint;
+ int fPendingWidth;
+ int fPendingHeight;
+ bool fPendingResize;
+};
+
+} // namespace sk_app
+
+#endif