diff --git a/skia/viewer/src/main.cpp b/skia/viewer/src/main.cpp
index 5f3b22d..2298242 100644
--- a/skia/viewer/src/main.cpp
+++ b/skia/viewer/src/main.cpp
@@ -112,6 +112,29 @@
     }
 }
 
+rive::Mat2D gInverseViewTransform;
+rive::Vec2D lastWorldMouse;
+static void glfwCursorPosCallback(GLFWwindow* window, double x, double y) {
+    float xscale, yscale;
+    glfwGetWindowContentScale(window, &xscale, &yscale);
+    lastWorldMouse = gInverseViewTransform * rive::Vec2D(x * xscale, y * yscale);
+    if (stateMachineInstance != nullptr) {
+        stateMachineInstance->pointerMove(lastWorldMouse);
+    }
+}
+void glfwMouseButtonCallback(GLFWwindow* window, int button, int action, int mods) {
+    if (stateMachineInstance != nullptr) {
+        switch (action) {
+            case GLFW_PRESS:
+                stateMachineInstance->pointerDown(lastWorldMouse);
+                break;
+            case GLFW_RELEASE:
+                stateMachineInstance->pointerUp(lastWorldMouse);
+                break;
+        }
+    }
+}
+
 void glfwErrorCallback(int error, const char* description) { puts(description); }
 
 void glfwDropCallback(GLFWwindow* window, int count, const char** paths) {
@@ -142,13 +165,11 @@
     static bool gPrevMouseButtonDown = false;
     const bool isDown = ImGui::IsMouseDown(ImGuiMouseButton_Left);
 
-    if (mouse.x == gPrevMousePos.x &&
-        mouse.y == gPrevMousePos.y &&
-        isDown == gPrevMouseButtonDown)
+    if (mouse.x == gPrevMousePos.x && mouse.y == gPrevMousePos.y && isDown == gPrevMouseButtonDown)
     {
         return;
     }
-    
+
     auto evtType = rive::PointerEventType::move;
     if (isDown && !gPrevMouseButtonDown) {
         evtType = rive::PointerEventType::down; // we just went down
@@ -161,10 +182,10 @@
 
     SkMatrix inv;
     (void)ctm.invert(&inv);
-    
+
     // scale by 2 for the DPI of a high-res monitor
     const auto pt = inv.mapXY(mouse.x * 2, mouse.y * 2);
-    
+
     const int pointerIndex = 0; // til we track more than one button/mouse
     rive::PointerEvent evt = {
         evtType,
@@ -203,6 +224,8 @@
     }
 
     glfwSetDropCallback(window, glfwDropCallback);
+    glfwSetCursorPosCallback(window, glfwCursorPosCallback);
+    glfwSetMouseButtonCallback(window, glfwMouseButtonCallback);
     glfwMakeContextCurrent(window);
     if (gl3wInit() != 0) {
         fprintf(stderr, "Failed to make initialize gl3w.\n");
@@ -295,12 +318,17 @@
 
             rive::SkiaRenderer renderer(canvas);
             renderer.save();
-            renderer.align(rive::Fit::contain,
-                           rive::Alignment::center,
-                           rive::AABB(0, 0, width, height),
-                           artboardInstance->bounds());
 
-            post_mouse_event(artboardInstance.get(), canvas->getTotalMatrix());
+            rive::Mat2D viewTransform;
+            renderer.computeAlignment(viewTransform,
+                                      rive::Fit::contain,
+                                      rive::Alignment::center,
+                                      rive::AABB(0, 0, width, height),
+                                      artboard->bounds());
+            renderer.transform(viewTransform);
+            // Store the inverse view so we can later go from screen to world.
+            rive::Mat2D::invert(gInverseViewTransform, viewTransform);
+            // post_mouse_event(artboard.get(), canvas->getTotalMatrix());
 
             artboardInstance->draw(&renderer);
             renderer.restore();
@@ -390,8 +418,8 @@
                 ImGui::Columns(1);
             }
             ImGui::End();
-            
             test_messages(artboardInstance.get());
+
         } else {
             ImGui::Text("Drop a .riv file to preview.");
         }
