void zoom_update(Ihandle* ih, double zoom_index) { Ihandle* zoom_lbl = IupGetDialogChild(ih, "ZOOMLABEL"); Ihandle* canvas = IupGetDialogChild(ih, "CANVAS"); imImage* image = (imImage*)IupGetAttribute(canvas, "IMAGE"); double zoom_factor = pow(2, zoom_index); IupSetStrf(zoom_lbl, "TITLE", "%.0f%%", floor(zoom_factor * 100)); if (image) { float old_center_x, old_center_y; int view_width = (int)(zoom_factor * image->width); int view_height = (int)(zoom_factor * image->height); scroll_calc_center(canvas, &old_center_x, &old_center_y); scrollbar_update(canvas, view_width, view_height); scroll_center(canvas, old_center_x, old_center_y); } IupUpdate(canvas); }
int canvas_resize_cb(Ihandle* canvas) { imImage* image = (imImage*)IupGetAttribute(canvas, "IMAGE"); if (image) { Ihandle* zoom_val = IupGetDialogChild(canvas, "ZOOMVAL"); double zoom_index = IupGetDouble(zoom_val, "VALUE"); double zoom_factor = pow(2, zoom_index); float old_center_x, old_center_y; int view_width = (int)(zoom_factor * image->width); int view_height = (int)(zoom_factor * image->height); scroll_calc_center(canvas, &old_center_x, &old_center_y); scrollbar_update(canvas, view_width, view_height); scroll_center(canvas, old_center_x, old_center_y); } return IUP_DEFAULT; }
static void scroll_view_center(int argc, const char ** argv) { scroll_center(PLYR.x, PLYR.y); zone_draw(PLYR.z); }