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 [email protected].
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