1
0
Fork 0
spectre/source/Platform/Unix/X11Window.h

88 lines
1.5 KiB
C++

#ifndef PLATFORM_UNIX_X11WINDOW_H
#define PLATFORM_UNIX_X11WINDOW_H
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <cstdint>
#include <Platform/PlatformWindow.h>
#include "Xrandr.h"
namespace sp {
class Window;
class X11Window : public PlatformWindow
{
public :
static X11Window* getFocused();
X11Window(Window *owner);
virtual bool create(WindowDescription description);
virtual void destroy();
virtual bool isValid();
virtual void* getHandle() const;
virtual void setSize(unsigned int width, unsigned int height);
virtual Vector2u getSize() const;
virtual void setPosition(unsigned int x, unsigned int y);
virtual Vector2u getPosition() const;
virtual void setVisible(bool visible);
virtual void setDecoration(unsigned decoration);
virtual void minimize();
virtual void maximize();
virtual void enterFullscreen(DisplayMode mode);
virtual void exitFullscreen();
virtual void setCaption(const std::string& caption);
virtual void setIcon(unsigned int width, unsigned int height, const uint8_t *pixels);
virtual void showCursor(bool value);
virtual void grabCursor(bool value);
void processEvent(const ::XEvent& event);
protected :
void createHiddenCursor();
void toggleFullscreen(bool enabled);
void wm_fullscreen(bool enabled);
protected :
::Window m_win;
int m_screen;
::Cursor m_cur_hidden;
::Cursor m_cur_last;
Vector2u m_size;
Xrandr::VideoMode m_fullscreen_mode;
Xrandr::VideoMode m_desktop_mode;
};
} // namespace sp
#endif /* PLATFORM_UNIX_X11WINDOW_H */