Я создаю программу для редактирования изображений в GTK \ C и не могу понять, как заставить работать масштабирование; Мне нужно увеличить масштаб моего Каирского холста до положения курсора мыши, но Каир только увеличивает масштаб изображения, которое он отображает. Обычный способ обойти это - преобразовать, увеличить, а затем преобразовать обратно; но это портит полосы прокрутки вокруг моего холста.
Моя идея состояла в том, чтобы сдвинуть полосы прокрутки назад, чтобы компенсировать движение, вызванное масштабированием. Перемещение полос прокрутки на mouse_position * (new_zoom - old_zoom)
должно работать, но это не так; он недостаточно корректирует при низких уровнях масштабирования, а затем чрезмерно корректирует при высоких уровнях.
Как правильно увеличить изображение?
Мой код виден здесь, если он помогает: ScreenSnap на Github