summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/inkview-application.cpp8
-rw-r--r--src/inkview-application.h1
-rw-r--r--src/inkview-window.cpp28
-rw-r--r--src/inkview-window.h52
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