One precision: this work for Racket 8.0 BC release. There might have been 
changes made to current.
DrRacket feels as smooth as Sublime Text with this change, a completely 
different experience. I'd like to make a proper commit if somebody held my 
hand to do so.

Dex

On Saturday, April 10, 2021 at 12:44:44 PM UTC+2 Dexter Lagan wrote:

> Hi again,
>
>   After playing around with the gen-wheels procedure and comparing its 
> code with the WM_HSCROLL handling, I was able to get fast, accurate and 
> smooth scrolling for both mouse and touchpad by switching the 
> wheel-steps-mode to 'integer and reducing WHEEL_DELTA by a factor of 4. 
> Here's the updated code :
>
> <pre>
>   (define wheel-steps-mode 'integer)
>   (define/public (get-wheel-steps-mode) wheel-steps-mode)
>   (define/public (set-wheel-steps-mode mode) (set! wheel-steps-mode mode))
>
>   (define/private (gen-wheels w msg lParam amt down up)
>     (define AUG_WHEEL_DELTA (/ WHEEL_DELTA 4))
>     (let loop ([amt amt])
>       (cond
>         [((abs amt) . < . AUG_WHEEL_DELTA)
>          (case wheel-steps-mode
>            [(one integer) amt]
>            [(fraction)
>             (unless (zero? amt)
>               (do-key w msg down lParam #f #f void (/ amt (exact->inexact 
> AUG_WHEEL_DELTA))))
>             0.0])]
>         [(negative? amt)
>          (case wheel-steps-mode
>            [(one)
>             (do-key w msg down lParam #f #f void 1.0)
>             (loop (+ amt AUG_WHEEL_DELTA))]
>            [(integer)
>             (define steps (quotient (- amt) AUG_WHEEL_DELTA))
>             (do-key w msg down lParam #f #f void (exact->inexact steps))
>             (loop (+ amt (* steps AUG_WHEEL_DELTA)))]
>            [else
>             (do-key w msg down lParam #f #f void (/ (- amt) 
> (exact->inexact AUG_WHEEL_DELTA)))
>             0.0])]
>         [else
>          (case wheel-steps-mode
>            [(one)
>             (do-key w msg up lParam #f #f void 1.0)
>             (loop (- amt AUG_WHEEL_DELTA))]
>            [(integer)
>             (define steps (quotient amt AUG_WHEEL_DELTA))
>             (do-key w msg up lParam #f #f void (exact->inexact steps))
>             (loop (- amt (* steps AUG_WHEEL_DELTA)))]
>            [else
>             (do-key w msg up lParam #f #f void (/ amt (exact->inexact 
> AUG_WHEEL_DELTA)))
>             0.0])])))
> </pre>
>
> On Wednesday, April 7, 2021 at 1:54:24 AM UTC+2 Matthew Flatt wrote:
>
>> At Mon, 5 Apr 2021 14:29:22 -0700 (PDT), Dexter Lagan wrote: 
>> > I installed the latest build, and it does start. Generated executable 
>> is 
>> > 80MB vs 32MB for 7.9 BC, about 10MB more than 8.0 release. 
>>
>> That difference is again related to the compilation paths, but this 
>> time the likely result is that the v8.1 release will be larger in the 
>> way you saw here. 
>>
>> In the cross-compilation path that the release builds use, there was an 
>> unintended layer of compression. (I noticed the size difference before, 
>> but had not yet investigated.) Checking that again, if the extra layer 
>> is used, the 10% or so savings in file size causes a 5% decompression 
>> slowdown for loading. Compressing just the code, meanwhile, makes load 
>> times faster on machines that I tried. So, I think the current 
>> (non-cross) default is still the best choice for most situations, and 
>> I'll adjust cross-compilation to match. 
>>
>> We can make the extra layer of compression an option for someone who 
>> needs to minimize file size. But a more relevant effect may be the 
>> existing configure-time option to compress boot files... 
>>
>>
>> Compressing embedded boot files would save 30 MB, which would make a 
>> big difference in your case. Compressed boot files take 20-40ms longer 
>> to load on a typical machine, which is significant relative to the 
>> minimal load time, but it's very little time in many situations. 
>>
>> Boot-file compression was already an option for the `configure` way of 
>> building on Unix (but the option had rotted; now fixed). I've updated 
>> the MSVC build to recognize a `PLT_BOOTFILE_COMPRESS` environment 
>> variable to enable boot-file compression when building that way. So, it 
>> will be easier to build Racket with compressed boot files --- but you 
>> would have to build Racket yourself. 
>>
>> It may be that compressed boot files make sense as the default on 
>> Windows. I'm starting to lean in that direction, but I'm not sure, and 
>> I haven't changed the default for now. 
>>
>> > I understand that there's a difference between bytecode and compiled 
>> > binary size with CS, but I'm not certain if we're talking about the 
>> Racket 
>> > distribution itself, or generated executables. Is there any hope to 
>> > eventually get closer to BC's executable size with CS? 
>>
>> Compressing boot files brings the size of the Racket CS executable/DLL 
>> itself closer to Racket BC --- more like a factor of 2 instead of a 
>> factor of 10 --- and that turns out to be almost half of the size in 
>> your case. But the more code you add in terms of embedded ".zo" files, 
>> the more the size difference will approach a factor of 2 overall; I 
>> don't see a route to big improvements there. 
>>
>> > The raco demod option seemed to do miracles on previous versions, but 
>> > never worked on gracket / gui programs for me. 
>>
>> Restoring `raco demod` has been on my list, and I may get to that soon, 
>> but probably not before v8.1. It may be possible to improve `raco 
>> demod` to support `dynamic-require`d pieces like the platform-specific 
>> backends in `racket/gui`. 
>>
>> > Also, somehow touchpad scrolling has degraded since 7.9 BC (which was 
>> > decent, and even had momentum). If I scroll downwards, then upwards, it 
>> > keeps going down for another 1 second before switching direction, and 
>> > momentum is no longer simulated. If I use the scrollbar, it scrolls 
>> fast 
>> > and smooth, with no direction problem. 
>>
>> I don't know what happened there. Version 8.0 included a change for 
>> handling scroll-wheel events, but I don't think that's the same kind of 
>> event as touchpad scrolling. You could try changing `(* wheel-scale 
>> amt)` in "share/pkgs/gui-lib/mred/private/wx/win32/window.rkt" back to 
>> just `amt` to make sure that change isn't the reason. 
>>
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/e8a540c2-a47d-4b6c-8f22-d9cbea5569d4n%40googlegroups.com.

Reply via email to