diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2018-10-28 20:05:46 +0000 |
|---|---|---|
| committer | Tavmjong Bah <tavmjong@free.fr> | 2018-11-04 09:37:02 +0000 |
| commit | a2c03bc4c183a094d019762334f44ce6a9082b1a (patch) | |
| tree | 4322124ee8b2bde36778650fabb75bb57bc32c9b | |
| parent | Rewrite of inkview using InkApplication (Gtk::Application). (diff) | |
| download | inkscape-a2c03bc4c183a094d019762334f44ce6a9082b1a.tar.gz inkscape-a2c03bc4c183a094d019762334f44ce6a9082b1a.zip | |
Add --preload option.
| -rw-r--r-- | src/inkview-application.cpp | 8 | ||||
| -rw-r--r-- | src/inkview-application.h | 1 | ||||
| -rw-r--r-- | src/inkview-window.cpp | 28 | ||||
| -rw-r--r-- | src/inkview-window.h | 52 |
4 files changed, 62 insertions, 27 deletions
diff --git a/src/inkview-application.cpp b/src/inkview-application.cpp index cfcd8ecad..8f6bee105 100644 --- a/src/inkview-application.cpp +++ b/src/inkview-application.cpp @@ -35,6 +35,7 @@ InkviewApplication::InkviewApplication() , recursive(false) , timer(0) , scale(1.0) + , preload(false) { // ==================== Initializations ===================== // Garbage Collector @@ -54,6 +55,7 @@ InkviewApplication::InkviewApplication() add_main_option_entry(OPTION_TYPE_BOOL, "recursive", 'r', N_("Search folders recursively"), ""); add_main_option_entry(OPTION_TYPE_INT, "timer", 't', N_("Change image every NUMBER seconds"), N_("NUMBER")); add_main_option_entry(OPTION_TYPE_DOUBLE, "scale", 's', N_("Scale image by factor NUMBER"), N_("NUMBER")); + add_main_option_entry(OPTION_TYPE_BOOL, "preload", 'p', N_("Preload files"), ""); signal_handle_local_options().connect(sigc::mem_fun(*this, &InkviewApplication::on_handle_local_options)); @@ -89,7 +91,7 @@ InkviewApplication::on_activate() void InkviewApplication::on_open(const Gio::Application::type_vec_files& files, const Glib::ustring& hint) { - window = new InkviewWindow(files, fullscreen, recursive, timer, scale); + window = new InkviewWindow(files, fullscreen, recursive, timer, scale, preload); window->show_all(); add_window(*window); } @@ -124,6 +126,10 @@ InkviewApplication::on_handle_local_options(const Glib::RefPtr<Glib::VariantDict options->lookup_value("scale", scale); } + if (options->contains("preload")) { + options->lookup_value("preload", preload); + } + return -1; // Keep going } diff --git a/src/inkview-application.h b/src/inkview-application.h index d9160ddd1..e6041ba77 100644 --- a/src/inkview-application.h +++ b/src/inkview-application.h @@ -36,6 +36,7 @@ private: bool recursive; int timer; double scale; + bool preload; InkviewWindow* window; }; diff --git a/src/inkview-window.cpp b/src/inkview-window.cpp index 7f4826ae6..6567828cd 100644 --- a/src/inkview-window.cpp +++ b/src/inkview-window.cpp @@ -23,17 +23,25 @@ InkviewWindow::InkviewWindow(const Gio::Application::type_vec_files files, bool fullscreen, bool recursive, int timer, - double scale) + double scale, + bool preload + ) : _files(files) , _fullscreen(fullscreen) , _recursive(recursive) , _timer(timer) , _scale(scale) + , _preload(preload) , _index(-1) , _view(nullptr) , _controlwindow(nullptr) { _files = create_file_list(_files); + + if (_preload) { + preload_documents(); + } + _documents.resize( _files.size(), nullptr); // We keep _documents and _files in sync. // Callbacks @@ -167,6 +175,24 @@ InkviewWindow::load_document() return document; } + + +void +InkviewWindow::preload_documents() +{ + for (auto it =_files.begin(); it != _files.end(); ) { + + SPDocument* document = + SPDocument::createNewDoc ((*it)->get_parse_name().c_str(), true, false); + if (document) { + _documents.push_back(document); + ++it; + } else { + it = _files.erase(it); + } + } +} + static std::string window_markup = R"( <interface> <object class="GtkWindow" id="ControlWindow"> diff --git a/src/inkview-window.h b/src/inkview-window.h index 83cb4d1d1..24b6f8c26 100644 --- a/src/inkview-window.h +++ b/src/inkview-window.h @@ -16,38 +16,40 @@ class SPDocument; class InkviewWindow : public Gtk::ApplicationWindow { - public: - InkviewWindow(const Gio::Application::type_vec_files files, - bool fullscreen, bool recursive, int timer, double scale); +public: + InkviewWindow(const Gio::Application::type_vec_files files, + bool fullscreen, bool recursive, int timer, double scale, bool preload); - private: - std::vector<Glib::RefPtr<Gio::File> > +private: + std::vector<Glib::RefPtr<Gio::File> > create_file_list(const std::vector<Glib::RefPtr<Gio::File > >& files); - void update_title(); - bool show_document(SPDocument* document); - SPDocument* load_document(); + void update_title(); + bool show_document(SPDocument* document); + SPDocument* load_document(); + void preload_documents(); - Gio::Application::type_vec_files _files; - bool _fullscreen; - bool _recursive; - int _timer; - double _scale; + Gio::Application::type_vec_files _files; + bool _fullscreen; + bool _recursive; + int _timer; + double _scale; + bool _preload; - int _index; - std::vector<SPDocument*> _documents; + int _index; + std::vector<SPDocument*> _documents; - GtkWidget* _view; - Gtk::Window* _controlwindow; + GtkWidget* _view; + Gtk::Window* _controlwindow; - // Callbacks - void show_control(); - void show_next(); - void show_prev(); - void show_first(); - void show_last(); + // Callbacks + void show_control(); + void show_next(); + void show_prev(); + void show_first(); + void show_last(); - bool key_press(GdkEventKey* event); - bool on_timer(); + bool key_press(GdkEventKey* event); + bool on_timer(); }; #endif // INKVIEW_WINDOW_H |
