Code: Select all
void DrawingCanvas::OnMousewheel(wxMouseEvent& event) {
int ticks = event.GetWheelRotation() / event.GetWheelDelta();
zoomScale += (double)ticks / 20;
if(zoomScale < 0.01) {
zoomScale = 0.01;
}
zoomPoint = event.GetPosition();
Refresh();
}
void DrawingCanvas::OnMouseMove(wxMouseEvent& event) {
if(event.Dragging()) {
zoomPoint = event.GetPosition();
Refresh();
}
}
Code: Select all
void DrawingCanvasBitmap::draw(wxDC& dc) {
if(bitmap != NULL) {
int width;
int height;
GetSize(&width, &height);
// Scale for width and height are the same
double scale = (double)width / bitmap->GetWidth();
// https://forums.wxwidgets.org/viewtopic.php?t=21080
scale *= zoomScale;
dc.SetUserScale(scale, scale);
if(zoomPoint != wxDefaultPosition) {
wxPoint adjustedZoomPoint;
// TODO fix this crap
adjustedZoomPoint.x = dc.DeviceToLogicalX(zoomPoint.x);
adjustedZoomPoint.y = dc.DeviceToLogicalY(zoomPoint.y);
wxPoint middlePoint = zoomPoint - adjustedZoomPoint;
dc.SetDeviceOrigin(middlePoint.x, middlePoint.y);
}
dc.DrawBitmap(*bitmap, 0, 0, false);
}
}