+ // x and y are coordinates in the window
+ // Convert to local coords.
+ x *= m_bounds.w;
+ y *= m_bounds.h;
+ x += m_bounds.x;
+ y += m_bounds.y;
+
+ //Debug("Mouse wheel event %f %f %f\n", Float(x), Float(y), Float(scaleAmt));
+
+ Real top = y - m_bounds.y;
+ Real left = x - m_bounds.x;
+
+ top *= scaleAmt;
+ left *= scaleAmt;
+
+ m_bounds.x = x - left;
+ m_bounds.y = y - top;
+ m_bounds.w *= scaleAmt;
+ m_bounds.h *= scaleAmt;
+ Debug("View Bounds => %s", m_bounds.Str().c_str());
+ if (!m_use_gpu_transform)
+ m_bounds_dirty = true;
+}
+
+Rect View::TransformToViewCoords(const Rect& inp) const
+{
+ Rect out;
+ out.x = (inp.x - m_bounds.x) / m_bounds.w;
+ out.y = (inp.y - m_bounds.y) / m_bounds.h;
+
+ out.w = inp.w / m_bounds.w;
+ out.h = inp.h / m_bounds.h;
+ return out;
+}
+
+void View::DrawGrid()
+{
+ // Draw some grid lines at fixed pixel positions
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(0.0, 1.0, 1.0, 0.0, -1.f, 1.f);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+ glColor4f(0.9,0.9,0.9,0.1);
+ const float num_lines = 50.0;
+ for (float i = 0; i < num_lines; ++i)