Re: [racket-users] Editor-canvas% how to set default style and use set-line-count correctly?

2017-01-26 Thread WarGrey Gyoudmon Ju
On Fri, Jan 27, 2017 at 1:46 AM, WarGrey Gyoudmon Ju 
wrote:
>
> (send card insert (make-object string-snip% "it's a bug of text%,
> snip's style is not (convert)ed, also affects the following inputs")
>

All right, it is not a bug, it's just how it works. the snip's style will
be convert into the-style-list and affects the following inputs.

Sorry for making so much nonsense words.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] Editor-canvas% how to set default style and use set-line-count correctly?

2017-01-26 Thread WarGrey Gyoudmon Ju
Update: this solution does work.

I just found the reason why it did not work before.

(define digivice (new frame% [width 800] [height 600] [label "Standard
Style"]))
(define card (make-object text%))
(define darc (new editor-canvas% [parent digivice] [editor card] [style
'(no-border auto-hscroll auto-vscroll)]))
(define font (make-font #:face "Microsoft Himalaya" #:size 16))
(define color (make-object color% "ForestGreen"))

(change-default-style! card #:font font #:color color) ;;; this can be put
in the class body, or do it in editor-canvas%, it's up to you.

(send card insert "works as expected")
(send card insert (make-object string-snip% "it's a bug of text%,
snip's style is not (convert)ed, also affects the following inputs")
(send digivice show #true)
(send digivice center 'both)


On Fri, Jan 27, 2017 at 12:48 AM, WarGrey Gyoudmon Ju  wrote:

> I have these two helpers (typed racket makes it a little verbose).
>
> (define change-style : (->* ((Instance Style<%>))
> (#:font (Option (Instance Font%))
>  #:color (Option (Instance Color%))
>  #:background-color (Option (Instance Color%)))
> (Instance Style<%>))
>   (lambda [style #:font [font #false] #:color [color #false]
> #:background-color [bgcolor #false]]
> (send style set-delta
>   (let* ([style (make-object style-delta%)]
>  [style (if (false? color) style (send style
> set-delta-foreground color))]
>  [style (if (false? bgcolor) style (send style
> set-delta-background bgcolor))])
> (cond [(false? font) style]
>   [else (send* style
>   (set-face (send font get-face))
>   (set-family (send font get-family)))
> (send+ style
>(set-delta 'change-style (send font
> get-style))
>(set-delta 'change-weight (send font
> get-weight))
>(set-delta 'change-smoothing (send font
> get-smoothing))
>(set-delta 'change-underline (send font
> get-underlined))
>(set-delta 'change-size (min (exact-round
> (send font get-size)) 255)))])))
> style))
>
> (define change-default-style! : (->* ((U (Instance Editor<%>) (Instance
> Style-List%)))
>   (#:font (Option (Instance Font%))
>#:color (Option (Instance Color%))
>#:background-color (Option
> (Instance Color%)))
>   (Instance Style<%>))
>   (lambda [src #:font [font #false] #:color [color #false]
> #:background-color [bgcolor #false]]
> (define-values (style-list style-name)
>   (cond [(text%? src) (values (send src get-style-list) (send src
> default-style-name))]
> [(pasteboard%? src) (values (send src get-style-list) (send
> src default-style-name))]
> [else (values (if (style-list%? src) src (make-object
> style-list%)) "Standard")]))
> (change-style #:font font #:color color #:background-color bgcolor
>   (or (send style-list find-named-style style-name)
>   (send style-list new-named-style style-name (send
> style-list basic-style))
>
> 
> 
> ;;
>
> This line is put in the class body of new instance of Editor<%> (not
> editor-canvas%):
>
> (change-default-style! this #:font font ...)
>
> The idea is attaching a style-delta% object to the standard style, then
> the altered style becomes
> the top-level one so that it will never be `undo`ed by accident.
>
> The awkward thing here is, I cannot make it work in a simple example,
> however it works fine in my real world application.
>
>
> On Thu, Jan 26, 2017 at 7:00 PM, Erich Rast  wrote:
>
>> Hi,
>>
>> I have an editor-canvas% subclass and want to set the default style,
>> but adding it with name "Standard" to the-style-list doesn't work. Do
>> I have to replace the style list of the canvas with a new one? Or does
>> the default style of an editor-canvas% have to be called differently?
>> "Basic"?
>>
>> Without the right default style set-line-count also doesn't work as
>> desired. It sets the wrong size for lines with smaller fonts that are
>> added, so I assume this method is based on the default style. But which
>> style is exactly the default style "Basic" or "Standard", and how do I
>> change it?
>>
>> best,
>>
>> Erich
>>
>> -
>>
>> ; Example (sorry, not runnable, because it uses my own preference and
>> ; what I call 'metastyle' impementation)
>> ; layout-init does not really change the style, which
>> ; is why I use 

Re: [racket-users] Editor-canvas% how to set default style and use set-line-count correctly?

2017-01-26 Thread WarGrey Gyoudmon Ju
I have these two helpers (typed racket makes it a little verbose).

(define change-style : (->* ((Instance Style<%>))
(#:font (Option (Instance Font%))
 #:color (Option (Instance Color%))
 #:background-color (Option (Instance Color%)))
(Instance Style<%>))
  (lambda [style #:font [font #false] #:color [color #false]
#:background-color [bgcolor #false]]
(send style set-delta
  (let* ([style (make-object style-delta%)]
 [style (if (false? color) style (send style
set-delta-foreground color))]
 [style (if (false? bgcolor) style (send style
set-delta-background bgcolor))])
(cond [(false? font) style]
  [else (send* style
  (set-face (send font get-face))
  (set-family (send font get-family)))
(send+ style
   (set-delta 'change-style (send font
get-style))
   (set-delta 'change-weight (send font
get-weight))
   (set-delta 'change-smoothing (send font
get-smoothing))
   (set-delta 'change-underline (send font
get-underlined))
   (set-delta 'change-size (min (exact-round
(send font get-size)) 255)))])))
style))

(define change-default-style! : (->* ((U (Instance Editor<%>) (Instance
Style-List%)))
  (#:font (Option (Instance Font%))
   #:color (Option (Instance Color%))
   #:background-color (Option (Instance
Color%)))
  (Instance Style<%>))
  (lambda [src #:font [font #false] #:color [color #false]
#:background-color [bgcolor #false]]
(define-values (style-list style-name)
  (cond [(text%? src) (values (send src get-style-list) (send src
default-style-name))]
[(pasteboard%? src) (values (send src get-style-list) (send src
default-style-name))]
[else (values (if (style-list%? src) src (make-object
style-list%)) "Standard")]))
(change-style #:font font #:color color #:background-color bgcolor
  (or (send style-list find-named-style style-name)
  (send style-list new-named-style style-name (send
style-list basic-style))

;;

This line is put in the class body of new instance of Editor<%> (not
editor-canvas%):

(change-default-style! this #:font font ...)

The idea is attaching a style-delta% object to the standard style, then the
altered style becomes
the top-level one so that it will never be `undo`ed by accident.

The awkward thing here is, I cannot make it work in a simple example,
however it works fine in my real world application.


On Thu, Jan 26, 2017 at 7:00 PM, Erich Rast  wrote:

> Hi,
>
> I have an editor-canvas% subclass and want to set the default style,
> but adding it with name "Standard" to the-style-list doesn't work. Do
> I have to replace the style list of the canvas with a new one? Or does
> the default style of an editor-canvas% have to be called differently?
> "Basic"?
>
> Without the right default style set-line-count also doesn't work as
> desired. It sets the wrong size for lines with smaller fonts that are
> added, so I assume this method is based on the default style. But which
> style is exactly the default style "Basic" or "Standard", and how do I
> change it?
>
> best,
>
> Erich
>
> -
>
> ; Example (sorry, not runnable, because it uses my own preference and
> ; what I call 'metastyle' impementation)
> ; layout-init does not really change the style, which
> ; is why I use set-style for every snip. But then set-line-count
> ; doesn't work as desired.
>
> (define console%
>   (class editor-canvas%
> (inherit scroll-with-bottom-base allow-scroll-to-last)
>
> (define text #f)
> (define console-style #f)
> (define sema (make-semaphore 1))
>
> (define (layout-init)
>   (define style (send the-style-list
>   find-named-style "Basic"))
>   (set! console-style (send the-style-list
> find-or-create-style
> style
> (metastyle->style
> (pref:console-style
>   (send the-style-list new-named-style "Standard" console-style)
>   (set! text
> (new text%
>  [auto-wrap #t]
>  [line-spacing 0]))
>   (send this set-editor text)
>   (scroll-with-bottom-base #t)
>   (allow-scroll-to-last #t)
>   (send this set-line-count 2))
>
> (define (synced-add-line msg)
>   (send text begin-edit-sequence)
>  

[racket-users] Editor-canvas% how to set default style and use set-line-count correctly?

2017-01-26 Thread Erich Rast
Hi,

I have an editor-canvas% subclass and want to set the default style,
but adding it with name "Standard" to the-style-list doesn't work. Do
I have to replace the style list of the canvas with a new one? Or does
the default style of an editor-canvas% have to be called differently?
"Basic"?

Without the right default style set-line-count also doesn't work as
desired. It sets the wrong size for lines with smaller fonts that are
added, so I assume this method is based on the default style. But which
style is exactly the default style "Basic" or "Standard", and how do I
change it?

best,

Erich

-

; Example (sorry, not runnable, because it uses my own preference and
; what I call 'metastyle' impementation)
; layout-init does not really change the style, which
; is why I use set-style for every snip. But then set-line-count
; doesn't work as desired.

(define console%
  (class editor-canvas%
(inherit scroll-with-bottom-base allow-scroll-to-last)

(define text #f)
(define console-style #f)
(define sema (make-semaphore 1))

(define (layout-init)
  (define style (send the-style-list
  find-named-style "Basic"))
  (set! console-style (send the-style-list
find-or-create-style
style
(metastyle->style
(pref:console-style
  (send the-style-list new-named-style "Standard" console-style)
  (set! text
(new text%
 [auto-wrap #t]
 [line-spacing 0]))
  (send this set-editor text)
  (scroll-with-bottom-base #t)
  (allow-scroll-to-last #t)
  (send this set-line-count 2))

(define (synced-add-line msg)
  (send text begin-edit-sequence)
  (send text set-position (send text last-position))
  (define snip (make-object string-snip% msg))
  (send snip set-style console-style)
  (send text insert #\newline)
  (send text insert snip)
  (send text end-edit-sequence)
  (send text scroll-to-position (send text last-position))
  (semaphore-post sema))

(define/public (add-line msg)
  (call-with-semaphore
   sema
   (lambda ()
 (synced-add-line msg

(define/public (show-message msg delay)
  (if (> delay 0)
  (call-once/delayed
   (lambda ()
 (queue-callback
  (lambda ()
(send this add-line msg
   delay)
  (add-line msg)))

(super-new
 [style '(auto-vscroll auto-hscroll no-border no-focus transparent)]
 [wheel-step 1]
 [scrolls-per-page 10]
 [stretchable-height #f])
(layout-init)))


-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.