缩放鼠标位置而不会弄乱滚动条?

时间:2010-09-07 21:03:19

标签: image gtk zooming

我正在用GTK \ C创建一个图像编辑程序,我无法弄清楚如何进行缩放工作;我需要将基于Cairo的画布缩放到鼠标光标的位置,但是Cairo只会缩放到它显示的图像的中心。解决这个问题的常用方法是转换,缩放,然后转换回来;但这会弄乱我画布周围的滚动条。

我的想法是向后滑动滚动条以补偿由缩放引起的移动。按mouse_position * (new_zoom - old_zoom)移动滚动条应该可以工作,但事实并非如此;它在低变焦水平下校正不足,然后在高水平过度校正。

如何正确缩放?

我的代码在此处可见,如果有帮助:ScreenSnap on Github

1 个答案:

答案 0 :(得分:0)

您似乎需要将代码缩放到当前缩放级别。所以这一行:

  

shift_x = self-> zoom_point_x *(self-> zoom_level / .9 - self-> zoom_level);

应该是:
shift_x = self-> zoom_point_x *(self-> zoom_level / .9 - self-> zoom_level) /(self-> zoom_level);

请注意,您的近似值在缩放级别为1时工作,但当您移开时,您可能会在下方或过度校正。