From b706e529a4c10be331a1ca5d0d004cf24e8e5e9a Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Sun, 7 Jan 2018 16:30:32 +0100 Subject: Add convenience functions to obtain monitor geometry --- src/ui/CMakeLists.txt | 2 + src/ui/monitor.cpp | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/ui/monitor.h | 51 ++++++++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 src/ui/monitor.cpp create mode 100644 src/ui/monitor.h (limited to 'src') diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index fecb14a91..b9933bba6 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -5,6 +5,7 @@ set(ui_SRC dialog-events.cpp draw-anchor.cpp interface.cpp + monitor.cpp previewholder.cpp selected-color.cpp shape-editor.cpp @@ -186,6 +187,7 @@ set(ui_SRC event-debug.h icon-names.h interface.h + monitor.h previewable.h previewfillable.h previewholder.h diff --git a/src/ui/monitor.cpp b/src/ui/monitor.cpp new file mode 100644 index 000000000..3e0c983fe --- /dev/null +++ b/src/ui/monitor.cpp @@ -0,0 +1,107 @@ +/** + * \file + * \brief helper functions for retrieving monitor geometry, etc. + *//* + * Authors: + * Eduard Braun + * + * Copyright 2018 Authors + * + * This file is part of Inkscape. + * + * Inkscape is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Inkscape 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Inkscape. If not, see . + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#if GTKMM_CHECK_VERSION(3,22,0) +# include +#else +# include +#endif + + +namespace Inkscape { +namespace UI { + +/** get monitor geometry of primary monitor */ +Gdk::Rectangle get_monitor_geometry_primary() { + Gdk::Rectangle monitor_geometry; +#if GTKMM_CHECK_VERSION(3,22,0) + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_primary_monitor(); + + // Fallback to monitor number 0 if the user hasn't configured a primary monitor + if (!monitor) { + monitor = display->get_monitor(0); + } + + monitor->get_geometry(monitor_geometry); +#else + auto const default_screen = Gdk::Screen::get_default(); + auto const monitor_number = default_screen->get_primary_monitor(); + default_screen->get_monitor_geometry(monitor_number, monitor_geometry); +#endif + return monitor_geometry; +} + +/** get monitor geometry of monitor containing largest part of window */ +Gdk::Rectangle get_monitor_geometry_at_window(const Glib::RefPtr& window) { + Gdk::Rectangle monitor_geometry; +#if GTKMM_CHECK_VERSION(3,22,0) + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_monitor_at_window(window); + monitor->get_geometry(monitor_geometry); +#else + auto const default_screen = Gdk::Screen::get_default(); + auto const monitor_number = default_screen->get_monitor_at_window(window); + default_screen->get_monitor_geometry(monitor_number, monitor_geometry); +#endif + return monitor_geometry; +} + +/** get monitor geometry of monitor at (or closest to) point on combined screen area */ +Gdk::Rectangle get_monitor_geometry_at_point(int x, int y) { + Gdk::Rectangle monitor_geometry; +#if GTKMM_CHECK_VERSION(3,22,0) + auto const display = Gdk::Display::get_default(); + auto const monitor = display->get_monitor_at_point(x ,y); + monitor->get_geometry(monitor_geometry); +#else + auto const default_screen = Gdk::Screen::get_default(); + auto const monitor_number = default_screen->get_monitor_at_point(x, y); + default_screen->get_monitor_geometry(monitor_number, monitor_geometry); +#endif + return monitor_geometry; +} + +} +} + + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace .0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim:filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99: diff --git a/src/ui/monitor.h b/src/ui/monitor.h new file mode 100644 index 000000000..696a8ed73 --- /dev/null +++ b/src/ui/monitor.h @@ -0,0 +1,51 @@ +/** + * \file + * \brief helper functions for retrieving monitor geometry, etc. + *//* + * Authors: + * Eduard Braun + * + * Copyright 2018 Authors + * + * This file is part of Inkscape. + * + * Inkscape is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Inkscape 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Inkscape. If not, see . + */ + +#ifndef SEEN_MONITOR_H +#define SEEN_MONITOR_H + +#include +#include + +namespace Inkscape { +namespace UI { + Gdk::Rectangle get_monitor_geometry_primary(); + Gdk::Rectangle get_monitor_geometry_at_window(const Glib::RefPtr& window); + Gdk::Rectangle get_monitor_geometry_at_point(int x, int y); +} +} + +#endif // SEEN_MONITOR_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace .0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim:filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99: -- cgit v1.2.3