summaryrefslogtreecommitdiffstats
path: root/src/svg-view-slideshow.cpp
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2018-10-28 17:07:34 +0000
committerTavmjong Bah <tavmjong@free.fr>2018-11-04 09:37:02 +0000
commit422ea274ba9ed5b038c767bceead4c38d8d78152 (patch)
treedbe228fdc5e4fdd99ec70a9ca1bb98e50fee69b2 /src/svg-view-slideshow.cpp
parentMerge branch 'fix-knot-selection' of gitlab.com:ao2/inkscape (diff)
downloadinkscape-422ea274ba9ed5b038c767bceead4c38d8d78152.tar.gz
inkscape-422ea274ba9ed5b038c767bceead4c38d8d78152.zip
Rewrite of inkview using InkApplication (Gtk::Application).
Use Gio::File for accessing files. Use Gio options to handle command line arguments. Use Gio::Action's. Use Gtk::Builder for control window. Only create SPDocument when requested for display and then cache it (should speed up start-up).
Diffstat (limited to 'src/svg-view-slideshow.cpp')
-rw-r--r--src/svg-view-slideshow.cpp325
1 files changed, 0 insertions, 325 deletions
diff --git a/src/svg-view-slideshow.cpp b/src/svg-view-slideshow.cpp
deleted file mode 100644
index f405f58c7..000000000
--- a/src/svg-view-slideshow.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Inkscape - an ambitious vector drawing program
- *
- * Authors:
- * Lauris Kaplinski <lauris@kaplinski.com>
- * Frank Felfe <innerspace@iname.com>
- * Davide Puricelli <evo@debian.org>
- * Mitsuru Oka <oka326@parkcity.ne.jp>
- * Masatake YAMATO <jet@gyve.org>
- * F.J.Franklin <F.J.Franklin@sheffield.ac.uk>
- * Michael Meeks <michael@helixcode.com>
- * Chema Celorio <chema@celorio.com>
- * Pawel Palucha
- * ... and various people who have worked with various projects
- * Abhishek Sharma
- *
- * Copyright (C) 1999-2002 authors
- * Copyright (C) 2001-2002 Ximian, Inc.
- *
- * Inkscape authors:
- * Johan Ceuppens
- *
- * Copyright (C) 2004 Inkscape authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include <glibmm/main.h>
-#include <gtkmm/button.h>
-#include <gtkmm/buttonbox.h>
-#include <gtkmm/image.h>
-#include <gtkmm/main.h>
-
-#include <utility>
-
-#include "document.h"
-#include "helper/icon-loader.h"
-#include "ui/icon-names.h"
-#include "ui/monitor.h"
-#include "util/units.h"
-
-#include "svg-view.h"
-#include "svg-view-slideshow.h"
-#include "svg-view-widget.h"
-
-
-SPSlideShow::SPSlideShow(std::vector<Glib::ustring> slides, bool full_screen, int timer, double scale)
- : _slides(std::move(slides))
- , _current(0)
- , _doc(SPDocument::createNewDoc(_slides[0].c_str(), true, false))
- , _fullscreen(full_screen)
- , _timer(timer)
- , _scale(scale)
- , _view(nullptr)
- , _ctrlwin(nullptr)
-{
- // setup initial document
- Gdk::Rectangle monitor_geometry = Inkscape::UI::get_monitor_geometry_primary(); // TODO: is inkview always launched on primary monitor?
- set_default_size(MIN ((int)_doc->getWidth().value("px")*_scale, monitor_geometry.get_width() - 64),
- MIN ((int)_doc->getHeight().value("px")*_scale, monitor_geometry.get_height() - 64));
-
- _view = sp_svg_view_widget_new(_doc);
- SP_SVG_VIEW_WIDGET(_view)->setResize( false, _doc->getWidth().value("px"), _doc->getHeight().value("px") );
- gtk_widget_show (_view);
- add(*Glib::wrap(_view));
-
- update_title();
- show();
- if(_fullscreen) {
- fullscreen();
- }
-
- // connect signals
- this->signal_key_press_event().connect(sigc::mem_fun(*this, &SPSlideShow::key_press), false);
- this->signal_delete_event().connect(sigc::mem_fun(*this, &SPSlideShow::main_delete), false);
- if(_timer) {
- Glib::signal_timeout().connect_seconds(sigc::mem_fun(*this, &SPSlideShow::timer_callback), _timer);
- }
-}
-
-
-
-/**
- * @brief Show the control buttons (next, previous etc) for the application
- */
-void SPSlideShow::control_show()
-{
- if (!_ctrlwin) {
- _ctrlwin = new Gtk::Window();
- _ctrlwin->set_resizable(false);
- _ctrlwin->set_transient_for(*this);
-
- _ctrlwin->signal_key_press_event().connect(sigc::mem_fun(*this, &SPSlideShow::key_press), false);
- _ctrlwin->signal_delete_event().connect(sigc::mem_fun(*this, &SPSlideShow::ctrlwin_delete), false);
-
- auto t = Gtk::manage(new Gtk::ButtonBox());
- _ctrlwin->add(*t);
-
- auto btn_go_first = Gtk::manage(new Gtk::Button());
- auto img_go_first = Gtk::manage(sp_get_icon_image(INKSCAPE_ICON("go-first"), Gtk::ICON_SIZE_BUTTON));
- btn_go_first->set_image(*img_go_first);
- t->add(*btn_go_first);
- btn_go_first->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_first));
-
- auto btn_go_prev = Gtk::manage(new Gtk::Button());
- auto img_go_prev = Gtk::manage(sp_get_icon_image(INKSCAPE_ICON("go-previous"), Gtk::ICON_SIZE_BUTTON));
-
- btn_go_prev->set_image(*img_go_prev);
- t->add(*btn_go_prev);
- btn_go_prev->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_prev));
-
- auto btn_go_next = Gtk::manage(new Gtk::Button());
- auto img_go_next = Gtk::manage(sp_get_icon_image(INKSCAPE_ICON("go-next"), Gtk::ICON_SIZE_BUTTON));
-
- btn_go_next->set_image(*img_go_next);
- t->add(*btn_go_next);
- btn_go_next->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_next));
-
- auto btn_go_last = Gtk::manage(new Gtk::Button());
- auto img_go_last = Gtk::manage(sp_get_icon_image(INKSCAPE_ICON("go-last"), Gtk::ICON_SIZE_BUTTON));
- btn_go_last->set_image(*img_go_last);
- t->add(*btn_go_last);
- btn_go_last->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_last));
-
- _ctrlwin->show_all();
- } else {
- _ctrlwin->present();
- }
-}
-
-void SPSlideShow::waiting_cursor()
-{
- auto display = Gdk::Display::get_default();
- auto waiting = Gdk::Cursor::create(display, Gdk::WATCH);
- get_window()->set_cursor(waiting);
-
- if (_ctrlwin) {
- _ctrlwin->get_window()->set_cursor(waiting);
- }
- while(Gtk::Main::events_pending()) {
- Gtk::Main::iteration();
- }
-}
-
-void SPSlideShow::normal_cursor()
-{
- get_window()->set_cursor();
- if (_ctrlwin) {
- _ctrlwin->get_window()->set_cursor();
- }
-}
-
-
-/// Update the window title with current document name
-void SPSlideShow::update_title()
-{
- Glib::ustring title(_doc->getName());
- if (_slides.size() > 1) {
- title += Glib::ustring::compose(" (%1/%2)", _current+1, _slides.size());
- }
-
- set_title(title);
-}
-
-void SPSlideShow::set_document(SPDocument *doc,
- int current)
-{
- if (doc && doc != _doc) {
- doc->ensureUpToDate();
- reinterpret_cast<SPSVGView*>(SP_VIEW_WIDGET_VIEW (_view))->setDocument (doc);
- _doc = doc;
- _current = current;
- update_title();
- }
-}
-
-/**
- * @brief Show the next file in the slideshow
- */
-void SPSlideShow::show_next()
-{
- waiting_cursor();
-
- SPDocument *doc = nullptr;
- while (!doc && (_current < _slides.size() - 1)) {
- doc = SPDocument::createNewDoc ((_slides[++_current]).c_str(), TRUE, false);
- }
-
- set_document(doc, _current);
- normal_cursor();
-}
-
-/**
- * @brief Show the previous file in the slideshow
- */
-void SPSlideShow::show_prev()
-{
- waiting_cursor();
-
- SPDocument *doc = nullptr;
- while (!doc && (_current > 0)) {
- doc = SPDocument::createNewDoc ((_slides[--_current]).c_str(), TRUE, false);
- }
-
- set_document(doc, _current);
- normal_cursor();
-}
-
-/**
- * @brief Switch to first slide in slideshow
- */
-void SPSlideShow::goto_first()
-{
- waiting_cursor();
-
- SPDocument *doc = nullptr;
- int current = 0;
- while ( !doc && (current < _slides.size() - 1)) {
- doc = SPDocument::createNewDoc((_slides[current++]).c_str(), TRUE, false);
- }
-
- set_document(doc, current - 1);
-
- normal_cursor();
-}
-
-/**
- * @brief Switch to last slide in slideshow
- */
-void SPSlideShow::goto_last()
-{
- waiting_cursor();
-
- SPDocument *doc = nullptr;
- int current = _slides.size() - 1;
- while (!doc && (current >= 0)) {
- doc = SPDocument::createNewDoc((_slides[current--]).c_str(), TRUE, false);
- }
-
- set_document(doc, current + 1);
-
- normal_cursor();
-}
-
-bool SPSlideShow::timer_callback()
-{
- show_next();
-
- // stop the timer if the last slide is reached
- if (_current == _slides.size()-1) {
- return false;
- } else {
- return true;
- }
-}
-
-bool SPSlideShow::ctrlwin_delete (GdkEventAny */*event*/)
-{
- if(_ctrlwin) delete _ctrlwin;
- _ctrlwin = nullptr;
- return true;
-}
-
-bool SPSlideShow::main_delete (GdkEventAny */*event*/)
-{
- Gtk::Main::quit();
- return true;
-}
-
-bool SPSlideShow::key_press(GdkEventKey* event)
-{
- switch (event->keyval) {
- case GDK_KEY_Up:
- case GDK_KEY_Home:
- goto_first();
- break;
- case GDK_KEY_Down:
- case GDK_KEY_End:
- goto_last();
- break;
- case GDK_KEY_F11:
- if (_fullscreen) {
- unfullscreen();
- _fullscreen = false;
- } else {
- fullscreen();
- _fullscreen = true;
- }
- break;
- case GDK_KEY_Return:
- control_show();
- break;
- case GDK_KEY_KP_Page_Down:
- case GDK_KEY_Page_Down:
- case GDK_KEY_Right:
- case GDK_KEY_space:
- show_next();
- break;
- case GDK_KEY_KP_Page_Up:
- case GDK_KEY_Page_Up:
- case GDK_KEY_Left:
- case GDK_KEY_BackSpace:
- show_prev();
- break;
- case GDK_KEY_Escape:
- case GDK_KEY_q:
- case GDK_KEY_Q:
- Gtk::Main::quit();
- break;
- default:
- break;
- }
- return false;
-}
-
-/*
- 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 :