Add wxDisplay implementation for GTK+4
GdkMonitor replaces GdkScreen
This commit is contained in:
@@ -26,6 +26,8 @@ GdkWindow* wxGetTopLevelGDK();
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef __WXGTK4__
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
void wxGetWorkAreaX11(Screen* screen, int& x, int& y, int& width, int& height);
|
void wxGetWorkAreaX11(Screen* screen, int& x, int& y, int& width, int& height);
|
||||||
#endif
|
#endif
|
||||||
@@ -46,6 +48,7 @@ static inline int wx_gdk_screen_get_primary_monitor(GdkScreen* screen)
|
|||||||
static inline void
|
static inline void
|
||||||
wx_gdk_screen_get_monitor_workarea(GdkScreen* screen, int monitor, GdkRectangle* dest)
|
wx_gdk_screen_get_monitor_workarea(GdkScreen* screen, int monitor, GdkRectangle* dest)
|
||||||
{
|
{
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
#if GTK_CHECK_VERSION(3,4,0)
|
#if GTK_CHECK_VERSION(3,4,0)
|
||||||
if (gtk_check_version(3,4,0) == NULL)
|
if (gtk_check_version(3,4,0) == NULL)
|
||||||
gdk_screen_get_monitor_workarea(screen, monitor, dest);
|
gdk_screen_get_monitor_workarea(screen, monitor, dest);
|
||||||
@@ -67,16 +70,27 @@ wx_gdk_screen_get_monitor_workarea(GdkScreen* screen, int monitor, GdkRectangle*
|
|||||||
}
|
}
|
||||||
#endif // GDK_WINDOWING_X11
|
#endif // GDK_WINDOWING_X11
|
||||||
}
|
}
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
}
|
}
|
||||||
#define gdk_screen_get_monitor_workarea wx_gdk_screen_get_monitor_workarea
|
#define gdk_screen_get_monitor_workarea wx_gdk_screen_get_monitor_workarea
|
||||||
|
|
||||||
|
#endif // !__WXGTK4__
|
||||||
|
|
||||||
void wxClientDisplayRect(int* x, int* y, int* width, int* height)
|
void wxClientDisplayRect(int* x, int* y, int* width, int* height)
|
||||||
{
|
{
|
||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
GdkWindow* window = wxGetTopLevelGDK();
|
GdkWindow* window = wxGetTopLevelGDK();
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
GdkMonitor* monitor =
|
||||||
|
gdk_display_get_monitor_at_window(gdk_window_get_display(window), window);
|
||||||
|
gdk_monitor_get_workarea(monitor, &rect);
|
||||||
|
#else
|
||||||
GdkScreen* screen = gdk_window_get_screen(window);
|
GdkScreen* screen = gdk_window_get_screen(window);
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
int monitor = gdk_screen_get_monitor_at_window(screen, window);
|
int monitor = gdk_screen_get_monitor_at_window(screen, window);
|
||||||
gdk_screen_get_monitor_workarea(screen, monitor, &rect);
|
gdk_screen_get_monitor_workarea(screen, monitor, &rect);
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
|
#endif
|
||||||
if (x)
|
if (x)
|
||||||
*x = rect.x;
|
*x = rect.x;
|
||||||
if (y)
|
if (y)
|
||||||
@@ -109,15 +123,25 @@ public:
|
|||||||
virtual wxArrayVideoModes GetModes(const wxVideoMode& mode) const wxOVERRIDE;
|
virtual wxArrayVideoModes GetModes(const wxVideoMode& mode) const wxOVERRIDE;
|
||||||
virtual wxVideoMode GetCurrentMode() const wxOVERRIDE;
|
virtual wxVideoMode GetCurrentMode() const wxOVERRIDE;
|
||||||
virtual bool ChangeMode(const wxVideoMode& mode) wxOVERRIDE;
|
virtual bool ChangeMode(const wxVideoMode& mode) wxOVERRIDE;
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
GdkMonitor* const m_monitor;
|
||||||
|
#else
|
||||||
GdkScreen* const m_screen;
|
GdkScreen* const m_screen;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
static inline GdkDisplay* GetDisplay()
|
||||||
|
{
|
||||||
|
return gdk_window_get_display(wxGetTopLevelGDK());
|
||||||
|
}
|
||||||
|
#else
|
||||||
static inline GdkScreen* GetScreen()
|
static inline GdkScreen* GetScreen()
|
||||||
{
|
{
|
||||||
return gdk_window_get_screen(wxGetTopLevelGDK());
|
return gdk_window_get_screen(wxGetTopLevelGDK());
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
#endif
|
||||||
|
|
||||||
wxDisplayImpl* wxDisplayFactoryGTK::CreateDisplay(unsigned n)
|
wxDisplayImpl* wxDisplayFactoryGTK::CreateDisplay(unsigned n)
|
||||||
{
|
{
|
||||||
@@ -126,38 +150,77 @@ wxDisplayImpl* wxDisplayFactoryGTK::CreateDisplay(unsigned n)
|
|||||||
|
|
||||||
unsigned wxDisplayFactoryGTK::GetCount()
|
unsigned wxDisplayFactoryGTK::GetCount()
|
||||||
{
|
{
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
return gdk_display_get_n_monitors(GetDisplay());
|
||||||
|
#else
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
return gdk_screen_get_n_monitors(GetScreen());
|
return gdk_screen_get_n_monitors(GetScreen());
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxDisplayFactoryGTK::GetFromPoint(const wxPoint& pt)
|
int wxDisplayFactoryGTK::GetFromPoint(const wxPoint& pt)
|
||||||
{
|
{
|
||||||
GdkScreen* screen = GetScreen();
|
|
||||||
int monitor = gdk_screen_get_monitor_at_point(screen, pt.x, pt.y);
|
|
||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
GdkDisplay* display = GetDisplay();
|
||||||
|
GdkMonitor* monitor = gdk_display_get_monitor_at_point(display, pt.x, pt.y);
|
||||||
|
gdk_monitor_get_geometry(monitor, &rect);
|
||||||
|
if (wxRect(rect.x, rect.y, rect.width, rect.height).Contains(pt))
|
||||||
|
{
|
||||||
|
for (unsigned i = gdk_display_get_n_monitors(display); i--;)
|
||||||
|
{
|
||||||
|
if (gdk_display_get_monitor(display, i) == monitor)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wxNOT_FOUND;
|
||||||
|
#else
|
||||||
|
GdkScreen* screen = GetScreen();
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
|
int monitor = gdk_screen_get_monitor_at_point(screen, pt.x, pt.y);
|
||||||
gdk_screen_get_monitor_geometry(screen, monitor, &rect);
|
gdk_screen_get_monitor_geometry(screen, monitor, &rect);
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
if (!wxRect(rect.x, rect.y, rect.width, rect.height).Contains(pt))
|
if (!wxRect(rect.x, rect.y, rect.width, rect.height).Contains(pt))
|
||||||
monitor = wxNOT_FOUND;
|
monitor = wxNOT_FOUND;
|
||||||
return monitor;
|
return monitor;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxDisplayImplGTK::wxDisplayImplGTK(unsigned i)
|
wxDisplayImplGTK::wxDisplayImplGTK(unsigned i)
|
||||||
: base_type(i)
|
: base_type(i)
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
, m_monitor(gdk_display_get_monitor(GetDisplay(), i))
|
||||||
|
#else
|
||||||
, m_screen(GetScreen())
|
, m_screen(GetScreen())
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
wxRect wxDisplayImplGTK::GetGeometry() const
|
wxRect wxDisplayImplGTK::GetGeometry() const
|
||||||
{
|
{
|
||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
gdk_monitor_get_geometry(m_monitor, &rect);
|
||||||
|
#else
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
gdk_screen_get_monitor_geometry(m_screen, m_index, &rect);
|
gdk_screen_get_monitor_geometry(m_screen, m_index, &rect);
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
|
#endif
|
||||||
return wxRect(rect.x, rect.y, rect.width, rect.height);
|
return wxRect(rect.x, rect.y, rect.width, rect.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxRect wxDisplayImplGTK::GetClientArea() const
|
wxRect wxDisplayImplGTK::GetClientArea() const
|
||||||
{
|
{
|
||||||
GdkRectangle rect;
|
GdkRectangle rect;
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
gdk_monitor_get_workarea(m_monitor, &rect);
|
||||||
|
#else
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
gdk_screen_get_monitor_workarea(m_screen, m_index, &rect);
|
gdk_screen_get_monitor_workarea(m_screen, m_index, &rect);
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
|
#endif
|
||||||
return wxRect(rect.x, rect.y, rect.width, rect.height);
|
return wxRect(rect.x, rect.y, rect.width, rect.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,10 +231,16 @@ wxString wxDisplayImplGTK::GetName() const
|
|||||||
|
|
||||||
bool wxDisplayImplGTK::IsPrimary() const
|
bool wxDisplayImplGTK::IsPrimary() const
|
||||||
{
|
{
|
||||||
|
#ifdef __WXGTK4__
|
||||||
|
return gdk_monitor_is_primary(m_monitor) != 0;
|
||||||
|
#else
|
||||||
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
||||||
return gdk_screen_get_primary_monitor(m_screen) == int(m_index);
|
return gdk_screen_get_primary_monitor(m_screen) == int(m_index);
|
||||||
|
wxGCC_WARNING_RESTORE()
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
#if defined(GDK_WINDOWING_X11) && !defined(__WXGTK4__)
|
||||||
wxArrayVideoModes wxXF86VidMode_GetModes(const wxVideoMode& mode, Display* pDisplay, int nScreen);
|
wxArrayVideoModes wxXF86VidMode_GetModes(const wxVideoMode& mode, Display* pDisplay, int nScreen);
|
||||||
wxVideoMode wxXF86VidMode_GetCurrentMode(Display* display, int nScreen);
|
wxVideoMode wxXF86VidMode_GetCurrentMode(Display* display, int nScreen);
|
||||||
bool wxXF86VidMode_ChangeMode(const wxVideoMode& mode, Display* display, int nScreen);
|
bool wxXF86VidMode_ChangeMode(const wxVideoMode& mode, Display* display, int nScreen);
|
||||||
@@ -181,7 +250,7 @@ wxArrayVideoModes wxX11_GetModes(const wxDisplayImpl* impl, const wxVideoMode& m
|
|||||||
wxArrayVideoModes wxDisplayImplGTK::GetModes(const wxVideoMode& mode) const
|
wxArrayVideoModes wxDisplayImplGTK::GetModes(const wxVideoMode& mode) const
|
||||||
{
|
{
|
||||||
wxArrayVideoModes modes;
|
wxArrayVideoModes modes;
|
||||||
#ifdef GDK_WINDOWING_X11
|
#if defined(GDK_WINDOWING_X11) && !defined(__WXGTK4__)
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
if (GDK_IS_X11_SCREEN(m_screen))
|
if (GDK_IS_X11_SCREEN(m_screen))
|
||||||
#endif
|
#endif
|
||||||
@@ -203,7 +272,7 @@ wxArrayVideoModes wxDisplayImplGTK::GetModes(const wxVideoMode& mode) const
|
|||||||
wxVideoMode wxDisplayImplGTK::GetCurrentMode() const
|
wxVideoMode wxDisplayImplGTK::GetCurrentMode() const
|
||||||
{
|
{
|
||||||
wxVideoMode mode;
|
wxVideoMode mode;
|
||||||
#if defined(GDK_WINDOWING_X11) && defined(HAVE_X11_EXTENSIONS_XF86VMODE_H)
|
#if defined(GDK_WINDOWING_X11) && defined(HAVE_X11_EXTENSIONS_XF86VMODE_H) && !defined(__WXGTK4__)
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
if (GDK_IS_X11_SCREEN(m_screen))
|
if (GDK_IS_X11_SCREEN(m_screen))
|
||||||
#endif
|
#endif
|
||||||
@@ -219,7 +288,7 @@ wxVideoMode wxDisplayImplGTK::GetCurrentMode() const
|
|||||||
bool wxDisplayImplGTK::ChangeMode(const wxVideoMode& mode)
|
bool wxDisplayImplGTK::ChangeMode(const wxVideoMode& mode)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
#if defined(GDK_WINDOWING_X11) && defined(HAVE_X11_EXTENSIONS_XF86VMODE_H)
|
#if defined(GDK_WINDOWING_X11) && defined(HAVE_X11_EXTENSIONS_XF86VMODE_H) && !defined(__WXGTK4__)
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
if (GDK_IS_X11_SCREEN(m_screen))
|
if (GDK_IS_X11_SCREEN(m_screen))
|
||||||
#endif
|
#endif
|
||||||
@@ -233,6 +302,7 @@ bool wxDisplayImplGTK::ChangeMode(const wxVideoMode& mode)
|
|||||||
#endif
|
#endif
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxDisplayFactory* wxDisplay::CreateFactory()
|
wxDisplayFactory* wxDisplay::CreateFactory()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user