mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 14:46:00 +01:00
Merge branch 'release/0.4.0'
This commit is contained in:
commit
68eaadf130
19 changed files with 135 additions and 151 deletions
1
AUTHORS
1
AUTHORS
|
@ -28,3 +28,4 @@ oblique
|
||||||
Maxime Chéramy <maxime.cheramy@gmail.com>
|
Maxime Chéramy <maxime.cheramy@gmail.com>
|
||||||
Alexander Shabalin <shabalyn.a@gmail.com>
|
Alexander Shabalin <shabalyn.a@gmail.com>
|
||||||
Lingzhu Xiang <lingzhu@lingzhuxiang.com>
|
Lingzhu Xiang <lingzhu@lingzhuxiang.com>
|
||||||
|
Jeremie Knuesel
|
||||||
|
|
|
@ -7,7 +7,7 @@ zathura_resources = gnome.compile_resources(
|
||||||
)
|
)
|
||||||
|
|
||||||
install_data('org.pwmt.zathura.xml', install_dir: dbusinterfacesdir)
|
install_data('org.pwmt.zathura.xml', install_dir: dbusinterfacesdir)
|
||||||
install_data('org.pwmt.zathura.png', install_dir: join_paths(datadir, 'icons', 'hicolor', '128x128'))
|
install_data('org.pwmt.zathura.png', install_dir: join_paths(datadir, 'icons', 'hicolor', '128x128', 'apps'))
|
||||||
|
|
||||||
i18n = import('i18n')
|
i18n = import('i18n')
|
||||||
podir = join_paths(meson.source_root(), 'po')
|
podir = join_paths(meson.source_root(), 'po')
|
||||||
|
|
|
@ -324,6 +324,8 @@ Pass arguments
|
||||||
Some shortcut function require or have optional arguments which influence the
|
Some shortcut function require or have optional arguments which influence the
|
||||||
behaviour of them. Those can be passed as the last argument:
|
behaviour of them. Those can be passed as the last argument:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
map <C-i> zoom in
|
map <C-i> zoom in
|
||||||
map <C-o> zoom out
|
map <C-o> zoom out
|
||||||
|
|
||||||
|
|
10
meson.build
10
meson.build
|
@ -1,5 +1,5 @@
|
||||||
project('zathura', 'c',
|
project('zathura', 'c',
|
||||||
version: '0.3.9',
|
version: '0.4.0',
|
||||||
meson_version: '>=0.45',
|
meson_version: '>=0.45',
|
||||||
default_options: 'c_std=c11',
|
default_options: 'c_std=c11',
|
||||||
)
|
)
|
||||||
|
@ -36,15 +36,16 @@ dbusinterfacesdir = join_paths(datadir, 'dbus-1', 'interfaces')
|
||||||
plugindir = join_paths(get_option('libdir'), 'zathura')
|
plugindir = join_paths(get_option('libdir'), 'zathura')
|
||||||
|
|
||||||
# required dependencies
|
# required dependencies
|
||||||
libm = cc.find_library('libm')
|
libm = cc.find_library('libm', required: false)
|
||||||
girara = dependency('girara-gtk3', version: '>=0.2.9')
|
girara = dependency('girara-gtk3', version: '>=0.2.9')
|
||||||
glib = dependency('glib-2.0', version: '>=2.50')
|
glib = dependency('glib-2.0', version: '>=2.50')
|
||||||
|
gio = dependency('gio-unix-2.0', required: host_machine.system() != 'windows')
|
||||||
gthread = dependency('gthread-2.0', version: '>=2.50')
|
gthread = dependency('gthread-2.0', version: '>=2.50')
|
||||||
gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50')
|
gmodule = dependency('gmodule-no-export-2.0', version: '>=2.50')
|
||||||
gtk3 = dependency('gtk+-3.0', version: '>=3.22')
|
gtk3 = dependency('gtk+-3.0', version: '>=3.22')
|
||||||
cairo = dependency('cairo')
|
cairo = dependency('cairo')
|
||||||
|
|
||||||
build_dependencies = [libm, girara, glib, gthread, gmodule, gtk3, cairo]
|
build_dependencies = [libm, girara, glib, gio, gthread, gmodule, gtk3, cairo]
|
||||||
|
|
||||||
# defines
|
# defines
|
||||||
defines = [
|
defines = [
|
||||||
|
@ -81,6 +82,9 @@ endif
|
||||||
if get_option('enable-synctex') and synctex.found()
|
if get_option('enable-synctex') and synctex.found()
|
||||||
build_dependencies += synctex
|
build_dependencies += synctex
|
||||||
defines += '-DWITH_SYNCTEX'
|
defines += '-DWITH_SYNCTEX'
|
||||||
|
if synctex.version() < '2.0.0'
|
||||||
|
defines += '-DWITH_SYNCTEX1'
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('enable-magic') and magic.found()
|
if get_option('enable-magic') and magic.found()
|
||||||
|
|
9
po/de.po
9
po/de.po
|
@ -9,7 +9,7 @@ msgstr ""
|
||||||
"Project-Id-Version: zathura\n"
|
"Project-Id-Version: zathura\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2018-03-16 01:11+0100\n"
|
"POT-Creation-Date: 2018-03-16 01:11+0100\n"
|
||||||
"PO-Revision-Date: 2018-03-16 01:11+0100\n"
|
"PO-Revision-Date: 2018-03-18 17:21+0100\n"
|
||||||
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
"Last-Translator: Sebastian Ramacher <sebastian+dev@ramacher.at>\n"
|
||||||
"Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n"
|
"Language-Team: German (http://www.transifex.com/pwmt/zathura/language/de/)\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -17,6 +17,7 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Poedit 2.0.6\n"
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
#: data/org.pwmt.zathura.appdata.xml.in:7 data/org.pwmt.zathura.desktop.in:5
|
||||||
msgid "Zathura"
|
msgid "Zathura"
|
||||||
|
@ -33,10 +34,14 @@ msgid ""
|
||||||
"mainly focuses on keyboard interaction. Zathura makes it possible to "
|
"mainly focuses on keyboard interaction. Zathura makes it possible to "
|
||||||
"completely view and navigate through documents without using a mouse."
|
"completely view and navigate through documents without using a mouse."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Zathura ist ein anpassbarer und funktionaler Dokumentenbetrachter. Er bietet "
|
||||||
|
"eine minimalistische und platzsparende Oberfläche und Verwendung ist auf "
|
||||||
|
"Tastaturinteraktionen fokussiert. Zathura ermöglicht es ein Dokument "
|
||||||
|
"gänzlich ohne der Verwendung einer Maus zu betrachten."
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:21
|
#: data/org.pwmt.zathura.appdata.xml.in:21
|
||||||
msgid "SyncTeX forward and backward synchronization support."
|
msgid "SyncTeX forward and backward synchronization support."
|
||||||
msgstr "Unterstützung für SyncTeX-Synchronisation"
|
msgstr "Unterstützung für SyncTeX-Synchronisation."
|
||||||
|
|
||||||
#: data/org.pwmt.zathura.appdata.xml.in:22
|
#: data/org.pwmt.zathura.appdata.xml.in:22
|
||||||
msgid "Quickmarks and bookmarks."
|
msgid "Quickmarks and bookmarks."
|
||||||
|
|
|
@ -20,5 +20,7 @@ if check.found()
|
||||||
c_args: defines + flags
|
c_args: defines + flags
|
||||||
)
|
)
|
||||||
|
|
||||||
test('tests', tests)
|
test('tests', tests,
|
||||||
|
timeout: 60*60
|
||||||
|
)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
|
||||||
#define ZATHURA_TYPE_PLAINDATABASE \
|
#define ZATHURA_TYPE_PLAINDATABASE \
|
||||||
(zathura_plaindatabase_get_type ())
|
(zathura_plaindatabase_get_type())
|
||||||
#define ZATHURA_PLAINDATABASE(obj) \
|
#define ZATHURA_PLAINDATABASE(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_PLAINDATABASE, ZathuraPlainDatabase))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_PLAINDATABASE, ZathuraPlainDatabase))
|
||||||
#define ZATHURA_IS_PLAINDATABASE(obj) \
|
#define ZATHURA_IS_PLAINDATABASE(obj) \
|
||||||
|
|
|
@ -138,7 +138,7 @@ sqlite_db_init(ZathuraSQLDatabase* db, const char* path)
|
||||||
"vadj_ratio FLOAT,"
|
"vadj_ratio FLOAT,"
|
||||||
"PRIMARY KEY(file, id));";
|
"PRIMARY KEY(file, id));";
|
||||||
|
|
||||||
/* ceate jumplist table */
|
/* create jumplist table */
|
||||||
static const char SQL_JUMPLIST_INIT[] =
|
static const char SQL_JUMPLIST_INIT[] =
|
||||||
"CREATE TABLE IF NOT EXISTS jumplist ("
|
"CREATE TABLE IF NOT EXISTS jumplist ("
|
||||||
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
|
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
|
||||||
#define ZATHURA_TYPE_SQLDATABASE \
|
#define ZATHURA_TYPE_SQLDATABASE \
|
||||||
(zathura_sqldatabase_get_type ())
|
(zathura_sqldatabase_get_type())
|
||||||
#define ZATHURA_SQLDATABASE(obj) \
|
#define ZATHURA_SQLDATABASE(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_SQLDATABASE, ZathuraSQLDatabase))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_SQLDATABASE, ZathuraSQLDatabase))
|
||||||
#define ZATHURA_IS_SQLDATABASE(obj) \
|
#define ZATHURA_IS_SQLDATABASE(obj) \
|
||||||
|
|
|
@ -21,7 +21,7 @@ typedef struct zathura_fileinfo_s {
|
||||||
} zathura_fileinfo_t;
|
} zathura_fileinfo_t;
|
||||||
|
|
||||||
#define ZATHURA_TYPE_DATABASE \
|
#define ZATHURA_TYPE_DATABASE \
|
||||||
(zathura_database_get_type ())
|
(zathura_database_get_type())
|
||||||
#define ZATHURA_DATABASE(obj) \
|
#define ZATHURA_DATABASE(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_DATABASE, ZathuraDatabase))
|
(G_TYPE_CHECK_INSTANCE_CAST ((obj), ZATHURA_TYPE_DATABASE, ZathuraDatabase))
|
||||||
#define ZATHURA_IS_DATABASE(obj) \
|
#define ZATHURA_IS_DATABASE(obj) \
|
||||||
|
|
|
@ -549,7 +549,7 @@ zathura_document_set_device_factors(zathura_document_t* document,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (fabs(x_factor) < DBL_EPSILON || fabs(y_factor) < DBL_EPSILON) {
|
if (fabs(x_factor) < DBL_EPSILON || fabs(y_factor) < DBL_EPSILON) {
|
||||||
girara_debug("Ignoring new device factors %f and %f: too small",
|
girara_debug("Ignoring new device factors %0.2f and %0.2f: too small",
|
||||||
x_factor, y_factor);
|
x_factor, y_factor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -269,7 +269,7 @@ register_plugin(zathura_plugin_manager_t* plugin_manager, zathura_plugin_t* plug
|
||||||
if (plugin_mapping_new(plugin_manager, type, plugin) == false) {
|
if (plugin_mapping_new(plugin_manager, type, plugin) == false) {
|
||||||
girara_error("plugin: filetype already registered: %s", type);
|
girara_error("plugin: filetype already registered: %s", type);
|
||||||
} else {
|
} else {
|
||||||
girara_debug("plugin: filetype mapping addded: %s", type);
|
girara_debug("plugin: filetype mapping added: %s", type);
|
||||||
at_least_one = true;
|
at_least_one = true;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
117
zathura/print.c
117
zathura/print.c
|
@ -10,65 +10,6 @@
|
||||||
#include <girara/session.h>
|
#include <girara/session.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
static void cb_print_draw_page(GtkPrintOperation* print_operation,
|
|
||||||
GtkPrintContext* context, gint page_number,
|
|
||||||
zathura_t* zathura);
|
|
||||||
static void cb_print_end(GtkPrintOperation* print_operation, GtkPrintContext*
|
|
||||||
context, zathura_t* zathura);
|
|
||||||
static void cb_print_request_page_setup(GtkPrintOperation* print_operation,
|
|
||||||
GtkPrintContext* context,
|
|
||||||
gint page_number, GtkPageSetup* setup,
|
|
||||||
zathura_t* zathura);
|
|
||||||
static void cb_print_done(GtkPrintOperation* operation,
|
|
||||||
GtkPrintOperationResult result, zathura_t* zathura);
|
|
||||||
|
|
||||||
void
|
|
||||||
print(zathura_t* zathura)
|
|
||||||
{
|
|
||||||
g_return_if_fail(zathura != NULL);
|
|
||||||
g_return_if_fail(zathura->document != NULL);
|
|
||||||
|
|
||||||
GtkPrintOperation* print_operation = gtk_print_operation_new();
|
|
||||||
|
|
||||||
/* print operation settings */
|
|
||||||
gtk_print_operation_set_job_name(print_operation, zathura_document_get_path(zathura->document));
|
|
||||||
gtk_print_operation_set_allow_async(print_operation, TRUE);
|
|
||||||
gtk_print_operation_set_n_pages(print_operation, zathura_document_get_number_of_pages(zathura->document));
|
|
||||||
gtk_print_operation_set_current_page(print_operation, zathura_document_get_current_page_number(zathura->document));
|
|
||||||
gtk_print_operation_set_use_full_page(print_operation, TRUE);
|
|
||||||
|
|
||||||
if (zathura->print.settings != NULL) {
|
|
||||||
gtk_print_operation_set_print_settings(print_operation,
|
|
||||||
zathura->print.settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zathura->print.page_setup != NULL) {
|
|
||||||
gtk_print_operation_set_default_page_setup(print_operation,
|
|
||||||
zathura->print.page_setup);
|
|
||||||
}
|
|
||||||
gtk_print_operation_set_embed_page_setup(print_operation, TRUE);
|
|
||||||
|
|
||||||
/* print operation signals */
|
|
||||||
g_signal_connect(print_operation, "draw-page", G_CALLBACK(cb_print_draw_page), zathura);
|
|
||||||
g_signal_connect(print_operation, "end-print", G_CALLBACK(cb_print_end), zathura);
|
|
||||||
g_signal_connect(print_operation, "request-page-setup", G_CALLBACK(cb_print_request_page_setup), zathura);
|
|
||||||
g_signal_connect(print_operation, "done", G_CALLBACK(cb_print_done), zathura);
|
|
||||||
|
|
||||||
/* print */
|
|
||||||
GError* error = NULL;
|
|
||||||
GtkPrintOperationResult result = gtk_print_operation_run(print_operation,
|
|
||||||
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
|
|
||||||
NULL, &error);
|
|
||||||
|
|
||||||
if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
|
|
||||||
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
|
|
||||||
error->message);
|
|
||||||
g_error_free(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref(print_operation);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cb_print_end(GtkPrintOperation* UNUSED(print_operation), GtkPrintContext*
|
cb_print_end(GtkPrintOperation* UNUSED(print_operation), GtkPrintContext*
|
||||||
UNUSED(context), zathura_t* zathura)
|
UNUSED(context), zathura_t* zathura)
|
||||||
|
@ -210,23 +151,55 @@ cb_print_request_page_setup(GtkPrintOperation* UNUSED(print_operation),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
cb_print_done(GtkPrintOperation* operation, GtkPrintOperationResult result,
|
print(zathura_t* zathura)
|
||||||
zathura_t* zathura)
|
|
||||||
{
|
{
|
||||||
if (result == GTK_PRINT_OPERATION_RESULT_APPLY) {
|
g_return_if_fail(zathura != NULL);
|
||||||
|
g_return_if_fail(zathura->document != NULL);
|
||||||
|
|
||||||
|
GtkPrintOperation* print_operation = gtk_print_operation_new();
|
||||||
|
|
||||||
|
/* print operation settings */
|
||||||
|
gtk_print_operation_set_job_name(print_operation, zathura_document_get_path(zathura->document));
|
||||||
|
gtk_print_operation_set_allow_async(print_operation, TRUE);
|
||||||
|
gtk_print_operation_set_n_pages(print_operation, zathura_document_get_number_of_pages(zathura->document));
|
||||||
|
gtk_print_operation_set_current_page(print_operation, zathura_document_get_current_page_number(zathura->document));
|
||||||
|
gtk_print_operation_set_use_full_page(print_operation, TRUE);
|
||||||
|
|
||||||
|
if (zathura->print.settings != NULL) {
|
||||||
|
gtk_print_operation_set_print_settings(print_operation,
|
||||||
|
zathura->print.settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zathura->print.page_setup != NULL) {
|
||||||
|
gtk_print_operation_set_default_page_setup(print_operation,
|
||||||
|
zathura->print.page_setup);
|
||||||
|
}
|
||||||
|
gtk_print_operation_set_embed_page_setup(print_operation, TRUE);
|
||||||
|
|
||||||
|
/* print operation signals */
|
||||||
|
g_signal_connect(print_operation, "draw-page", G_CALLBACK(cb_print_draw_page), zathura);
|
||||||
|
g_signal_connect(print_operation, "end-print", G_CALLBACK(cb_print_end), zathura);
|
||||||
|
g_signal_connect(print_operation, "request-page-setup", G_CALLBACK(cb_print_request_page_setup), zathura);
|
||||||
|
|
||||||
|
/* print */
|
||||||
|
GError* error = NULL;
|
||||||
|
GtkPrintOperationResult result = gtk_print_operation_run(print_operation,
|
||||||
|
GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
|
||||||
|
GTK_WINDOW(zathura->ui.session->gtk.window), &error);
|
||||||
|
|
||||||
|
if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
|
||||||
|
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
|
||||||
|
error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
} else if (result == GTK_PRINT_OPERATION_RESULT_APPLY) {
|
||||||
g_clear_object(&zathura->print.settings);
|
g_clear_object(&zathura->print.settings);
|
||||||
g_clear_object(&zathura->print.page_setup);
|
g_clear_object(&zathura->print.page_setup);
|
||||||
|
|
||||||
/* save previous settings */
|
/* save previous settings */
|
||||||
zathura->print.settings = g_object_ref(gtk_print_operation_get_print_settings(operation));
|
zathura->print.settings = g_object_ref(gtk_print_operation_get_print_settings(print_operation));
|
||||||
zathura->print.page_setup = g_object_ref(gtk_print_operation_get_default_page_setup(operation));
|
zathura->print.page_setup = g_object_ref(gtk_print_operation_get_default_page_setup(print_operation));
|
||||||
} else if (result == GTK_PRINT_OPERATION_RESULT_ERROR) {
|
|
||||||
GError* error = NULL;
|
|
||||||
gtk_print_operation_get_error(operation, &error);
|
|
||||||
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Printing failed: %s"),
|
|
||||||
error->message);
|
|
||||||
g_error_free(error);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
g_object_unref(print_operation);
|
||||||
|
}
|
||||||
|
|
|
@ -541,36 +541,22 @@ emit_completed_signal(void* data)
|
||||||
Assumes that l is in the interval l1, l2 and corrects the value to
|
Assumes that l is in the interval l1, l2 and corrects the value to
|
||||||
force u=0 on l1 and l2 */
|
force u=0 on l1 and l2 */
|
||||||
static double
|
static double
|
||||||
colorumax(const double* h, double l, double l1, double l2)
|
colorumax(const double h[3], double l, double l1, double l2)
|
||||||
{
|
{
|
||||||
if (h[0] == 0 && h[1] == 0 && h[2] == 0) {
|
if (fabs(h[0]) <= DBL_EPSILON && fabs(h[1]) <= DBL_EPSILON && fabs(h[2]) <= DBL_EPSILON) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const double lv = (l - l1)/(l2 - l1); /* Remap l to the whole interval 0,1 */
|
const double lv = (l - l1) / (l2 - l1); /* Remap l to the whole interval [0,1] */
|
||||||
double u = 1000000;
|
double u = DBL_MAX;
|
||||||
double v = u;
|
double v = DBL_MAX;
|
||||||
for (int k = 0; k < 3; k++) {
|
for (unsigned int k = 0; k < 3; ++k) {
|
||||||
if (h[k] > 0) {
|
if (h[k] > DBL_EPSILON) {
|
||||||
const double uu = fabs((1-l)/h[k]);
|
u = fmin(fabs((1-l)/h[k]), u);
|
||||||
const double vv = fabs((1-lv)/h[k]);
|
v = fmin(fabs((1-lv)/h[k]), v);
|
||||||
|
} else if (h[k] < -DBL_EPSILON) {
|
||||||
if (uu < u) {
|
u = fmin(fabs(l/h[k]), u);
|
||||||
u = uu;
|
v = fmin(fabs(lv/h[k]), v);
|
||||||
}
|
|
||||||
if (vv < v) {
|
|
||||||
v = vv;
|
|
||||||
}
|
|
||||||
} else if (h[k] < 0) {
|
|
||||||
const double uu = fabs(l/h[k]);
|
|
||||||
const double vv = fabs(lv/h[k]);
|
|
||||||
|
|
||||||
if (uu < u) {
|
|
||||||
u = uu;
|
|
||||||
}
|
|
||||||
if (vv < v) {
|
|
||||||
v = vv;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,7 +581,7 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
|
||||||
|
|
||||||
/* TODO: split handling of image handling off
|
/* TODO: split handling of image handling off
|
||||||
* Ideally we would create a mask surface for the location of the images and
|
* Ideally we would create a mask surface for the location of the images and
|
||||||
* we would blit the the recolored and unmodified surfaces together to get the
|
* we would blit the recolored and unmodified surfaces together to get the
|
||||||
* same effect.
|
* same effect.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -607,8 +593,9 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
|
||||||
/* RGB weights for computing lightness. Must sum to one */
|
/* RGB weights for computing lightness. Must sum to one */
|
||||||
static const double a[] = {0.30, 0.59, 0.11};
|
static const double a[] = {0.30, 0.59, 0.11};
|
||||||
|
|
||||||
#define rgb1 priv->recolor.dark
|
const GdkRGBA rgb1 = priv->recolor.dark;
|
||||||
#define rgb2 priv->recolor.light
|
const GdkRGBA rgb2 = priv->recolor.light;
|
||||||
|
|
||||||
const double l1 = a[0]*rgb1.red + a[1]*rgb1.green + a[2]*rgb1.blue;
|
const double l1 = a[0]*rgb1.red + a[1]*rgb1.green + a[2]*rgb1.blue;
|
||||||
const double l2 = a[0]*rgb2.red + a[1]*rgb2.green + a[2]*rgb2.blue;
|
const double l2 = a[0]*rgb2.red + a[1]*rgb2.green + a[2]*rgb2.blue;
|
||||||
|
|
||||||
|
@ -630,7 +617,7 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
|
||||||
rectangles = girara_list_new();
|
rectangles = girara_list_new();
|
||||||
if (rectangles == NULL) {
|
if (rectangles == NULL) {
|
||||||
found_images = false;
|
found_images = false;
|
||||||
girara_warning("Failed to retrieve images.\n");
|
girara_warning("Failed to retrieve images.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found_images == true) {
|
if (found_images == true) {
|
||||||
|
@ -687,20 +674,17 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
|
||||||
|
|
||||||
/* u is the maximum possible saturation for given h and l. s is a
|
/* u is the maximum possible saturation for given h and l. s is a
|
||||||
* rescaled saturation between 0 and 1 */
|
* rescaled saturation between 0 and 1 */
|
||||||
double u = colorumax(h, l, 0, 1);
|
const double u = colorumax(h, l, 0, 1);
|
||||||
double s = 0;
|
const double s = fabs(u) > DBL_EPSILON ? 1.0 / u : 0.0;
|
||||||
if (u != 0) {
|
|
||||||
s = 1/u;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Interpolates lightness between light and dark colors. white goes to
|
/* Interpolates lightness between light and dark colors. white goes to
|
||||||
* light, and black goes to dark. */
|
* light, and black goes to dark. */
|
||||||
l = l * (l2 - l1) + l1;
|
l = l * (l2 - l1) + l1;
|
||||||
u = colorumax(h, l, l1, l2);
|
|
||||||
|
|
||||||
data[2] = (unsigned char)round(255.*(l + s*u * h[0]));
|
const double su = s * colorumax(h, l, l1, l2);
|
||||||
data[1] = (unsigned char)round(255.*(l + s*u * h[1]));
|
data[2] = (unsigned char)round(255.*(l + su * h[0]));
|
||||||
data[0] = (unsigned char)round(255.*(l + s*u * h[2]));
|
data[1] = (unsigned char)round(255.*(l + su * h[1]));
|
||||||
|
data[0] = (unsigned char)round(255.*(l + su * h[2]));
|
||||||
} else {
|
} else {
|
||||||
/* linear interpolation between dark and light with color ligtness as
|
/* linear interpolation between dark and light with color ligtness as
|
||||||
* a parameter */
|
* a parameter */
|
||||||
|
@ -719,9 +703,6 @@ recolor(private_t* priv, zathura_page_t* page, unsigned int page_width,
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_mark_dirty(surface);
|
cairo_surface_mark_dirty(surface);
|
||||||
|
|
||||||
#undef rgb1
|
|
||||||
#undef rgb2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
@ -747,7 +728,7 @@ render(render_job_t* job, ZathuraRenderRequest* request, ZathuraRenderer* render
|
||||||
&page_height, &page_width,
|
&page_height, &page_width,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
zathura_device_factors_t device_factors = zathura_document_get_device_factors(document);
|
const zathura_device_factors_t device_factors = zathura_document_get_device_factors(document);
|
||||||
page_width *= device_factors.x;
|
page_width *= device_factors.x;
|
||||||
page_height *= device_factors.y;
|
page_height *= device_factors.y;
|
||||||
|
|
||||||
|
@ -866,7 +847,7 @@ render_all(zathura_t* zathura)
|
||||||
const double width = zathura_page_get_width(page);
|
const double width = zathura_page_get_width(page);
|
||||||
page_calc_height_width(zathura->document, height, width, &page_height, &page_width, true);
|
page_calc_height_width(zathura->document, height, width, &page_height, &page_width, true);
|
||||||
|
|
||||||
girara_debug("Queuing resize for page %u to %u x %u (%f x %f).", page_id, page_width, page_height, width, height);
|
girara_debug("Queuing resize for page %u to %u x %u (%0.2f x %0.2f).", page_id, page_width, page_height, width, height);
|
||||||
GtkWidget* widget = zathura_page_get_widget(zathura, page);
|
GtkWidget* widget = zathura_page_get_widget(zathura, page);
|
||||||
if (widget != NULL) {
|
if (widget != NULL) {
|
||||||
gtk_widget_set_size_request(widget, page_width, page_height);
|
gtk_widget_set_size_request(widget, page_width, page_height);
|
||||||
|
@ -892,7 +873,7 @@ render_thread_sort(gconstpointer a, gconstpointer b, gpointer UNUSED(data))
|
||||||
(priv_a->last_view_time > priv_b->last_view_time ? 1 : 0);
|
(priv_a->last_view_time > priv_b->last_view_time ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sort aborted entries earlier so that the are thrown out of the queue */
|
/* sort aborted entries earlier so that they are thrown out of the queue */
|
||||||
return job_a->aborted ? 1 : -1;
|
return job_a->aborted ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,7 @@ seccomp_enable_strict_filter(void)
|
||||||
ALLOW_RULE(getresgid);
|
ALLOW_RULE(getresgid);
|
||||||
ALLOW_RULE(getresuid);
|
ALLOW_RULE(getresuid);
|
||||||
ALLOW_RULE(getrlimit);
|
ALLOW_RULE(getrlimit);
|
||||||
|
ALLOW_RULE(getpeername);
|
||||||
/* ALLOW_RULE (getsockname); */
|
/* ALLOW_RULE (getsockname); */
|
||||||
/* ALLOW_RULE (getsockopt); needed for access to x11 socket in network namespace (without abstract sockets) */
|
/* ALLOW_RULE (getsockopt); needed for access to x11 socket in network namespace (without abstract sockets) */
|
||||||
ALLOW_RULE(inotify_add_watch);
|
ALLOW_RULE(inotify_add_watch);
|
||||||
|
|
|
@ -1383,22 +1383,22 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t*
|
||||||
|
|
||||||
/* specify new zoom value */
|
/* specify new zoom value */
|
||||||
if (argument->n == ZOOM_IN) {
|
if (argument->n == ZOOM_IN) {
|
||||||
girara_debug("Increasing zoom by %f.", zoom_step - 1.0);
|
girara_debug("Increasing zoom by %0.2f.", zoom_step - 1.0);
|
||||||
zathura_document_set_zoom(zathura->document, old_zoom * zoom_step);
|
zathura_document_set_zoom(zathura->document, old_zoom * zoom_step);
|
||||||
} else if (argument->n == ZOOM_OUT) {
|
} else if (argument->n == ZOOM_OUT) {
|
||||||
girara_debug("Decreasing zoom by %f.", zoom_step - 1.0);
|
girara_debug("Decreasing zoom by %0.2f.", zoom_step - 1.0);
|
||||||
zathura_document_set_zoom(zathura->document, old_zoom / zoom_step);
|
zathura_document_set_zoom(zathura->document, old_zoom / zoom_step);
|
||||||
} else if (argument->n == ZOOM_SPECIFIC) {
|
} else if (argument->n == ZOOM_SPECIFIC) {
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
girara_debug("Setting zoom to 1.");
|
girara_debug("Setting zoom to 1.");
|
||||||
zathura_document_set_zoom(zathura->document, 1.0);
|
zathura_document_set_zoom(zathura->document, 1.0);
|
||||||
} else {
|
} else {
|
||||||
girara_debug("Setting zoom to %f.", t / 100.0);
|
girara_debug("Setting zoom to %0.2f.", t / 100.0);
|
||||||
zathura_document_set_zoom(zathura->document, t / 100.0);
|
zathura_document_set_zoom(zathura->document, t / 100.0);
|
||||||
}
|
}
|
||||||
} else if (argument->n == ZOOM_SMOOTH) {
|
} else if (argument->n == ZOOM_SMOOTH) {
|
||||||
const double dy = (event != NULL) ? event->y : 1.0;
|
const double dy = (event != NULL) ? event->y : 1.0;
|
||||||
girara_debug("Increasing zoom by %f.", zoom_step * dy - 1.0);
|
girara_debug("Increasing zoom by %0.2f.", zoom_step * dy - 1.0);
|
||||||
zathura_document_set_zoom(zathura->document, old_zoom + zoom_step * dy);
|
zathura_document_set_zoom(zathura->document, old_zoom + zoom_step * dy);
|
||||||
} else {
|
} else {
|
||||||
girara_debug("Setting zoom to 1.");
|
girara_debug("Setting zoom to 1.");
|
||||||
|
@ -1411,11 +1411,11 @@ sc_zoom(girara_session_t* session, girara_argument_t* argument, girara_event_t*
|
||||||
|
|
||||||
const double new_zoom = zathura_document_get_zoom(zathura->document);
|
const double new_zoom = zathura_document_get_zoom(zathura->document);
|
||||||
if (fabs(new_zoom - old_zoom) <= DBL_EPSILON) {
|
if (fabs(new_zoom - old_zoom) <= DBL_EPSILON) {
|
||||||
girara_debug("New and old zoom level are too close: %f vs. %f, diff = %f", new_zoom, old_zoom, fabs(new_zoom - old_zoom));
|
girara_debug("New and old zoom level are too close: %0.2f vs. %0.2f", new_zoom, old_zoom);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
girara_debug("Re-rendering with new zoom level %f.", new_zoom);
|
girara_debug("Re-rendering with new zoom level %0.2f.", new_zoom);
|
||||||
render_all(zathura);
|
render_all(zathura);
|
||||||
refresh_view(zathura);
|
refresh_view(zathura);
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,14 @@
|
||||||
#include "adjustment.h"
|
#include "adjustment.h"
|
||||||
|
|
||||||
#ifdef WITH_SYNCTEX
|
#ifdef WITH_SYNCTEX
|
||||||
|
#ifdef WITH_SYNCTEX1
|
||||||
|
typedef synctex_scanner_t synctex_scanner_p;
|
||||||
|
typedef synctex_node_t synctex_node_p;
|
||||||
|
|
||||||
|
#define synctex_scanner_next_result(scanner) synctex_next_result(scanner)
|
||||||
|
#define synctex_display_query(scanner, file, line, column, page) synctex_display_query(scanner, file, line, column)
|
||||||
|
#endif
|
||||||
|
|
||||||
bool
|
bool
|
||||||
synctex_get_input_line_column(const char* filename, unsigned int page, int x, int y,
|
synctex_get_input_line_column(const char* filename, unsigned int page, int x, int y,
|
||||||
char** input_file, unsigned int* line, unsigned int* column)
|
char** input_file, unsigned int* line, unsigned int* column)
|
||||||
|
@ -24,13 +32,13 @@ synctex_get_input_line_column(const char* filename, unsigned int page, int x, in
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
synctex_scanner_t scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
|
synctex_scanner_p scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
|
||||||
if (scanner == NULL) {
|
if (scanner == NULL) {
|
||||||
girara_debug("Failed to create synctex scanner.");
|
girara_debug("Failed to create synctex scanner.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
synctex_scanner_t temp = synctex_scanner_parse(scanner);
|
synctex_scanner_p temp = synctex_scanner_parse(scanner);
|
||||||
if (temp == NULL) {
|
if (temp == NULL) {
|
||||||
girara_debug("Failed to parse synctex file.");
|
girara_debug("Failed to parse synctex file.");
|
||||||
synctex_scanner_free(scanner);
|
synctex_scanner_free(scanner);
|
||||||
|
@ -41,7 +49,7 @@ synctex_get_input_line_column(const char* filename, unsigned int page, int x, in
|
||||||
|
|
||||||
if (synctex_edit_query(scanner, page + 1u, x, y) > 0) {
|
if (synctex_edit_query(scanner, page + 1u, x, y) > 0) {
|
||||||
/* Assume that a backward search returns at most one result. */
|
/* Assume that a backward search returns at most one result. */
|
||||||
synctex_node_t node = synctex_next_result(scanner);
|
synctex_node_p node = synctex_scanner_next_result(scanner);
|
||||||
if (node != NULL) {
|
if (node != NULL) {
|
||||||
if (input_file != NULL) {
|
if (input_file != NULL) {
|
||||||
*input_file = g_strdup(synctex_scanner_get_name(scanner, synctex_node_tag(node)));
|
*input_file = g_strdup(synctex_scanner_get_name(scanner, synctex_node_tag(node)));
|
||||||
|
@ -127,13 +135,13 @@ synctex_rectangles_from_position(const char* filename, const char* input_file,
|
||||||
++line;
|
++line;
|
||||||
++column;
|
++column;
|
||||||
|
|
||||||
synctex_scanner_t scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
|
synctex_scanner_p scanner = synctex_scanner_new_with_output_file(filename, NULL, 1);
|
||||||
if (scanner == NULL) {
|
if (scanner == NULL) {
|
||||||
girara_debug("Failed to create synctex scanner.");
|
girara_debug("Failed to create synctex scanner.");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
synctex_scanner_t temp = synctex_scanner_parse(scanner);
|
synctex_scanner_p temp = synctex_scanner_parse(scanner);
|
||||||
if (temp == NULL) {
|
if (temp == NULL) {
|
||||||
girara_debug("Failed to parse synctex file.");
|
girara_debug("Failed to parse synctex file.");
|
||||||
synctex_scanner_free(scanner);
|
synctex_scanner_free(scanner);
|
||||||
|
@ -143,11 +151,11 @@ synctex_rectangles_from_position(const char* filename, const char* input_file,
|
||||||
girara_list_t* hitlist = girara_list_new2(g_free);
|
girara_list_t* hitlist = girara_list_new2(g_free);
|
||||||
girara_list_t* other_rects = girara_list_new2(g_free);
|
girara_list_t* other_rects = girara_list_new2(g_free);
|
||||||
|
|
||||||
if (synctex_display_query(scanner, input_file, line, column) > 0) {
|
if (synctex_display_query(scanner, input_file, line, column, -1) > 0) {
|
||||||
synctex_node_t node = NULL;
|
synctex_node_p node = NULL;
|
||||||
bool got_page = false;
|
bool got_page = false;
|
||||||
|
|
||||||
while ((node = synctex_next_result (scanner)) != NULL) {
|
while ((node = synctex_scanner_next_result(scanner)) != NULL) {
|
||||||
const unsigned int current_page = synctex_node_page(node) - 1;
|
const unsigned int current_page = synctex_node_page(node) - 1;
|
||||||
if (got_page == false) {
|
if (got_page == false) {
|
||||||
got_page = true;
|
got_page = true;
|
||||||
|
@ -314,7 +322,7 @@ synctex_highlight_rects(zathura_t* zathura, unsigned int page,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move to position */
|
/* move to position */
|
||||||
girara_debug("Jumping to page %u position (%f, %f).", page, pos_x, pos_y);
|
girara_debug("Jumping to page %u position (%0.2f, %0.2f).", page, pos_x, pos_y);
|
||||||
zathura_jumplist_add(zathura);
|
zathura_jumplist_add(zathura);
|
||||||
position_set(zathura, pos_x, pos_y);
|
position_set(zathura, pos_x, pos_y);
|
||||||
zathura_jumplist_add(zathura);
|
zathura_jumplist_add(zathura);
|
||||||
|
|
|
@ -63,6 +63,13 @@ file_valid_extension(zathura_t* zathura, const char* path)
|
||||||
return (plugin == NULL) ? false : true;
|
return (plugin == NULL) ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
index_element_free(void* data, GObject* UNUSED(object))
|
||||||
|
{
|
||||||
|
zathura_index_element_t* element = data;
|
||||||
|
zathura_index_element_free(element);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
|
document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
|
||||||
girara_tree_node_t* tree)
|
girara_tree_node_t* tree)
|
||||||
|
@ -70,7 +77,7 @@ document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
|
||||||
girara_list_t* list = girara_node_get_children(tree);
|
girara_list_t* list = girara_node_get_children(tree);
|
||||||
|
|
||||||
GIRARA_LIST_FOREACH_BODY(list, girara_tree_node_t*, node,
|
GIRARA_LIST_FOREACH_BODY(list, girara_tree_node_t*, node,
|
||||||
zathura_index_element_t* index_element = (zathura_index_element_t*)girara_node_get_data(node);
|
zathura_index_element_t* index_element = girara_node_get_data(node);
|
||||||
|
|
||||||
zathura_link_type_t type = zathura_link_get_type(index_element->link);
|
zathura_link_type_t type = zathura_link_get_type(index_element->link);
|
||||||
zathura_link_target_t target = zathura_link_get_target(index_element->link);
|
zathura_link_target_t target = zathura_link_get_target(index_element->link);
|
||||||
|
@ -87,7 +94,7 @@ document_index_build(GtkTreeModel* model, GtkTreeIter* parent,
|
||||||
gchar* markup = g_markup_escape_text(index_element->title, -1);
|
gchar* markup = g_markup_escape_text(index_element->title, -1);
|
||||||
gtk_tree_store_set(GTK_TREE_STORE(model), &tree_iter, 0, markup, 1, description, 2, index_element, -1);
|
gtk_tree_store_set(GTK_TREE_STORE(model), &tree_iter, 0, markup, 1, description, 2, index_element, -1);
|
||||||
g_free(markup);
|
g_free(markup);
|
||||||
g_object_weak_ref(G_OBJECT(model), (GWeakNotify) zathura_index_element_free, index_element);
|
g_object_weak_ref(G_OBJECT(model), index_element_free, index_element);
|
||||||
g_free(description);
|
g_free(description);
|
||||||
|
|
||||||
if (girara_node_get_num_children(node) > 0) {
|
if (girara_node_get_num_children(node) > 0) {
|
||||||
|
|
|
@ -163,7 +163,7 @@ zathura_update_view_ppi(zathura_t* zathura)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* physical width of monitor */
|
/* physical width of monitor */
|
||||||
int width_mm = gdk_monitor_get_width_mm(monitor);
|
const int width_mm = gdk_monitor_get_width_mm(monitor);
|
||||||
|
|
||||||
/* size of monitor in pixels */
|
/* size of monitor in pixels */
|
||||||
GdkRectangle monitor_geom;
|
GdkRectangle monitor_geom;
|
||||||
|
@ -184,7 +184,7 @@ zathura_update_view_ppi(zathura_t* zathura)
|
||||||
{
|
{
|
||||||
/* not using the cached value for the scale factor here to avoid issues
|
/* not using the cached value for the scale factor here to avoid issues
|
||||||
* if this function is called before the cached value is updated */
|
* if this function is called before the cached value is updated */
|
||||||
int device_factor = gtk_widget_get_scale_factor(zathura->ui.session->gtk.view);
|
const int device_factor = gtk_widget_get_scale_factor(zathura->ui.session->gtk.view);
|
||||||
girara_debug("on Wayland, correcting PPI for device scale factor = %d", device_factor);
|
girara_debug("on Wayland, correcting PPI for device scale factor = %d", device_factor);
|
||||||
if (device_factor != 0) {
|
if (device_factor != 0) {
|
||||||
ppi /= device_factor;
|
ppi /= device_factor;
|
||||||
|
@ -192,9 +192,9 @@ zathura_update_view_ppi(zathura_t* zathura)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
double current_ppi = zathura_document_get_viewport_ppi(zathura->document);
|
const double current_ppi = zathura_document_get_viewport_ppi(zathura->document);
|
||||||
if (fabs(ppi - current_ppi) > DBL_EPSILON) {
|
if (fabs(ppi - current_ppi) > DBL_EPSILON) {
|
||||||
girara_debug("monitor width: %d mm, pixels: %d, ppi: %f", width_mm, monitor_geom.width, ppi);
|
girara_debug("monitor width: %d mm, pixels: %d, ppi: %0.2f", width_mm, monitor_geom.width, ppi);
|
||||||
zathura_document_set_viewport_ppi(zathura->document, ppi);
|
zathura_document_set_viewport_ppi(zathura->document, ppi);
|
||||||
render_all(zathura);
|
render_all(zathura);
|
||||||
refresh_view(zathura);
|
refresh_view(zathura);
|
||||||
|
|
Loading…
Reference in a new issue