1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker // OSWindow: 7*8975f5c5SAndroid Build Coastguard Worker // Operating system window integration base class. 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef UTIL_OSWINDOW_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define UTIL_OSWINDOW_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include <stdint.h> 13*8975f5c5SAndroid Build Coastguard Worker #include <list> 14*8975f5c5SAndroid Build Coastguard Worker #include <string> 15*8975f5c5SAndroid Build Coastguard Worker 16*8975f5c5SAndroid Build Coastguard Worker #include <EGL/egl.h> 17*8975f5c5SAndroid Build Coastguard Worker #include <EGL/eglext.h> 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker #include "util/Event.h" 20*8975f5c5SAndroid Build Coastguard Worker #include "util/util_export.h" 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker class ANGLE_UTIL_EXPORT OSWindow 23*8975f5c5SAndroid Build Coastguard Worker { 24*8975f5c5SAndroid Build Coastguard Worker public: 25*8975f5c5SAndroid Build Coastguard Worker static OSWindow *New(); 26*8975f5c5SAndroid Build Coastguard Worker static void Delete(OSWindow **osWindow); 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker bool initialize(const std::string &name, int width, int height); 29*8975f5c5SAndroid Build Coastguard Worker virtual void destroy() = 0; 30*8975f5c5SAndroid Build Coastguard Worker virtual void disableErrorMessageDialog() = 0; 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker int getX() const; 33*8975f5c5SAndroid Build Coastguard Worker int getY() const; 34*8975f5c5SAndroid Build Coastguard Worker int getWidth() const; 35*8975f5c5SAndroid Build Coastguard Worker int getHeight() const; 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker // Takes a screenshot of the window, returning the result as a mWidth * mHeight * 4 38*8975f5c5SAndroid Build Coastguard Worker // normalized unsigned byte BGRA array. Note that it will be used to test the window 39*8975f5c5SAndroid Build Coastguard Worker // manager's behavior so it needs to take an actual screenshot of the screen and not 40*8975f5c5SAndroid Build Coastguard Worker // just grab the pixels of the window. Returns if it was successful. 41*8975f5c5SAndroid Build Coastguard Worker virtual bool takeScreenshot(uint8_t *pixelData); 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker // Re-initializes the native window. This is used on platforms which do not 44*8975f5c5SAndroid Build Coastguard Worker // have a reusable EGLNativeWindowType in order to recreate it, and is 45*8975f5c5SAndroid Build Coastguard Worker // needed by the test suite because it re-uses the same OSWindow for 46*8975f5c5SAndroid Build Coastguard Worker // multiple EGLSurfaces. 47*8975f5c5SAndroid Build Coastguard Worker virtual void resetNativeWindow() = 0; 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker virtual EGLNativeWindowType getNativeWindow() const = 0; 50*8975f5c5SAndroid Build Coastguard Worker 51*8975f5c5SAndroid Build Coastguard Worker // Returns a native pointer that can be used for eglCreatePlatformWindowSurfaceEXT(). 52*8975f5c5SAndroid Build Coastguard Worker virtual void *getPlatformExtension(); 53*8975f5c5SAndroid Build Coastguard Worker setNativeDisplay(EGLNativeDisplayType display)54*8975f5c5SAndroid Build Coastguard Worker virtual void setNativeDisplay(EGLNativeDisplayType display) {} 55*8975f5c5SAndroid Build Coastguard Worker virtual EGLNativeDisplayType getNativeDisplay() const = 0; 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker virtual void messageLoop() = 0; 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker bool popEvent(Event *event); 60*8975f5c5SAndroid Build Coastguard Worker virtual void pushEvent(Event event); 61*8975f5c5SAndroid Build Coastguard Worker 62*8975f5c5SAndroid Build Coastguard Worker virtual void setMousePosition(int x, int y) = 0; 63*8975f5c5SAndroid Build Coastguard Worker virtual bool setOrientation(int width, int height) = 0; 64*8975f5c5SAndroid Build Coastguard Worker virtual bool setPosition(int x, int y) = 0; 65*8975f5c5SAndroid Build Coastguard Worker virtual bool resize(int width, int height) = 0; 66*8975f5c5SAndroid Build Coastguard Worker virtual void setVisible(bool isVisible) = 0; 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker virtual void signalTestEvent() = 0; 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker // Pops events look for the test event 71*8975f5c5SAndroid Build Coastguard Worker bool didTestEventFire(); 72*8975f5c5SAndroid Build Coastguard Worker 73*8975f5c5SAndroid Build Coastguard Worker // Whether window has been successfully initialized. valid()74*8975f5c5SAndroid Build Coastguard Worker bool valid() const { return mValid; } 75*8975f5c5SAndroid Build Coastguard Worker ignoreSizeEvents()76*8975f5c5SAndroid Build Coastguard Worker void ignoreSizeEvents() { mIgnoreSizeEvents = true; } 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker protected: 79*8975f5c5SAndroid Build Coastguard Worker OSWindow(); 80*8975f5c5SAndroid Build Coastguard Worker virtual ~OSWindow(); 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker virtual bool initializeImpl(const std::string &name, int width, int height) = 0; 83*8975f5c5SAndroid Build Coastguard Worker 84*8975f5c5SAndroid Build Coastguard Worker int mX; 85*8975f5c5SAndroid Build Coastguard Worker int mY; 86*8975f5c5SAndroid Build Coastguard Worker int mWidth; 87*8975f5c5SAndroid Build Coastguard Worker int mHeight; 88*8975f5c5SAndroid Build Coastguard Worker 89*8975f5c5SAndroid Build Coastguard Worker std::list<Event> mEvents; 90*8975f5c5SAndroid Build Coastguard Worker 91*8975f5c5SAndroid Build Coastguard Worker bool mValid; 92*8975f5c5SAndroid Build Coastguard Worker bool mIgnoreSizeEvents; 93*8975f5c5SAndroid Build Coastguard Worker }; 94*8975f5c5SAndroid Build Coastguard Worker 95*8975f5c5SAndroid Build Coastguard Worker namespace angle 96*8975f5c5SAndroid Build Coastguard Worker { 97*8975f5c5SAndroid Build Coastguard Worker // Find a test data file or directory. 98*8975f5c5SAndroid Build Coastguard Worker ANGLE_UTIL_EXPORT bool FindTestDataPath(const char *searchPath, 99*8975f5c5SAndroid Build Coastguard Worker char *dataPathOut, 100*8975f5c5SAndroid Build Coastguard Worker size_t maxDataPathOutLen); 101*8975f5c5SAndroid Build Coastguard Worker } // namespace angle 102*8975f5c5SAndroid Build Coastguard Worker 103*8975f5c5SAndroid Build Coastguard Worker #endif // UTIL_OSWINDOW_H_ 104