From 764f2d30a4eafcb3e828cc971e08f09eebc5698c Mon Sep 17 00:00:00 2001 From: Harry Jeffery Date: Fri, 24 Nov 2017 17:19:22 +0000 Subject: Make the navigator interface opaque --- src/imv.c | 14 +++++++++----- src/navigator.c | 28 ++++++++++++++++++++++++---- src/navigator.h | 21 +++++---------------- 3 files changed, 38 insertions(+), 25 deletions(-) (limited to 'src') 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 #include #include +#include + +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 - /* 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 /* 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); -- cgit v1.2.3