// Variable to toggle if user is currently selecting an area.
private bool m_bZoomToRectSelect = false;
// Set of points defining the selected area.
private ImGearPoint[] igPointsZoomToRect;
// Color of selection box.
private Color m_SelectorColor = Color.White;
// Method to return appropriate height for a specific width
// based upon the size of a scrollable view.
private int GetHeight(IImGearScrollableView igScrollableView, int Width)
{
return Width * igScrollableView.ClientRectangle.Height / igScrollableView.ClientRectangle.Width;
}
private void menuZoomToRect_Click(object sender, EventArgs e)
{
// Menu item used to toggle if Zoom to Rectangle is on or not.
menuZoomToRect.Checked = !menuZoomToRect.Checked;
}
private void imGearPageView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (menuZoomToRect.Checked)
{
// Enter Zoom to Rectangle selection mode.
m_bZoomToRectSelect = true;
// Create a new pair of points to define the rectangle,
// setting the first point to the current position.
igPointsZoomToRect = new ImGearPoint[2];
igPointsZoomToRect[0].X = e.X;
igPointsZoomToRect[0].Y = e.Y;
// Register method to draw the selection rectangle.
imGearPageView.RegisterAfterDraw(
new ImGearPageView.AfterDraw(DrawSelector));
}
}
private void imGearPageView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (m_bZoomToRectSelect)
{
// Leave Zoom to Rectangle selection mode.
imGearPageView.RegisterAfterDraw(null);
m_bZoomToRectSelect = false;
// Record the second point of the zoom rectangle,
// normalizing it to the view's aspect ratio.
igPointsZoomToRect[1].X = e.X;
igPointsZoomToRect[1].Y = igPointsZoomToRect[0].Y +
GetHeight(imGearPageView, Math.Abs(igPointsZoomToRect[1].X - igPointsZoomToRect[0].X) + 1) - 1;
// Create a rectangle based upon the 2 points.
ImGearRectangle igRectangle = new ImGearRectangle(igPointsZoomToRect[0], igPointsZoomToRect[1]);
// Cancel the zoom if it would be for a 0x0 or 1x1 rectangle.
if (igRectangle.Width <= 1 || igRectangle.Height <= 1)
return;
// Zoom to the selected rectangle
imGearPageView.Display.ZoomToRectangle(imGearPageView, igRectangle);
imGearPageView.Invalidate();
// Disable Zoom to Rectangle.
menuZoomToRect.Checked = false;
}
}
private void imGearPageView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (m_bZoomToRectSelect)
{
// Record the second point of the zoom rectangle,
// normalizing it to the view's aspect ratio.
igPointsZoomToRect[1].X = e.X;
igPointsZoomToRect[1].Y = igPointsZoomToRect[0].Y +
GetHeight(imGearPageView, Math.Abs(igPointsZoomToRect[1].X - igPointsZoomToRect[0].X) + 1) - 1;
// Cause a redraw which will update the zoom selection rectangle.
imGearPageView.Invalidate();
}
}
private void DrawSelector(System.Drawing.Graphics gr)
{
if (m_bZoomToRectSelect)
{
// Create a new pen to draw dotted lines.
Pen pen = new Pen(m_SelectorColor);
pen.DashStyle = DashStyle.Dot;
// Define the currently selected zoom rectangle.
ImGearRectangle igRectangleZoom = new ImGearRectangle(igPointsZoomToRect[0], igPointsZoomToRect[1]);
// Draw the selection box.
gr.DrawRectangle(pen, igRectangleZoom.Left, igRectangleZoom.Top,
igRectangleZoom.Width, igRectangleZoom.Height);
}
}
'Variable to toggle if user is currently selecting an area.
Private m_bZoomToRectSelect As Boolean = False
'Set of points defining the selected area.
Private igPointsZoomToRect() As ImGearPoint
'Color of selection box.
Private m_SelectorColor As Color = Color.White
'Function to return appropriate height for a specific width
' based upon the size of a scrollable view.
Private Function GetHeight(ByVal igScrollableView As IImGearScrollableView, ByVal Width As Integer) As Integer
GetHeight = Width * igScrollableView.ClientRectangle.Height / igScrollableView.ClientRectangle.Width
End Function
Private Sub menuZoomtoRect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles menuZoomtoRect.Click
menuZoomtoRect.Checked = Not menuZoomtoRect.Checked
End Sub
Private Sub ImGearPageView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles ImGearPageView1.MouseDown
If (menuZoomtoRect.Checked) Then
'Enter Zoom to Rectangle selection mode.
m_bZoomToRectSelect = True
'Create a new pair of points to define the rectangle,
' setting the first point to the current position.
ReDim igPointsZoomToRect(2)
igPointsZoomToRect(0).X = e.X
igPointsZoomToRect(0).Y = e.Y
'Register function to draw the selection rectangle.
ImGearPageView1.RegisterAfterDraw( _
New ImGearPageView.AfterDraw(AddressOf DrawSelector))
End If
End Sub
Private Sub ImGearPageView1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles ImGearPageView1.MouseUp
If (m_bZoomToRectSelect) Then
'Leave Zoom to Rectangle selection mode.
ImGearPageView1.RegisterAfterDraw(Nothing)
m_bZoomToRectSelect = False
'Record the second point of the zoom rectangle,
' normalizing it to the view's aspect ratio.
igPointsZoomToRect(1).X = e.X
igPointsZoomToRect(1).Y = igPointsZoomToRect(0).Y + _
GetHeight(ImGearPageView1, Math.Abs(igPointsZoomToRect(1).X - igPointsZoomToRect(0).X) + 1) - 1
'Create a rectangle based upon the 2 points.
Dim igRectangle As ImGearRectangle = New ImGearRectangle(igPointsZoomToRect(0), igPointsZoomToRect(1))
'Cancel the zoom if it would be for a 0x0 or 1x1 rectangle.
If (igRectangle.Width <= 1 Or igRectangle.Height <= 1) Then
Return
End If
'Zoom to the selected rectangle
ImGearPageView1.Display.ZoomToRectangle(ImGearPageView1, igRectangle)
ImGearPageView1.Invalidate()
'Disable Zoom to Rectangle.
menuZoomtoRect.Checked = False
End If
End Sub
Private Sub ImGearPageView1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles ImGearPageView1.MouseMove
If (m_bZoomToRectSelect) Then
'Record the second point of the zoom rectangle,
' normalizing it to the view's aspect ratio.
igPointsZoomToRect(1).X = e.X
igPointsZoomToRect(1).Y = igPointsZoomToRect(0).Y + _
GetHeight(ImGearPageView1, Math.Abs(igPointsZoomToRect(1).X - igPointsZoomToRect(0).X) + 1) - 1
'Cause a redraw which will update the zoom selection rectangle.
ImGearPageView1.Invalidate()
End If
End Sub
Private Sub DrawSelector(ByVal gr As System.Drawing.Graphics)
If (m_bZoomToRectSelect) Then
'Create a new pen to draw dotted lines.
Dim pen As Pen = New Pen(m_SelectorColor)
Pen.DashStyle = DashStyle.Dot
'Define the currently selected zoom rectangle.
Dim igRectangleZoom As ImGearRectangle = New ImGearRectangle(igPointsZoomToRect(0), igPointsZoomToRect(1))
'Draw the selection box.
gr.DrawRectangle(pen, igRectangleZoom.Left, igRectangleZoom.Top, igRectangleZoom.Width, igRectangleZoom.Height)
End If
End Sub