From 87a43eb0e582e374c069241875bbf30ccc93b132 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Sat, 19 Jan 2019 21:45:46 +0100 Subject: Remove sp_create_window(). --- src/inkscape-window.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 12 deletions(-) (limited to 'src/inkscape-window.cpp') diff --git a/src/inkscape-window.cpp b/src/inkscape-window.cpp index 6f1a5316c..be8737c8f 100644 --- a/src/inkscape-window.cpp +++ b/src/inkscape-window.cpp @@ -17,8 +17,13 @@ #include "inkscape-window.h" #include "inkscape.h" // SP_ACTIVE_DESKTOP +#include "enums.h" // PREFS_WINDOW_GEOMETRY_NONE #include "shortcuts.h" -#include "inkscape-application.h" + +#include "object/sp-namedview.h" // TODO Remove need for this! + +#include "ui/drag-and-drop.h" // Move to canvas? +#include "ui/monitor.h" // get_monitor_geometry_at_point() #include "ui/drag-and-drop.h" @@ -32,6 +37,7 @@ InkscapeWindow::InkscapeWindow(SPDocument* document) return; } + // Register window with application. Glib::RefPtr gio_app = Gio::Application::get_default(); Glib::RefPtr app = Glib::RefPtr::cast_dynamic(gio_app); if (app) { @@ -42,22 +48,79 @@ InkscapeWindow::InkscapeWindow(SPDocument* document) set_resizable(true); - // Set up drag-and-drop, probably should be moved to SPCanvas. sp_ui_drag_setup(this); - // Callbacks + // =============== Build interface =============== + + // Main box + _mainbox = Gtk::manage(new Gtk::Box); + _mainbox->set_name("DesktopMainBox"); + _mainbox->show(); + add(*_mainbox); + + // Menu bar + + // Desktop widget (=> MultiPaned) + SPViewWidget* _vw = sp_desktop_widget_new(sp_document_namedview(document, nullptr)); + _desktop_widget = reinterpret_cast(_vw); + gtk_container_add(GTK_CONTAINER(_mainbox->gobj()), GTK_WIDGET(_desktop_widget)); + gtk_widget_show(GTK_WIDGET(_desktop_widget)); + _desktop = _desktop_widget->desktop; + + // Pallet + + // Status bar + + // ================== Callbacks ================== signal_key_press_event().connect(sigc::mem_fun(*this, &InkscapeWindow::key_press)); - // Actions -} + // =================== Actions =================== + + + // ============ Stuff to be cleaned up =========== + + g_object_set_data(G_OBJECT(_desktop_widget), "window", this); + _desktop_widget->window = this; + + set_data("desktop", _desktop); + set_data("desktopwidget", _desktop_widget); + + signal_delete_event().connect( sigc::mem_fun(*_desktop, &SPDesktop::onDeleteUI)); + signal_window_state_event().connect(sigc::mem_fun(*_desktop, &SPDesktop::onWindowStateEvent)); + signal_focus_in_event().connect(sigc::mem_fun(*_desktop_widget, &SPDesktopWidget::onFocusInEvent)); + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + int window_geometry = prefs->getInt("/options/savewindowgeometry/value", PREFS_WINDOW_GEOMETRY_NONE); + if (window_geometry == PREFS_WINDOW_GEOMETRY_LAST) { + gint pw = prefs->getInt("/desktop/geometry/width", -1); + gint ph = prefs->getInt("/desktop/geometry/height", -1); + gint px = prefs->getInt("/desktop/geometry/x", -1); + gint py = prefs->getInt("/desktop/geometry/y", -1); + gint full = prefs->getBool("/desktop/geometry/fullscreen"); + gint maxed = prefs->getBool("/desktop/geometry/maximized"); + if (pw>0 && ph>0) { + Gdk::Rectangle monitor_geometry = Inkscape::UI::get_monitor_geometry_at_point(px, py); + pw = std::min(pw, monitor_geometry.get_width()); + ph = std::min(ph, monitor_geometry.get_height()); + _desktop->setWindowSize(pw, ph); + _desktop->setWindowPosition(Geom::Point(px, py)); + } + if (maxed) { + maximize(); + } + if (full) { + fullscreen(); + } + } + + // ================ Window Options ============== + + show(); // Must show before resize! + + // Resize the window to match the document properties + sp_namedview_window_from_document(_desktop); + sp_namedview_update_layers_from_document(_desktop); -// TEMP: We should be creating the desktop widget and desktop in constructor. -void -InkscapeWindow::set_desktop_widget(SPDesktopWidget* desktop_widget) -{ - gtk_container_add(GTK_CONTAINER(gobj()), GTK_WIDGET(desktop_widget)); - gtk_widget_show(GTK_WIDGET(desktop_widget)); - _desktop = desktop_widget->desktop; } bool -- cgit v1.2.3