181 |
181 |
182 return toplevel; |
182 return toplevel; |
183 } |
183 } |
184 |
184 |
185 static void imageviewer_reset(UiImageViewer *imgviewer) { |
185 static void imageviewer_reset(UiImageViewer *imgviewer) { |
186 imgviewer->zoom = 0; |
|
187 imgviewer->isautoscaled = FALSE; |
186 imgviewer->isautoscaled = FALSE; |
188 imgviewer->transx = 0; |
187 imgviewer->transx = 0; |
189 imgviewer->transy; |
188 imgviewer->transy; |
190 imgviewer->begin_transx = 0; |
189 imgviewer->begin_transx = 0; |
191 imgviewer->begin_transy = 0; |
190 imgviewer->begin_transy = 0; |
192 imgviewer->scale = 1; |
191 imgviewer->scale = 1; |
|
192 imgviewer->user_scale = 1; |
193 } |
193 } |
194 |
194 |
195 UIWIDGET ui_imageviewer_reset(UIWIDGET w) { |
195 UIWIDGET ui_imageviewer_reset(UIWIDGET w) { |
196 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer"); |
196 UiImageViewer *imgviewer = g_object_get_data(G_OBJECT(w), "uiimageviewer"); |
197 if(imgviewer) { |
197 if(imgviewer) { |
248 |
248 |
249 imgviewer->scale = scale; |
249 imgviewer->scale = scale; |
250 } else { |
250 } else { |
251 scale = imgviewer->scale; |
251 scale = imgviewer->scale; |
252 } |
252 } |
|
253 |
|
254 imgviewer->user_scale = scale; |
253 } else { |
255 } else { |
254 // user-adjusted scaling |
256 // user-adjusted scaling |
255 scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale); |
257 //scale = 1 + ((double)imgviewer->zoom / (double)imgviewer->zoom_scale); |
|
258 scale = imgviewer->user_scale; |
256 } |
259 } |
257 |
260 |
258 dpixwidth *= scale; |
261 dpixwidth *= scale; |
259 dpixheight *= scale; |
262 dpixheight *= scale; |
260 double x = (dwidth - dpixwidth) / 2; |
263 double x = (dwidth - dpixwidth) / 2; |
333 gdouble dy, |
336 gdouble dy, |
334 gpointer userdata) |
337 gpointer userdata) |
335 { |
338 { |
336 UiImageViewer *imgviewer = userdata; |
339 UiImageViewer *imgviewer = userdata; |
337 if(imgviewer->useradjustable) { |
340 if(imgviewer->useradjustable) { |
338 imgviewer->zoom -= dy; |
341 double step = dy / imgviewer->zoom_scale; |
339 if(imgviewer->zoom < -imgviewer->zoom_scale) { |
342 if(imgviewer->user_scale - step > 0) { |
340 imgviewer->zoom = -imgviewer->zoom_scale; |
343 imgviewer->user_scale -= step; |
341 } |
344 } |
|
345 |
342 imgviewer->scale = 0; // disable autoscale |
346 imgviewer->scale = 0; // disable autoscale |
343 gtk_widget_queue_draw(imgviewer->widget); |
347 gtk_widget_queue_draw(imgviewer->widget); |
344 return TRUE; |
348 return TRUE; |
345 } |
349 } |
346 return FALSE; |
350 return FALSE; |