From 2f00524439786d383bad3bc0f73be1c5ae44b167 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sat, 12 Jul 2025 00:45:49 +0200 Subject: [PATCH] dont cut overlays & shadows --- client/renderSDL/RenderHandler.cpp | 7 ++++--- client/renderSDL/SDLImage.cpp | 7 +++++-- client/renderSDL/SDLImage.h | 2 +- client/renderSDL/SDL_Extensions.cpp | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/client/renderSDL/RenderHandler.cpp b/client/renderSDL/RenderHandler.cpp index a5d3c7329..95ccf4f82 100644 --- a/client/renderSDL/RenderHandler.cpp +++ b/client/renderSDL/RenderHandler.cpp @@ -295,6 +295,7 @@ std::shared_ptr RenderHandler::loadScaledImage(const ImageLocato bool generateOverlay = locator.generateOverlay && (*locator.generateOverlay) != SharedImageLocator::OverlayMode::OVERLAY_NONE; bool isShadow = locator.layer == EImageBlitMode::ONLY_SHADOW_HIDE_SELECTION || locator.layer == EImageBlitMode::ONLY_SHADOW_HIDE_FLAG_COLOR; bool isOverlay = locator.layer == EImageBlitMode::ONLY_FLAG_COLOR || locator.layer == EImageBlitMode::ONLY_SELECTION; + bool optimizeImage = !(isShadow && generateShadow) && !(isOverlay && generateOverlay); // images needs to expanded if(isOverlay && !generateOverlay) imagePathString += "-OVERLAY"; @@ -312,11 +313,11 @@ std::shared_ptr RenderHandler::loadScaledImage(const ImageLocato std::shared_ptr img = nullptr; if(CResourceHandler::get()->existsResource(imagePathSprites)) - img = std::make_shared(imagePathSprites); + img = std::make_shared(imagePathSprites, optimizeImage); else if(CResourceHandler::get()->existsResource(imagePathData)) - img = std::make_shared(imagePathData); + img = std::make_shared(imagePathData, optimizeImage); else if(CResourceHandler::get()->existsResource(imagePath)) - img = std::make_shared(imagePath); + img = std::make_shared(imagePath, optimizeImage); if(img) { diff --git a/client/renderSDL/SDLImage.cpp b/client/renderSDL/SDLImage.cpp index 3a8a57f93..a9096b410 100644 --- a/client/renderSDL/SDLImage.cpp +++ b/client/renderSDL/SDLImage.cpp @@ -70,7 +70,7 @@ SDLImageShared::SDLImageShared(SDL_Surface * from) fullSize.y = surf->h; } -SDLImageShared::SDLImageShared(const ImagePath & filename) +SDLImageShared::SDLImageShared(const ImagePath & filename, bool optimizeImage) : surf(nullptr), margins(0, 0), fullSize(0, 0), @@ -89,7 +89,8 @@ SDLImageShared::SDLImageShared(const ImagePath & filename) fullSize.x = surf->w; fullSize.y = surf->h; - optimizeSurface(); + if(optimizeImage) + optimizeSurface(); } } @@ -442,6 +443,7 @@ std::shared_ptr SDLImageShared::drawShadow(bool doSheer) const ret->fullSize = fullSize; ret->margins.x = margins.x; ret->margins.y = margins.y; + ret->optimizeSurface(); // erase our own reference SDL_FreeSurface(shadow); @@ -463,6 +465,7 @@ std::shared_ptr SDLImageShared::drawOutline(const ColorRGBA & co ret->fullSize = fullSize; ret->margins.x = margins.x; ret->margins.y = margins.y; + ret->optimizeSurface(); // erase our own reference SDL_FreeSurface(outline); diff --git a/client/renderSDL/SDLImage.h b/client/renderSDL/SDLImage.h index 32bf7c67e..56f99a8cf 100644 --- a/client/renderSDL/SDLImage.h +++ b/client/renderSDL/SDLImage.h @@ -46,7 +46,7 @@ public: //Load image from def file SDLImageShared(const CDefFile *data, size_t frame, size_t group=0); //Load from bitmap file - SDLImageShared(const ImagePath & filename); + SDLImageShared(const ImagePath & filename, bool optimizeImage=true); //Create using existing surface, extraRef will increase refcount on SDL_Surface SDLImageShared(SDL_Surface * from); ~SDLImageShared(); diff --git a/client/renderSDL/SDL_Extensions.cpp b/client/renderSDL/SDL_Extensions.cpp index e7d73dd24..cdc403598 100644 --- a/client/renderSDL/SDL_Extensions.cpp +++ b/client/renderSDL/SDL_Extensions.cpp @@ -974,7 +974,7 @@ SDL_Surface * CSDL_Ext::drawShadow(SDL_Surface * source, bool doSheer) assert(destSurface->format->format == SDL_PIXELFORMAT_ARGB8888); double shearX = doSheer ? 0.5 : 0.0; - double scaleY = 0.25; + double scaleY = doSheer ? 0.5 : 0.25; int lowestSource = getLowestNonTransparentY(sourceSurface); int lowestTransformed = lowestSource * scaleY;