Hi!
What about something like this?
autoAction = False;
pt1 = {0, 0};
pt2 = {0, 0};
zoom = {{0, 4}, {-2, 2}};
graphics = {Thick, Green, Rectangle[{0, -1}, {2, 1}], Red, Disk[],
Blue, Circle[{2, 0}], Yellow, Polygon[{{2, 0}, {4, 1}, {4, -1}}],
Purple, Arrowheads[Large], Arrow[{{4, 3/2}, {0, 3/2}, {0, 0}}],
Black, Dashed, Line[{{-1, 0}, {4, 0}}]};
EventHandler[
Dynamic[
LocatorPane[Dynamic[pt2],
Graphics[{graphics, Directive[{LightOrange, Opacity[0.5]}],
Rectangle[pt1, pt2]}, PlotRange -> zoom],
AutoAction -> autoAction, Appearance -> None]], {
{"MouseDown", 1} :> (autoAction = True;
pt1 = MousePosition["Graphics"];),
{"MouseUp", 1} :> (autoAction = False;
zoom = Transpose[{pt1, pt2}]; pt1 = {0, 0}; pt2 = {0, 0};),
{"MouseClicked", 2} :> (zoom = {{0, 4}, {-2, 2}})}]
Click and drag to zoom in, right click to reset. Could be a start at least!
Regards, Patrik