xref: /aosp_15_r20/external/angle/util/OSWindow.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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