summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/vsd-input.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/extension/internal/vsd-input.cpp')
-rw-r--r--src/extension/internal/vsd-input.cpp67
1 files changed, 39 insertions, 28 deletions
diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp
index 22012a015..eb3dde3f4 100644
--- a/src/extension/internal/vsd-input.cpp
+++ b/src/extension/internal/vsd-input.cpp
@@ -54,7 +54,7 @@
#include "ui/dialog-events.h"
#include <glibmm/i18n.h>
-#include "svg-view-widget.h"
+#include "ui/view/svg-view-widget.h"
#include "object/sp-root.h"
@@ -83,7 +83,7 @@ private:
void _onSpinButtonRelease(GdkEventButton* button_event);
class Gtk::VBox * vbox1;
- class Gtk::Widget * _previewArea;
+ class Inkscape::UI::View::SVGViewWidget * _previewArea;
class Gtk::Button * cancelbutton;
class Gtk::Button * okbutton;
@@ -98,7 +98,10 @@ private:
};
VsdImportDialog::VsdImportDialog(const std::vector<RVNGString> &vec)
- : _vec(vec), _current_page(1), _spinning(false)
+ : _previewArea(nullptr)
+ , _vec(vec)
+ , _current_page(1)
+ , _spinning(false)
{
int num_pages = _vec.size();
if ( num_pages <= 1 )
@@ -114,9 +117,7 @@ VsdImportDialog::VsdImportDialog(const std::vector<RVNGString> &vec)
this->property_destroy_with_parent().set_value(false);
// Preview area
- _previewArea = Gtk::manage(new class Gtk::VBox());
vbox1 = Gtk::manage(new class Gtk::VBox());
- vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0);
this->get_content_area()->pack_start(*vbox1);
// CONTROLS
@@ -208,29 +209,39 @@ void VsdImportDialog::_onSpinButtonRelease(GdkEventButton* /*button_event*/)
*/
void VsdImportDialog::_setPreviewPage()
{
- if (_spinning) {
- return;
- }
-
- SPDocument *doc = SPDocument::createNewDocFromMem(_vec[_current_page-1].cstr(), strlen(_vec[_current_page-1].cstr()), 0);
- if(!doc) {
- g_warning("VSD import: Could not create preview for page %d", _current_page);
- gchar const *no_preview_template =
- "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>"
- " <path style='fill:none;stroke:#ff0000;stroke-width:2px;' d='M 82,10 18,74 m 0,-64 64,64' />"
- " <rect style='fill:none;stroke:#000000;stroke-width:1.5px;' width='64' height='64' x='18' y='10' />"
- " <text x='50' y='92' style='font-size:10px;text-anchor:middle;font-family:sans-serif;'>%s</text>"
- "</svg>";
- gchar * no_preview = g_strdup_printf(no_preview_template, _("No preview"));
- doc = SPDocument::createNewDocFromMem(no_preview, strlen(no_preview), 0);
- g_free(no_preview);
- }
-
- Gtk::Widget * tmpPreviewArea = Glib::wrap(sp_svg_view_widget_new(doc));
- std::swap(_previewArea, tmpPreviewArea);
- delete tmpPreviewArea;
- vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0);
- _previewArea->show_now();
+ if (_spinning) {
+ return;
+ }
+
+ SPDocument *doc = SPDocument::createNewDocFromMem(_vec[_current_page-1].cstr(), strlen(_vec[_current_page-1].cstr()), 0);
+ if(!doc) {
+ g_warning("VSD import: Could not create preview for page %d", _current_page);
+ gchar const *no_preview_template = R"A(
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>
+ <path d='M 82,10 18,74 m 0,-64 64,64' style='fill:none;stroke:#ff0000;stroke-width:2px;'/>
+ <rect x='18' y='10' width='64' height='64' style='fill:none;stroke:#000000;stroke-width:1.5px;'/>
+ <text x='50' y='92' style='font-size:10px;text-anchor:middle;font-family:sans-serif;'>%s</text>
+ </svg>
+ )A";
+ gchar * no_preview = g_strdup_printf(no_preview_template, _("No preview"));
+ doc = SPDocument::createNewDocFromMem(no_preview, strlen(no_preview), 0);
+ g_free(no_preview);
+ }
+
+ if (!doc) {
+ std::cerr << "VsdImportDialog::_setPreviewPage: No document!" << std::endl;
+ return;
+ }
+
+ if (_previewArea) {
+ _previewArea->setDocument(doc);
+ } else {
+ _previewArea = Gtk::manage(new Inkscape::UI::View::SVGViewWidget(doc));
+ vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0);
+ }
+
+ _previewArea->setResize(400, 400);
+ _previewArea->show_all();
}
SPDocument *VsdInput::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri)