+ View view(doc,scr, bounds, c);
+ scr.DebugFontInit("DejaVuSansMono.ttf");
+ scr.SetMouseHandler([&](int x, int y, int buttons, int wheel) // [?] wtf
+ {
+ static bool oldButtonDown = false;
+ static int oldx, oldy;
+ if (buttons == 3 && !oldButtonDown)
+ {
+ oldButtonDown = true;
+ view.ToggleGPUTransform();
+ oldx = x;
+ oldy = y;
+ return;
+ }
+ if (buttons == 2 && !oldButtonDown)
+ {
+ oldButtonDown = true;
+ view.ToggleGPURendering();
+ oldx = x;
+ oldy = y;
+ }
+ if (buttons && !oldButtonDown)
+ {
+ // We're beginning a drag.
+ oldButtonDown = true;
+ oldx = x;
+ oldy = y;
+ scr.SetMouseCursor(Screen::CursorMove);
+ }
+ if (buttons)
+ {
+ view.Translate(Real(oldx-x)/Real(scr.ViewportWidth()), Real(oldy-y)/Real(scr.ViewportHeight()));
+ }
+ else
+ {
+ oldButtonDown = false;
+ scr.SetMouseCursor(Screen::CursorArrow);
+ }
+ oldx = x;
+ oldy = y;
+
+ if (wheel)
+ {
+ view.ScaleAroundPoint(Real(x)/Real(scr.ViewportWidth()),Real(y)/Real(scr.ViewportHeight()), expf(-wheel/20.f));
+ }
+ }
+ );
+