[plt-scheme] The missing drawing context
The example still doesn't give the pasteboard a dc --- which comes from
an editor-canvas%, for example.
If you add
(define f (new frame% [label "test"]))
(define c (new editor-canvas% [parent f][editor pasteboard]))
to the end of the program, then your callbacks are run.
At Fri, 20 Mar 2009 20:27:55 +0100, Jens Axel Soegaard wrote:
> Hi,
>
> Robby wrote:
> > Oh, I think you have to wait and do the layout when you get the dc.
> > I'm not remembering which callbacks inform you of that, but I think
> > you should try get-extent and, if that fails, on-paint.
>
> I tried both get-extent and on-paint, but they never seem
> to be called. In the example below, the pasteboard contains
> a string-snip. I can move the string snip within the pasteboard
> without any problems. Just to make sure everything was
> wired correctly, I make on-focus display 'on-focus and that
> did work.
>
> So now I am wondering why on-paint isn't called.
>
> /Jens Axel
>
>
>
> #lang scheme/gui
>
> (define (make-string-snip string)
> (make-object string-snip% string))
>
> (define (insert-snip editor snip)
> (send editor insert snip))
>
> (define (insert-snips editor snips)
> (for-each (λ (s) (insert-snip editor s)) snips))
>
> (define (get-width dc snip)
> (let ([w (box 0)])
> (send snip get-extent dc 0 0 w)
> (unbox w)))
>
> (define column-pasteboard%
> (class pasteboard%
> (super-new)
> (define/override (get-extent . more)
> (display "get-extent:\n") (/ 0 0))
> (define/override (on-paint . more) (display 'on-paint) (/ 0 0))
> (define/override (on-focus . more)
> (display (format "on-focus!\n")))))
>
> (define column-editor-snip%
> (class editor-snip%
> (super-new)
> (define/override (draw . more) (/ 2 0))))
>
> ; ---
>
> (define pasteboard (new column-pasteboard%))
> (define snips (map make-string-snip '("Foo" ))) ;"Bar" "Baz" "Qux")))
>
> (define editor-snip
> (new column-editor-snip%
> [editor pasteboard]
> [min-width 100]
> [min-height 100]))
>
> (insert-snips pasteboard snips)
> editor-snip
>
>
>
> >
> > On Thu, Mar 19, 2009 at 3:40 PM, Jens Axel Soegaard
> > <jensaxel at soegaard.net> wrote:
> >> Robby Findler wrote:
> >>> The pasteboard has to be in an editor-canvas to have a dc, I believe.
> >>> In general, there are multiple possible dc classes that have different
> >>> font sizing information (eg, canvas-dc% that draws on the screen and
> >>> post-script-dc% that prints).
> >> The reason I put the pasteboard in an editor-snip was to make
> >> it displayable in the DrScheme REPL. Since a user program
> >> can't get to DrScheme's editor canvas, I am a little unsure
> >> on how to achive what I want.
> >>
> >> The over all goal is to implement something like:
> >>
> >> http://reference.wolfram.com/mathematica/ref/Column.html
> >> (and http://reference.wolfram.com/mathematica/guide/GridsAndTables.html)
> >>
> >> /Jens Axel
> >>
> >> _________________________________________________
> >> For list-related administrative tasks:
> >> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> >>
> > _________________________________________________
> > For list-related administrative tasks:
> > http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme