diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2019-01-19 20:45:46 +0000 |
|---|---|---|
| committer | Tavmjong Bah <tavmjong@free.fr> | 2019-01-19 20:45:46 +0000 |
| commit | 87a43eb0e582e374c069241875bbf30ccc93b132 (patch) | |
| tree | 3f7dbb0e9673a58d685aba36d58cfad59532dcc1 /src | |
| parent | Move drag-and-drop code to separate file. (diff) | |
| download | inkscape-87a43eb0e582e374c069241875bbf30ccc93b132.tar.gz inkscape-87a43eb0e582e374c069241875bbf30ccc93b132.zip | |
Remove sp_create_window().
Diffstat (limited to 'src')
| -rw-r--r-- | src/file.cpp | 20 | ||||
| -rw-r--r-- | src/inkscape-window.cpp | 87 | ||||
| -rw-r--r-- | src/inkscape-window.h | 7 | ||||
| -rw-r--r-- | src/ui/interface.cpp | 79 | ||||
| -rw-r--r-- | src/ui/interface.h | 7 |
5 files changed, 89 insertions, 111 deletions
diff --git a/src/file.cpp b/src/file.cpp index bdcde3c0e..cce831827 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -35,6 +35,7 @@ #include <gtkmm.h> #include "file.h" +#include "inkscape-window.h" #include "desktop.h" #include "document-undo.h" @@ -142,13 +143,8 @@ SPDesktop *sp_file_new(const std::string &templ) if (olddesktop) olddesktop->setWaitingCursor(); - SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, nullptr)); // TODO this will trigger broken link warnings, etc. - g_return_val_if_fail(dtw != nullptr, NULL); - sp_create_window(dtw, TRUE); - SPDesktop* desktop = static_cast<SPDesktop *>(dtw->view); - - sp_namedview_window_from_document(desktop); - sp_namedview_update_layers_from_document(desktop); + InkscapeWindow* win = new InkscapeWindow(doc); + SPDesktop* desktop = win->get_desktop(); #ifdef WITH_DBUS Inkscape::Extension::Dbus::dbus_init_desktop_interface(desktop); @@ -246,10 +242,8 @@ bool sp_file_open(const Glib::ustring &uri, doc->emitResizedSignal(doc->getWidth().value("px"), doc->getHeight().value("px")); } else { - // Create a whole new desktop and window - SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, nullptr)); // TODO this will trigger broken link warnings, etc. - sp_create_window(dtw, TRUE); - desktop = static_cast<SPDesktop*>(dtw->view); + InkscapeWindow* win = new InkscapeWindow(doc); + desktop = win->get_desktop(); } doc->virgin = FALSE; @@ -282,10 +276,6 @@ bool sp_file_open(const Glib::ustring &uri, // ------------------ Window options --------------- - // Resize the window to match the document properties - sp_namedview_window_from_document(desktop); - sp_namedview_update_layers_from_document(desktop); - // Lock Guides SPNamedView *nv = desktop->namedview; if (nv->lockguides) { 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::Application> gio_app = Gio::Application::get_default(); Glib::RefPtr<Gtk::Application> app = Glib::RefPtr<Gtk::Application>::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<SPDesktopWidget*>(_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 diff --git a/src/inkscape-window.h b/src/inkscape-window.h index 1389a6f32..8aa19d508 100644 --- a/src/inkscape-window.h +++ b/src/inkscape-window.h @@ -36,11 +36,16 @@ class InkscapeWindow : public Gtk::ApplicationWindow { public: InkscapeWindow(SPDocument* document); - void set_desktop_widget(SPDesktopWidget* desktop_widget); // Temp: We should be creating desktop in constructor! + + SPDesktop* get_desktop() { return _desktop; } + SPDesktopWidget* get_desktop_widget() { return _desktop_widget; } private: SPDocument* _document; SPDesktop* _desktop; + SPDesktopWidget* _desktop_widget; + + Gtk::Box* _mainbox; // Remove after we don't need set_desktop_widget() // Callbacks bool key_press(GdkEventKey* event); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 3d5472f4b..496a03bae 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -92,65 +92,6 @@ static void sp_ui_menu_item_set_name(GtkWidget *data, static void sp_recent_open(GtkRecentChooser *, gpointer); void -sp_create_window(SPViewWidget *vw, bool editable) -{ - g_return_if_fail(vw != nullptr); - g_return_if_fail(SP_IS_VIEW_WIDGET(vw)); - - SPDesktopWidget *desktop_widget = reinterpret_cast<SPDesktopWidget*>(vw); - SPDesktop* desktop = desktop_widget->desktop; - SPDocument* document = desktop->getDocument(); - - InkscapeWindow* win = new InkscapeWindow(document); - win->set_desktop_widget(desktop_widget); - - if (editable) { - g_object_set_data(G_OBJECT(vw), "window", win); - - - desktop_widget->window = win; - - win->set_data("desktop", desktop); - win->set_data("desktopwidget", desktop_widget); - - win->signal_delete_event().connect(sigc::mem_fun(*(SPDesktop*)vw->view, &SPDesktop::onDeleteUI)); - win->signal_window_state_event().connect(sigc::mem_fun(*desktop, &SPDesktop::onWindowStateEvent)); - win->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) { - win->maximize(); - } - if (full) { - win->fullscreen(); - } - } - } - - win->show(); - - // needed because the first ACTIVATE_DESKTOP was sent when there was no window yet - if ( SP_IS_DESKTOP_WIDGET(vw) ) { - INKSCAPE.reactivate_desktop(SP_DESKTOP_WIDGET(vw)->desktop); - } -} - -void sp_ui_new_view() { SPDocument *document; @@ -159,12 +100,7 @@ sp_ui_new_view() document = SP_ACTIVE_DOCUMENT; if (!document) return; - dtw = sp_desktop_widget_new(sp_document_namedview(document, nullptr)); - g_return_if_fail(dtw != nullptr); - - sp_create_window(dtw, TRUE); - sp_namedview_window_from_document(static_cast<SPDesktop*>(dtw->view)); - sp_namedview_update_layers_from_document(static_cast<SPDesktop*>(dtw->view)); + auto win = new InkscapeWindow(document); } void sp_ui_reload() @@ -204,17 +140,8 @@ void sp_ui_reload() continue; } - dtw = sp_desktop_widget_new(sp_document_namedview(document, nullptr)); - if (dtw == nullptr) { - ++i; - continue; - } - sp_create_window(dtw, TRUE); - SPDesktop *desktop = static_cast<SPDesktop *>(dtw->view); - if (desktop) { - sp_namedview_window_from_document(desktop); - sp_namedview_update_layers_from_document(desktop); - } + auto win = new InkscapeWindow(document); + dt->destroyWidget(); i++; } diff --git a/src/ui/interface.h b/src/ui/interface.h index 1b77fdab9..eb75fe7d6 100644 --- a/src/ui/interface.h +++ b/src/ui/interface.h @@ -20,8 +20,6 @@ #include <glibmm/ustring.h> -class SPViewWidget; - typedef struct _GtkWidget GtkWidget; namespace Inkscape { @@ -35,11 +33,6 @@ class View; } // namespace Inkscape /** - * Create a new document window. - */ -void sp_create_window (SPViewWidget *vw, bool editable); - -/** * \param widget unused */ void sp_ui_close_view (GtkWidget *widget); |
