[racket] Creating a useful snip

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Tue Apr 5 14:34:56 EDT 2011

I'm trying to create a useful snip that displays a different sub-snip
every second. I think I've overridden every method required to get a
"useful" snip, but nothing gets display in DrRacket and the functions
aren't called ever. Are there other methods that need to be
overridden?

The code is below...

Jay

#lang racket/base
(require (for-syntax racket/base)
         racket/class
         racket/function
         racket/runtime-path
         racket/snip)

(define reactive-snip%
  (class* snip% ()
    (init-field sub-snips)

    (printf "Snips: ~a\n" sub-snips)

    (define (the-snip)
      (list-ref sub-snips
                (modulo (current-seconds) (length sub-snips))))

    (define-syntax-rule (delegate id)
      (define/override (id . a)
        (define some-snip (the-snip))
        (printf "Delegating (~a ~a) to ~a\n"
                'id a
                some-snip)
        (send/apply some-snip id a)))

    (delegate get-extent)
    (delegate draw)
    (delegate get-text)
    ; set-unmodified or modified

    (super-new)))

(define-runtime-path img1 '(lib "PLT-206-larval.png" "icons"))
(define-runtime-path img2 '(lib "PLT-206-mars.jpg" "icons"))

(define sub-snips
      (map (curry make-object image-snip%)
           (list img1 img2)))

(define x
  (make-object
      reactive-snip%
    sub-snips))

sub-snips

x

-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93


Posted on the users mailing list.