2010-09-07 3 views
0

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

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

Как правильно масштабировать?

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

ответ

0

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

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

Должно быть:
shift_x = само-> zoom_point_x * (само-> zoom_level/0,9 - само-> zoom_level) /(само-> zoom_level);

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

+0

Да? Если я заменю эту строку, тогда self-> zoom_point_x не будет иметь никаких данных, и мне нужно это для строки shift_x =. Вы хотите заменить линию под ней? – snostorm

+0

Извините, я скопировал и вставил неправильную линию !! Посмотрите сейчас. – dave

+0

Хм ... это, похоже, не работает. В настоящее время он постоянно недооценивается на большую сумму. – snostorm