summaryrefslogtreecommitdiff
path: root/indra/llwindow/llwindowsdl.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llwindow/llwindowsdl.h')
-rw-r--r--indra/llwindow/llwindowsdl.h176
1 files changed, 57 insertions, 119 deletions
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index 3ed2811572..5ab90614ec 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -11,7 +11,6 @@
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
- * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
@@ -29,6 +28,7 @@
// Simple Directmedia Layer (http://libsdl.org/) implementation of LLWindow class
+#if LL_LINUX
#include "llwindow.h"
#include "lltimer.h"
@@ -39,10 +39,8 @@
#include "SDL2/SDL_video.h"
#include "SDL2/SDL_endian.h"
-#if LL_X11
// get X11-specific headers for use in low-level stuff like copy-and-paste support
#include "SDL2/SDL_syswm.h"
-#endif
// AssertMacros.h does bad things.
#include "fix_macros.h"
@@ -53,30 +51,25 @@
class LLWindowSDL : public LLWindow {
public:
void show() override;
-
void hide() override;
+ void restore() override;
void close() override;
- bool getVisible() override;
+ bool getVisible() const override;
- bool getMinimized() override;
+ bool getMinimized() const override;
- bool getMaximized() override;
+ bool getMaximized() const override;
bool maximize() override;
-
void minimize() override;
- void restore() override;
-
- bool getFullscreen();
-
- bool getPosition(LLCoordScreen *position) override;
+ bool getPosition(LLCoordScreen *position) const override;
- bool getSize(LLCoordScreen *size) override;
+ bool getSize(LLCoordScreen *size) const override;
- bool getSize(LLCoordWindow *size) override;
+ bool getSize(LLCoordWindow *size) const override;
bool setPosition(LLCoordScreen position) override;
@@ -84,7 +77,7 @@ public:
bool setSizeImpl(LLCoordWindow size) override;
- bool switchContext(bool fullscreen, const LLCoordScreen &size, bool disable_vsync,
+ bool switchContext(bool fullscreen, const LLCoordScreen &size, bool enable_vsync,
const LLCoordScreen *const posp = NULL) override;
bool setCursorPosition(LLCoordWindow position) override;
@@ -92,52 +85,41 @@ public:
bool getCursorPosition(LLCoordWindow *position) override;
void showCursor() override;
-
void hideCursor() override;
+ bool isCursorHidden() override;
void showCursorFromMouseMove() override;
-
void hideCursorUntilMouseMove() override;
- bool isCursorHidden() override;
-
void updateCursor() override;
void captureMouse() override;
-
void releaseMouse() override;
void setMouseClipping(bool b) override;
- void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true) override;
+ void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true) override;
bool isClipboardTextAvailable() override;
-
bool pasteTextFromClipboard(LLWString &dst) override;
-
bool copyTextToClipboard(const LLWString &src) override;
-
bool isPrimaryTextAvailable() override;
-
bool pasteTextFromPrimary(LLWString &dst) override;
-
bool copyTextToPrimary(const LLWString &src) override;
void flashIcon(F32 seconds) override;
+ void maybeStopFlashIcon();
- F32 getGamma() override;
-
+ F32 getGamma() const override;
bool setGamma(const F32 gamma) override; // Set the gamma
- U32 getFSAASamples() override;
+ bool restoreGamma() override; // Restore original gamma table (before updating gamma)
+ U32 getFSAASamples() const override;
void setFSAASamples(const U32 samples) override;
- bool restoreGamma() override; // Restore original gamma table (before updating gamma)
- ESwapMethod getSwapMethod() override { return mSwapMethod; }
-
void processMiscNativeEvents() override;
- void gatherInput() override;
+ void gatherInput(bool app_has_focus) override;
void swapBuffers() override;
@@ -146,17 +128,17 @@ public:
void delayInputProcessing() override {};
// handy coordinate space conversion routines
- bool convertCoords(LLCoordScreen from, LLCoordWindow *to) override;
+ bool convertCoords(LLCoordScreen from, LLCoordWindow *to) const override;
- bool convertCoords(LLCoordWindow from, LLCoordScreen *to) override;
+ bool convertCoords(LLCoordWindow from, LLCoordScreen *to) const override;
- bool convertCoords(LLCoordWindow from, LLCoordGL *to) override;
+ bool convertCoords(LLCoordWindow from, LLCoordGL *to) const override;
- bool convertCoords(LLCoordGL from, LLCoordWindow *to) override;
+ bool convertCoords(LLCoordGL from, LLCoordWindow *to) const override;
- bool convertCoords(LLCoordScreen from, LLCoordGL *to) override;
+ bool convertCoords(LLCoordScreen from, LLCoordGL *to) const override;
- bool convertCoords(LLCoordGL from, LLCoordScreen *to) override;
+ bool convertCoords(LLCoordGL from, LLCoordScreen *to) const override;
LLWindowResolution *getSupportedResolutions(S32 &num_resolutions) override;
@@ -166,10 +148,7 @@ public:
void setNativeAspectRatio(F32 ratio) override { mOverrideAspectRatio = ratio; }
- F32 getSystemUISize() override;
-
void beforeDialog() override;
-
void afterDialog() override;
bool dialogColorPicker(F32 *r, F32 *g, F32 *b) override;
@@ -177,62 +156,39 @@ public:
void *getPlatformWindow() override;
void bringToFront() override;
-
+
void setLanguageTextInput(const LLCoordGL& pos) override;
void spawnWebBrowser(const std::string &escaped_url, bool async) override;
- void openFile(const std::string &file_name);
-
void setTitle(const std::string title) override;
static std::vector<std::string> getDynamicFallbackFontList();
- // Not great that these are public, but they have to be accessible
- // by non-class code and it's better than making them global.
-#if LL_X11
- Window mSDL_XWindowID;
- Display *mSDL_Display;
-#endif
-
- void (*Lock_Display)(void);
-
- void (*Unlock_Display)(void);
-
-#if LL_X11
+ void (*Lock_Display)(void) = nullptr;
+ void (*Unlock_Display)(void) = nullptr;
static Window get_SDL_XWindowID(void);
-
static Display *get_SDL_Display(void);
-#endif // LL_X11
-
-#if LL_DARWIN
- static bool sUseMultGL;
-#endif
-
void *createSharedContext() override;
-
void makeContextCurrent(void *context) override;
-
void destroySharedContext(void *context) override;
-
void toggleVSync(bool enable_vsync) override;
protected:
LLWindowSDL(LLWindowCallbacks *callbacks,
- const std::string &title, int x, int y, int width, int height, U32 flags,
- bool fullscreen, bool clearBg, bool disable_vsync, bool use_gl,
+ const std::string &title, const std::string& name, int x, int y, int width, int height, U32 flags,
+ bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl,
bool ignore_pixel_depth, U32 fsaa_samples);
~LLWindowSDL();
bool isValid() override;
- LLSD getNativeKeyData() override;
+ LLSD getNativeKeyData() const override;
void initCursors();
-
void quitCursors();
void moveWindow(const LLCoordScreen &position, const LLCoordScreen &size);
@@ -251,14 +207,11 @@ protected:
//
// create or re-create the GL context/window. Called from the constructor and switchContext().
- bool createContext(int x, int y, int width, int height, int bits, bool fullscreen, bool disable_vsync);
-
+ bool createContext(int x, int y, int width, int height, int bits, bool fullscreen, bool enable_vsync);
void destroyContext();
void setupFailure(const std::string &text, const std::string &caption, U32 type);
- void fixWindowSize(void);
-
U32 SDLCheckGrabbyKeys(U32 keysym, bool gain);
bool SDLReallyCaptureInput(bool capture);
@@ -266,69 +219,53 @@ protected:
//
// Platform specific variables
//
- U32 mGrabbyKeyFlags;
- int mReallyCapturedCount;
+ U32 mGrabbyKeyFlags = 0;
- SDL_Window *mWindow;
+ SDL_Window *mWindow = nullptr;
+ SDL_Surface *mSurface;
SDL_GLContext mContext;
SDL_Cursor *mSDLCursors[UI_CURSOR_COUNT];
std::string mWindowTitle;
- double mOriginalAspectRatio;
- bool mNeedsResize; // Constructor figured out the window is too big, it needs a resize.
+ double mOriginalAspectRatio = 1.0f;
+ bool mNeedsResize = false; // Constructor figured out the window is too big, it needs a resize.
LLCoordScreen mNeedsResizeSize;
- F32 mOverrideAspectRatio;
- F32 mGamma;
- U32 mFSAASamples;
+ F32 mOverrideAspectRatio = 0.0f;
+ F32 mGamma = 0.0f;
+ U32 mFSAASamples = 0;
- int mSDLFlags;
-
- int mHaveInputFocus; /* 0=no, 1=yes, else unknown */
- int mIsMinimized; /* 0=no, 1=yes, else unknown */
- int mIsActive; /* 0=no, 1=yes, else unknown */
+ int mHaveInputFocus = -1; /* 0=no, 1=yes, else unknown */
friend class LLWindowManager;
private:
-#if LL_X11
-
- void x11_set_urgent(bool urgent);
-
- bool mFlashing;
+ bool mFlashing = false;
LLTimer mFlashTimer;
-#endif //LL_X11
+ U32 mKeyVirtualKey = 0;
+ U32 mKeyModifiers = KMOD_NONE;
- U32 mKeyVirtualKey;
- U32 mKeyModifiers;
- std::string mInputType;
+ enum EServerProtocol{ X11, Wayland, Unknown };
+ EServerProtocol mServerProtocol = Unknown;
-public:
-#if LL_X11
+ struct {
+ Window mXWindowID = None;
+ Display *mDisplay = nullptr;
+ } mX11Data;
- static Display *getSDLDisplay();
+ // Wayland
+ struct {
+ wl_surface *mSurface = nullptr;
+ uint64_t mLastFrameEvent = 0;
+ } mWaylandData;
- LLWString const &getPrimaryText() const { return mPrimaryClipboard; }
+ bool isWaylandWindowNotDrawing() const;
- LLWString const &getSecondaryText() const { return mSecondaryClipboard; }
-
- void clearPrimaryText() { mPrimaryClipboard.clear(); }
-
- void clearSecondaryText() { mSecondaryClipboard.clear(); }
+ void setupWaylandFrameCallback();
+ static void waylandFrameDoneCB(void *data, struct wl_callback *cb, uint32_t time);
+ //
private:
- void initialiseX11Clipboard();
-
- bool getSelectionText(Atom selection, LLWString &text);
-
- bool getSelectionText(Atom selection, Atom type, LLWString &text);
-
- bool setSelectionText(Atom selection, const LLWString &text);
-#endif
-
void tryFindFullscreenSize(int &aWidth, int &aHeight);
-
- LLWString mPrimaryClipboard;
- LLWString mSecondaryClipboard;
};
class LLSplashScreenSDL : public LLSplashScreen
@@ -344,4 +281,5 @@ public:
S32 OSMessageBoxSDL(const std::string& text, const std::string& caption, U32 type);
+#endif //LL_LINUX
#endif //LL_LLWINDOWSDL_H