Skip to content

Commit 7ad5fd8

Browse files
committed
save and restore more view settings
1 parent 2680d14 commit 7ad5fd8

File tree

9 files changed

+47
-20
lines changed

9 files changed

+47
-20
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## master
22

3+
- refactor of tilesource improves OME_TIFF modes
4+
- fix menu state init
5+
- save and restore more view settings
6+
37
## 9.0.9 2025/05/28
48

59
- fix select modifier handling

TODO

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
- try:
2-
3-
nip4 ~/pics/S000_t000002_V000_R0000_X000_Y000_C02_I1_D0_P00101.tif
4-
5-
switch to multipage, go to page 72, enable falsecolour, set scale 6,
6-
close window
7-
8-
thumbnail gets falsecolour and scale, but not multipage or page number
9-
101
- load ws with locked tab, rightclick menu on locked tab does not
112
have tick selected
123

meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
project('nip4', 'c',
22
# ie. a major after nip2 8.9 for workspace save file versioning
3-
version: '9.0.9-2',
3+
version: '9.0.10',
44
license: 'GPL',
55
meson_version: '>=0.64',
66
default_options: [

src/iimage.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,17 @@ iimage_save(Model *model, xmlNode *xnode)
150150
if (!set_iprop(xthis, "image_left", iimage->image_left) ||
151151
!set_iprop(xthis, "image_top", iimage->image_top) ||
152152
!set_iprop(xthis, "image_mag", iimage->image_mag) ||
153-
!set_sprop(xthis, "show_status",
154-
bool_to_char(iimage->show_status)) ||
155-
!set_sprop(xthis, "show_paintbox",
156-
bool_to_char(iimage->show_paintbox)) ||
157-
!set_sprop(xthis, "show_convert",
158-
bool_to_char(iimage->show_convert)) ||
153+
!set_sprop(xthis, "show_status", bool_to_char(iimage->show_status)) ||
154+
!set_sprop(xthis, "show_convert", bool_to_char(iimage->show_convert)) ||
159155
!set_dprop(xthis, "scale", iimage->scale) ||
160156
!set_dprop(xthis, "offset", iimage->offset) ||
161-
!set_sprop(xthis, "falsecolour",
162-
bool_to_char(iimage->falsecolour)))
157+
!set_iprop(xthis, "page", iimage->page) ||
158+
!set_sprop(xthis, "falsecolour", bool_to_char(iimage->falsecolour)))
159+
return NULL;
160+
161+
if (iimage->mode != TILESOURCE_MODE_UNSET &&
162+
!set_sprop(xthis, "mode",
163+
vips_enum_nick(TILESOURCE_MODE_TYPE, iimage->mode)))
163164
return NULL;
164165

165166
return xthis;
@@ -181,8 +182,13 @@ iimage_load(Model *model,
181182
(void) get_bprop(xnode, "show_convert", &iimage->show_convert);
182183
(void) get_dprop(xnode, "scale", &iimage->scale);
183184
(void) get_dprop(xnode, "offset", &iimage->offset);
185+
(void) get_iprop(xnode, "page", &iimage->page);
184186
(void) get_bprop(xnode, "falsecolour", &iimage->falsecolour);
185187

188+
char mode[64];
189+
if (get_sprop(xnode, "mode", mode, sizeof(mode)))
190+
iimage->mode = vips_enum_from_nick("nip4", TILESOURCE_MODE_TYPE, mode);
191+
186192
return MODEL_CLASS(iimage_parent_class)->load(model, state, parent, xnode);
187193
}
188194

@@ -403,11 +409,13 @@ iimage_init(iImage *iimage)
403409
iimage->show_paintbox = FALSE;
404410
iimage->show_convert = FALSE;
405411

412+
iimage->mode = TILESOURCE_MODE_UNSET;
406413
iimage->scale = 0.0;
407414
iimage->offset = 0.0;
408415
iimage->falsecolour = FALSE;
409416
iimage->log = FALSE;
410417
iimage->icc = FALSE;
418+
iimage->page = 0;
411419

412420
vips_buf_init_dynamic(&iimage->caption_buffer, MAX_LINELENGTH);
413421

@@ -420,6 +428,8 @@ iimage_update_from_tilesource(iImage *iimage, Tilesource *tilesource)
420428
iimage->scale = tilesource->scale;
421429
iimage->offset = tilesource->offset;
422430
iimage->falsecolour = tilesource->falsecolour;
431+
iimage->page = tilesource->page;
432+
iimage->mode = tilesource->mode;
423433

424434
iobject_changed(IOBJECT(iimage));
425435
}

src/iimage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ struct _iImage {
6868

6969
/* Bar settings we remember.
7070
*/
71+
TilesourceMode mode;
7172
double scale;
7273
double offset;
7374
gboolean falsecolour;
7475
gboolean log;
7576
gboolean icc;
77+
int page;
7678

7779
/* Private ... build iobject caption here.
7880
*/

src/iimageview.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,17 @@ iimageview_refresh(vObject *vobject)
179179
"tilesource", &tilesource,
180180
NULL);
181181
if (tilesource) {
182+
// we can have an unset mode
183+
if (iimage->mode != TILESOURCE_MODE_UNSET)
184+
g_object_set(tilesource,
185+
"mode", iimage->mode,
186+
NULL);
187+
182188
g_object_set(tilesource,
183189
"scale", iimage->scale,
184190
"offset", iimage->offset,
185191
"falsecolour", iimage->falsecolour,
192+
"page", iimage->page,
186193
"log", iimage->log,
187194
"icc", iimage->icc,
188195
NULL);

src/imagewindow.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ typedef struct _Active {
5757
typedef struct _ViewSettings {
5858
gboolean valid;
5959

60-
// we don't save "mode", that's an image property, not a view property
60+
TilesourceMode mode;
6161
double scale;
6262
double offset;
6363
int page;
@@ -471,6 +471,7 @@ imagewindow_save_view_settings(Imagewindow *win, ViewSettings *view_settings)
471471
}
472472

473473
g_object_get(tilesource,
474+
"mode", &view_settings->mode,
474475
"scale", &view_settings->scale,
475476
"offset", &view_settings->offset,
476477
"page", &view_settings->page,
@@ -502,6 +503,7 @@ imagewindow_restore_view_settings(Imagewindow *win,
502503

503504
if (tilesource)
504505
g_object_set(tilesource,
506+
"mode", view_settings->mode,
505507
"scale", view_settings->scale,
506508
"offset", view_settings->offset,
507509
"page", view_settings->page,

src/tilesource.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
/*
3131
#define DEBUG_VERBOSE
3232
#define DEBUG_MAKE
33-
*/
3433
#define DEBUG
34+
*/
3535

3636
#include "nip4.h"
3737

@@ -1540,9 +1540,15 @@ tilesource_new_from_iimage(iImage *iimage, int priority)
15401540
"falsecolour", iimage->falsecolour,
15411541
"log", iimage->log,
15421542
"icc", iimage->icc,
1543+
"page", iimage->page,
15431544
"priority", priority,
15441545
NULL);
15451546

1547+
if (iimage->mode != TILESOURCE_MODE_UNSET)
1548+
g_object_set(tilesource,
1549+
"mode", iimage->mode,
1550+
NULL);
1551+
15461552
return tilesource;
15471553
}
15481554

src/tilesource.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ typedef enum _TilesourceType {
7575
} TilesourceType;
7676

7777
/* The modes of image display we support.
78+
*
79+
* UNSET
80+
*
81+
* No saved value (should be set by sniffing the image).
7882
*
7983
* TOILET_ROLL
8084
*
@@ -109,6 +113,7 @@ typedef enum _TilesourceType {
109113
* in each page.
110114
*/
111115
typedef enum _TilesourceMode {
116+
TILESOURCE_MODE_UNSET,
112117
TILESOURCE_MODE_TOILET_ROLL,
113118
TILESOURCE_MODE_MULTIPAGE,
114119
TILESOURCE_MODE_ANIMATED,

0 commit comments

Comments
 (0)