mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Fix remaining graphical artifacts on switching from world view
This commit is contained in:
parent
c24ccf663b
commit
342ea138f9
@ -788,6 +788,8 @@ void CAdventureMapInterface::onScreenResize()
|
||||
widget = std::make_shared<CAdventureMapWidget>(shortcuts);
|
||||
widget->getMapView()->onViewMapActivated();
|
||||
widget->setPlayer(currentPlayerID);
|
||||
widget->updateActiveState();
|
||||
widget->getMinimap()->update();
|
||||
|
||||
if (isActive())
|
||||
widget->activate();
|
||||
|
@ -238,7 +238,7 @@ std::shared_ptr<CIntObject> CAdventureMapWidget::buildMapHeroList(const JsonNode
|
||||
Point itemOffset(input["itemsOffset"]["x"].Integer(), input["itemsOffset"]["y"].Integer());
|
||||
int itemsCount = input["itemsCount"].Integer();
|
||||
|
||||
auto result = std::make_shared<CHeroList>(itemsCount, item.topLeft(), itemOffset, LOCPLINT->localState->getWanderingHeroes().size());
|
||||
auto result = std::make_shared<CHeroList>(itemsCount, area, item.topLeft() - area.topLeft(), itemOffset, LOCPLINT->localState->getWanderingHeroes().size());
|
||||
|
||||
|
||||
if(!input["scrollUp"].isNull())
|
||||
@ -272,7 +272,8 @@ std::shared_ptr<CIntObject> CAdventureMapWidget::buildMapTownList(const JsonNode
|
||||
Point itemOffset(input["itemsOffset"]["x"].Integer(), input["itemsOffset"]["y"].Integer());
|
||||
int itemsCount = input["itemsCount"].Integer();
|
||||
|
||||
auto result = std::make_shared<CTownList>(itemsCount, item.topLeft(), itemOffset, LOCPLINT->localState->getOwnedTowns().size());
|
||||
auto result = std::make_shared<CTownList>(itemsCount, area, item.topLeft() - area.topLeft(), itemOffset, LOCPLINT->localState->getOwnedTowns().size());
|
||||
|
||||
|
||||
if(!input["scrollUp"].isNull())
|
||||
result->setScrollUpButton(std::dynamic_pointer_cast<CButton>(buildMapButton(input["scrollUp"])));
|
||||
@ -427,7 +428,6 @@ void CAdventureMapWidget::updateActiveStateChildden(CIntObject * widget)
|
||||
if (container->disableCondition == "worldViewMode")
|
||||
container->setEnabled(!shortcuts->optionInWorldView());
|
||||
|
||||
|
||||
updateActiveStateChildden(container);
|
||||
}
|
||||
}
|
||||
@ -439,4 +439,6 @@ void CAdventureMapWidget::updateActiveState()
|
||||
|
||||
for (auto entry: shortcuts->getShortcuts())
|
||||
setShortcutBlocked(entry.shortcut, !entry.isEnabled);
|
||||
|
||||
//GH.totalRedraw(); // FIXME: required to eliminate graphical artifacts on leaving world view mode
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "../CPlayerInterface.h"
|
||||
#include "../PlayerLocalState.h"
|
||||
#include "../gui/CGuiHandler.h"
|
||||
#include "../renderSDL/SDL_Extensions.h"
|
||||
|
||||
#include "../../lib/CGeneralTextHandler.h"
|
||||
#include "../../lib/CHeroHandler.h"
|
||||
@ -81,22 +82,31 @@ void CList::CListItem::onSelect(bool on)
|
||||
redraw();
|
||||
}
|
||||
|
||||
CList::CList(int Size, Point position)
|
||||
: CIntObject(0, position),
|
||||
CList::CList(int Size, Rect widgetDimensions)
|
||||
: CIntObject(0, widgetDimensions.topLeft()),
|
||||
size(Size),
|
||||
selected(nullptr)
|
||||
{
|
||||
|
||||
pos.w = widgetDimensions.w;
|
||||
pos.h = widgetDimensions.h;
|
||||
}
|
||||
|
||||
void CList::createList(Point itemOffset, size_t listAmount)
|
||||
void CList::showAll(SDL_Surface * to)
|
||||
{
|
||||
CSDL_Ext::fillRect(to, pos, Colors::BLACK);
|
||||
CIntObject::showAll(to);
|
||||
}
|
||||
|
||||
void CList::createList(Point firstItemPosition, Point itemPositionDelta, size_t listAmount)
|
||||
{
|
||||
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
||||
listBox = std::make_shared<CListBox>(std::bind(&CList::createItem, this, _1), Point(0, 0), itemOffset, size, listAmount);
|
||||
listBox = std::make_shared<CListBox>(std::bind(&CList::createItem, this, _1), firstItemPosition, itemPositionDelta, size, listAmount);
|
||||
}
|
||||
|
||||
void CList::setScrollUpButton(std::shared_ptr<CButton> button)
|
||||
{
|
||||
addChild(button.get());
|
||||
|
||||
scrollUp = button;
|
||||
scrollUp->addCallback(std::bind(&CListBox::moveToPrev, listBox));
|
||||
scrollUp->addCallback(std::bind(&CList::update, this));
|
||||
@ -105,6 +115,8 @@ void CList::setScrollUpButton(std::shared_ptr<CButton> button)
|
||||
|
||||
void CList::setScrollDownButton(std::shared_ptr<CButton> button)
|
||||
{
|
||||
addChild(button.get());
|
||||
|
||||
scrollDown = button;
|
||||
scrollDown->addCallback(std::bind(&CList::update, this));
|
||||
scrollDown->addCallback(std::bind(&CListBox::moveToNext, listBox));
|
||||
@ -242,10 +254,10 @@ std::shared_ptr<CIntObject> CHeroList::createItem(size_t index)
|
||||
return std::make_shared<CEmptyHeroItem>();
|
||||
}
|
||||
|
||||
CHeroList::CHeroList(int size, Point position, Point itemOffset, size_t listAmount)
|
||||
: CList(size, position)
|
||||
CHeroList::CHeroList(int visibleItemsCount, Rect widgetPosition, Point firstItemOffset, Point itemOffsetDelta, size_t initialItemsCount)
|
||||
: CList(visibleItemsCount, widgetPosition)
|
||||
{
|
||||
createList(itemOffset, listAmount);
|
||||
createList(firstItemOffset, itemOffsetDelta, initialItemsCount);
|
||||
}
|
||||
|
||||
void CHeroList::select(const CGHeroInstance * hero)
|
||||
@ -325,10 +337,10 @@ std::string CTownList::CTownItem::getHoverText()
|
||||
return town->getObjectName();
|
||||
}
|
||||
|
||||
CTownList::CTownList(int size, Point position, Point itemOffset, size_t listAmount)
|
||||
: CList(size, position)
|
||||
CTownList::CTownList(int visibleItemsCount, Rect widgetPosition, Point firstItemOffset, Point itemOffsetDelta, size_t initialItemsCount)
|
||||
: CList(visibleItemsCount, widgetPosition)
|
||||
{
|
||||
createList(itemOffset, listAmount);
|
||||
createList(firstItemOffset, itemOffsetDelta, initialItemsCount);
|
||||
}
|
||||
|
||||
void CTownList::select(const CGTownInstance * town)
|
||||
|
@ -67,9 +67,9 @@ private:
|
||||
protected:
|
||||
std::shared_ptr<CListBox> listBox;
|
||||
|
||||
CList(int size, Point position);
|
||||
CList(int size, Rect widgetDimensions);
|
||||
|
||||
void createList(Point itemOffset, size_t listAmount);
|
||||
void createList(Point firstItemPosition, Point itemPositionDelta, size_t listAmount);
|
||||
|
||||
virtual std::shared_ptr<CIntObject> createItem(size_t index) = 0;
|
||||
|
||||
@ -90,6 +90,8 @@ public:
|
||||
void selectIndex(int which);
|
||||
void selectNext();
|
||||
void selectPrev();
|
||||
|
||||
void showAll(SDL_Surface * to) override;
|
||||
};
|
||||
|
||||
/// List of heroes which is shown at the right of the adventure map screen
|
||||
@ -125,7 +127,7 @@ class CHeroList : public CList
|
||||
|
||||
std::shared_ptr<CIntObject> createItem(size_t index);
|
||||
public:
|
||||
CHeroList(int size, Point position, Point itemOffset, size_t listAmount);
|
||||
CHeroList(int visibleItemsCount, Rect widgetPosition, Point firstItemOffset, Point itemOffsetDelta, size_t initialItemsCount);
|
||||
|
||||
/// Select specific hero and scroll if needed
|
||||
void select(const CGHeroInstance * hero = nullptr);
|
||||
@ -155,7 +157,7 @@ class CTownList : public CList
|
||||
|
||||
std::shared_ptr<CIntObject> createItem(size_t index) override;
|
||||
public:
|
||||
CTownList(int size, Point position, Point itemOffset, size_t listAmount);
|
||||
CTownList(int visibleItemsCount, Rect widgetPosition, Point firstItemOffset, Point itemOffsetDelta, size_t initialItemsCount);
|
||||
|
||||
/// Select specific town and scroll if needed
|
||||
void select(const CGTownInstance * town = nullptr);
|
||||
|
@ -72,7 +72,6 @@ BattleWindow::BattleWindow(BattleInterface & owner):
|
||||
|
||||
console = widget<BattleConsole>("console");
|
||||
|
||||
GH.statusbar = console;
|
||||
owner.console = console;
|
||||
|
||||
owner.fieldController.reset( new BattleFieldController(owner));
|
||||
|
@ -1200,7 +1200,7 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, const CGTownInst
|
||||
statusbar = CGStatusBar::create(statusbarBackground);
|
||||
resdatabar = std::make_shared<CResDataBar>("ARESBAR", 3, 575, 32, 2, 85, 85);
|
||||
|
||||
townlist = std::make_shared<CTownList>(3, Point(745, 430), Point(0, 32), LOCPLINT->localState->getOwnedTowns().size() );
|
||||
townlist = std::make_shared<CTownList>(3, Rect(Point(745, 430), Point(48, 32*4)), Point(0,0), Point(0, 32), LOCPLINT->localState->getOwnedTowns().size() );
|
||||
townlist->setScrollUpButton( std::make_shared<CButton>( Point(744, 414), "IAM014", CButton::tooltipLocalized("core.help.306")));
|
||||
townlist->setScrollDownButton( std::make_shared<CButton>( Point(744, 526), "IAM015", CButton::tooltipLocalized("core.help.307")));
|
||||
|
||||
|
@ -1,14 +1,7 @@
|
||||
{
|
||||
"options" : {
|
||||
|
||||
// player-colored images used for background
|
||||
"imagesPlayerColored" : [ "AdvMap.pcx" ],
|
||||
|
||||
// widgets that are only visible in world view mode
|
||||
"worldViewWidgets" : [ "worldViewContainer" ],
|
||||
|
||||
// widgets that are only visible in game view mode
|
||||
"gameViewWidgets" : [ "townListContainer", "heroListContainer", "buttonsContainer", "infobox" ],
|
||||
},
|
||||
|
||||
"items":
|
||||
@ -77,12 +70,6 @@
|
||||
"image" : "AdvMap.pcx",
|
||||
"area" : { "right": 0, "top" : 0, "width" : 199, "height" : 196 }
|
||||
},
|
||||
{
|
||||
"type": "adventureMapImage",
|
||||
"name" : "backgroundRightInfobar",
|
||||
"image" : "AdvMap.pcx",
|
||||
"area" : { "bottom": 0, "right" : 0, "width" : 199, "height" : 211 }
|
||||
},
|
||||
{
|
||||
"type": "adventureMapImage",
|
||||
"name": "backgroundHeroListBorderLeft",
|
||||
@ -280,29 +267,29 @@
|
||||
"type": "adventureMapImage",
|
||||
"name" : "backgroundBelowHeroTownList",
|
||||
"image" : "AdvMap.pcx",
|
||||
"area" : { "right": 0, "left" : 0, "bottom" : 0, "height" : 3 },
|
||||
"sourceArea": { "bottom" : 208, "height" : 3, "right" : 0, "width" : 193 }
|
||||
"area" : { "right": 0, "left" : 0, "bottom" : 0, "height" : 4 },
|
||||
"sourceArea": { "bottom" : 208, "height" : 4, "right" : 0, "width" : 193 }
|
||||
},
|
||||
// Hero List
|
||||
{
|
||||
"type": "adventureMapHeroList",
|
||||
"name" : "heroList",
|
||||
"area": { "top": 0, "right" : 127, "width" : 64, "height" : 192 },
|
||||
"area": { "top": 0, "right" : 125, "width" : 68, "height" : 193 },
|
||||
"scrollUp" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "heroListScrollUp",
|
||||
"image" : "IAM012.DEF",
|
||||
"help" : "core.help.303",
|
||||
"area": { "top" : 0, "left": 0, "width" : 64, "height" : 16 }
|
||||
"area": { "top" : 0, "left": 2, "width" : 64, "height" : 16 }
|
||||
},
|
||||
"scrollDown" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "heroListScrollDown",
|
||||
"image" : "IAM013.DEF",
|
||||
"help" : "core.help.304",
|
||||
"area": { "bottom" : 0, "left": 0, "width" : 64, "height" : 16 }
|
||||
"area": { "bottom" : 0, "left": 2, "width" : 64, "height" : 16 }
|
||||
},
|
||||
"item" : { "top" : 16, "left": 1, "width" : 62, "height" : 32 },
|
||||
"item" : { "top" : 16, "left": 3, "width" : 62, "height" : 32 },
|
||||
"itemsOffset" : { "x" : 0, "y" : 32 },
|
||||
"itemsCount" : 5
|
||||
},
|
||||
@ -310,22 +297,22 @@
|
||||
{
|
||||
"type": "adventureMapTownList",
|
||||
"name" : "townList",
|
||||
"area": { "top": 0, "right" : 5, "width" : 48, "height" : 192 },
|
||||
"area": { "top": 0, "right" : 3, "width" : 51, "height" : 193 },
|
||||
"scrollUp" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "townListScrollUp",
|
||||
"image" : "IAM014.DEF",
|
||||
"help" : "core.help.306",
|
||||
"area": { "top" : 0, "left": 0, "width" : 48, "height" : 16 }
|
||||
"area": { "top" : 0, "left": 1, "width" : 48, "height" : 16 }
|
||||
},
|
||||
"scrollDown" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "townListScrollDown",
|
||||
"image" : "IAM015.DEF",
|
||||
"help" : "core.help.307",
|
||||
"area": { "bottom" : 0, "left": 0, "width" : 48, "height" : 16 }
|
||||
"area": { "bottom" : 0, "left": 1, "width" : 48, "height" : 16 }
|
||||
},
|
||||
"item" : { "top" : 16, "left": 0, "width" : 48, "height" : 32 },
|
||||
"item" : { "top" : 16, "left": 2, "width" : 48, "height" : 32 },
|
||||
"itemsOffset" : { "x" : 0, "y" : 32 },
|
||||
"itemsCount" : 5
|
||||
},
|
||||
@ -373,15 +360,15 @@
|
||||
"type": "adventureMapImage",
|
||||
"name" : "backgroundBelowHeroTownList",
|
||||
"image" : "AdvMap.pcx",
|
||||
"area" : { "right": 0, "left" : 0, "bottom" : 0, "height" : 3 },
|
||||
"sourceArea": { "bottom" : 208, "height" : 3, "right" : 0, "width" : 193 }
|
||||
"area" : { "right": 0, "left" : 0, "bottom" : 0, "height" : 4 },
|
||||
"sourceArea": { "bottom" : 208, "height" : 4, "right" : 0, "width" : 193 }
|
||||
},
|
||||
// Hero List
|
||||
{
|
||||
"type": "adventureMapHeroList",
|
||||
"name" : "heroList",
|
||||
"area": { "top": 0, "right" : 127, "width" : 64, "height" : 256 },
|
||||
"item" : { "top" : 0, "left": 1, "width" : 62, "height" : 32 },
|
||||
"area": { "top": 0, "right" : 125, "width" : 68, "height" : 257 },
|
||||
"item" : { "top" : 1, "left": 3, "width" : 62, "height" : 32 },
|
||||
"itemsOffset" : { "x" : 0, "y" : 32 },
|
||||
"itemsCount" : 8
|
||||
},
|
||||
@ -389,22 +376,22 @@
|
||||
{
|
||||
"type": "adventureMapTownList",
|
||||
"name" : "townList",
|
||||
"area": { "top": 0, "right" : 5, "width" : 48, "height" : 256 },
|
||||
"area": { "top": 0, "right" : 3, "width" : 51, "height" : 257 },
|
||||
"scrollUp" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "townListScrollUp",
|
||||
"image" : "IAM014.DEF",
|
||||
"help" : "core.help.306",
|
||||
"area": { "top" : 0, "left": 0, "width" : 48, "height" : 16 }
|
||||
"area": { "top" : 0, "left": 1, "width" : 48, "height" : 16 }
|
||||
},
|
||||
"scrollDown" : {
|
||||
"type": "adventureMapButton",
|
||||
"name": "townListScrollDown",
|
||||
"image" : "IAM015.DEF",
|
||||
"help" : "core.help.307",
|
||||
"area": { "bottom" : 0, "left": 0, "width" : 48, "height" : 16 }
|
||||
"area": { "bottom" : 0, "left": 1, "width" : 48, "height" : 16 }
|
||||
},
|
||||
"item" : { "top" : 16, "left": 0, "width" : 48, "height" : 32 },
|
||||
"item" : { "top" : 16, "left": 1, "width" : 48, "height" : 32 },
|
||||
"itemsOffset" : { "x" : 0, "y" : 32 },
|
||||
"itemsCount" : 7
|
||||
},
|
||||
@ -438,13 +425,20 @@
|
||||
"type": "adventureMapContainer",
|
||||
"name" : "adventureInfobarContainer",
|
||||
"hideWhen" : "worldViewMode",
|
||||
"area": { "bottom": 44, "right" : 19, "width" : 175, "height" : 168 }
|
||||
"area" : { "bottom": 0, "right" : 0, "width" : 199, "height" : 211 }
|
||||
"items" : [
|
||||
// Infobar
|
||||
{
|
||||
"type": "adventureMapImage",
|
||||
"name" : "backgroundRightInfobar",
|
||||
"image" : "AdvMap.pcx",
|
||||
"area": { "top": 0, "bottom" : 0, "left" : 0, "right" : 0 },
|
||||
"sourceArea" : { "bottom": 0, "right" : 0, "width" : 199, "height" : 211 }
|
||||
},
|
||||
{
|
||||
"type": "adventureInfobar",
|
||||
"name": "infoBar",
|
||||
"area": { "bottom": 0, "top" : 0, "left" : 0, "right" : 0 }
|
||||
"area": { "bottom": 44, "right" : 19, "width" : 175, "height" : 168 }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user