18a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 38a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 68a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkOSWindow_Unix_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkOSWindow_Unix_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 119df214e836f2b897224178676c03017e9190b7e0Scroggo#include <GL/glx.h> 12178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com#include <X11/Xlib.h> 13178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com 14178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com#include "SkWindow.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 16b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggoclass SkEvent; 17b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkUnixWindow { 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Display* fDisplay; 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Window fWin; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t fOSWin; 22b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo GC fGc; 239df214e836f2b897224178676c03017e9190b7e0Scroggo GLXContext fGLContext; 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkOSWindow : public SkWindow { 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 28b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo SkOSWindow(void*); 29b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo ~SkOSWindow(); 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 31b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo void* getHWND() const { return (void*)fUnixWindow.fWin; } 32b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo void* getDisplay() const { return (void*)fUnixWindow.fDisplay; } 33b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo void* getUnixWindow() const { return (void*)&fUnixWindow; } 349df214e836f2b897224178676c03017e9190b7e0Scroggo void loop(); 35b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com 36b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com enum SkBackEndTypes { 37b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com kNone_BackEndType, 38b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com kNativeGL_BackEndType, 39b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com }; 40b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com 4164cc810ad165724f9c666a75bd52e41c67f13564bsalomon@google.com bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*); 42b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com void detach(); 43b442a6d5726569364e15c3056bbfb59b9b6e38cerobertphillips@google.com void present(); 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 451195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com int getMSAASampleCount() const { return fMSAASampleCount; } 461195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com 47b7e9aee1acf27fc98cb37ed69c05da71b4c3c69bscroggo //static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay); 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 50178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com // Overridden from from SkWindow: 5136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onSetTitle(const char title[]) override; 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 54acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com enum NextXEventResult { 55acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com kContinue_NextXEventResult, 56acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com kQuitRequest_NextXEventResult, 57acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com kPaintRequest_NextXEventResult 58acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com }; 59acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com 60acb3d88cf84adf367c173a7a33cd3b0c379291dcreed@google.com NextXEventResult nextXEvent(); 61178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com void doPaint(); 62178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com void mapWindowAndWait(); 63178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com 641195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com void closeWindow(); 6564cc810ad165724f9c666a75bd52e41c67f13564bsalomon@google.com void initWindow(int newMSAASampleCount, AttachmentInfo* info); 661195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com 67178b8e0b8c3d423c3fd947776f4b7790a0417582tomhudson@google.com SkUnixWindow fUnixWindow; 689df214e836f2b897224178676c03017e9190b7e0Scroggo 699df214e836f2b897224178676c03017e9190b7e0Scroggo // Needed for GL 709df214e836f2b897224178676c03017e9190b7e0Scroggo XVisualInfo* fVi; 711195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com // we recreate the underlying xwindow if this changes 721195925b05ee9d666ea8a8f68fde5d8ca7e49b04bsalomon@google.com int fMSAASampleCount; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkWindow INHERITED; 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 78