Repository navigation
Allow erasing pixels in pygame.Surface.scroll and add repeat functionality - #2855
Conversation
|
Could the 2 faulty tests be rerun? |
Why do you think this is incorrect? The docs currently say:
Which looks to me like what the current behaviour is. e.g. Current main branch scroll a 200 pixel wide surface right by 100 pixels: After this PR: I think we should retain the current behaviour as the default, and if we want the original pixels not overwritten by scrolled pixels cleared to a colour (and why specifically black?) that should be an option/parameter. Otherwise we will probably accidentally break somebody's code. As an addendum - do we think this function is likely to be a performance sensitive one like blit, or one used less frequently? I'm wondering whether it should support keyword arguments or not, now it has 3 params (possibly 4 after the above). |
|
@MyreMylar yeah that was a misunderstanding on my side. I don't think 4 arguments are too much. If they are, what do you suggest? Another function for repeat? only positional? |
|
Looking at how you implemented it, I believe the best option would be to use the same system used for flags on surfaces and window. Like that we can a fair amount of arguments for this function. |
That would require 2 new constants pygame.SCROLL_REPEAT and pygame.SCROLL_ERASE i believe. the new arguments would go from 2 to 1, i guess |
I prefer this approach. |
|
I think there were separate functions for the actual process of scrolling and the function definition, what about doing this to keep some kind of readability ? |
|
After a little digging with @damusss about some issues, here are the potential problem we are facing out currently:
surface_scroll_erase.mp4 |
Co-authored-by: Dan Lawrence <danintheshed@gmail.com>
|
All looks good to me now, the three modes work as I expect and add some nice functionality to this function which I expect is not often used in it's current form. Perhaps it will see a resurgence? 👍 |
bilhox
left a comment
There was a problem hiding this comment.
except what I mentionned, nice, it works correctly now !
| Scrolling is contained by the Surface clip area. It is safe to have dx | ||
| and dy values that exceed the surface size. | ||
|
|
||
| The scroll flag can be ``0`` (normal behavior) or: |
There was a problem hiding this comment.
you removed the old text, so what is the "normal behaviour" ?
There was a problem hiding this comment.
You really don't need to request changes when some requested changes are already in action you know that right 😭
does this satisfy you?
|
btw I really suggest squash and merge, 32 commits are not worth this change!! |
|
except myremylar, we're only 2 who contributed to this PR, so I'm waiting tomorrow before merging it. |


The shifting was incorrect, not setting the space created by the shifted pixels to black. Now it does that [EDIT: now it does that with the erase flag only], but most importantly I think I implemented this feature idea: #2159 implementing a way to allow for repeated shifting. The video proof is here: https://discord.com/channels/772505616680878080/772940667231928360/1240055647584911443
I would love feedback about the C code as I did quite a lot of pointer operations.
Why?
Question: how can I add a test for it? Edit: I modified the test, tell me if it's incomplete
You can use the following code with my request to test locally: