-
Notifications
You must be signed in to change notification settings - Fork 355
Fix carousel logo overlap by ensuring center logo renders last #901
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
This patch fixes a long-standing visual issue in the system carousel where the side logos could overlap the center logo when using large logoScale values or wide system logos (common in modern themes). The update introduces a draw-order correction: - Collects all logos before rendering - Sorts by abs(distance from center) - Draws farthest logos first and the center logo last This guarantees that the center logo always appears visually on top of the side logos without modifying their size, spacing, alignment, or theme behavior. The change is fully backward compatible: - Does NOT alter theme XML attributes - Does NOT change default carousel layout - Does NOT modify spacing, scaling, or logo alignment - Only fixes z-order (render order) in all horizontal and vertical modes This aligns EmulationStation’s behavior with Batocera/ES-DE visual standards and corrects a noticeable rendering bug without affecting any existing theme.
|
Thank you. The commit looks to have some unrelated cosmetic changes. These would be best done in a separate commit if they are consistent with the rest of the code base. |
Can you give an example of how this bug can be triggered/reproduced ? Also, as @joolswills said, leave aside any cosmetic changes to the code so the modifications can be better seen/reviewed. |
|
Hm, this looks like a theme error, where the selected logo is assumed to be drawn on-top, thus obscuring everything behind. Which theme is this ? |
|
I don't think so. I reported this a long time ago on the RetroPie forum asking for help to fix it. I'll continue working on whatever I find necessary. I want RetroPie to have its own PlayStation X version, the Batocera theme. https://github.com/Renetrox/Pi-Station-X |
|
I'm trying to test the issue, but setting the theme (https://github.com/Renetrox/Pi-Station-X) in ES's current version doesn't shown any images displayed - neither in the gamelist, nor in the system list. The gamelist shows the entries in the folder, but there are no images shown - neither from the artwork nor from the theme itself. ES version is shown as EmulationStation - v2.12.0rp-dev. |
|
One more detail that may help: The reason you don’t see the overlap issue right now is because my theme is temporarily using this carousel configuration: 10 By limiting the carousel to only 10 visible logos, the side logos stay far enough away from the center, so the problem never appears. The fix in PR #901 specifically solves that by rendering the center logo last. Also, one important note for testing the theme: With the correct folder name and VRAM set to 300 MB, the theme loads normally and the carousel overlap can be reproduced when maxLogoCount is raised. Thanks again for looking into this! |
|
One last thing that may help clarify the context: With the author’s permission, I am creating a new theme from scratch inspired by Batocera’s PlayStation-X theme. To reach this layout, the theme needs: large logoScale values, tight carousel spacing, and 12–15 visible logos in the system carousel (just like PlayStation-X). Because of that, the draw-order issue becomes very noticeable: Right now, the only reason the bug does not appear in my current theme setup is because I temporarily use: 10 This artificially prevents the side logos from getting close enough to the center to cause the overlap. Also, for testing the theme properly: With VRAM set to 300 MB and maxLogoCount increased, the overlap becomes fully reproducible. Thanks again for taking the time to look at this. |
|
You are using the ps3 template, you must switch to dynamic in pistration-menu or manually from the folder |
Ok, what do I need to modify and which modifications I need to make in order to get the same image as yours ? |
|
“The theme already includes a script to change the appearance without editing EmulationStation manually. |
|
“If you install it correctly using the instructions with |
|
Please let me know how I can do that manually ? I'm not fluent in Spanish and the scripts are all in Spanish. |
|
The layout you need is inside the layout/dinamic folder. |
|
Anyway, I have just updated my repository with the version that includes the issue. |
|
There isn’t any other theme with the same level of customization as mine, because I specifically replicated view-options and avatar-selection features using dialog-based scripts. |
Thanks, I'll re-clone the theme then and see how it looks. |
Refactor SystemView.cpp for improved readability and consistency. Adjust formatting, spacing, and comments for clarity.
|
OK, so after cloning the re-configured theme I'm able to see the issue. The PR proposed does indeed solve the z-index fighting issue. However, the PR it's still just a hack that relies on the drawing order to fix logos overlap.
We could apply the PR's changes if - indeed - it's just a drawing change, but it's a bit difficult to review it with all the unrelated changes that are included. |
|
Thanks for taking the time to clone the re-configured theme and confirm both the issue and that the proposed change does fix the z-index fighting. I understand your concern about the current PR being a hack that relies on drawing order. From a theme author’s perspective, the core limitation is exactly what you mentioned: the selected system logo in the carousel cannot have its own render priority (zIndex) that is different from the neighbouring logos. Because of that, themes that try to reproduce PlayStation-X / Batocera-style carousels end up with unwanted overlap unless something changes in the engine. Regarding your suggestions:
You are also right about the PR containing unrelated changes from my local experiments – that makes it harder to review. I can clean this up so that the PR only contains the minimal drawing-order change, or alternatively close this PR and open a new one focused on the “proper” fix (giving the selected carousel logo an explicit zIndex as you suggested). Please let me know which direction would better match the project’s goals and review expectations, and I’ll adjust the patch accordingly. |
|
@cmitu tell me more about option 1. Something like logoScale, say: ? |
Yes, something like that, though the default - for carousel - is |
|
@Renetrox I'd feel more confortable if you wouldn't generate your replies with an LLM/AI tool. While your English may not be great or you may not be confident enough to use it, I'd appreciate if you'd make the effort to use your own words and not make us feel like we're talking with an AI directly. Thank you. |
Correct. My proposal was an addition (or subtraction) to the default 40. I think some zIndex values are set in code, and I'm not sure having to expose that complexity of knowing what zIndex each element has by default to the theme developer would be the best, though I'm open to either as an option. In my example, the logo formula would be defaultzIndex + logozIndex (40 + 0, in this case, or 40 + value). |
I think that would work too, yes. |
|
Hi, I understand your concern. Also, I accidentally closed the conversation earlier — I was reading on my phone and I’m a bit clumsy with it. |
|
Also, I’ve decided to continue with my own personal fork, because I’d like to experiment with new theme features and localization options. I know it may not match the main goals of the official project, so I’ll follow my own path for those ideas. Thanks again! |
|
Thanks for the detail @Renetrox . Are you up to implementing the change proposed by @cmitu ? We're happy to take on contributions, and the goals of the project are very accommodating if one wants to contribute and put in the effort. There is a lot of code architecture constraints that make it work this way, but if a solution can be created that improves things in a sound manner, we're happy to review it and consider it. Let us know, and whatever you choose, good luck with your developments! |
I explored a possible solution by introducing new theme properties (centerLogoPos, centerLogoOffsetY, scrollSound, etc.) handled directly in SystemView and ThemeData. It works well for my goals, but I’m not sure if this approach aligns with the architectural vision of the main project. I’d be happy to show the concept, but it's more experimental and theme-oriented than what might be ideal for the core codebase |
|
I’m not a developer or computer scientist — I actually know very little about programming. Everything I’ve learned has been slowly, by trying, reading, and experimenting over the years. What I’ve been able to achieve is thanks to a mix of persistence, help from @pajarorrojo (original author of the theme I’m adapting), and more recently, AI tools that help me polish and improve ideas. My fork is more experimental and focused on expanding theme capabilities (sounds, carousel options, localization, etc.), which may not fully align with the main goals of the project — but it's something I truly enjoy working on. I appreciate your openness to contributions. If at some point my work becomes stable, clean, and useful for the main project, I’d be happy to share it back. Thank you again. |
Added new properties for carousel customization.
Refactor SystemView for improved readability and performance. Adjusted spacing, alignment, and opacity handling for logos. Enhanced carousel rendering logic and added new properties for logo opacity and spacing.
Added new properties for visual behavior and optional sound.
|
It seems you keep refactoring and adding features, but this wouldn't be accepted all at once in the same PR - you already have merge conflicts due to the changes involved. As specified in the beginning, don't re-format/refactor existing code, just add the needed changes. Since this PR is about improving the system carousel's logo alignment, you can either:
EDIT: to make it easier to add features, it's usually best to have separate |
|
I'm happy if my contribution can be useful. |
|
By all means. Thank you for your perseverance, and for wanting to improve EmulationStation! Thanks @cmitu as well for all the guidance here. |
|
Thanks for the support, I am having problems with the computer which has not allowed me to move forward, I will try to fix it or feel free to integrate and evaluate what I shared if I take too long! |
|
No worries. Take your time. |
…ra-adecuacion Polish SystemView carousel extensions
…pr-901 Document carousel options and reset scroll sound
…pr-901-nx15je Reset text list scroll sound when theme removes override







This patch fixes a long-standing visual issue in the system carousel where the side logos could overlap the center logo when using large logoScale values or wide system logos (common in modern themes).
The update introduces a draw-order correction:
This guarantees that the center logo always appears visually on top of the side logos without modifying their size, spacing, alignment, or theme behavior.
The change is fully backward compatible:
This aligns EmulationStation’s behavior with Batocera/ES-DE visual standards and corrects a noticeable rendering bug without affecting any existing theme.