#lang racket (require racket/gui mrlib/snip-canvas plot) (define ((make-current-value-renderer fn) snip event x y) (define overlays (and x y (eq? (send event get-event-type) 'motion) (list (vrule x #:style 'long-dash) (point-label (vector x (fn x)) #:anchor 'auto)))) (send snip set-overlay-renderers overlays)) (define (make-plot-snip width height) (define snip (plot-snip (function sin) #:x-min 0 #:x-max (* 2 pi) #:y-min -1.5 #:y-max 1.5 #:width width #:height height)) (send snip set-mouse-event-callback (make-current-value-renderer sin)) snip) (define toplevel (new frame% [label "Plot"] [width 500] [height 200])) (define canvas (new snip-canvas% [parent toplevel] [make-snip make-plot-snip])) (send toplevel show #t)