mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Implemented scaling of hardware cursor
This commit is contained in:
parent
42adc9d394
commit
58d13fdce5
@ -250,8 +250,8 @@ void CGuiHandler::setStatusbar(std::shared_ptr<IStatusBar> newStatusBar)
|
||||
void CGuiHandler::onScreenResize(bool resolutionChanged)
|
||||
{
|
||||
if(resolutionChanged)
|
||||
{
|
||||
screenHandler().onScreenResize();
|
||||
}
|
||||
|
||||
windows().onScreenResize();
|
||||
CCS->curh->onScreenResize();
|
||||
}
|
||||
|
@ -312,3 +312,8 @@ void CursorHandler::changeCursor(Cursor::ShowType newShowType)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CursorHandler::onScreenResize()
|
||||
{
|
||||
cursor->setImage(getCurrentImage(), getPivotOffset());
|
||||
}
|
||||
|
@ -182,6 +182,7 @@ public:
|
||||
|
||||
void hide();
|
||||
void show();
|
||||
void onScreenResize();
|
||||
|
||||
/// change cursor's positions to (x, y)
|
||||
void cursorMove(const int & x, const int & y);
|
||||
|
@ -11,11 +11,14 @@
|
||||
#include "StdInc.h"
|
||||
#include "CursorHardware.h"
|
||||
|
||||
#include "SDL_Extensions.h"
|
||||
|
||||
#include "../gui/CGuiHandler.h"
|
||||
#include "../render/IScreenHandler.h"
|
||||
#include "../render/Colors.h"
|
||||
#include "../render/IImage.h"
|
||||
#include "SDL_Extensions.h"
|
||||
|
||||
#include "../../lib/CConfigHandler.h"
|
||||
|
||||
#include <SDL_render.h>
|
||||
#include <SDL_events.h>
|
||||
@ -45,19 +48,26 @@ void CursorHardware::setVisible(bool on)
|
||||
|
||||
void CursorHardware::setImage(std::shared_ptr<IImage> image, const Point & pivotOffset)
|
||||
{
|
||||
auto cursorSurface = CSDL_Ext::newSurface(image->dimensions() * GH.screenHandler().getScalingFactor());
|
||||
int cursorScalingPercent = settings["video"]["resolution"]["scaling"].Integer();
|
||||
Point cursorDimensions = image->dimensions() * GH.screenHandler().getScalingFactor();
|
||||
Point cursorDimensionsScaled = image->dimensions() * cursorScalingPercent / 100;
|
||||
Point pivotOffsetScaled = pivotOffset * cursorScalingPercent / 100 / GH.screenHandler().getScalingFactor();
|
||||
|
||||
auto cursorSurface = CSDL_Ext::newSurface(cursorDimensions);
|
||||
|
||||
CSDL_Ext::fillSurface(cursorSurface, CSDL_Ext::toSDL(Colors::TRANSPARENCY));
|
||||
|
||||
image->draw(cursorSurface, Point(0,0));
|
||||
auto cursorSurfaceScaled = CSDL_Ext::scaleSurface(cursorSurface, cursorDimensionsScaled.x, cursorDimensionsScaled.y );
|
||||
|
||||
auto oldCursor = cursor;
|
||||
cursor = SDL_CreateColorCursor(cursorSurface, pivotOffset.x, pivotOffset.y);
|
||||
cursor = SDL_CreateColorCursor(cursorSurfaceScaled, pivotOffsetScaled.x, pivotOffsetScaled.y);
|
||||
|
||||
if (!cursor)
|
||||
logGlobal->error("Failed to set cursor! SDL says %s", SDL_GetError());
|
||||
|
||||
SDL_FreeSurface(cursorSurface);
|
||||
SDL_FreeSurface(cursorSurfaceScaled);
|
||||
|
||||
GH.dispatchMainThread([this, oldCursor](){
|
||||
SDL_SetCursor(cursor);
|
||||
|
Loading…
x
Reference in New Issue
Block a user