aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHarry Jeffery <harry@exec64.co.uk>2017-11-24 17:19:22 +0000
committerHarry Jeffery <harry@exec64.co.uk>2017-11-24 17:19:22 +0000
commit764f2d30a4eafcb3e828cc971e08f09eebc5698c (patch)
tree5cb6c6937d0f7930d0d47bc22da234931f4ee0ee /src
parentf55ec6749e71c3e70fa5c51474b0437ab27bb0d5 (diff)
downloadimv-764f2d30a4eafcb3e828cc971e08f09eebc5698c.tar.gz
Make the navigator interface opaque
Diffstat (limited to 'src')
-rw-r--r--src/imv.c14
-rw-r--r--src/navigator.c28
-rw-r--r--src/navigator.h21
3 files changed, 38 insertions, 25 deletions
diff --git a/src/imv.c b/src/imv.c
index a89f97f..1b772e6 100644
--- a/src/imv.c
+++ b/src/imv.c
@@ -513,8 +513,10 @@ int imv_run(struct imv *imv)
}
char title[1024];
- snprintf(title, sizeof(title), "imv - [%i/%i] [LOADING] %s [%s]",
- imv->navigator->cur_path + 1, imv->navigator->num_paths, current_path,
+ const size_t index_cur = imv_navigator_index(imv->navigator);
+ const size_t index_len = imv_navigator_length(imv->navigator);
+ snprintf(title, sizeof(title), "imv - [%zu/%zu] [LOADING] %s [%s]",
+ index_cur + 1, index_len, current_path,
scaling_label[imv->scaling_mode]);
imv_viewport_set_title(imv->view, title);
@@ -599,7 +601,7 @@ int imv_run(struct imv *imv)
}
if(imv->list_at_exit) {
- for(int i = 0; i < imv_navigator_length(imv->navigator); ++i)
+ for(size_t i = 0; i < imv_navigator_length(imv->navigator); ++i)
puts(imv_navigator_at(imv->navigator, i));
}
@@ -800,8 +802,10 @@ static void render_window(struct imv *imv)
/* update window title */
const char *current_path = imv_navigator_selection(imv->navigator);
- int len = snprintf(title, sizeof(title), "imv - [%i/%i] [%ix%i] [%.2f%%] %s [%s]",
- imv->navigator->cur_path + 1, imv->navigator->num_paths, imv->texture->width, imv->texture->height,
+ const size_t index_cur = imv_navigator_index(imv->navigator);
+ const size_t index_len = imv_navigator_length(imv->navigator);
+ int len = snprintf(title, sizeof(title), "imv - [%zu/%zu] [%ix%i] [%.2f%%] %s [%s]",
+ index_cur + 1, index_len, imv->texture->width, imv->texture->height,
100.0 * imv->view->scale,
current_path, scaling_label[imv->scaling_mode]);
if(imv->slideshow_image_duration >= 1000) {
diff --git a/src/navigator.c b/src/navigator.c
index 9defcbc..23c57ba 100644
--- a/src/navigator.c
+++ b/src/navigator.c
@@ -23,6 +23,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <time.h>
+
+struct imv_navigator {
+ int num_paths;
+ int cur_path;
+ char **paths;
+ time_t *mtimes;
+ time_t *ctimes;
+ int last_move_direction;
+ int changed;
+ int wrapped;
+ int poll_countdown;
+};
struct imv_navigator *imv_navigator_create(void)
{
@@ -57,11 +70,13 @@ void imv_navigator_free(struct imv_navigator *nav)
static int add_item(struct imv_navigator *nav, const char *path,
time_t mtime)
{
- if(nav->num_paths % BUFFER_SIZE == 0) {
+ const size_t buf_size = 512;
+
+ if(nav->num_paths % buf_size == 0) {
char **new_paths;
time_t *new_mtimes;
time_t *new_ctimes;
- size_t new_size = nav->num_paths + BUFFER_SIZE;
+ size_t new_size = nav->num_paths + buf_size;
new_paths = realloc(nav->paths, sizeof(char*) * new_size);
new_mtimes = realloc(nav->mtimes, sizeof(time_t) * new_size);
new_ctimes = realloc(nav->ctimes, sizeof(time_t) * new_size);
@@ -128,6 +143,11 @@ const char *imv_navigator_selection(struct imv_navigator *nav)
return nav->paths[nav->cur_path];
}
+size_t imv_navigator_index(struct imv_navigator *nav)
+{
+ return (size_t)nav->cur_path;
+}
+
void imv_navigator_select_rel(struct imv_navigator *nav, int direction)
{
const int prev_path = nav->cur_path;
@@ -282,9 +302,9 @@ int imv_navigator_wrapped(struct imv_navigator *nav)
return nav->wrapped;
}
-int imv_navigator_length(struct imv_navigator *nav)
+size_t imv_navigator_length(struct imv_navigator *nav)
{
- return nav->num_paths;
+ return (size_t)nav->num_paths;
}
char *imv_navigator_at(struct imv_navigator *nav, int index)
diff --git a/src/navigator.h b/src/navigator.h
index 5d4f065..4ca3833 100644
--- a/src/navigator.h
+++ b/src/navigator.h
@@ -1,8 +1,6 @@
#ifndef IMV_NAVIGATOR_H
#define IMV_NAVIGATOR_H
-#include <time.h>
-
/* Copyright (c) imv authors
This program is free software; you can redistribute it and/or
@@ -20,19 +18,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#define BUFFER_SIZE 512
-
-struct imv_navigator {
- int num_paths;
- int cur_path;
- char **paths;
- time_t *mtimes;
- time_t *ctimes;
- int last_move_direction;
- int changed;
- int wrapped;
- int poll_countdown;
-};
+#include <unistd.h>
/* Creates an instance of imv_navigator */
struct imv_navigator *imv_navigator_create(void);
@@ -52,6 +38,9 @@ int imv_navigator_add(struct imv_navigator *nav, const char *path,
* guaranteed to be valid until the next call to an imv_navigator method. */
const char *imv_navigator_selection(struct imv_navigator *nav);
+/* Returns the index of the currently selected path */
+size_t imv_navigator_index(struct imv_navigator *nav);
+
/* Change the currently selected path. dir = -1 for previous, 1 for next. */
void imv_navigator_select_rel(struct imv_navigator *nav, int dir);
@@ -76,7 +65,7 @@ int imv_navigator_poll_changed(struct imv_navigator *nav);
int imv_navigator_wrapped(struct imv_navigator *nav);
/* Return how many paths in navigator */
-int imv_navigator_length(struct imv_navigator *nav);
+size_t imv_navigator_length(struct imv_navigator *nav);
/* Return a path for a given index */
char *imv_navigator_at(struct imv_navigator *nav, int index);