Масштабирование в позиции мыши, не портя полосы прокрутки? - PullRequest
0 голосов
/ 08 сентября 2010

Я создаю программу для редактирования изображений в GTK \ C и не могу понять, как заставить работать масштабирование; Мне нужно увеличить масштаб моего Каирского холста до положения курсора мыши, но Каир только увеличивает масштаб изображения, которое он отображает. Обычный способ обойти это - преобразовать, увеличить, а затем преобразовать обратно; но это портит полосы прокрутки вокруг моего холста.

Моя идея состояла в том, чтобы сдвинуть полосы прокрутки назад, чтобы компенсировать движение, вызванное масштабированием. Перемещение полос прокрутки на mouse_position * (new_zoom - old_zoom) должно работать, но это не так; он недостаточно корректирует при низких уровнях масштабирования, а затем чрезмерно корректирует при высоких уровнях.

Как правильно увеличить изображение?

Мой код виден здесь, если он помогает: ScreenSnap на Github

1 Ответ

0 голосов
/ 17 сентября 2010

Похоже, вам нужно масштабировать ваш сдвиг до текущего уровня масштабирования в коде.Итак, эта строка:

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) ;

Обратите внимание, что ваше приближение работает на уровне масштабированияодного, но когда вы уходите, вы либо слишком, либо слишком корректны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...