diff options
Diffstat (limited to 'src')
224 files changed, 1910 insertions, 2100 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 02a7240f1..961fb7abd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -552,6 +552,7 @@ SET(SRCS utils/copynpaste.h utils/cpu.cpp utils/cpu.h + utils/delete2.h utils/dtor.h utils/files.cpp utils/files.h diff --git a/src/Makefile.am b/src/Makefile.am index 8483fa994..942ac7244 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,7 +25,7 @@ else manaplus_SOURCES = endif -dyecmd_CXXFLAGS = +dyecmd_CXXFLAGS = -DDYECMD dyecmd_SOURCES = gui/cliprect.cpp \ gui/color.cpp \ gui/rect.cpp \ @@ -632,6 +632,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ utils/copynpaste.h \ utils/cpu.cpp \ utils/cpu.h \ + utils/delete2.h \ utils/dtor.h \ utils/files.cpp \ utils/files.h \ diff --git a/src/actormanager.cpp b/src/actormanager.cpp index bc325abe8..2d7c3a11b 100644 --- a/src/actormanager.cpp +++ b/src/actormanager.cpp @@ -812,9 +812,7 @@ void ActorManager::clear() } for_actors - { delete *it; - } mActors.clear(); mDeleteActors.clear(); diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp index 97424fbfb..930d7d61e 100644 --- a/src/animatedsprite.cpp +++ b/src/animatedsprite.cpp @@ -31,6 +31,8 @@ #include "resources/image.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" + #include "debug.h" bool AnimatedSprite::mEnableCache = false; @@ -108,8 +110,7 @@ AnimatedSprite::~AnimatedSprite() { mDelayLoad->clearSprite(); ResourceManager::removeDelayLoad(mDelayLoad); - delete mDelayLoad; - mDelayLoad = nullptr; + delete2(mDelayLoad); } } diff --git a/src/avatar.cpp b/src/avatar.cpp index 4c936ba7f..3e685f008 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -27,24 +27,25 @@ #include "debug.h" Avatar::Avatar(const std::string &name): - mId(0), - mCharId(0), - mName(name), - mOriginalName(name), - mHp(0), - mMaxHp(0), - mDamageHp(0), - mLevel(1), - mMap(), - mX(-1), - mY(-1), - mType(AVATAR_PLAYER), - mExp(0), - mGender(GENDER_UNSPECIFIED), - mRace(-1), - mIp(), - mOnline(false), - mDisplayBold(false) + mId(0), + mCharId(0), + mName(name), + mOriginalName(name), + mHp(0), + mMaxHp(0), + mDamageHp(0), + mLevel(1), + mMap(), + mX(-1), + mY(-1), + mType(AVATAR_PLAYER), + mExp(0), + mGender(GENDER_UNSPECIFIED), + mRace(-1), + mIp(), + mOnline(false), + mDisplayBold(false), + mPoison(false) { } diff --git a/src/avatar.h b/src/avatar.h index 9804b318e..03050a06f 100644 --- a/src/avatar.h +++ b/src/avatar.h @@ -172,6 +172,12 @@ public: void setIp(std::string ip) { mIp = ip; } + bool getPoison() const A_WARN_UNUSED + { return mPoison; } + + void setPoison(const bool b) + { mPoison = b; } + protected: int mId; int mCharId; @@ -191,6 +197,7 @@ protected: std::string mIp; bool mOnline; bool mDisplayBold; + bool mPoison; }; #endif // AVATAR_H diff --git a/src/being/actorsprite.cpp b/src/being/actorsprite.cpp index bbb016525..29fa1290c 100644 --- a/src/being/actorsprite.cpp +++ b/src/being/actorsprite.cpp @@ -37,6 +37,7 @@ #include "resources/resourcemanager.h" #include "utils/checkutils.h" +#include "utils/delete2.h" #include "utils/timer.h" #include "debug.h" @@ -57,7 +58,8 @@ ActorSprite::ActorSprite(const int id) : mActorSpriteListeners(), mCursorPaddingX(0), mCursorPaddingY(0), - mMustResetParticles(false) + mMustResetParticles(false), + mPoison(false) { } @@ -197,7 +199,13 @@ void ActorSprite::updateStunMode(const int oldMode, const int newMode) void ActorSprite::updateStatusEffect(const int index, const bool newStatus) { - handleStatusEffect(StatusEffect::getStatusEffect(index, newStatus), index); + StatusEffect *const effect = StatusEffect::getStatusEffect( + index, newStatus); + if (!effect) + return; + if (effect->isPoison() && getType() == PLAYER) + setPoison(newStatus); + handleStatusEffect(effect, index); } void ActorSprite::handleStatusEffect(StatusEffect *const effect, @@ -372,10 +380,7 @@ void ActorSprite::cleanupTargetCursors() for (int type = TCT_NORMAL; type < NUM_TCT; type++) { if (targetCursor[type][size]) - { - delete targetCursor[type][size]; - targetCursor[type][size] = nullptr; - } + delete2(targetCursor[type][size]) } } } diff --git a/src/being/actorsprite.h b/src/being/actorsprite.h index 444232ddd..76e90182d 100644 --- a/src/being/actorsprite.h +++ b/src/being/actorsprite.h @@ -179,12 +179,18 @@ public: */ void removeActorSpriteListener(ActorSpriteListener *const listener); - int getActorX() const + int getActorX() const A_WARN_UNUSED { return getPixelX() - mapTileSize / 2; } - int getActorY() const + int getActorY() const A_WARN_UNUSED { return getPixelY() - mapTileSize; } + void setPoison(const bool b) + { mPoison = b; } + + bool getPoison() const A_WARN_UNUSED + { return mPoison; } + protected: /** * Notify self that the stun mode has been updated. Invoked by @@ -244,6 +250,7 @@ private: /** Reset particle status effects on next redraw? */ bool mMustResetParticles; + bool mPoison; }; #endif // BEING_ACTORSPRITE_H diff --git a/src/being/being.cpp b/src/being/being.cpp index 41c3bc40c..be4d8b903 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -232,17 +232,11 @@ Being::~Being() delete [] mSpriteDraw; mSpriteDraw = nullptr; - delete mSpeechBubble; - mSpeechBubble = nullptr; - delete mDispName; - mDispName = nullptr; - delete mText; - mText = nullptr; - - delete mEmotionSprite; - mEmotionSprite = nullptr; - delete mAnimationEffect; - mAnimationEffect = nullptr; + delete2(mSpeechBubble); + delete2(mDispName); + delete2(mText); + delete2(mEmotionSprite); + delete2(mAnimationEffect); if (mOwner) mOwner->unassignPet(this); @@ -469,7 +463,6 @@ void Being::setSpeech(const std::string &text, const std::string &channel, if (speech == TEXT_OVERHEAD && userPalette) { delete mText; - mText = new Text(mSpeech, getPixelX(), getPixelY() - getHeight(), Graphics::CENTER, @@ -821,14 +814,9 @@ void Being::setShowName(const bool doShowName) mShowName = doShowName; if (doShowName) - { showName(); - } else - { - delete mDispName; - mDispName = nullptr; - } + delete2(mDispName) } void Being::setGuildName(const std::string &name) @@ -1365,10 +1353,7 @@ void Being::logic() // Remove text and speechbubbles if speech boxes aren't being used if (mSpeechTime == 0 && mText) - { - delete mText; - mText = nullptr; - } + delete2(mText) const int time = tick_time * MILLISECONDS_IN_A_TICK; if (mEmotionSprite) @@ -1378,10 +1363,7 @@ void Being::logic() { mAnimationEffect->update(time); if (mAnimationEffect->isTerminated()) - { - delete mAnimationEffect; - mAnimationEffect = nullptr; - } + delete2(mAnimationEffect) } int frameCount = static_cast<int>(getFrameCount()); @@ -1453,10 +1435,7 @@ void Being::logic() { mEmotionTime--; if (mEmotionTime == 0) - { - delete mEmotionSprite; - mEmotionSprite = nullptr; - } + delete2(mEmotionSprite) } ActorSprite::logic(); @@ -1695,8 +1674,7 @@ void Being::drawSpeech(const int offsetX, const int offsetY) else if (mSpeechTime > 0 && (speech == NAME_IN_BUBBLE || speech == NO_NAME_IN_BUBBLE)) { - delete mText; - mText = nullptr; + delete2(mText) mSpeechBubble->setPosition(px - (mSpeechBubble->getWidth() / 2), py - getHeight() - (mSpeechBubble->getHeight())); @@ -1710,16 +1688,14 @@ void Being::drawSpeech(const int offsetX, const int offsetY) if (!mText && userPalette) { mText = new Text(mSpeech, getPixelX(), getPixelY() - getHeight(), - Graphics::CENTER, &Theme::getThemeColor( - Theme::BUBBLE_TEXT), true); + Graphics::CENTER, &theme->getColor( + Theme::BUBBLE_TEXT, 255), true); } } else if (speech == NO_SPEECH) { mSpeechBubble->setVisible(false); - - delete mText; - mText = nullptr; + delete2(mText) } } @@ -1831,8 +1807,7 @@ void Being::showName() if (mName.empty()) return; - delete mDispName; - mDispName = nullptr; + delete2(mDispName); if (mHideErased && player_relations.getRelation(mName) == PlayerRelation::ERASED) @@ -1901,11 +1876,11 @@ void Being::updateColors() else if (this == player_node) { mNameColor = &userPalette->getColor(UserPalette::SELF); - mTextColor = &Theme::getThemeColor(Theme::PLAYER); + mTextColor = &theme->getColor(Theme::PLAYER, 255); } else { - mTextColor = &Theme::getThemeColor(Theme::PLAYER); + mTextColor = &theme->getColor(Theme::PLAYER, 255); if (player_relations.getRelation(mName) != PlayerRelation::ERASED) mErased = false; @@ -2967,8 +2942,7 @@ void Being::setEmote(const uint8_t emotion, const int emote_time) const int emotionIndex = emotion - 1; if (emotionIndex >= 0 && emotionIndex <= EmoteDB::getLast()) { - delete mEmotionSprite; - mEmotionSprite = nullptr; + delete2(mEmotionSprite) const EmoteInfo *const info = EmoteDB::get2(emotionIndex, true); if (info) { @@ -3076,8 +3050,7 @@ void Being::removeSpecialEffect() mChildParticleEffects.removeLocally(mSpecialParticle); mSpecialParticle = nullptr; } - delete mAnimationEffect; - mAnimationEffect = nullptr; + delete2(mAnimationEffect); } void Being::updateAwayEffect() @@ -3322,9 +3295,7 @@ void Being::setMap(Map *const map) void Being::removeAllItemsParticles() { FOR_EACH (SpriteParticleInfoIter, it, mSpriteParticles) - { delete (*it).second; - } mSpriteParticles.clear(); } diff --git a/src/being/compoundsprite.cpp b/src/being/compoundsprite.cpp index ea4a2067f..6c159821d 100644 --- a/src/being/compoundsprite.cpp +++ b/src/being/compoundsprite.cpp @@ -36,6 +36,7 @@ #include "resources/image.h" #include "resources/imagehelper.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/sdlcheckutils.h" #include "utils/timer.h" @@ -252,8 +253,7 @@ void CompoundSprite::removeSprite(const int layer) if (!mSprites.at(layer)) return; - delete mSprites.at(layer); - mSprites.at(layer) = nullptr; + delete2(mSprites.at(layer)); mNeedsRedraw = true; } @@ -268,8 +268,7 @@ void CompoundSprite::clear() mNeedsRedraw = true; delete_all(imagesCache); imagesCache.clear(); - delete mCacheItem; - mCacheItem = nullptr; + delete2(mCacheItem); } void CompoundSprite::ensureSize(size_t layerCount) @@ -337,7 +336,7 @@ void CompoundSprite::redraw() const SurfaceGraphics *graphics = new SurfaceGraphics(); graphics->setBlitMode(SurfaceGraphics::BLIT_GFX); graphics->setTarget(surface); - graphics->_beginDraw(); + graphics->beginDraw(); int tileX = mapTileSize / 2; int tileY = mapTileSize; @@ -361,8 +360,7 @@ void CompoundSprite::redraw() const drawSpritesSDL(graphics, posX, posY); - delete graphics; - graphics = nullptr; + delete2(graphics); SDL_Surface *const surfaceA = MSDL_CreateRGBSurface(SDL_HWSURFACE, BUFFER_WIDTH, BUFFER_HEIGHT, 32, rmask, gmask, bmask, amask); diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 889f2b906..c774b985b 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -69,6 +69,7 @@ #include "resources/db/emotedb.h" #include "resources/db/weaponsdb.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/timer.h" @@ -161,6 +162,7 @@ LocalPlayer::LocalPlayer(const int id, const int subtype) : mAttackMoving(config.getBoolValue("attackMoving")), mAttackNext(config.getBoolValue("attackNext")), mShowJobExp(config.getBoolValue("showJobExp")), + mShowServerPos(config.getBoolValue("showserverpos")), mNextStep(false), mDisableCrazyMove(false), mGoingToTarget(false), @@ -178,7 +180,7 @@ LocalPlayer::LocalPlayer(const int id, const int subtype) : mAttackRange = 0; mLevel = 1; mAdvanced = true; - mTextColor = &Theme::getThemeColor(Theme::PLAYER); + mTextColor = &theme->getColor(Theme::PLAYER, 255); if (userPalette) mNameColor = &userPalette->getColor(UserPalette::SELF); else @@ -202,6 +204,7 @@ LocalPlayer::LocalPlayer(const int id, const int subtype) : config.addListener("enableAdvert", this); config.addListener("tradebot", this); config.addListener("targetOnlyReachable", this); + config.addListener("showserverpos", this); setShowName(config.getBoolValue("showownname")); } @@ -221,11 +224,9 @@ LocalPlayer::~LocalPlayer() if (mAwayDialog) { soundManager.volumeRestore(); - delete mAwayDialog; - mAwayDialog = nullptr; + delete2(mAwayDialog) } - delete mAwayListener; - mAwayListener = nullptr; + delete2(mAwayListener); } void LocalPlayer::logic() @@ -1019,6 +1020,8 @@ void LocalPlayer::optionChanged(const std::string &value) mTradebot = config.getBoolValue("tradebot"); else if (value == "targetOnlyReachable") mTargetOnlyReachable = config.getBoolValue("targetOnlyReachable"); + else if (value == "showserverpos") + mShowServerPos = config.getBoolValue("showserverpos"); } void LocalPlayer::processEvent(const Channels channel, @@ -3552,14 +3555,15 @@ void LocalPlayer::setRealPos(const int x, const int y) { fixPos(1); - if ((mCrossX || mCrossY) && layer->getTile(mCrossX, mCrossY) + if ((mCrossX || mCrossY) + && layer->getTile(mCrossX, mCrossY) && layer->getTile(mCrossX, mCrossY)->getType() == MapItem::CROSS) { layer->setTile(mCrossX, mCrossY, MapItem::EMPTY); } - if (!layer->getTile(x, y) - || layer->getTile(x, y)->getType() == MapItem::EMPTY) + if (mShowServerPos && (!layer->getTile(x, y) + || layer->getTile(x, y)->getType() == MapItem::EMPTY)) { if (getTileX() != x && getTileY() != y) layer->setTile(x, y, MapItem::CROSS); diff --git a/src/being/localplayer.h b/src/being/localplayer.h index 5664b03b6..280e245cd 100644 --- a/src/being/localplayer.h +++ b/src/being/localplayer.h @@ -639,6 +639,7 @@ class LocalPlayer final : public Being, bool mAttackMoving; bool mAttackNext; bool mShowJobExp; + bool mShowServerPos; bool mNextStep; // temporary disable crazy moves in moves bool mDisableCrazyMove; diff --git a/src/being/playerinfo.cpp b/src/being/playerinfo.cpp index 728fe786f..12ce1e6d3 100644 --- a/src/being/playerinfo.cpp +++ b/src/being/playerinfo.cpp @@ -37,6 +37,8 @@ #include "net/net.h" #include "net/playerhandler.h" +#include "utils/delete2.h" + #include "debug.h" namespace PlayerInfo @@ -422,10 +424,8 @@ bool isTalking() void gameDestroyed() { - delete mInventory; - mInventory = nullptr; - delete mEquipment; - mEquipment = nullptr; + delete2(mInventory); + delete2(mEquipment); } void stateChange(const int state) diff --git a/src/beingequipbackend.cpp b/src/beingequipbackend.cpp index 03d882665..3f5f627a8 100644 --- a/src/beingequipbackend.cpp +++ b/src/beingequipbackend.cpp @@ -25,6 +25,8 @@ #include "net/inventoryhandler.h" #include "net/net.h" +#include "utils/delete2.h" + #include "debug.h" BeingEquipBackend::BeingEquipBackend(Being *const being) @@ -51,19 +53,13 @@ BeingEquipBackend::BeingEquipBackend(Being *const being) BeingEquipBackend::~BeingEquipBackend() { for (int i = 0; i < EQUIPMENT_SIZE; i++) - { - delete mEquipment[i]; - mEquipment[i] = nullptr; - } + delete2(mEquipment[i]) } void BeingEquipBackend::clear() { for (int i = 0; i < EQUIPMENT_SIZE; i++) - { - delete mEquipment[i]; - mEquipment[i] = nullptr; - } + delete2(mEquipment[i]) } void BeingEquipBackend::setEquipment(const int index, Item *const item) diff --git a/src/client.cpp b/src/client.cpp index d8cd1f6f2..9aded7682 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -110,6 +110,7 @@ #include "utils/base64.h" #include "utils/cpu.h" +#include "utils/delete2.h" #include "utils/files.h" #include "utils/fuzzer.h" #include "utils/gettext.h" @@ -399,6 +400,7 @@ void Client::gameInit() initTitle(); + theme = new Theme; Theme::selectSkin(); touchManager.init(); @@ -584,7 +586,7 @@ void Client::initGraphics() applyGrabMode(); applyGamma(); - mainGraphics->_beginDraw(); + mainGraphics->beginDraw(); } void Client::initTitle() @@ -820,12 +822,9 @@ void Client::gameClear() eventsManager.shutdown(); - delete setupWindow; - setupWindow = nullptr; - delete helpWindow; - helpWindow = nullptr; - delete didYouKnowWindow; - didYouKnowWindow = nullptr; + delete2(setupWindow); + delete2(helpWindow); + delete2(didYouKnowWindow); stopTimers(); @@ -852,33 +851,24 @@ void Client::gameClear() Net::getChatHandler()->clear(); #ifdef USE_MUMBLE - delete mumbleManager; - mumbleManager = nullptr; + delete2(mumbleManager); #endif PlayerInfo::deinit(); // Before config.write() since it writes the shortcuts to the config for (unsigned f = 0; f < SHORTCUT_TABS; f ++) - { - delete itemShortcut[f]; - itemShortcut[f] = nullptr; - } - delete emoteShortcut; - emoteShortcut = nullptr; - delete dropShortcut; - dropShortcut = nullptr; + delete2(itemShortcut[f]) + delete2(emoteShortcut); + delete2(dropShortcut); player_relations.store(); if (logger) logger->log1("Quitting2"); - delete mCurrentDialog; - mCurrentDialog = nullptr; - - delete gui; - gui = nullptr; + delete2(mCurrentDialog); + delete2(gui); if (Net::getInventoryHandler()) Net::getInventoryHandler()->clear(); @@ -886,14 +876,12 @@ void Client::gameClear() if (logger) logger->log1("Quitting3"); - delete mainGraphics; - mainGraphics = nullptr; + delete2(mainGraphics); if (imageHelper != surfaceImageHelper) delete surfaceImageHelper; surfaceImageHelper = nullptr; - delete imageHelper; - imageHelper = nullptr; + delete2(imageHelper); if (logger) logger->log1("Quitting4"); @@ -924,11 +912,8 @@ void Client::gameClear() if (logger) logger->log1("Quitting9"); - delete userPalette; - userPalette = nullptr; - - delete joystick; - joystick = nullptr; + delete2(userPalette); + delete2(joystick); keyboard.deinit(); @@ -960,8 +945,7 @@ void Client::gameClear() logger->log("textures left: %d", textures_count); #endif - delete chatLogger; - chatLogger = nullptr; + delete2(chatLogger); TranslationManager::close(); } @@ -998,8 +982,7 @@ int Client::gameExec() mumbleManager = new MumbleManager(); #endif - if (Theme::instance()) - mSkin = Theme::instance()->load("windowmenu.xml", ""); + mSkin = theme->load("windowmenu.xml", ""); if (mSkin) { mButtonPadding = mSkin->getPadding(); @@ -1174,8 +1157,7 @@ int Client::gameExec() if (mOldState == STATE_GAME) { - delete mGame; - mGame = nullptr; + delete2(mGame); Game::clearInstance(); ResourceManager *const resman = ResourceManager::getInstance(); if (resman) @@ -1198,8 +1180,7 @@ int Client::gameExec() mOldState = mState; // Get rid of the dialog of the previous state - delete mCurrentDialog; - mCurrentDialog = nullptr; + delete2(mCurrentDialog); // State has changed, while the quitDialog was active, it might // not be correct anymore if (mQuitDialog) @@ -1256,7 +1237,7 @@ int Client::gameExec() { // Don't allow an alpha opacity // lower than the default value - Theme::instance()->setMinimumOpacity(0.8F); + theme->setMinimumOpacity(0.8F); mCurrentDialog = new ServerDialog(&mCurrentServer, mConfigDir); @@ -1298,7 +1279,7 @@ int Client::gameExec() logger->log1("State: LOGIN"); // Don't allow an alpha opacity // lower than the default value - Theme::instance()->setMinimumOpacity(0.8F); + theme->setMinimumOpacity(0.8F); loginData.updateType = serverConfig.getValue("updateType", 1); @@ -1505,7 +1486,7 @@ int Client::gameExec() logger->log1("State: CHAR SELECT"); // Don't allow an alpha opacity // lower than the default value - Theme::instance()->setMinimumOpacity(0.8F); + theme->setMinimumOpacity(0.8F); mCurrentDialog = new CharSelectDialog(&loginData); mCurrentDialog->postInit(); @@ -1571,29 +1552,21 @@ int Client::gameExec() soundManager.fadeOutMusic(1000); // Allow any alpha opacity - Theme::instance()->setMinimumOpacity(-1.0F); + theme->setMinimumOpacity(-1.0F); if (chatLogger) chatLogger->setServerName(mServerName); #ifdef ANDROID - delete mCloseButton; - mCloseButton = nullptr; -#endif - delete mSetupButton; - mSetupButton = nullptr; - delete mVideoButton; - mVideoButton = nullptr; - delete mThemesButton; - mThemesButton = nullptr; - delete mAboutButton; - mAboutButton = nullptr; - delete mHelpButton; - mHelpButton = nullptr; - delete mPerfomanceButton; - mPerfomanceButton = nullptr; - delete mDesktop; - mDesktop = nullptr; + delete2(mCloseButton); +#endif + delete2(mSetupButton); + delete2(mVideoButton); + delete2(mThemesButton); + delete2(mAboutButton); + delete2(mHelpButton); + delete2(mPerfomanceButton); + delete2(mDesktop); mCurrentDialog = nullptr; @@ -2837,6 +2810,9 @@ void Client::resizeVideo(int actualWidth, x -= mThemesButton->getWidth() + mButtonSpacing; mThemesButton->setPosition(x, mButtonPadding); + x -= mAboutButton->getWidth() + mButtonSpacing; + mAboutButton->setPosition(x, mButtonPadding); + x -= mHelpButton->getWidth() + mButtonSpacing; mHelpButton->setPosition(x, mButtonPadding); #ifdef ANDROID @@ -2984,7 +2960,7 @@ Window *Client::openErrorDialog(const std::string &header, const std::string &message, const bool modal) { - if (getSupportUrl().empty()) + if (getSupportUrl().empty() || config.getBoolValue("hidesupport")) { return new OkDialog(header, message, DIALOG_ERROR, modal); } diff --git a/src/commands.cpp b/src/commands.cpp index 0cc5cee8a..de4c03012 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -77,6 +77,7 @@ #include "resources/db/itemdb.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/process.h" #include "utils/timer.h" @@ -1270,6 +1271,10 @@ impHandler1(talkPet) Net::getChatHandler()->talk(args, GENERAL_CHANNEL); } +impHandler1(gm) +{ + Net::getChatHandler()->talk("@wgm " + args, GENERAL_CHANNEL); +} struct UploadChatInfo { @@ -1315,8 +1320,7 @@ static int uploadUpdate(void *ptr, } } } - delete info->upload; - info->upload = nullptr; + delete2(info->upload); delete info; return 0; } @@ -1375,7 +1379,7 @@ impHandler0(testsdlfont) for (int f = 0; f < 300; f ++) data.push_back("test " + toString(f) + "string"); - nullGraphics->_beginDraw(); + nullGraphics->beginDraw(); clock_gettime(CLOCK_MONOTONIC, &time1); for (int f = 0; f < 500; f ++) diff --git a/src/commands.h b/src/commands.h index e53d66559..6dd688a17 100644 --- a/src/commands.h +++ b/src/commands.h @@ -133,6 +133,7 @@ namespace Commands decHandler(uploadConfig); decHandler(uploadServerConfig); decHandler(uploadLog); + decHandler(gm); void replaceVars(std::string &str); } // namespace Commands @@ -233,6 +234,7 @@ enum COMMAND_UPLOADCONFIG, COMMAND_UPLOADSERVERCONFIG, COMMAND_UPLOADLOG, + COMMAND_GM, COMMAND_HACK, END_COMMANDS }; @@ -333,6 +335,7 @@ static const CommandInfo commands[] = {"uploadconfig", &Commands::uploadConfig, -1, false}, {"uploadserverconfig", &Commands::uploadServerConfig, -1, false}, {"uploadlog", &Commands::uploadLog, -1, false}, + {"gm", &Commands::gm, -1, true}, {"hack", &Commands::hack, -1, true} }; diff --git a/src/configuration.cpp b/src/configuration.cpp index 54420a9f3..550c61243 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -27,6 +27,7 @@ #include "listeners/configlistener.h" +#include "utils/delete2.h" #include "utils/paths.h" #include "debug.h" @@ -367,8 +368,7 @@ void Configuration::cleanDefaults() delete (iter->second); } mDefaultsData->clear(); - delete mDefaultsData; - mDefaultsData = nullptr; + delete2(mDefaultsData); } } diff --git a/src/defaults.cpp b/src/defaults.cpp index d5f907696..7e2e22769 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -361,6 +361,8 @@ DefaultsData* getConfigDefaults() AddDEF("usepets", true); AddDEF("scale", 1); AddDEF("addwatermark", true); + AddDEF("hidesupport", false); + AddDEF("showserverpos", false); return configData; } @@ -535,6 +537,7 @@ DefaultsData* getPathsDefaults() AddDEF("deadMessagesFile", "deadmessages.xml"); AddDEF("deadMessagesPatchFile", "deadmessages_patch.xml"); AddDEF("deadMessagesPatchDir", "deadmessages.d"); + AddDEF("poisonEffectName", "poison"); return configData; } diff --git a/src/depricatedevent.cpp b/src/depricatedevent.cpp index fc499c47b..3f8abad00 100644 --- a/src/depricatedevent.cpp +++ b/src/depricatedevent.cpp @@ -25,6 +25,8 @@ #include "listeners/depricatedlistener.h" +#include "utils/delete2.h" + #include "debug.h" DepricatedListenMap DepricatedEvent::mBindings; @@ -34,8 +36,7 @@ DepricatedEvent::~DepricatedEvent() VariableMap::iterator it = mData.begin(); while (it != mData.end()) { - delete it->second; - it->second = nullptr; + delete2(it->second); ++it; } } diff --git a/src/game.cpp b/src/game.cpp index e30b7222e..33369bf97 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -98,6 +98,7 @@ #include "resources/db/mapdb.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/langs.h" #include "utils/mkdir.h" @@ -263,8 +264,7 @@ static void createGuiWindows() killStats = new KillStats; socialWindow = new SocialWindow; socialWindow->postInit(); - if (serverVersion >= 6) - questsWindow = new QuestsWindow; + questsWindow = new QuestsWindow; // TRANSLATORS: chat tab header localChatTab = new ChatTab(chatWindow, _("General"), GENERAL_CHANNEL); @@ -324,8 +324,6 @@ static void createGuiWindows() Net::getGeneralHandler()->gameStarted(); } -#define del_0(X) { delete X; X = nullptr; } - /** * Destroy all the globally accessible gui windows */ @@ -342,37 +340,37 @@ static void destroyGuiWindows() if (guildManager) guildManager->clear(); - del_0(windowMenu); - del_0(localChatTab) // Need to do this first, so it can remove itself - del_0(debugChatTab) - del_0(tradeChatTab) - del_0(battleChatTab) - del_0(langChatTab) - del_0(gmChatTab); + delete2(windowMenu); + delete2(localChatTab) // Need to do this first, so it can remove itself + delete2(debugChatTab) + delete2(tradeChatTab) + delete2(battleChatTab) + delete2(langChatTab) + delete2(gmChatTab); logger->log("start deleting"); - del_0(emoteWindow); - del_0(chatWindow) + delete2(emoteWindow); + delete2(chatWindow) logger->log("end deleting"); - del_0(statusWindow) - del_0(miniStatusWindow) - del_0(inventoryWindow) - del_0(shopWindow) - del_0(skillDialog) - del_0(minimap) - del_0(equipmentWindow) - del_0(beingEquipmentWindow) - del_0(tradeWindow) - del_0(debugWindow) - del_0(itemShortcutWindow) - del_0(emoteShortcutWindow) - del_0(outfitWindow) - del_0(socialWindow) - del_0(dropShortcutWindow); - del_0(spellShortcutWindow); - del_0(botCheckerWindow); - del_0(questsWindow); - del_0(whoIsOnline); - del_0(killStats); + delete2(statusWindow) + delete2(miniStatusWindow) + delete2(inventoryWindow) + delete2(shopWindow) + delete2(skillDialog) + delete2(minimap) + delete2(equipmentWindow) + delete2(beingEquipmentWindow) + delete2(tradeWindow) + delete2(debugWindow) + delete2(itemShortcutWindow) + delete2(emoteShortcutWindow) + delete2(outfitWindow) + delete2(socialWindow) + delete2(dropShortcutWindow); + delete2(spellShortcutWindow); + delete2(botCheckerWindow); + delete2(questsWindow); + delete2(whoIsOnline); + delete2(killStats); if (auctionManager && AuctionManager::getEnableAuctionBot()) auctionManager->reload(); @@ -459,20 +457,20 @@ Game::~Game() AnimatedSprite::setEnableCache(false); - del_0(actorManager) + delete2(actorManager) if (client->getState() != STATE_CHANGE_MAP) - del_0(player_node) - del_0(commandHandler) - del_0(effectManager) - del_0(particleEngine) - del_0(viewport) - del_0(mCurrentMap) - del_0(spellManager) - del_0(spellShortcut) - del_0(auctionManager) - del_0(guildManager) + delete2(player_node) + delete2(commandHandler) + delete2(effectManager) + delete2(particleEngine) + delete2(viewport) + delete2(mCurrentMap) + delete2(spellManager) + delete2(spellShortcut) + delete2(auctionManager) + delete2(guildManager) #ifdef USE_MUMBLE - del_0(mumbleManager) + delete2(mumbleManager) #endif Being::clearCache(); @@ -484,8 +482,8 @@ void Game::addWatermark() { if (!boldFont || !config.getBoolValue("addwatermark")) return; - mainGraphics->setColorAll(Theme::getThemeColor(Theme::TEXT), - Theme::getThemeColor(Theme::TEXT_OUTLINE)); + mainGraphics->setColorAll(theme->getColor(Theme::TEXT, 255), + theme->getColor(Theme::TEXT_OUTLINE, 255)); boldFont->drawString(mainGraphics, client->getServerName(), 100, 50); } diff --git a/src/gui/cliprect.cpp b/src/gui/cliprect.cpp index 5255a4c98..5f71c8249 100644 --- a/src/gui/cliprect.cpp +++ b/src/gui/cliprect.cpp @@ -70,27 +70,19 @@ #include "debug.h" ClipRect::ClipRect() : - Rect(), + Rect(0, 0, 0, 0), xOffset(0), yOffset(0) { - x = 0; - y = 0; - width = 0; - height = 0; } ClipRect::ClipRect(const int x0, const int y0, const int width0, const int height0, const int xOffset0, const int yOffset0) : - Rect(), + Rect(x0, y0, width0, height0), xOffset(xOffset0), yOffset(yOffset0) { - x = x0; - y = y0; - width = width0; - height = height0; } const ClipRect& ClipRect::operator=(const Rect& other) @@ -99,6 +91,5 @@ const ClipRect& ClipRect::operator=(const Rect& other) y = other.y; width = other.width; height = other.height; - return *this; } diff --git a/src/gui/color.cpp b/src/gui/color.cpp index aa9ffe840..2536e2947 100644 --- a/src/gui/color.cpp +++ b/src/gui/color.cpp @@ -78,9 +78,9 @@ Color::Color() : } Color::Color(const unsigned int color) : - r((color >> 16) & 0xFF), - g((color >> 8) & 0xFF), - b(color & 0xFF), + r((color >> 16) & 0xFFU), + g((color >> 8) & 0xFFU), + b(color & 0xFFU), a(255U) { } @@ -113,9 +113,9 @@ Color Color::operator+(const Color& color) const Color Color::operator-(const Color& color) const { Color result(r - color.r, - g - color.g, - b - color.b, - 255U); + g - color.g, + b - color.b, + 255U); result.r = (result.r > 255U ? 255U : result.r); result.g = (result.g > 255U ? 255U : result.g); @@ -127,9 +127,9 @@ Color Color::operator-(const Color& color) const Color Color::operator*(const float value) const { Color result(static_cast<int>(static_cast<float>(r) * value), - static_cast<int>(static_cast<float>(g) * value), - static_cast<int>(static_cast<float>(b) * value), - a); + static_cast<int>(static_cast<float>(g) * value), + static_cast<int>(static_cast<float>(b) * value), + a); result.r = (result.r > 255U ? 255U : result.r); result.g = (result.g > 255U ? 255U : result.g); @@ -147,19 +147,3 @@ bool Color::operator!=(const Color& color) const { return !(r == color.r && g == color.g && b == color.b && a == color.a); } - -std::ostream& operator<<(std::ostream& out, - const Color& color) -{ - out << "Color [r = " - << color.r - << ", g = " - << color.g - << ", b = " - << color.b - << ", a = " - << color.a - << "]"; - - return out; -} diff --git a/src/gui/color.h b/src/gui/color.h index db8fda970..bfa66b796 100644 --- a/src/gui/color.h +++ b/src/gui/color.h @@ -64,8 +64,6 @@ #ifndef GUI_COLOR_H #define GUI_COLOR_H -#include <iostream> - #include "localconsts.h" /** @@ -160,15 +158,6 @@ class Color final bool operator!=(const Color& color) const; /** - * Output operator for output. - * - * @param out The stream to output to. - * @param color The color to output. - */ - friend std::ostream& operator<<(std::ostream& out, - const Color& Color); - - /** * Holds the red color component (range 0-255). */ unsigned int r; diff --git a/src/gui/focushandler.cpp b/src/gui/focushandler.cpp index 928b3b72e..ced7c5f6e 100644 --- a/src/gui/focushandler.cpp +++ b/src/gui/focushandler.cpp @@ -87,7 +87,7 @@ FocusHandler::FocusHandler() : { } -void FocusHandler::requestModalFocus(Widget *widget) +void FocusHandler::requestModalFocus(Widget *const widget) { /* If there is another widget with modal focus, remove its modal focus * and put it on the modal widget stack. @@ -103,7 +103,7 @@ void FocusHandler::requestModalFocus(Widget *widget) focusNone(); } -void FocusHandler::releaseModalFocus(Widget *widget) +void FocusHandler::releaseModalFocus(Widget *const widget) { mModalStack.remove(widget); @@ -123,15 +123,14 @@ void FocusHandler::releaseModalFocus(Widget *widget) } } -void FocusHandler::remove(Widget *widget) +void FocusHandler::remove(Widget *const widget) { releaseModalFocus(widget); if (isFocused(widget)) mFocusedWidget = nullptr; - for (WidgetIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++iter) + FOR_EACH (WidgetIterator, iter, mWidgets) { if ((*iter) == widget) { @@ -342,7 +341,7 @@ void FocusHandler::distributeFocusGainedEvent(const Event &focusEvent) Widget *const sourceWidget = focusEvent.getSource(); std::list<FocusListener*> focusListeners - = sourceWidget->_getFocusListeners(); + = sourceWidget->getFocusListeners(); // Send the event to all focus listeners of the widget. for (std::list<FocusListener*>::const_iterator @@ -354,14 +353,14 @@ void FocusHandler::distributeFocusGainedEvent(const Event &focusEvent) } } -void FocusHandler::requestFocus(Widget* widget) +void FocusHandler::requestFocus(Widget *const widget) { if (!widget || widget == mFocusedWidget) return; int toBeFocusedIndex = -1; for (unsigned int i = 0, sz = static_cast<unsigned int>( - mWidgets.size()); i < sz; ++i) + mWidgets.size()); i < sz; ++i) { if (mWidgets[i] == widget) { @@ -390,7 +389,7 @@ void FocusHandler::requestFocus(Widget* widget) } } -void FocusHandler::requestModalMouseInputFocus(Widget* widget) +void FocusHandler::requestModalMouseInputFocus(Widget *const widget) { if (mModalMouseInputFocusedWidget && mModalMouseInputFocusedWidget != widget) @@ -401,7 +400,7 @@ void FocusHandler::requestModalMouseInputFocus(Widget* widget) mModalMouseInputFocusedWidget = widget; } -void FocusHandler::releaseModalMouseInputFocus(Widget* widget) +void FocusHandler::releaseModalMouseInputFocus(Widget *const widget) { if (mModalMouseInputFocusedWidget == widget) mModalMouseInputFocusedWidget = nullptr; @@ -527,12 +526,12 @@ void FocusHandler::focusPrevious() } } -bool FocusHandler::isFocused(const Widget* widget) const +bool FocusHandler::isFocused(const Widget *const widget) const { return mFocusedWidget == widget; } -void FocusHandler::add(Widget* widget) +void FocusHandler::add(Widget *const widget) { mWidgets.push_back(widget); } @@ -554,7 +553,7 @@ void FocusHandler::distributeFocusLostEvent(const Event& focusEvent) Widget *const sourceWidget = focusEvent.getSource(); std::list<FocusListener*> focusListeners - = sourceWidget->_getFocusListeners(); + = sourceWidget->getFocusListeners(); // Send the event to all focus listeners of the widget. for (std::list<FocusListener*>::const_iterator @@ -566,52 +565,52 @@ void FocusHandler::distributeFocusLostEvent(const Event& focusEvent) } } -Widget* FocusHandler::getDraggedWidget() +Widget* FocusHandler::getDraggedWidget() const { return mDraggedWidget; } -void FocusHandler::setDraggedWidget(Widget* draggedWidget) +void FocusHandler::setDraggedWidget(Widget *const draggedWidget) { mDraggedWidget = draggedWidget; } -Widget* FocusHandler::getLastWidgetWithMouse() +Widget* FocusHandler::getLastWidgetWithMouse() const { return mLastWidgetWithMouse; } -void FocusHandler::setLastWidgetWithMouse(Widget* lastWidgetWithMouse) +void FocusHandler::setLastWidgetWithMouse(Widget *const lastWidgetWithMouse) { mLastWidgetWithMouse = lastWidgetWithMouse; } -Widget* FocusHandler::getLastWidgetWithModalFocus() +Widget* FocusHandler::getLastWidgetWithModalFocus() const { return mLastWidgetWithModalFocus; } -void FocusHandler::setLastWidgetWithModalFocus(Widget* widget) +void FocusHandler::setLastWidgetWithModalFocus(Widget *const widget) { mLastWidgetWithModalFocus = widget; } -Widget* FocusHandler::getLastWidgetWithModalMouseInputFocus() +Widget* FocusHandler::getLastWidgetWithModalMouseInputFocus() const { return mLastWidgetWithModalMouseInputFocus; } -void FocusHandler::setLastWidgetWithModalMouseInputFocus(Widget* widget) +void FocusHandler::setLastWidgetWithModalMouseInputFocus(Widget *const widget) { mLastWidgetWithModalMouseInputFocus = widget; } -Widget* FocusHandler::getLastWidgetPressed() +Widget* FocusHandler::getLastWidgetPressed() const { return mLastWidgetPressed; } -void FocusHandler::setLastWidgetPressed(Widget* lastWidgetPressed) +void FocusHandler::setLastWidgetPressed(Widget *const lastWidgetPressed) { mLastWidgetPressed = lastWidgetPressed; } diff --git a/src/gui/focushandler.h b/src/gui/focushandler.h index f12819e75..58b317024 100644 --- a/src/gui/focushandler.h +++ b/src/gui/focushandler.h @@ -97,7 +97,7 @@ class FocusHandler final * @param widget The widget to request focus for. * @see isFocused, Widget::requestFocus */ - void requestFocus(Widget* widget); + void requestFocus(Widget *const widget); /** * Requests modal focus for a widget. Focus will only be granted @@ -108,7 +108,7 @@ class FocusHandler final * @throws Exception when another widget already has modal focus. * @see releaseModalFocus, Widget::requestModalFocus */ - void requestModalFocus(Widget* widget); + void requestModalFocus(Widget *const widget); /** * Requests modal mouse input focus for a widget. Focus will only @@ -125,7 +125,7 @@ class FocusHandler final * focus. * @see releaseModalMouseInputFocus, Widget::requestModalMouseInputFocus */ - void requestModalMouseInputFocus(Widget* widget); + void requestModalMouseInputFocus(Widget *const widget); /** * Releases modal focus if the widget has modal focus. @@ -134,7 +134,7 @@ class FocusHandler final * @param widget The widget to release modal focus for. * @see reuqestModalFocus, Widget::releaseModalFocus */ - void releaseModalFocus(Widget* widget); + void releaseModalFocus(Widget *const widget); /** * Releases modal mouse input focus if the widget has modal mouse input @@ -144,7 +144,7 @@ class FocusHandler final * @param widget the widget to release modal mouse input focus for. * @see requestModalMouseInputFocus, Widget::releaseModalMouseInputFocus */ - void releaseModalMouseInputFocus(Widget* widget); + void releaseModalMouseInputFocus(Widget *const widget); /** * Checks if a widget is focused. @@ -153,7 +153,7 @@ class FocusHandler final * @return True if the widget is focused, false otherwise. * @see Widget::isFocused */ - bool isFocused(const Widget* widget) const; + bool isFocused(const Widget *const widget) const; /** * Gets the widget with focus. @@ -204,7 +204,7 @@ class FocusHandler final * @param widget The widget to add. * @see remove */ - void add(Widget* widget); + void add(Widget *const widget); /** * Removes a widget from the focus handler. @@ -212,7 +212,7 @@ class FocusHandler final * @param widget The widget to remove. * @see add */ - void remove(Widget* widget); + void remove(Widget *const widget); /** * Focuses nothing. A focus event will also be sent to the @@ -243,7 +243,7 @@ class FocusHandler final * @return the widget being dragged. * @see setDraggedWidget */ - Widget* getDraggedWidget() A_WARN_UNUSED; + Widget* getDraggedWidget() const A_WARN_UNUSED; /** * Sets the widget being dragged. Used by the Gui class to @@ -252,7 +252,7 @@ class FocusHandler final * @param draggedWidget The widget being dragged. * @see getDraggedWidget */ - void setDraggedWidget(Widget* draggedWidget); + void setDraggedWidget(Widget *const draggedWidget); /** * Gets the last widget with the mouse. Used by the Gui class @@ -261,7 +261,7 @@ class FocusHandler final * @return The last widget with the mouse. * @see setLastWidgetWithMouse */ - Widget* getLastWidgetWithMouse() A_WARN_UNUSED; + Widget* getLastWidgetWithMouse() const A_WARN_UNUSED; /** * Sets the last widget with the mouse. Used by the Gui class @@ -270,7 +270,7 @@ class FocusHandler final * @param lastWidgetWithMouse The last widget with the mouse. * @see getLastWidgetWithMouse */ - void setLastWidgetWithMouse(Widget* lastWidgetWithMouse); + void setLastWidgetWithMouse(Widget *const lastWidgetWithMouse); /** * Gets the last widget with modal focus. @@ -278,7 +278,7 @@ class FocusHandler final * @return The last widget with modal focus. * @see setLastWidgetWithModalFocus */ - Widget* getLastWidgetWithModalFocus() A_WARN_UNUSED; + Widget* getLastWidgetWithModalFocus() const A_WARN_UNUSED; /** * Sets the last widget with modal focus. @@ -286,7 +286,7 @@ class FocusHandler final * @param widget The last widget with modal focus. * @see getLastWidgetWithModalFocus */ - void setLastWidgetWithModalFocus(Widget* widget); + void setLastWidgetWithModalFocus(Widget *const widget); /** * Gets the last widget with modal mouse input focus. @@ -294,7 +294,7 @@ class FocusHandler final * @return The last widget with modal mouse input focus. * @see setLastWidgetWithModalMouseInputFocus */ - Widget* getLastWidgetWithModalMouseInputFocus() A_WARN_UNUSED; + Widget* getLastWidgetWithModalMouseInputFocus() const A_WARN_UNUSED; /** * Sets the last widget with modal mouse input focus. @@ -302,7 +302,7 @@ class FocusHandler final * @param widget The last widget with modal mouse input focus. * @see getLastWidgetWithModalMouseInputFocus */ - void setLastWidgetWithModalMouseInputFocus(Widget* widget); + void setLastWidgetWithModalMouseInputFocus(Widget *const widget); /** * Gets the last widget pressed. Used by the Gui class to keep track @@ -311,7 +311,7 @@ class FocusHandler final * @return The last widget pressed. * @see setLastWidgetPressed */ - Widget* getLastWidgetPressed() A_WARN_UNUSED; + Widget* getLastWidgetPressed() const A_WARN_UNUSED; /** * Sets the last widget pressed. Used by the Gui class to keep track @@ -320,7 +320,7 @@ class FocusHandler final * @param lastWidgetPressed The last widget pressed. * @see getLastWidgetPressed */ - void setLastWidgetPressed(Widget* lastWidgetPressed); + void setLastWidgetPressed(Widget *const lastWidgetPressed); private: /** diff --git a/src/gui/font.cpp b/src/gui/font.cpp index 8c022f99d..acc27d4ab 100644 --- a/src/gui/font.cpp +++ b/src/gui/font.cpp @@ -76,6 +76,7 @@ #include "resources/resourcemanager.h" #include "resources/surfaceimagehelper.h" +#include "utils/delete2.h" #include "utils/paths.h" #include "utils/sdlcheckutils.h" #include "utils/stringutils.h" @@ -163,8 +164,7 @@ SDLTextChunk::SDLTextChunk(const std::string &text0, const Color &color0, SDLTextChunk::~SDLTextChunk() { - delete img; - img = nullptr; + delete2(img); #ifdef UNITTESTS sdlTextChunkCnt --; #endif @@ -294,7 +294,7 @@ void TextChunkList::insertFirst(SDLTextChunk *const item) searchWidth[item->text] = item; } -void TextChunkList::moveToFirst(SDLTextChunk *item) +void TextChunkList::moveToFirst(SDLTextChunk *const item) { if (item == start) return; diff --git a/src/gui/font.h b/src/gui/font.h index 12ba473d8..ee1742942 100644 --- a/src/gui/font.h +++ b/src/gui/font.h @@ -130,7 +130,7 @@ class TextChunkList final void insertFirst(SDLTextChunk *const item); - void moveToFirst(SDLTextChunk *item); + void moveToFirst(SDLTextChunk *const item); void removeBack(); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index deed890ae..9a50583b9 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -95,6 +95,7 @@ #include "resources/imageset.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" #include "utils/langs.h" #include "utils/timer.h" @@ -162,8 +163,8 @@ Gui::Gui() : mLastMouseRealY(0), #endif mFocusListeners(), - mForegroundColor(Theme::getThemeColor(Theme::TEXT)), - mForegroundColor2(Theme::getThemeColor(Theme::TEXT_OUTLINE)), + mForegroundColor(theme->getColor(Theme::TEXT, 255)), + mForegroundColor2(theme->getColor(Theme::TEXT_OUTLINE, 255)), mTime(0), mCustomCursor(false), mDoubleClick(true) @@ -290,8 +291,7 @@ void Gui::postInit(Graphics *const graphics) Gui::~Gui() { config.removeListeners(mConfigListener); - delete mConfigListener; - mConfigListener = nullptr; + delete2(mConfigListener); if (mMouseCursors) { @@ -299,30 +299,22 @@ Gui::~Gui() mMouseCursors = nullptr; } - delete mGuiFont; - mGuiFont = nullptr; - delete boldFont; - boldFont = nullptr; - delete mHelpFont; - mHelpFont = nullptr; - delete mSecureFont; - mSecureFont = nullptr; - delete mInfoParticleFont; - mInfoParticleFont = nullptr; - delete mNpcFont; - mNpcFont = nullptr; + delete2(mGuiFont); + delete2(boldFont); + delete2(mHelpFont); + delete2(mSecureFont); + delete2(mInfoParticleFont); + delete2(mNpcFont); delete getTop(); - delete guiInput; - guiInput = nullptr; + delete2(guiInput); - Theme::deleteInstance(); + delete2(theme); if (Widget::widgetExists(mTop)) setTop(nullptr); - delete mFocusHandler; - mFocusHandler = nullptr; + delete2(mFocusHandler); } void Gui::logic() @@ -423,21 +415,21 @@ bool Gui::handleKeyInput() { const KeyInput keyInput = guiInput->dequeueKeyInput(); - KeyEvent keyEventToGlobalKeyListeners(nullptr, + KeyEvent eventToGlobalKeyListeners(nullptr, keyInput.getType(), keyInput.getActionId(), keyInput.getKey()); #ifdef USE_SDL2 if (!keyInput.getText().empty()) - keyEventToGlobalKeyListeners.setText(keyInput.getText()); + eventToGlobalKeyListeners.setText(keyInput.getText()); #endif distributeKeyEventToGlobalKeyListeners( - keyEventToGlobalKeyListeners); + eventToGlobalKeyListeners); // If a global key listener consumes the event it will not be // sent further to the source of the event. - if (keyEventToGlobalKeyListeners.isConsumed()) + if (eventToGlobalKeyListeners.isConsumed()) { consumed = true; continue; @@ -445,33 +437,33 @@ bool Gui::handleKeyInput() if (mFocusHandler) { - bool keyEventConsumed = false; + bool eventConsumed = false; // Send key inputs to the focused widgets if (mFocusHandler->getFocused()) { - KeyEvent keyEvent(getKeyEventSource(), + KeyEvent event(getKeyEventSource(), keyInput.getType(), keyInput.getActionId(), keyInput.getKey()); #ifdef USE_SDL2 if (!keyInput.getText().empty()) - keyEvent.setText(keyInput.getText()); + event.setText(keyInput.getText()); #endif if (!mFocusHandler->getFocused()->isFocusable()) mFocusHandler->focusNone(); else - distributeKeyEvent(keyEvent); + distributeKeyEvent(event); - keyEventConsumed = keyEvent.isConsumed(); - if (keyEventConsumed) + eventConsumed = event.isConsumed(); + if (eventConsumed) consumed = true; } // If the key event hasn't been consumed and // tabbing is enable check for tab press and // change focus. - if (!keyEventConsumed && keyInput.getActionId() + if (!eventConsumed && keyInput.getActionId() == static_cast<int>(Input::KEY_GUI_TAB) && keyInput.getType() == KeyInput::PRESSED) { @@ -493,7 +485,8 @@ void Gui::draw() getTop()->draw(mGraphics); touchManager.draw(); - int mouseX, mouseY; + int mouseX; + int mouseY; const uint8_t button = getMouseState(&mouseX, &mouseY); if ((client->getMouseFocused() || button & SDL_BUTTON(1)) @@ -609,6 +602,10 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) return; } + const int mouseX = mouseInput.getX(); + const int mouseY = mouseInput.getY(); + const int button = mouseInput.getButton(); + // Check if there is a need to send mouse exited events by // traversing the "widget with mouse" queue. bool widgetWithMouseQueueCheckDone = mWidgetWithMouseQueue.empty(); @@ -631,20 +628,21 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) } else { - int x, y; + int x; + int y; widget->getAbsolutePosition(x, y); - if (x > mouseInput.getX() - || y > mouseInput.getY() - || x + widget->getWidth() <= mouseInput.getX() - || y + widget->getHeight() <= mouseInput.getY() + if (x > mouseX + || y > mouseY + || x + widget->getWidth() <= mouseX + || y + widget->getHeight() <= mouseY || !widget->isVisible()) { distributeMouseEvent(widget, MouseEvent::EXITED, - mouseInput.getButton(), - mouseInput.getX(), - mouseInput.getY(), + button, + mouseX, + mouseY, true, true); mClickCount = 1; @@ -665,8 +663,7 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) // present in the "widget with mouse" queue. If a widget // is not then it should be added and an entered event should // be sent to it. - Widget* parent = getMouseEventSource( - mouseInput.getX(), mouseInput.getY()); + Widget* parent = getMouseEventSource(mouseX, mouseY); Widget* widget = parent; // If a widget has modal mouse input focus then it will @@ -682,9 +679,9 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) int x, y; widget->getAbsolutePosition(x, y); - if (x > mouseInput.getX() || y > mouseInput.getY() - || x + widget->getWidth() <= mouseInput.getX() - || y + widget->getHeight() <= mouseInput.getY()) + if (x > mouseX || y > mouseY + || x + widget->getWidth() <= mouseX + || y + widget->getHeight() <= mouseY) { parent = nullptr; } @@ -713,9 +710,9 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) { distributeMouseEvent(widget, MouseEvent::ENTERED, - mouseInput.getButton(), - mouseInput.getX(), - mouseInput.getY(), + button, + mouseX, + mouseY, true, true); mWidgetWithMouseQueue.push_front(widget); @@ -731,19 +728,17 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput) distributeMouseEvent(mFocusHandler->getDraggedWidget(), MouseEvent::DRAGGED, mLastMouseDragButton, - mouseInput.getX(), - mouseInput.getY()); + mouseX, + mouseY); } else { - Widget *const sourceWidget = getMouseEventSource( - mouseInput.getX(), mouseInput.getY()); - + Widget *const sourceWidget = getMouseEventSource(mouseX, mouseY); distributeMouseEvent(sourceWidget, MouseEvent::MOVED, - mouseInput.getButton(), - mouseInput.getX(), - mouseInput.getY()); + button, + mouseX, + mouseY); } mMouseInactivityTimer = 0; } @@ -760,7 +755,8 @@ void Gui::handleMousePressed(const MouseInput &mouseInput) if (mFocusHandler->getDraggedWidget()) sourceWidget = mFocusHandler->getDraggedWidget(); - int sourceWidgetX, sourceWidgetY; + int sourceWidgetX; + int sourceWidgetY; sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); if ((mFocusHandler->getModalFocused() @@ -818,28 +814,33 @@ void Gui::updateFonts() mNpcFont->loadFont(fontFile, npcFontSize); } -void Gui::distributeMouseEvent(Widget* source, int type, int button, - int x, int y, bool force, - bool toSourceOnly) +void Gui::distributeMouseEvent(Widget *const source, + const int type, + const int button, + const int x, const int y, + const bool force, + const bool toSourceOnly) { if (!source || !mFocusHandler) return; - Widget* widget = source; + Widget *widget = source; - if (!force && mFocusHandler->getModalFocused() != nullptr - && !widget->isModalFocused()) + if (!force) { - return; - } - - if (!force && mFocusHandler->getModalMouseInputFocused() != nullptr - && !widget->isModalMouseInputFocused()) - { - return; + if (mFocusHandler->getModalFocused() != nullptr + && !widget->isModalFocused()) + { + return; + } + if (mFocusHandler->getModalMouseInputFocused() != nullptr + && !widget->isModalMouseInputFocused()) + { + return; + } } - MouseEvent mouseEvent(source, + MouseEvent event(source, type, button, x, y, mClickCount); @@ -855,49 +856,50 @@ void Gui::distributeMouseEvent(Widget* source, int type, int button, if (widget->isEnabled() || force) { - int widgetX, widgetY; + int widgetX; + int widgetY; widget->getAbsolutePosition(widgetX, widgetY); - mouseEvent.setX(x - widgetX); - mouseEvent.setY(y - widgetY); + event.setX(x - widgetX); + event.setY(y - widgetY); std::list<MouseListener*> mouseListeners - = widget->_getMouseListeners(); + = widget->getMouseListeners(); + unsigned int mouseType = event.getType(); // Send the event to all mouse listeners of the widget. - for (std::list<MouseListener*>::const_iterator - it = mouseListeners.begin(); - it != mouseListeners.end(); ++ it) + FOR_EACH (std::list<MouseListener*>::const_iterator, + it, mouseListeners) { - switch (mouseEvent.getType()) + switch (mouseType) { case MouseEvent::ENTERED: - (*it)->mouseEntered(mouseEvent); + (*it)->mouseEntered(event); break; case MouseEvent::EXITED: - (*it)->mouseExited(mouseEvent); + (*it)->mouseExited(event); break; case MouseEvent::MOVED: - (*it)->mouseMoved(mouseEvent); + (*it)->mouseMoved(event); break; case MouseEvent::PRESSED: - (*it)->mousePressed(mouseEvent); + (*it)->mousePressed(event); break; case MouseEvent::RELEASED: case 100: // manual hack for release on target after drag - (*it)->mouseReleased(mouseEvent); + (*it)->mouseReleased(event); break; case MouseEvent::WHEEL_MOVED_UP: - (*it)->mouseWheelMovedUp(mouseEvent); + (*it)->mouseWheelMovedUp(event); break; case MouseEvent::WHEEL_MOVED_DOWN: - (*it)->mouseWheelMovedDown(mouseEvent); + (*it)->mouseWheelMovedDown(event); break; case MouseEvent::DRAGGED: - (*it)->mouseDragged(mouseEvent); + (*it)->mouseDragged(event); break; case MouseEvent::CLICKED: - (*it)->mouseClicked(mouseEvent); + (*it)->mouseClicked(event); break; default: break; @@ -915,6 +917,9 @@ void Gui::distributeMouseEvent(Widget* source, int type, int button, if (type == MouseEvent::RELEASED) dragDrop.clear(); + if (event.isConsumed()) + break; + // If a non modal focused widget has been reach // and we have modal focus cancel the distribution. if (mFocusHandler->getModalFocused() @@ -954,7 +959,8 @@ MouseEvent *Gui::createMouseEvent(Window *const widget) return new MouseEvent(widget, 0, 0, - mouseX - x, mouseY - y, mClickCount); + mouseX - x, mouseY - y, + mClickCount); } void Gui::getAbsolutePosition(Widget *restrict widget, @@ -1026,13 +1032,14 @@ void Gui::handleMouseReleased(const MouseInput &mouseInput) Widget *sourceWidget = getMouseEventSource( mouseInput.getX(), mouseInput.getY()); - int sourceWidgetX, sourceWidgetY; + int sourceWidgetX; + int sourceWidgetY; if (mFocusHandler->getDraggedWidget()) { if (sourceWidget != mFocusHandler->getLastWidgetPressed()) mFocusHandler->setLastWidgetPressed(nullptr); - Widget *oldWidget = sourceWidget; + Widget *const oldWidget = sourceWidget; sourceWidget = mFocusHandler->getDraggedWidget(); if (oldWidget != sourceWidget) { @@ -1114,9 +1121,9 @@ uint32_t Gui::getMouseState(int *const x, int *const y) void Gui::setTop(Widget *const top) { if (mTop) - mTop->_setFocusHandler(nullptr); + mTop->setFocusHandler(nullptr); if (top) - top->_setFocusHandler(mFocusHandler); + top->setFocusHandler(mFocusHandler); mTop = top; } @@ -1188,7 +1195,7 @@ void Gui::handleMouseWheelMovedUp(const MouseInput& mouseInput) mouseInput.getY()); } -Widget* Gui::getWidgetAt(int x, int y) +Widget* Gui::getWidgetAt(const int x, const int y) const { // If the widget's parent has no child then we have found the widget.. Widget* parent = mTop; @@ -1206,7 +1213,7 @@ Widget* Gui::getWidgetAt(int x, int y) return parent; } -Widget* Gui::getMouseEventSource(int x, int y) +Widget* Gui::getMouseEventSource(const int x, const int y) const { Widget *const widget = getWidgetAt(x, y); if (!widget) @@ -1221,29 +1228,26 @@ Widget* Gui::getMouseEventSource(int x, int y) return widget; } -Widget* Gui::getKeyEventSource() +Widget* Gui::getKeyEventSource() const { Widget* widget = mFocusHandler->getFocused(); - while (widget && widget->_getInternalFocusHandler() - && widget->_getInternalFocusHandler()->getFocused()) + while (widget && widget->getInternalFocusHandler() + && widget->getInternalFocusHandler()->getFocused()) { - widget = widget->_getInternalFocusHandler()->getFocused(); + widget = widget->getInternalFocusHandler()->getFocused(); } return widget; } -void Gui::distributeKeyEvent(KeyEvent& keyEvent) const +void Gui::distributeKeyEvent(KeyEvent &event) const { - Widget* parent = keyEvent.getSource(); - Widget* widget = keyEvent.getSource(); + Widget* parent = event.getSource(); + Widget* widget = event.getSource(); - if (mFocusHandler->getModalFocused() - && !widget->isModalFocused()) - { + if (mFocusHandler->getModalFocused() && !widget->isModalFocused()) return; - } if (mFocusHandler->getModalMouseInputFocused() && !widget->isModalMouseInputFocused()) @@ -1263,21 +1267,20 @@ void Gui::distributeKeyEvent(KeyEvent& keyEvent) const if (widget->isEnabled()) { std::list<KeyListener*> keyListeners - = widget->_getKeyListeners(); + = widget->getKeyListeners(); + const unsigned int eventType = event.getType(); // Send the event to all key listeners of the source widget. - for (std::list<KeyListener*>::const_iterator - it = keyListeners.begin(); - it != keyListeners.end(); - ++ it) + FOR_EACH (std::list<KeyListener*>::const_iterator, + it, keyListeners) { - switch (keyEvent.getType()) + switch (eventType) { case KeyEvent::PRESSED: - (*it)->keyPressed(keyEvent); + (*it)->keyPressed(event); break; case KeyEvent::RELEASED: - (*it)->keyReleased(keyEvent); + (*it)->keyReleased(event); break; default: break; @@ -1291,32 +1294,29 @@ void Gui::distributeKeyEvent(KeyEvent& keyEvent) const // If a non modal focused widget has been reach // and we have modal focus cancel the distribution. - if (mFocusHandler->getModalFocused() - && !widget->isModalFocused()) - { + if (mFocusHandler->getModalFocused() && !widget->isModalFocused()) break; - } } } -void Gui::distributeKeyEventToGlobalKeyListeners(KeyEvent& keyEvent) +void Gui::distributeKeyEventToGlobalKeyListeners(KeyEvent& event) { - for (KeyListenerListIterator it = mKeyListeners.begin(); - it != mKeyListeners.end(); ++ it) + const unsigned int eventType = event.getType(); + FOR_EACH (KeyListenerListIterator, it, mKeyListeners) { - switch (keyEvent.getType()) + switch (eventType) { case KeyEvent::PRESSED: - (*it)->keyPressed(keyEvent); + (*it)->keyPressed(event); break; case KeyEvent::RELEASED: - (*it)->keyReleased(keyEvent); + (*it)->keyReleased(event); break; default: break; } - if (keyEvent.isConsumed()) + if (event.isConsumed()) break; } } @@ -1324,22 +1324,23 @@ void Gui::distributeKeyEventToGlobalKeyListeners(KeyEvent& keyEvent) void Gui::handleModalMouseInputFocus() { BLOCK_START("Gui::handleModalMouseInputFocus") - // Check if modal mouse input focus has been gained by a widget. - if ((mFocusHandler->getLastWidgetWithModalMouseInputFocus() - != mFocusHandler->getModalMouseInputFocused()) - && (!mFocusHandler->getLastWidgetWithModalMouseInputFocus())) - { - handleModalFocusGained(); - mFocusHandler->setLastWidgetWithModalMouseInputFocus( - mFocusHandler->getModalMouseInputFocused()); - } - // Check if modal mouse input focus has been released. - else if ((mFocusHandler->getLastWidgetWithModalMouseInputFocus() - != mFocusHandler->getModalMouseInputFocused()) - && (mFocusHandler->getLastWidgetWithModalMouseInputFocus())) + Widget *const lastModalWidget + = mFocusHandler->getLastWidgetWithModalMouseInputFocus(); + Widget *const modalWidget = mFocusHandler->getModalMouseInputFocused(); + if (lastModalWidget != modalWidget) { - handleModalFocusReleased(); - mFocusHandler->setLastWidgetWithModalMouseInputFocus(nullptr); + // Check if modal mouse input focus has been gained by a widget. + if (!lastModalWidget) + { + handleModalFocusGained(); + mFocusHandler->setLastWidgetWithModalMouseInputFocus(modalWidget); + } + // Check if modal mouse input focus has been released. + else + { + handleModalFocusReleased(); + mFocusHandler->setLastWidgetWithModalMouseInputFocus(nullptr); + } } BLOCK_END("Gui::handleModalMouseInputFocus") } @@ -1347,22 +1348,24 @@ void Gui::handleModalMouseInputFocus() void Gui::handleModalFocus() { BLOCK_START("Gui::handleModalFocus") - // Check if modal focus has been gained by a widget. - if ((mFocusHandler->getLastWidgetWithModalFocus() - != mFocusHandler->getModalFocused()) - && (!mFocusHandler->getLastWidgetWithModalFocus())) - { - handleModalFocusGained(); - mFocusHandler->setLastWidgetWithModalFocus( - mFocusHandler->getModalFocused()); - } - // Check if modal focus has been released. - else if ((mFocusHandler->getLastWidgetWithModalFocus() - != mFocusHandler->getModalFocused()) - && (mFocusHandler->getLastWidgetWithModalFocus())) + Widget *const lastModalWidget + = mFocusHandler->getLastWidgetWithModalFocus(); + Widget *const modalWidget = mFocusHandler->getModalFocused(); + + if (lastModalWidget != modalWidget) { - handleModalFocusReleased(); - mFocusHandler->setLastWidgetWithModalFocus(nullptr); + // Check if modal focus has been gained by a widget. + if (!lastModalWidget) + { + handleModalFocusGained(); + mFocusHandler->setLastWidgetWithModalFocus(modalWidget); + } + // Check if modal focus has been released. + else + { + handleModalFocusReleased(); + mFocusHandler->setLastWidgetWithModalFocus(nullptr); + } } BLOCK_END("Gui::handleModalFocus") } diff --git a/src/gui/gui.h b/src/gui/gui.h index 8805f2518..723c653ca 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -316,9 +316,12 @@ class Gui final void handleMouseInput(); - void distributeMouseEvent(Widget* source, int type, int button, - int x, int y, bool force = false, - bool toSourceOnly = false); + void distributeMouseEvent(Widget *const source, + const int type, + const int button, + const int x, const int y, + const bool force = false, + const bool toSourceOnly = false); /** * @@ -343,7 +346,7 @@ class Gui final * @return The widget at a certain position. * @since 0.6.0 */ - Widget* getWidgetAt(int x, int y) A_WARN_UNUSED; + Widget* getWidgetAt(const int x, const int y) const A_WARN_UNUSED; /** * Gets the source of the mouse event. @@ -351,7 +354,8 @@ class Gui final * @return The source widget of the mouse event. * @since 0.6.0 */ - Widget* getMouseEventSource(int x, int y) A_WARN_UNUSED; + Widget* getMouseEventSource(const int x, + const int y) const A_WARN_UNUSED; /** * Gets the source of the key event. @@ -359,25 +363,25 @@ class Gui final * @return The source widget of the key event. * @since 0.6.0 */ - Widget* getKeyEventSource() A_WARN_UNUSED; + Widget* getKeyEventSource() const A_WARN_UNUSED; /** * Distributes a key event. * - * @param keyEvent The key event to distribute. + * @param event The key event to distribute. * @since 0.6.0 */ - void distributeKeyEvent(KeyEvent& keyEvent) const; + void distributeKeyEvent(KeyEvent &event) const; /** * Distributes a key event to the global key listeners. * - * @param keyEvent The key event to distribute. + * @param event The key event to distribute. * * @since 0.6.0 */ - void distributeKeyEventToGlobalKeyListeners(KeyEvent& keyEvent); + void distributeKeyEventToGlobalKeyListeners(KeyEvent& event); /** * Handles modal mouse input focus. Modal mouse input focus needs diff --git a/src/gui/palette.h b/src/gui/palette.h index 0dbb5d3ad..eaee3e141 100644 --- a/src/gui/palette.h +++ b/src/gui/palette.h @@ -101,7 +101,7 @@ class Palette inline const Color &getColorWithAlpha(const int type) A_WARN_UNUSED { - Color* col = &mColors[type].color; + Color *const col = &mColors[type].color; col->a = mColors[type].delay; return *col; } @@ -113,7 +113,7 @@ class Palette * * @return the gradient type of the color with the given index */ - inline GradientType getGradientType(int type) const A_WARN_UNUSED + inline GradientType getGradientType(const int type) const A_WARN_UNUSED { return mColors[type].grad; } /** diff --git a/src/gui/popups/itempopup.h b/src/gui/popups/itempopup.h index f1cedf046..73129eaea 100644 --- a/src/gui/popups/itempopup.h +++ b/src/gui/popups/itempopup.h @@ -61,7 +61,7 @@ class ItemPopup final : public Popup void setItem(const Item *const item, const bool showImage = false); - void mouseMoved(MouseEvent &mouseEvent) override final; + void mouseMoved(MouseEvent &event) override final; private: Label *mItemName; diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index 3905d91e6..330df1a6c 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -840,6 +840,47 @@ void PopupMenu::showChangePos(const int x, const int y) } } +void PopupMenu::showWindowPopup(Window *const window, + const int x, const int y) +{ + if (!window) + return; + + mWindow = window; + mBrowserBox->clearRows(); + // TRANSLATORS: popup menu header + mBrowserBox->addRow(_("window")); + + if (window->getCloseButton()) + { + // TRANSLATORS: popup menu item + // TRANSLATORS: close window + mBrowserBox->addRow("window close", _("Close")); + } + + if (window->isStickyButtonLock()) + { + if (window->isSticky()) + { + // TRANSLATORS: popup menu item + // TRANSLATORS: unlock window + mBrowserBox->addRow("window unlock", _("Unlock")); + } + else + { + // TRANSLATORS: popup menu item + // TRANSLATORS: lock window + mBrowserBox->addRow("window lock", _("Lock")); + } + } + + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + + showPopup(x, y); +} + void PopupMenu::handleLink(const std::string &link, MouseEvent *event A_UNUSED) { @@ -1196,8 +1237,11 @@ void PopupMenu::handleLink(const std::string &link, } else if (link == "retrieve" && mItem) { - ItemAmountWindow::showWindow(ItemAmountWindow::StoreRemove, - mWindow, mItem); + if (Widget::widgetExists(mWindow)) + { + ItemAmountWindow::showWindow(ItemAmountWindow::StoreRemove, + mWindow, mItem); + } } else if (link == "retrieve 10" && mItem) { @@ -1748,6 +1792,21 @@ void PopupMenu::handleLink(const std::string &link, showGMPopup(); return; } + else if (link == "window close" && mWindow) + { + if (Widget::widgetExists(mWindow)) + mWindow->close(); + } + else if (link == "window unlock" && mWindow) + { + if (Widget::widgetExists(mWindow)) + mWindow->setSticky(false); + } + else if (link == "window lock" && mWindow) + { + if (Widget::widgetExists(mWindow)) + mWindow->setSticky(true); + } else if (!link.compare(0, 10, "guild-pos-")) { if (player_node) diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h index 7eb38dc15..8bdbd3b1b 100644 --- a/src/gui/popups/popupmenu.h +++ b/src/gui/popups/popupmenu.h @@ -182,6 +182,8 @@ class PopupMenu final : public Popup, public LinkHandler void showNpcDialogPopup(const int npcId, const int x, const int y); + void showWindowPopup(Window *const window, const int x, const int y); + /** * Handles link action. */ diff --git a/src/gui/popups/speechbubble.h b/src/gui/popups/speechbubble.h index 1bc5385a4..fe5cf1bfc 100644 --- a/src/gui/popups/speechbubble.h +++ b/src/gui/popups/speechbubble.h @@ -48,9 +48,9 @@ class SpeechBubble final : public Popup */ void setCaption(const std::string &name, const Color *const color1 = - &Theme::getThemeColor(Theme::BUBBLE_NAME), + &theme->getColor(Theme::BUBBLE_NAME, 255), const Color *const color2 = - &Theme::getThemeColor(Theme::BUBBLE_NAME_OUTLINE)); + &theme->getColor(Theme::BUBBLE_NAME_OUTLINE, 255)); /** * Sets the text to be displayed. diff --git a/src/gui/popups/spellpopup.h b/src/gui/popups/spellpopup.h index cbbd53703..0352161fc 100644 --- a/src/gui/popups/spellpopup.h +++ b/src/gui/popups/spellpopup.h @@ -59,7 +59,7 @@ class SpellPopup final : public Popup */ void view(const int x, const int y); - void mouseMoved(MouseEvent &mouseEvent) override final; + void mouseMoved(MouseEvent &event) override final; private: Label *mItemName; diff --git a/src/gui/popups/textpopup.h b/src/gui/popups/textpopup.h index eb29cba61..e1dcb95b8 100644 --- a/src/gui/popups/textpopup.h +++ b/src/gui/popups/textpopup.h @@ -72,7 +72,7 @@ class TextPopup final : public Popup void show(const int x, const int y, const std::string &str1, const std::string &str2, const std::string &str3); - void mouseMoved(MouseEvent &mouseEvent) override final; + void mouseMoved(MouseEvent &event) override final; private: Label *mText[TEXTPOPUPCOUNT]; diff --git a/src/gui/rect.cpp b/src/gui/rect.cpp index 5f9d2bf0f..3f59d94cb 100644 --- a/src/gui/rect.cpp +++ b/src/gui/rect.cpp @@ -135,22 +135,10 @@ bool Rect::isIntersecting(const Rect& rectangle) const return true; } -bool Rect::isPointInRect(int x_, int y_) const +bool Rect::isPointInRect(const int x_, const int y_) const { return x_ >= x && y_ >= y && x_ < x + width && y_ < y + height; } - -std::ostream& operator<<(std::ostream& out, - const Rect& rectangle) -{ - out << "Rect [x = " << rectangle.x - << ", y = " << rectangle.y - << ", width = " << rectangle.width - << ", height = " << rectangle.height - << "]"; - - return out; -} diff --git a/src/gui/rect.h b/src/gui/rect.h index 69c0120ca..8aee82c9f 100644 --- a/src/gui/rect.h +++ b/src/gui/rect.h @@ -64,8 +64,6 @@ #ifndef GUI_RECT_H #define GUI_RECT_H -#include <iostream> - #include "localconsts.h" /** @@ -127,16 +125,7 @@ class Rect * @return True if the point is inside the rectangle. * @since 0.1.0 */ - bool isPointInRect(int x, int y) const A_WARN_UNUSED; - - /** - * Output operator for output. - * - * @param out The stream to output to. - * @param rectangle The rectangle to output. - */ - friend std::ostream& operator<<(std::ostream& out, - const Rect& rectangle); + bool isPointInRect(const int x, const int y) const A_WARN_UNUSED; /** * Holds the x coordinate of the rectangle. diff --git a/src/gui/sdlinput.cpp b/src/gui/sdlinput.cpp index c1e02e9b2..0bc23a849 100644 --- a/src/gui/sdlinput.cpp +++ b/src/gui/sdlinput.cpp @@ -98,11 +98,6 @@ SDLInput::SDLInput() : { } -bool SDLInput::isKeyQueueEmpty() const -{ - return mKeyInputQueue.empty(); -} - KeyInput SDLInput::dequeueKeyInput() { if (mKeyInputQueue.empty()) @@ -114,11 +109,6 @@ KeyInput SDLInput::dequeueKeyInput() return keyInput; } -bool SDLInput::isMouseQueueEmpty() const -{ - return mMouseInputQueue.empty(); -} - MouseInput SDLInput::dequeueMouseInput() { MouseInput mouseInput; @@ -165,7 +155,6 @@ void SDLInput::pushInput(const SDL_Event &event) case SDL_MOUSEWHEEL: { -// const int x = event.wheel.x; const int y = event.wheel.y; if (y) { @@ -273,8 +262,7 @@ void SDLInput::pushInput(const SDL_Event &event) * This occurs when the mouse leaves the window and the Gui-chan * application loses its mousefocus. */ - if ((event.active.state & SDL_APPMOUSEFOCUS) - && !event.active.gain) + if ((event.active.state & SDL_APPMOUSEFOCUS) && !event.active.gain) { mMouseInWindow = false; @@ -288,11 +276,8 @@ void SDLInput::pushInput(const SDL_Event &event) } } - if ((event.active.state & SDL_APPMOUSEFOCUS) - && event.active.gain) - { + if ((event.active.state & SDL_APPMOUSEFOCUS) && event.active.gain) mMouseInWindow = true; - } break; #endif default: diff --git a/src/gui/sdlinput.h b/src/gui/sdlinput.h index 6102de743..9e7cbccb9 100644 --- a/src/gui/sdlinput.h +++ b/src/gui/sdlinput.h @@ -111,9 +111,11 @@ public: // Inherited from SDLInput - bool isKeyQueueEmpty() const A_WARN_UNUSED; + bool isKeyQueueEmpty() const A_WARN_UNUSED + { return mKeyInputQueue.empty(); } - bool isMouseQueueEmpty() const A_WARN_UNUSED; + bool isMouseQueueEmpty() const A_WARN_UNUSED + { return mMouseInputQueue.empty(); } MouseInput dequeueMouseInput() A_WARN_UNUSED; diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp index 1a504f680..6fa007e06 100644 --- a/src/gui/theme.cpp +++ b/src/gui/theme.cpp @@ -32,6 +32,7 @@ #include "resources/image.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/files.h" #include "utils/physfstools.h" @@ -46,7 +47,7 @@ std::string Theme::mThemePath; std::string Theme::mThemeName; std::string Theme::mScreenDensity; -Theme *Theme::mInstance = nullptr; +Theme *theme = nullptr; // Set the theme path... static void initDefaultThemePath() @@ -61,7 +62,8 @@ static void initDefaultThemePath() defaultThemePath = "themes/"; } -Skin::Skin(ImageRect *restrict skin, const ImageRect *restrict images, +Skin::Skin(ImageRect *const restrict skin, + const ImageRect *const restrict images, const std::string &filePath, const std::string &name, const int padding, const int titlePadding, std::map<std::string, int> *restrict const options): @@ -120,10 +122,8 @@ Skin::~Skin() mStickyImageDown = nullptr; } - delete mOptions; - mOptions = nullptr; - delete mBorder; - mBorder = nullptr; + delete2(mOptions); + delete2(mBorder); } void Skin::updateAlpha(const float minimumOpacityAllowed) @@ -245,27 +245,13 @@ Theme::~Theme() delete_all(mProgressColors); } -Theme *Theme::instance() -{ - if (!mInstance) - mInstance = new Theme; - - return mInstance; -} - -void Theme::deleteInstance() -{ - delete mInstance; - mInstance = nullptr; -} - Color Theme::getProgressColor(const int type, const float progress) { int color[3] = {0, 0, 0}; - if (mInstance) + if (theme) { - const DyePalette *const dye = mInstance->mProgressColors[type]; + const DyePalette *const dye = theme->mProgressColors[type]; if (dye) dye->getColor(progress, color); @@ -276,8 +262,10 @@ Color Theme::getProgressColor(const int type, const float progress) return Color(color[0], color[1], color[2]); } -Skin *Theme::load(const std::string &filename, const std::string &filename2, - const bool full, const std::string &restrict defaultPath) +Skin *Theme::load(const std::string &filename, + const std::string &filename2, + const bool full, + const std::string &restrict defaultPath) { // Check if this skin was already loaded @@ -380,8 +368,9 @@ void Theme::updateAlpha() { FOR_EACH (SkinIterator, iter, mSkins) { - if (iter->second) - iter->second->updateAlpha(mMinimumOpacity); + Skin *const skin = iter->second; + if (skin) + skin->updateAlpha(mMinimumOpacity); } } @@ -474,9 +463,10 @@ struct SkinHelper final { for (unsigned f = 0; f < size; f ++) { - if (partType == params[f].name) + const SkinParameter ¶m = params[f]; + if (partType == param.name) { - rect->grid[params[f].index] = resman->getSubImage( + rect->grid[param.index] = resman->getSubImage( image, xPos, yPos, width, height); return true; } @@ -639,8 +629,8 @@ bool Theme::tryThemePath(const std::string &themeName) { mThemePath = path; mThemeName = themeName; - if (instance()) - instance()->loadColors(""); + if (theme) + theme->loadColors(""); return true; } } @@ -703,7 +693,7 @@ void Theme::prepareThemePath() if (mThemePath.empty()) mThemePath = "graphics/gui"; - instance()->loadColors(mThemePath); + theme->loadColors(mThemePath); logger->log("Selected Theme: " + mThemePath); } @@ -1040,6 +1030,7 @@ static int readProgressType(const std::string &type) static const std::string colors[Theme::THEME_PROG_END] = { "HP", + "HP_POISON", "MP", "NO_MP", "EXP", @@ -1082,16 +1073,12 @@ void Theme::loadColors(std::string file) logger->log("Loading colors file: %s", file.c_str()); - int type; - std::string temp; - Color color; - GradientType grad; - for_each_xml_child_node(paletteNode, root) { if (xmlNameEqual(paletteNode, "progressbar")) { - type = readProgressType(XML::getProperty(paletteNode, "id", "")); + const int type = readProgressType(XML::getProperty( + paletteNode, "id", "")); if (type < 0) continue; @@ -1112,16 +1099,17 @@ void Theme::loadColors(std::string file) if (xmlNameEqual(node, "color")) { const std::string id = XML::getProperty(node, "id", ""); - type = readColorType(id); + const int type = readColorType(id); if (type < 0) continue; - temp = XML::getProperty(node, "color", ""); + const std::string temp = XML::getProperty(node, "color", ""); if (temp.empty()) continue; - color = readColor(temp); - grad = readColorGradient(XML::getProperty(node, "effect", "")); + const Color color = readColor(temp); + const GradientType grad = readColorGradient( + XML::getProperty(node, "effect", "")); mColors[paletteId * THEME_COLORS_END + type].set( type, color, grad, 10); @@ -1138,9 +1126,11 @@ void Theme::loadColors(std::string file) } } -void Theme::loadRect(ImageRect &image, const std::string &name, +void Theme::loadRect(ImageRect &image, + const std::string &name, const std::string &name2, - const int start, const int end) + const int start, + const int end) { Skin *const skin = load(name, name2, false); if (skin) @@ -1158,8 +1148,10 @@ void Theme::loadRect(ImageRect &image, const std::string &name, } } -Skin *Theme::loadSkinRect(ImageRect &image, const std::string &name, - const std::string &name2, const int start, +Skin *Theme::loadSkinRect(ImageRect &image, + const std::string &name, + const std::string &name2, + const int start, const int end) { Skin *const skin = load(name, name2); @@ -1178,7 +1170,8 @@ Skin *Theme::loadSkinRect(ImageRect &image, const std::string &name, return skin; } -void Theme::unloadRect(const ImageRect &rect, const int start, +void Theme::unloadRect(const ImageRect &rect, + const int start, const int end) { for (int f = start; f <= end; f ++) @@ -1191,7 +1184,9 @@ void Theme::unloadRect(const ImageRect &rect, const int start, Image *Theme::getImageFromThemeXml(const std::string &name, const std::string &name2) { - Theme *const theme = Theme::instance(); + if (!theme) + return nullptr; + Skin *const skin = theme->load(name, name2, false); if (skin) { @@ -1212,7 +1207,9 @@ ImageSet *Theme::getImageSetFromThemeXml(const std::string &name, const std::string &name2, const int w, const int h) { - Theme *const theme = Theme::instance(); + if (!theme) + return nullptr; + Skin *const skin = theme->load(name, name2, false); if (skin) { @@ -1265,7 +1262,7 @@ ThemeInfo *Theme::loadInfo(const std::string &themeName) if (!rootNode || !xmlNameEqual(rootNode, "info")) return nullptr; - ThemeInfo *info = new ThemeInfo(); + ThemeInfo *const info = new ThemeInfo(); const std::string fontSize2("fontSize_" + mScreenDensity); const std::string npcfontSize2("npcfontSize_" + mScreenDensity); diff --git a/src/gui/theme.h b/src/gui/theme.h index 86543ea64..023918cf0 100644 --- a/src/gui/theme.h +++ b/src/gui/theme.h @@ -40,9 +40,12 @@ class DyePalette; class Image; class ImageSet; +class Theme; const int THEME_PALETTES = 5; +extern Theme *theme; + struct ThemeInfo final { ThemeInfo() : @@ -79,9 +82,12 @@ struct ThemeInfo final class Skin final { public: - Skin(ImageRect *restrict skin, const ImageRect *restrict images, - const std::string &filePath, const std::string &name = "", - const int padding = 3, const int titlePadding = 4, + Skin(ImageRect *const restrict skin, + const ImageRect *const restrict images, + const std::string &filePath, + const std::string &name = "", + const int padding = 3, + const int titlePadding = 4, std::map<std::string, int> *restrict const options = nullptr); A_DELETE_COPY(Skin) @@ -173,14 +179,15 @@ class Skin final std::map<std::string, int> *mOptions; }; -class Theme final : public Palette, public ConfigListener +class Theme final : public Palette, + public ConfigListener { public: - A_DELETE_COPY(Theme) + Theme(); - static Theme *instance() A_WARN_UNUSED; + ~Theme(); - static void deleteInstance(); + A_DELETE_COPY(Theme) static void prepareThemePath(); @@ -428,6 +435,7 @@ class Theme final : public Palette, public ConfigListener enum ProgressPalette { PROG_HP = 0, + PROG_HP_POISON, PROG_MP, PROG_NO_MP, PROG_EXP, @@ -441,40 +449,22 @@ class Theme final : public Palette, public ConfigListener THEME_PROG_END }; - /** - * Gets the color associated with the type. Sets the alpha channel - * before returning. - * - * @param type the color type requested - * @param alpha alpha channel to use - * - * @return the requested color - */ - inline static const Color &getThemeColor(const int type, - const int alpha = 255) - A_WARN_UNUSED - { return mInstance->getColor(type, alpha); } - - static const Color &getThemeCharColor(const signed char c, - bool &valid) A_WARN_UNUSED - { return mInstance->getCharColor(c, valid); } - - static int getThemeIdByChar(const signed char c, - bool &valid) A_WARN_UNUSED - { return mInstance->getIdByChar(c, valid); } - static Color getProgressColor(const int type, const float progress) A_WARN_UNUSED; /** * Loads a skin. */ - Skin *load(const std::string &filename, const std::string &filename2, - const bool full = true, const std::string + Skin *load(const std::string &filename, + const std::string &filename2, + const bool full = true, + const std::string &restrict defaultPath = getThemePath()) A_WARN_UNUSED; - Skin *loadSkinRect(ImageRect &image, const std::string &name, - const std::string &name2, const int start = 0, + Skin *loadSkinRect(ImageRect &image, + const std::string &name, + const std::string &name2, + const int start = 0, const int end = 8) A_WARN_UNUSED; void unload(Skin *const skin); @@ -498,8 +488,10 @@ class Theme final : public Palette, public ConfigListener void optionChanged(const std::string &) override final; - void loadRect(ImageRect &image, const std::string &name, - const std::string &name2, const int start = 0, + void loadRect(ImageRect &image, + const std::string &name, + const std::string &name2, + const int start = 0, const int end = 8); static void unloadRect(const ImageRect &rect, @@ -513,10 +505,6 @@ class Theme final : public Palette, public ConfigListener static ThemeInfo *loadInfo(const std::string &themeName) A_WARN_UNUSED; private: - Theme(); - - ~Theme(); - Skin *readSkin(const std::string &filename0, const bool full) A_WARN_UNUSED; @@ -529,7 +517,6 @@ class Theme final : public Palette, public ConfigListener static std::string mThemePath; static std::string mThemeName; static std::string mScreenDensity; - static Theme *mInstance; static bool tryThemePath(const std::string &themePath) A_WARN_UNUSED; diff --git a/src/gui/userpalette.cpp b/src/gui/userpalette.cpp index 74d47203f..d6fb35192 100644 --- a/src/gui/userpalette.cpp +++ b/src/gui/userpalette.cpp @@ -234,8 +234,10 @@ UserPalette::~UserPalette() } } -void UserPalette::setColor(const int type, const int r, - const int g, const int b) +void UserPalette::setColor(const int type, + const int r, + const int g, + const int b) { Color &color = mColors[type].color; color.r = r; @@ -311,7 +313,7 @@ void UserPalette::rollback() } } -int UserPalette::getColorTypeAt(int i) +int UserPalette::getColorTypeAt(const int i) { if (i < 0 || i >= getNumberOfElements()) return BEING; @@ -319,7 +321,8 @@ int UserPalette::getColorTypeAt(int i) return mColors[i].type; } -void UserPalette::addColor(const unsigned type, const unsigned rgb, +void UserPalette::addColor(const unsigned type, + const unsigned rgb, Palette::GradientType grad, const std::string &text, int delay) diff --git a/src/gui/userpalette.h b/src/gui/userpalette.h index 7bab5bed9..da8252340 100644 --- a/src/gui/userpalette.h +++ b/src/gui/userpalette.h @@ -186,7 +186,7 @@ class UserPalette final : public Palette, public ListModel * * @return the color type of the color with the given index */ - int getColorTypeAt(int i) A_WARN_UNUSED; + int getColorTypeAt(const int i) A_WARN_UNUSED; private: /** diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index c2000b562..df97a5673 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -35,6 +35,7 @@ #include "input/inputmanager.h" #include "gui/gui.h" +#include "gui/font.h" #include "gui/popups/beingpopup.h" #include "gui/popups/popupmenu.h" @@ -42,7 +43,7 @@ #include "gui/windows/ministatuswindow.h" -#include "gui/font.h" +#include "utils/delete2.h" #include "debug.h" @@ -104,12 +105,9 @@ Viewport::~Viewport() { config.removeListeners(this); CHECKLISTENERS - delete mPopupMenu; - mPopupMenu = nullptr; - delete mBeingPopup; - mBeingPopup = nullptr; - delete mTextPopup; - mTextPopup = nullptr; + delete2(mPopupMenu); + delete2(mBeingPopup); + delete2(mTextPopup); } void Viewport::setMap(Map *const map) @@ -235,7 +233,7 @@ void Viewport::draw(Graphics *graphics) mMap->drawCollision(graphics, mPixelViewX, mPixelViewY, mShowDebugPath); if (mShowDebugPath == Map::MAP_DEBUG) - _drawDebugPath(graphics); + drawDebugPath(graphics); } if (player_node->getCheckNameSetting()) @@ -272,11 +270,11 @@ void Viewport::logic() BLOCK_START("Viewport::logic") // Make the player follow the mouse position // if the mouse is dragged elsewhere than in a window. - _followMouse(); + followMouse(); BLOCK_END("Viewport::logic") } -void Viewport::_followMouse() +void Viewport::followMouse() { if (!gui) return; @@ -285,18 +283,18 @@ void Viewport::_followMouse() if (mPlayerFollowMouse && (button & SDL_BUTTON(1))) { // We create a mouse event and send it to mouseDragged. - MouseEvent mouseEvent(nullptr, + MouseEvent event(nullptr, MouseEvent::DRAGGED, MouseEvent::LEFT, mMouseX, mMouseY, 0); - walkByMouse(mouseEvent); + walkByMouse(event); } } -void Viewport::_drawDebugPath(Graphics *const graphics) +void Viewport::drawDebugPath(Graphics *const graphics) { if (!player_node || !userPalette || !actorManager || !mMap || !gui) return; @@ -322,7 +320,7 @@ void Viewport::_drawDebugPath(Graphics *const graphics) 500); lastMouseDestination = mouseDestination; } - _drawPath(graphics, debugPath, userPalette->getColorWithAlpha( + drawPath(graphics, debugPath, userPalette->getColorWithAlpha( UserPalette::ROAD_POINT)); const ActorSprites &actors = actorManager->getAll(); @@ -332,14 +330,15 @@ void Viewport::_drawDebugPath(Graphics *const graphics) if (being && being != player_node) { const Path &beingPath = being->getPath(); - _drawPath(graphics, beingPath, userPalette->getColorWithAlpha( + drawPath(graphics, beingPath, userPalette->getColorWithAlpha( UserPalette::ROAD_POINT)); } } } -void Viewport::_drawPath(Graphics *const graphics, const Path &path, - const Color &color) const +void Viewport::drawPath(Graphics *const graphics, + const Path &path, + const Color &color) const { graphics->setColor(color); Font *const font = getFont(); @@ -477,7 +476,7 @@ bool Viewport::leftMouseAction() mPlayerFollowMouse = true; // Make the player go to the mouse position - _followMouse(); + followMouse(); } return false; } @@ -547,9 +546,9 @@ void Viewport::walkByMouse(const MouseEvent &event) { if (!mMap || !player_node) return; - if (mPlayerFollowMouse && !inputManager.isActionActive( - Input::KEY_STOP_ATTACK) && !inputManager.isActionActive( - Input::KEY_UNTARGET)) + if (mPlayerFollowMouse + && !inputManager.isActionActive(Input::KEY_STOP_ATTACK) + && !inputManager.isActionActive(Input::KEY_UNTARGET)) { if (!mMouseDirectionMove) mPlayerFollowMouse = false; @@ -712,8 +711,10 @@ void Viewport::mouseReleased(MouseEvent &event) } } -void Viewport::showPopup(Window *const parent, const int x, const int y, - Item *const item, const bool isInventory) +void Viewport::showPopup(Window *const parent, + const int x, const int y, + Item *const item, + const bool isInventory) { mPopupMenu->showPopup(parent, x, y, item, isInventory); } @@ -723,7 +724,8 @@ void Viewport::showPopup(MapItem *const item) mPopupMenu->showPopup(mMouseX, mMouseY, item); } -void Viewport::showPopup(Window *const parent, Item *const item, +void Viewport::showPopup(Window *const parent, + Item *const item, const bool isInventory) { mPopupMenu->showPopup(parent, mMouseX, mMouseY, item, isInventory); @@ -734,7 +736,8 @@ void Viewport::showItemPopup(Item *const item) mPopupMenu->showItemPopup(mMouseX, mMouseY, item); } -void Viewport::showItemPopup(const int itemId, const unsigned char color) +void Viewport::showItemPopup(const int itemId, + const unsigned char color) { mPopupMenu->showItemPopup(mMouseX, mMouseY, itemId, color); } @@ -759,7 +762,8 @@ void Viewport::showSpellPopup(TextCommand *const cmd) mPopupMenu->showSpellPopup(mMouseX, mMouseY, cmd); } -void Viewport::showChatPopup(const int x, const int y, ChatTab *const tab) +void Viewport::showChatPopup(const int x, const int y, + ChatTab *const tab) { mPopupMenu->showChatPopup(x, y, tab); } @@ -769,7 +773,8 @@ void Viewport::showChatPopup(ChatTab *const tab) mPopupMenu->showChatPopup(mMouseX, mMouseY, tab); } -void Viewport::showPopup(const int x, const int y, const Being *const being) +void Viewport::showPopup(const int x, const int y, + const Being *const being) { mPopupMenu->showPopup(x, y, being); } @@ -784,7 +789,8 @@ void Viewport::showPlayerPopup(const std::string &nick) mPopupMenu->showPlayerPopup(mMouseX, mMouseY, nick); } -void Viewport::showPopup(const int x, const int y, Button *const button) +void Viewport::showPopup(const int x, const int y, + Button *const button) { mPopupMenu->showPopup(x, y, button); } @@ -795,7 +801,8 @@ void Viewport::showPopup(const int x, const int y, mPopupMenu->showPopup(x, y, bar); } -void Viewport::showAttackMonsterPopup(const std::string &name, const int type) +void Viewport::showAttackMonsterPopup(const std::string &name, + const int type) { mPopupMenu->showAttackMonsterPopup(mMouseX, mMouseY, name, type); } @@ -806,7 +813,8 @@ void Viewport::showPickupItemPopup(const std::string &name) } void Viewport::showUndressPopup(const int x, const int y, - const Being *const being, Item *const item) + const Being *const being, + Item *const item) { mPopupMenu->showUndressPopup(x, y, being, item); } @@ -836,6 +844,11 @@ void Viewport::showNpcDialogPopup(const int npcId) mPopupMenu->showNpcDialogPopup(npcId, mMouseX, mMouseY); } +void Viewport::showWindowPopup(Window *const window) +{ + mPopupMenu->showWindowPopup(window, mMouseX, mMouseY); +} + void Viewport::closePopupMenu() { if (mPopupMenu) @@ -869,10 +882,14 @@ void Viewport::mouseMoved(MouseEvent &event A_UNUSED) const int x = mMouseX + mPixelViewX; const int y = mMouseY + mPixelViewY; + ActorSprite::Type type = ActorSprite::UNKNOWN; + if (mHoverBeing) + type = mHoverBeing->getType(); mHoverBeing = actorManager->findBeingByPixel(x, y, true); - if (mHoverBeing && (mHoverBeing->getType() == Being::PLAYER - || mHoverBeing->getType() == Being::NPC - || mHoverBeing->getType() == Being::PET)) + if (mHoverBeing + && (type == Being::PLAYER + || type == Being::NPC + || type == Being::PET)) { mTextPopup->setVisible(false); if (mShowBeingPopup) @@ -920,7 +937,7 @@ void Viewport::mouseMoved(MouseEvent &event A_UNUSED) if (mHoverBeing) { - switch (mHoverBeing->getType()) + switch (type) { case ActorSprite::NPC: gui->setCursorType(mHoverBeing->getHoverCursor()); @@ -1013,7 +1030,8 @@ bool Viewport::isPopupMenuVisible() const return mPopupMenu ? mPopupMenu->isPopupVisible() : false; } -void Viewport::moveCameraToActor(const int actorId, const int x, const int y) +void Viewport::moveCameraToActor(const int actorId, + const int x, const int y) { if (!player_node || !actorManager) return; diff --git a/src/gui/viewport.h b/src/gui/viewport.h index c98350744..d401a3af4 100644 --- a/src/gui/viewport.h +++ b/src/gui/viewport.h @@ -124,32 +124,39 @@ class Viewport final : public WindowContainer, * Shows a popup for an item. * TODO Find some way to get rid of Item here */ - void showPopup(Window *const parent, const int x, const int y, - Item *const item, const bool isInventory = true); + void showPopup(Window *const parent, + const int x, const int y, + Item *const item, + const bool isInventory = true); /** * Shows a popup for an item. * TODO Find some way to get rid of Item here */ - void showPopup(Window *const parent, Item *const item, + void showPopup(Window *const parent, + Item *const item, const bool isInventory = true); - void showPopup(const int x, const int y, Button *const button); + void showPopup(const int x, const int y, + Button *const button); - void showPopup(const int x, const int y, const ProgressBar *const bar); + void showPopup(const int x, const int y, + const ProgressBar *const bar); void showPopup(MapItem *const item); void showItemPopup(Item *const item); - void showItemPopup(const int itemId, const unsigned char color = 1); + void showItemPopup(const int itemId, + const unsigned char color = 1); void showDropPopup(Item *const item); /** * Shows a popup for being. */ - void showPopup(const int x, const int y, const Being *const being); + void showPopup(const int x, const int y, + const Being *const being); void showPopup(const Being *const being); @@ -161,7 +168,8 @@ class Viewport final : public WindowContainer, void showSpellPopup(TextCommand *const cmd); - void showAttackMonsterPopup(const std::string &name, const int type); + void showAttackMonsterPopup(const std::string &name, + const int type); void showPickupItemPopup(const std::string &name); @@ -169,7 +177,8 @@ class Viewport final : public WindowContainer, * Shows the related popup menu when right click on the chat * at the specified mouse coordinates. */ - void showChatPopup(const int x, const int y, ChatTab *const tab); + void showChatPopup(const int x, const int y, + ChatTab *const tab); /** * Shows the related popup menu when right click on the chat @@ -177,7 +186,8 @@ class Viewport final : public WindowContainer, void showChatPopup(ChatTab *const tab); void showUndressPopup(const int x, const int y, - const Being *const being, Item *const item); + const Being *const being, + Item *const item); void showMapPopup(const int x, const int y); @@ -189,6 +199,8 @@ class Viewport final : public WindowContainer, void showNpcDialogPopup(const int npcId); + void showWindowPopup(Window *const window); + /** * Closes the popup menu. Needed for when the player dies or switching * maps. @@ -268,7 +280,8 @@ class Viewport final : public WindowContainer, bool isPopupMenuVisible() const A_WARN_UNUSED; - void moveCameraToActor(const int actorId, const int x = 0, + void moveCameraToActor(const int actorId, + const int x = 0, const int y = 0); void moveCameraToPosition(const int x, const int y); @@ -292,13 +305,14 @@ class Viewport final : public WindowContainer, * Finds a path from the player to the mouse, and draws it. This is for * debug purposes. */ - void _drawDebugPath(Graphics *const graphics); + void drawDebugPath(Graphics *const graphics); /** * Draws the given path. */ - void _drawPath(Graphics *const graphics, const Path &path, - const Color &color = Color(255, 0, 0)) const; + void drawPath(Graphics *const graphics, + const Path &path, + const Color &color = Color(255, 0, 0)) const; bool leftMouseAction(); @@ -309,7 +323,7 @@ class Viewport final : public WindowContainer, /** * Make the player go to the mouse position. */ - void _followMouse(); + void followMouse(); Map *mMap; /**< The current map. */ diff --git a/src/gui/widgets/avatarlistbox.cpp b/src/gui/widgets/avatarlistbox.cpp index 01126f8ac..9411c2249 100644 --- a/src/gui/widgets/avatarlistbox.cpp +++ b/src/gui/widgets/avatarlistbox.cpp @@ -154,14 +154,16 @@ void AvatarListBox::draw(Graphics *graphics) text = strprintf("%s %d/%d", a->getComplexName().c_str(), a->getHp(), a->getMaxHp()); } - if (parent && a->getMaxHp()) + const bool isPoison = a->getPoison(); + if (a->getMaxHp() && (isPoison || parent)) { + const int themeColor = (isPoison + ? Theme::PROG_HP_POISON : Theme::PROG_HP); Color color = Theme::getProgressColor( - Theme::PROG_HP, static_cast<float>(a->getHp()) - / static_cast<float>(a->getMaxHp())); + themeColor, static_cast<float>(a->getHp()) + / static_cast<float>(a->getMaxHp())); color.a = 80; graphics->setColor(color); - graphics->fillRectangle(Rect(mPadding, y + mPadding, parent->getWidth() * a->getHp() / a->getMaxHp() - 2 * mPadding, fontHeight)); @@ -182,8 +184,9 @@ void AvatarListBox::draw(Graphics *graphics) if (parent) { - Color color = Theme::getProgressColor(Theme::PROG_HP, 1); - + const int themeColor = (a->getPoison() + ? Theme::PROG_HP_POISON : Theme::PROG_HP); + Color color = Theme::getProgressColor(themeColor, 1); color.a = 80; graphics->setColor(color); graphics->fillRectangle(Rect(mPadding, y + mPadding, @@ -332,6 +335,7 @@ void AvatarListBox::mousePressed(MouseEvent &event) if (!ava) return; + event.consume(); const unsigned int eventButton = event.getButton(); if (eventButton == MouseEvent::LEFT) { diff --git a/src/gui/widgets/basiccontainer.cpp b/src/gui/widgets/basiccontainer.cpp index d3dd62fc7..00386a725 100644 --- a/src/gui/widgets/basiccontainer.cpp +++ b/src/gui/widgets/basiccontainer.cpp @@ -74,13 +74,21 @@ BasicContainer::~BasicContainer() void BasicContainer::moveToTop(Widget* widget) { - for (WidgetListIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) + FOR_EACH (WidgetListIterator, iter, mWidgets) { if (*iter == widget) { mWidgets.erase(iter); mWidgets.push_back(widget); + break; + } + } + FOR_EACH (WidgetListIterator, iter, mLogicWidgets) + { + if (*iter == widget) + { + mLogicWidgets.erase(iter); + mLogicWidgets.push_back(widget); return; } } @@ -88,30 +96,39 @@ void BasicContainer::moveToTop(Widget* widget) void BasicContainer::moveToBottom(Widget* widget) { - WidgetListIterator iter; - iter = std::find(mWidgets.begin(), mWidgets.end(), widget); - - if (iter == mWidgets.end()) - return; + WidgetListIterator iter = std::find(mWidgets.begin(), + mWidgets.end(), widget); + if (iter != mWidgets.end()) + { + mWidgets.erase(iter); + mWidgets.insert(mWidgets.begin(), widget); + } - mWidgets.erase(iter); - mWidgets.insert(mWidgets.begin(), widget); + WidgetListIterator iter2 = std::find(mLogicWidgets.begin(), + mLogicWidgets.end(), widget); + if (iter2 != mLogicWidgets.end()) + { + mLogicWidgets.erase(iter2); + mLogicWidgets.insert(mLogicWidgets.begin(), widget); + } } -void BasicContainer::death(const Event& event) +void BasicContainer::death(const Event &event) { - WidgetListIterator iter; - iter = std::find(mWidgets.begin(), mWidgets.end(), event.getSource()); - - if (iter == mWidgets.end()) - return; - - mWidgets.erase(iter); + WidgetListIterator iter = std::find(mWidgets.begin(), + mWidgets.end(), event.getSource()); + if (iter != mWidgets.end()) + mWidgets.erase(iter); + + WidgetListIterator iter2 = std::find(mLogicWidgets.begin(), + mLogicWidgets.end(), event.getSource()); + if (iter2 != mLogicWidgets.end()) + mLogicWidgets.erase(iter2); } Rect BasicContainer::getChildrenArea() { - return Rect(0, 0, getWidth(), getHeight()); + return Rect(0, 0, mDimension.width, mDimension.height); } void BasicContainer::focusNext() @@ -185,12 +202,13 @@ Widget *BasicContainer::getWidgetAt(int x, int y) y -= r.y; for (WidgetListReverseIterator it = mWidgets.rbegin(); - it != mWidgets.rend(); ++ it) + it != mWidgets.rend(); ++ it) { - if ((*it)->isVisible() && (*it)->getDimension() + const Widget *const widget = *it; + if (widget->isVisible() && widget->getDimension() .isPointInRect(x, y)) { - return (*it); + return *it; } } @@ -200,48 +218,59 @@ Widget *BasicContainer::getWidgetAt(int x, int y) void BasicContainer::logic() { BLOCK_START("BasicContainer::logic") + if (!mVisible) + { + BLOCK_END("BasicContainer::logic") + return; + } logicChildren(); BLOCK_END("BasicContainer::logic") } -void BasicContainer::_setFocusHandler(FocusHandler* focusHandler) +void BasicContainer::setFocusHandler(FocusHandler *const focusHandler) { - Widget::_setFocusHandler(focusHandler); + Widget::setFocusHandler(focusHandler); if (mInternalFocusHandler) return; - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) - { - (*iter)->_setFocusHandler(focusHandler); - } + FOR_EACH (WidgetListConstIterator, iter, mWidgets) + (*iter)->setFocusHandler(focusHandler); } -void BasicContainer::add(Widget* widget) +void BasicContainer::add(Widget *const widget) { mWidgets.push_back(widget); + if (widget->isAllowLogic()) + mLogicWidgets.push_back(widget); if (!mInternalFocusHandler) - widget->_setFocusHandler(_getFocusHandler()); + widget->setFocusHandler(getFocusHandler()); else - widget->_setFocusHandler(mInternalFocusHandler); + widget->setFocusHandler(mInternalFocusHandler); - widget->_setParent(this); + widget->setParent(this); widget->addDeathListener(this); } void BasicContainer::remove(Widget* widget) { - for (WidgetListIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) + FOR_EACH (WidgetListIterator, iter, mWidgets) { if (*iter == widget) { mWidgets.erase(iter); - widget->_setFocusHandler(nullptr); - widget->_setParent(nullptr); + widget->setFocusHandler(nullptr); + widget->setParent(nullptr); widget->removeDeathListener(this); + break; + } + } + FOR_EACH (WidgetListIterator, iter, mLogicWidgets) + { + if (*iter == widget) + { + mLogicWidgets.erase(iter); return; } } @@ -249,35 +278,34 @@ void BasicContainer::remove(Widget* widget) void BasicContainer::clear() { - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) + FOR_EACH (WidgetListConstIterator, iter, mWidgets) { - (*iter)->_setFocusHandler(nullptr); - (*iter)->_setParent(nullptr); - (*iter)->removeDeathListener(this); + Widget *const widget = *iter; + widget->setFocusHandler(nullptr); + widget->setParent(nullptr); + widget->removeDeathListener(this); } mWidgets.clear(); + mLogicWidgets.clear(); } void BasicContainer::drawChildren(Graphics* graphics) { BLOCK_START("BasicContainer::drawChildren") - graphics->pushClipArea(getChildrenArea()); - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) + FOR_EACH (WidgetListConstIterator, iter, mWidgets) { Widget *const widget = *iter; if (widget->isVisible()) { // If the widget has a frame, // draw it before drawing the widget - if (widget->getFrameSize() > 0) + if (widget->mFrameSize > 0) { - Rect rec = widget->getDimension(); - const int frame = widget->getFrameSize(); + Rect rec = widget->mDimension; + const int frame = widget->mFrameSize; const int frame2 = frame * 2; rec.x -= frame; rec.y -= frame; @@ -290,7 +318,7 @@ void BasicContainer::drawChildren(Graphics* graphics) graphics->popClipArea(); } - graphics->pushClipArea(widget->getDimension()); + graphics->pushClipArea(widget->mDimension); BLOCK_START("BasicContainer::drawChildren 2") widget->draw(graphics); BLOCK_END("BasicContainer::drawChildren 2") @@ -305,11 +333,8 @@ void BasicContainer::drawChildren(Graphics* graphics) void BasicContainer::logicChildren() { BLOCK_START("BasicContainer::logicChildren") - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) - { + FOR_EACH (WidgetListConstIterator, iter, mLogicWidgets) (*iter)->logic(); - } BLOCK_END("BasicContainer::logicChildren") } @@ -317,61 +342,33 @@ void BasicContainer::showWidgetPart(Widget *const widget, Rect area) { const Rect widgetArea = getChildrenArea(); - area.x += widget->getX(); - area.y += widget->getY(); + const int x = widget->mDimension.x; + const int y = widget->mDimension.y; + area.x += x; + area.y += y; if (area.x + area.width > widgetArea.width) - { - widget->setX(widget->getX() - area.x - - area.width + widgetArea.width); - } + widget->setX(x - area.x - area.width + widgetArea.width); if (area.y + area.height > widgetArea.height) - { - widget->setY(widget->getY() - area.y - - area.height + widgetArea.height); - } + widget->setY(y - area.y - area.height + widgetArea.height); if (area.x < 0) - widget->setX(widget->getX() - area.x); + widget->setX(x - area.x); if (area.y < 0) - widget->setY(widget->getY() - area.y); + widget->setY(y - area.y); } void BasicContainer::setInternalFocusHandler(FocusHandler* focusHandler) { Widget::setInternalFocusHandler(focusHandler); - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) + FOR_EACH (WidgetListConstIterator, iter, mWidgets) { if (!mInternalFocusHandler) - (*iter)->_setFocusHandler(_getFocusHandler()); + (*iter)->setFocusHandler(getFocusHandler()); else - (*iter)->_setFocusHandler(mInternalFocusHandler); + (*iter)->setFocusHandler(mInternalFocusHandler); } } - -Widget* BasicContainer::findWidgetById(const std::string& id) -{ - for (WidgetListConstIterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++ iter) - { - if ((*iter)->getId() == id) - return (*iter); - - BasicContainer *const basicContainer - = dynamic_cast<BasicContainer *const>(*iter); - - if (basicContainer) - { - Widget *const widget = basicContainer->findWidgetById(id); - - if (widget) - return widget; - } - } - - return nullptr; -} diff --git a/src/gui/widgets/basiccontainer.h b/src/gui/widgets/basiccontainer.h index 6e753a445..8a5d7b9a4 100644 --- a/src/gui/widgets/basiccontainer.h +++ b/src/gui/widgets/basiccontainer.h @@ -85,7 +85,8 @@ class BasicContainer : public Widget, explicit BasicContainer(const Widget2 *const widget) : Widget(widget), DeathListener(), - mWidgets() + mWidgets(), + mLogicWidgets() { } A_DELETE_COPY(BasicContainer) @@ -110,28 +111,28 @@ class BasicContainer : public Widget, // Inherited from Widget - virtual void moveToTop(Widget* widget); + virtual void moveToTop(Widget* widget) override; - virtual void moveToBottom(Widget* widget); + virtual void moveToBottom(Widget* widget) override; - virtual Rect getChildrenArea() A_WARN_UNUSED; + virtual Rect getChildrenArea() override A_WARN_UNUSED; - virtual void focusNext(); + virtual void focusNext() override; - virtual void focusPrevious(); + virtual void focusPrevious() override; - virtual void logic(); + virtual void logic() override; - virtual void _setFocusHandler(FocusHandler* focusHandler); + virtual void setFocusHandler(FocusHandler *const focusHandler) + override; void setInternalFocusHandler(FocusHandler* focusHandler); - virtual Widget *getWidgetAt(int x, int y) A_WARN_UNUSED; - + virtual Widget *getWidgetAt(int x, int y) override A_WARN_UNUSED; // Inherited from DeathListener - virtual void death(const Event& event); + virtual void death(const Event& event) override; protected: /** @@ -140,7 +141,7 @@ class BasicContainer : public Widget, * @param widget The widget to add. * @see remove, clear */ - void add(Widget* widget); + void add(Widget *const widget); /** * Removes a widget from the basic container. @@ -171,17 +172,6 @@ class BasicContainer : public Widget, virtual void logicChildren(); /** - * Finds a widget given an id. This function can be useful - * when implementing a GUI generator for Guichan, such as - * the ability to create a Guichan GUI from an XML file. - * - * @param id The id to find a widget by. - * @return The widget with the corrosponding id, - NULL of no widget is found. - */ - virtual Widget* findWidgetById(const std::string& id) A_WARN_UNUSED; - - /** * Typedef. */ typedef std::vector<Widget *> WidgetList; @@ -210,6 +200,8 @@ class BasicContainer : public Widget, * Holds all widgets of the basic container. */ WidgetList mWidgets; + + WidgetList mLogicWidgets; }; #endif // GUI_WIDGETS_BASICCONTAINER_H diff --git a/src/gui/widgets/basiccontainer2.cpp b/src/gui/widgets/basiccontainer2.cpp index 9bd4d1593..8e6d62a67 100644 --- a/src/gui/widgets/basiccontainer2.cpp +++ b/src/gui/widgets/basiccontainer2.cpp @@ -122,8 +122,3 @@ void BasicContainer2::clear() { BasicContainer::clear(); } - -Widget* BasicContainer2::findWidgetById(const std::string &id) -{ - return BasicContainer::findWidgetById(id); -} diff --git a/src/gui/widgets/basiccontainer2.h b/src/gui/widgets/basiccontainer2.h index c6f1d996b..7d65d0cdf 100644 --- a/src/gui/widgets/basiccontainer2.h +++ b/src/gui/widgets/basiccontainer2.h @@ -149,17 +149,6 @@ class BasicContainer2: public BasicContainer */ virtual void clear(); - /** - * Finds a widget given an id. - * - * @param id The id to find a widget by. - * @return A widget with a corrosponding id, NULL if no widget - * is found. - * @see Widget::setId - */ - virtual Widget* findWidgetById(const std::string &id); - - // Inherited from Widget virtual void draw(Graphics* graphics); diff --git a/src/gui/widgets/browserbox.cpp b/src/gui/widgets/browserbox.cpp index 100281d94..4d4a51ca4 100644 --- a/src/gui/widgets/browserbox.cpp +++ b/src/gui/widgets/browserbox.cpp @@ -83,12 +83,13 @@ BrowserBox::BrowserBox(const Widget2 *const widget, mEnableKeys(false), mEnableTabs(false) { + mAllowLogic = false; + setFocusable(true); addMouseListener(this); mBackgroundColor = getThemeColor(Theme::BACKGROUND); - Theme *const theme = Theme::instance(); if (theme) mSkin = theme->load(skin, "browserbox.xml"); if (mInstances == 0) @@ -140,7 +141,6 @@ BrowserBox::~BrowserBox() if (gui) gui->removeDragged(this); - Theme *const theme = Theme::instance(); if (theme) { theme->unload(mSkin); @@ -445,6 +445,11 @@ void BrowserBox::mouseMoved(MouseEvent &event) ? static_cast<int>(i - mLinks.begin()) : -1; } +void BrowserBox::mouseExited(MouseEvent &event A_UNUSED) +{ + mSelectedLink = -1; +} + void BrowserBox::draw(Graphics *graphics) { BLOCK_START("BrowserBox::draw") diff --git a/src/gui/widgets/browserbox.h b/src/gui/widgets/browserbox.h index 8202fa548..55f0163cd 100644 --- a/src/gui/widgets/browserbox.h +++ b/src/gui/widgets/browserbox.h @@ -160,6 +160,8 @@ class BrowserBox final : public Widget, void mouseMoved(MouseEvent &event) override final; + void mouseExited(MouseEvent& event) override final; + /** * Draws the browser box. */ diff --git a/src/gui/widgets/browserbox_unittest.cc b/src/gui/widgets/browserbox_unittest.cc index 2acc5f5d3..f8b5e149e 100644 --- a/src/gui/widgets/browserbox_unittest.cc +++ b/src/gui/widgets/browserbox_unittest.cc @@ -50,7 +50,7 @@ TEST(browserbox, test1) logger = new Logger(); imageHelper = new SDLImageHelper(); - Theme *theme = Theme::instance(); + theme = new Theme; Widget::setGlobalFont(new Font("/usr/share/fonts/truetype/" "ttf-dejavu/DejaVuSans-Oblique.ttf", 18)); BrowserBox *box = new BrowserBox(nullptr, BrowserBox::AUTO_WRAP, true, ""); diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp index 308c75413..054a338aa 100644 --- a/src/gui/widgets/button.cpp +++ b/src/gui/widgets/button.cpp @@ -77,9 +77,10 @@ #include "gui/font.h" #include "gui/gui.h" - #include "gui/rect.h" +#include "utils/delete2.h" + #include "debug.h" int Button::mInstances = 0; @@ -327,6 +328,7 @@ Button::Button(const Widget2 *const widget, void Button::init() { + mAllowLogic = false; addMouseListener(this); addKeyListener(this); addFocusListener(this); @@ -337,13 +339,10 @@ void Button::init() if (mInstances == 0) { - if (Theme::instance()) + if (theme) { for (int mode = 0; mode < BUTTON_COUNT; mode ++) - { - button[mode] = Theme::instance()->load( - data[mode], "button.xml"); - } + button[mode] = theme->load(data[mode], "button.xml"); } updateAlpha(); @@ -359,14 +358,12 @@ Button::~Button() mInstances--; - if (mInstances == 0 && Theme::instance()) + if (mInstances == 0 && theme) { - Theme *const theme = Theme::instance(); for (int mode = 0; mode < BUTTON_COUNT; mode ++) theme->unload(button[mode]); } - delete mVertexes2; - mVertexes2 = nullptr; + delete2(mVertexes2); if (mImageSet) { mImageSet->decRef(); @@ -420,7 +417,7 @@ void Button::loadImageSet(const std::string &imageName) void Button::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (mAlpha != alpha) { @@ -616,9 +613,9 @@ void Button::draw(Graphics *graphics) BLOCK_END("Button::draw") } -void Button::mouseReleased(MouseEvent& mouseEvent) +void Button::mouseReleased(MouseEvent& event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { if (mStick) mPressed = !mPressed; @@ -626,7 +623,7 @@ void Button::mouseReleased(MouseEvent& mouseEvent) if (mMousePressed && mHasMouse) { mMousePressed = false; - mClickCount = mouseEvent.getClickCount(); + mClickCount = event.getClickCount(); distributeActionEvent(); } else @@ -634,7 +631,7 @@ void Button::mouseReleased(MouseEvent& mouseEvent) mMousePressed = false; mClickCount = 0; } - mouseEvent.consume(); + event.consume(); } } @@ -676,20 +673,20 @@ void Button::adjustSize() } } -void Button::keyPressed(KeyEvent& keyEvent) +void Button::keyPressed(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT) { mKeyPressed = true; - keyEvent.consume(); + event.consume(); } } -void Button::keyReleased(KeyEvent& keyEvent) +void Button::keyReleased(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT && mKeyPressed) { @@ -697,7 +694,7 @@ void Button::keyReleased(KeyEvent& keyEvent) if (mStick) mPressed = !mPressed; distributeActionEvent(); - keyEvent.consume(); + event.consume(); } } @@ -720,26 +717,26 @@ void Button::focusLost(const Event& event A_UNUSED) mKeyPressed = false; } -void Button::mousePressed(MouseEvent& mouseEvent) +void Button::mousePressed(MouseEvent& event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { mMousePressed = true; - mouseEvent.consume(); + event.consume(); } } -void Button::mouseEntered(MouseEvent& mouseEvent A_UNUSED) +void Button::mouseEntered(MouseEvent& event A_UNUSED) { mHasMouse = true; } -void Button::mouseExited(MouseEvent& mouseEvent A_UNUSED) +void Button::mouseExited(MouseEvent& event A_UNUSED) { mHasMouse = false; } -void Button::mouseDragged(MouseEvent& mouseEvent) +void Button::mouseDragged(MouseEvent& event) { - mouseEvent.consume(); + event.consume(); } diff --git a/src/gui/widgets/button.h b/src/gui/widgets/button.h index 6eba9b3c0..57a024195 100644 --- a/src/gui/widgets/button.h +++ b/src/gui/widgets/button.h @@ -156,7 +156,7 @@ class Button final : public Widget, */ static void updateAlpha(); - void mouseReleased(MouseEvent& mouseEvent) override final; + void mouseReleased(MouseEvent& event) override final; void setDescription(std::string text) { mDescription = text; } @@ -189,9 +189,9 @@ class Button final : public Widget, void adjustSize(); - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; - void keyReleased(KeyEvent &keyEvent) override final; + void keyReleased(KeyEvent &event) override final; bool isPressed2() const A_WARN_UNUSED; @@ -254,13 +254,13 @@ class Button final : public Widget, void focusLost(const Event& event) override final; - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; - void mouseEntered(MouseEvent& mouseEvent) override final; + void mouseEntered(MouseEvent& event) override final; - void mouseExited(MouseEvent& mouseEvent) override final; + void mouseExited(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; enum { diff --git a/src/gui/widgets/characterdisplay.cpp b/src/gui/widgets/characterdisplay.cpp index 7bfc938de..a5cf2379e 100644 --- a/src/gui/widgets/characterdisplay.cpp +++ b/src/gui/widgets/characterdisplay.cpp @@ -77,8 +77,7 @@ CharacterDisplay::CharacterDisplay(const Widget2 *const widget, CharacterDisplay::~CharacterDisplay() { - delete mPopup; - mPopup = nullptr; + delete2(mPopup); } void CharacterDisplay::setCharacter(Net::Character *const character) @@ -145,6 +144,7 @@ void CharacterDisplay::mouseMoved(MouseEvent &event A_UNUSED) void CharacterDisplay::mousePressed(MouseEvent &event) { + event.consume(); if (event.getClickCount() == 2) distributeActionEvent(); } diff --git a/src/gui/widgets/checkbox.cpp b/src/gui/widgets/checkbox.cpp index f01495bcf..06dcecab0 100644 --- a/src/gui/widgets/checkbox.cpp +++ b/src/gui/widgets/checkbox.cpp @@ -98,6 +98,7 @@ CheckBox::CheckBox(const Widget2 *const widget, mDrawBox(true) { setCaption(caption); + mAllowLogic = false; setFocusable(true); addMouseListener(this); @@ -106,9 +107,9 @@ CheckBox::CheckBox(const Widget2 *const widget, mForegroundColor2 = getThemeColor(Theme::CHECKBOX_OUTLINE); if (instances == 0) { - if (Theme::instance()) + if (theme) { - mSkin = Theme::instance()->load("checkbox.xml", ""); + mSkin = theme->load("checkbox.xml", ""); updateAlpha(); } } @@ -142,8 +143,8 @@ CheckBox::~CheckBox() if (instances == 0) { - if (Theme::instance()) - Theme::instance()->unload(mSkin); + if (theme) + theme->unload(mSkin); } } @@ -162,7 +163,7 @@ void CheckBox::draw(Graphics *const graphics) void CheckBox::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (mAlpha != alpha) { @@ -234,14 +235,14 @@ void CheckBox::mouseExited(MouseEvent& event A_UNUSED) mHasMouse = false; } -void CheckBox::keyPressed(KeyEvent& keyEvent) +void CheckBox::keyPressed(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT) { toggleSelected(); - keyEvent.consume(); + event.consume(); } } @@ -252,15 +253,18 @@ void CheckBox::adjustSize() + getFont()->getWidth(mCaption) + mPadding); } -void CheckBox::mouseClicked(MouseEvent& mouseEvent) +void CheckBox::mouseClicked(MouseEvent& event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) + { toggleSelected(); + event.consume(); + } } -void CheckBox::mouseDragged(MouseEvent& mouseEvent) +void CheckBox::mouseDragged(MouseEvent& event) { - mouseEvent.consume(); + event.consume(); } void CheckBox::toggleSelected() diff --git a/src/gui/widgets/checkbox.h b/src/gui/widgets/checkbox.h index 5711e766f..41f168048 100644 --- a/src/gui/widgets/checkbox.h +++ b/src/gui/widgets/checkbox.h @@ -126,7 +126,7 @@ class CheckBox final : public Widget, */ void mouseExited(MouseEvent& event) override final; - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; void adjustSize(); @@ -168,9 +168,9 @@ class CheckBox final : public Widget, void setCaption(const std::string& caption) { mCaption = caption; } - void mouseClicked(MouseEvent& mouseEvent) override final; + void mouseClicked(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; private: void toggleSelected(); diff --git a/src/gui/widgets/desktop.cpp b/src/gui/widgets/desktop.cpp index 0ff1b17c9..6ae892c81 100644 --- a/src/gui/widgets/desktop.cpp +++ b/src/gui/widgets/desktop.cpp @@ -51,7 +51,6 @@ Desktop::Desktop(const Widget2 *const widget) : Wallpaper::loadWallpapers(); - Theme *const theme = Theme::instance(); if (theme) mSkin = theme->load("desktop.xml", ""); @@ -80,8 +79,8 @@ Desktop::~Desktop() mWallpaper->decRef(); mWallpaper = nullptr; } - if (Theme::instance()) - Theme::instance()->unload(mSkin); + if (theme) + theme->unload(mSkin); } void Desktop::postInit() diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp index b1a3c4ac1..8b636c04d 100644 --- a/src/gui/widgets/dropdown.cpp +++ b/src/gui/widgets/dropdown.cpp @@ -78,6 +78,7 @@ DropDown::DropDown(const Widget2 *const widget, mPushed(false), mIsDragged(false) { + mAllowLogic = false; mPopup->postInit(); mFrameSize = 2; mForegroundColor2 = getThemeColor(Theme::DROPDOWN_OUTLINE); @@ -85,13 +86,12 @@ DropDown::DropDown(const Widget2 *const widget, mPopup->setHeight(100); // Initialize graphics - if (instances == 0) + if (instances == 0 && theme) { // Load the background skin for (int i = 0; i < 2; i ++) { - Skin *const skin = Theme::instance()->load( - dropdownFiles[i], "dropdown.xml"); + Skin *const skin = theme->load(dropdownFiles[i], "dropdown.xml"); if (skin) { if (!i) @@ -111,7 +111,7 @@ DropDown::DropDown(const Widget2 *const widget, } } if (i) - Theme::instance()->unload(skin); + theme->unload(skin); } else { @@ -121,11 +121,8 @@ DropDown::DropDown(const Widget2 *const widget, } // get the border skin - if (Theme::instance()) - { - Theme::instance()->loadRect(skinRect, - "dropdown_background.xml", ""); - } + if (theme) + theme->loadRect(skinRect, "dropdown_background.xml", ""); } instances++; @@ -181,7 +178,6 @@ DropDown::~DropDown() buttons[f][i]->decRef(); } } - Theme *const theme = Theme::instance(); if (theme) { theme->unload(mSkin); @@ -193,7 +189,7 @@ DropDown::~DropDown() void DropDown::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (mAlpha != alpha) { @@ -311,12 +307,12 @@ void DropDown::drawButton(Graphics *graphics) } } -void DropDown::keyPressed(KeyEvent& keyEvent) +void DropDown::keyPressed(KeyEvent& event) { - if (keyEvent.isConsumed()) + if (event.isConsumed()) return; - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); switch (actionId) { case Input::KEY_GUI_SELECT: @@ -348,7 +344,7 @@ void DropDown::keyPressed(KeyEvent& keyEvent) return; } - keyEvent.consume(); + event.consume(); } void DropDown::hideDrop(bool event) @@ -358,11 +354,12 @@ void DropDown::hideDrop(bool event) mPopup->setVisible(false); } -void DropDown::mousePressed(MouseEvent& mouseEvent) +void DropDown::mousePressed(MouseEvent& event) { + event.consume(); // If we have a mouse press on the widget. - if (mouseEvent.getButton() == MouseEvent::LEFT - && !mDroppedDown && mouseEvent.getSource() == this) + if (event.getButton() == MouseEvent::LEFT + && !mDroppedDown && event.getSource() == this) { mPushed = true; dropDown(); @@ -375,14 +372,14 @@ void DropDown::mousePressed(MouseEvent& mouseEvent) } } -void DropDown::mouseReleased(MouseEvent &mouseEvent) +void DropDown::mouseReleased(MouseEvent &event) { if (mIsDragged) mPushed = false; - const int button = mouseEvent.getButton(); - const int x = mouseEvent.getX(); - const int y = mouseEvent.getY(); + const int button = event.getButton(); + const int x = event.getX(); + const int y = event.getY(); // Released outside of widget. Can happen when we have modal // input focus. if ((0 > y || y >= mDimension.height || x < 0 || x >= mDimension.width) @@ -399,22 +396,22 @@ void DropDown::mouseReleased(MouseEvent &mouseEvent) mIsDragged = false; } -void DropDown::mouseDragged(MouseEvent &mouseEvent) +void DropDown::mouseDragged(MouseEvent &event) { mIsDragged = true; - mouseEvent.consume(); + event.consume(); } -void DropDown::mouseWheelMovedUp(MouseEvent& mouseEvent) +void DropDown::mouseWheelMovedUp(MouseEvent& event) { setSelected(getSelected() - 1); - mouseEvent.consume(); + event.consume(); } -void DropDown::mouseWheelMovedDown(MouseEvent& mouseEvent) +void DropDown::mouseWheelMovedDown(MouseEvent& event) { setSelected(getSelected() + 1); - mouseEvent.consume(); + event.consume(); } void DropDown::setSelectedString(const std::string &str) diff --git a/src/gui/widgets/dropdown.h b/src/gui/widgets/dropdown.h index 2208880b3..cf42cce11 100644 --- a/src/gui/widgets/dropdown.h +++ b/src/gui/widgets/dropdown.h @@ -83,19 +83,19 @@ class DropDown final : public ActionListener, // Inherited from KeyListener - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; // Inherited from MouseListener - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; - void mouseReleased(MouseEvent& mouseEvent) override final; + void mouseReleased(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; - void mouseWheelMovedUp(MouseEvent& mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent& event) override final; - void mouseWheelMovedDown(MouseEvent& mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent& event) override final; void setSelectedString(const std::string &str); diff --git a/src/gui/widgets/dropshortcutcontainer.cpp b/src/gui/widgets/dropshortcutcontainer.cpp index c8e4bc2d9..67e027a96 100644 --- a/src/gui/widgets/dropshortcutcontainer.cpp +++ b/src/gui/widgets/dropshortcutcontainer.cpp @@ -28,6 +28,7 @@ #include "being/playerinfo.h" +#include "gui/font.h" #include "gui/viewport.h" #include "gui/popups/itempopup.h" @@ -36,7 +37,7 @@ #include "resources/image.h" -#include "gui/font.h" +#include "utils/delete2.h" #include "debug.h" @@ -81,8 +82,7 @@ DropShortcutContainer::~DropShortcutContainer() mBackgroundImg->decRef(); mBackgroundImg = nullptr; } - delete mItemPopup; - mItemPopup = nullptr; + delete2(mItemPopup); } void DropShortcutContainer::setWidget2(const Widget2 *const widget) @@ -206,6 +206,8 @@ void DropShortcutContainer::mousePressed(MouseEvent &event) if (index == -1) return; + event.consume(); + const int eventButton = event.getButton(); if (eventButton == MouseEvent::LEFT) { diff --git a/src/gui/widgets/emotepage.cpp b/src/gui/widgets/emotepage.cpp index 139082815..789d3e1aa 100644 --- a/src/gui/widgets/emotepage.cpp +++ b/src/gui/widgets/emotepage.cpp @@ -25,6 +25,8 @@ #include "resources/imageset.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" + #include "debug.h" namespace @@ -45,6 +47,7 @@ EmotePage::EmotePage(const Widget2 *const widget) : { addMouseListener(this); addWidgetListener(this); + mAllowLogic = false; } EmotePage::~EmotePage() @@ -54,8 +57,7 @@ EmotePage::~EmotePage() mEmotes->decRef(); mEmotes = nullptr; } - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); } void EmotePage::draw(Graphics *graphics) @@ -115,9 +117,10 @@ void EmotePage::draw(Graphics *graphics) BLOCK_END("EmotePage::draw") } -void EmotePage::mousePressed(MouseEvent &mouseEvent) +void EmotePage::mousePressed(MouseEvent &event) { - mSelectedIndex = getIndexFromGrid(mouseEvent.getX(), mouseEvent.getY()); + mSelectedIndex = getIndexFromGrid(event.getX(), event.getY()); + event.consume(); distributeActionEvent(); } diff --git a/src/gui/widgets/emotepage.h b/src/gui/widgets/emotepage.h index 2ce50f1fc..769e004bc 100644 --- a/src/gui/widgets/emotepage.h +++ b/src/gui/widgets/emotepage.h @@ -41,7 +41,7 @@ class EmotePage final : public Widget, void draw(Graphics *graphics) override final; - void mousePressed(MouseEvent &mouseEvent) override final; + void mousePressed(MouseEvent &event) override final; int getIndexFromGrid(const int x, const int y) const; diff --git a/src/gui/widgets/emoteshortcutcontainer.cpp b/src/gui/widgets/emoteshortcutcontainer.cpp index 296f21126..c731e86d8 100644 --- a/src/gui/widgets/emoteshortcutcontainer.cpp +++ b/src/gui/widgets/emoteshortcutcontainer.cpp @@ -163,6 +163,7 @@ void EmoteShortcutContainer::mousePressed(MouseEvent &event) if (index == -1) return; + event.consume(); // Stores the selected emote if there is one. if (emoteShortcut->isEmoteSelected()) { diff --git a/src/gui/widgets/guitable.cpp b/src/gui/widgets/guitable.cpp index 128281fe9..6feed2b12 100644 --- a/src/gui/widgets/guitable.cpp +++ b/src/gui/widgets/guitable.cpp @@ -30,12 +30,13 @@ #include "input/keydata.h" -#include "utils/dtor.h" - #include "listeners/actionlistener.h" #include "render/graphics.h" +#include "utils/delete2.h" +#include "utils/dtor.h" + #include "debug.h" float GuiTable::mAlpha = 1.0; @@ -73,7 +74,7 @@ GuiTableActionListener::GuiTableActionListener(GuiTable *restrict table, if (widget) { widget->addActionListener(this); - widget->_setParent(table); + widget->setParent(table); } } @@ -82,7 +83,7 @@ GuiTableActionListener::~GuiTableActionListener() if (mWidget) { mWidget->removeActionListener(this); - mWidget->_setParent(nullptr); + mWidget->setParent(nullptr); } } @@ -110,6 +111,7 @@ GuiTable::GuiTable(const Widget2 *const widget, mOpaque(opacity), mSelectable(true) { + mAllowLogic = false; mBackgroundColor = getThemeColor(Theme::BACKGROUND); setModel(initial_model); @@ -125,8 +127,7 @@ GuiTable::~GuiTable() gui->removeDragged(this); uninstallActionListeners(); - delete mModel; - mModel = nullptr; + delete2(mModel); } const TableModel *GuiTable::getModel() const @@ -291,7 +292,7 @@ void GuiTable::installActionListeners() } } - _setFocusHandler(_getFocusHandler()); + setFocusHandler(getFocusHandler()); } // -- widget ops @@ -420,99 +421,100 @@ Rect GuiTable::getChildrenArea() } // -- KeyListener notifications -void GuiTable::keyPressed(KeyEvent& keyEvent) +void GuiTable::keyPressed(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT) { distributeActionEvent(); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_UP) { setSelectedRow(mSelectedRow - 1); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_DOWN) { setSelectedRow(mSelectedRow + 1); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_LEFT) { setSelectedColumn(mSelectedColumn - 1); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_RIGHT) { setSelectedColumn(mSelectedColumn + 1); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_HOME) { setSelectedRow(0); setSelectedColumn(0); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_END && mModel) { setSelectedRow(mModel->getRows() - 1); setSelectedColumn(mModel->getColumns() - 1); - keyEvent.consume(); + event.consume(); } } // -- MouseListener notifications -void GuiTable::mousePressed(MouseEvent& mouseEvent) +void GuiTable::mousePressed(MouseEvent& event) { if (!mModel || !mSelectable) return; - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { - const int row = getRowForY(mouseEvent.getY()); - const int column = getColumnForX(mouseEvent.getX()); + const int row = getRowForY(event.getY()); + const int column = getColumnForX(event.getX()); if (row > -1 && column > -1 && row < mModel->getRows() && column < mModel->getColumns()) { mSelectedColumn = column; mSelectedRow = row; + event.consume(); } distributeActionEvent(); } } -void GuiTable::mouseWheelMovedUp(MouseEvent& mouseEvent) +void GuiTable::mouseWheelMovedUp(MouseEvent& event) { if (isFocused()) { const int selRow = getSelectedRow(); if (selRow > 0 || (selRow == 0 && mWrappingEnabled)) setSelectedRow(selRow - 1); - mouseEvent.consume(); + event.consume(); } } -void GuiTable::mouseWheelMovedDown(MouseEvent& mouseEvent) +void GuiTable::mouseWheelMovedDown(MouseEvent& event) { if (isFocused()) { setSelectedRow(getSelectedRow() + 1); - mouseEvent.consume(); + event.consume(); } } -void GuiTable::mouseDragged(MouseEvent& mouseEvent) +void GuiTable::mouseDragged(MouseEvent& event) { - if (mouseEvent.getButton() != MouseEvent::LEFT) + if (event.getButton() != MouseEvent::LEFT) return; // Make table selection update on drag - const int x = std::max(0, mouseEvent.getX()); - const int y = std::max(0, mouseEvent.getY()); + const int x = std::max(0, event.getX()); + const int y = std::max(0, event.getY()); setSelectedRow(getRowForY(y)); setSelectedColumn(getColumnForX(x)); @@ -588,14 +590,14 @@ int GuiTable::getColumnForX(int x) const return column; } -void GuiTable::_setFocusHandler(FocusHandler* focusHandler) +void GuiTable::setFocusHandler(FocusHandler *const focusHandler) { // add check for focusHandler. may be need remove it? if (!mModel || !focusHandler) return; - Widget::_setFocusHandler(focusHandler); + Widget::setFocusHandler(focusHandler); const int rows = mModel->getRows(); const int cols = mModel->getColumns(); @@ -605,7 +607,7 @@ void GuiTable::_setFocusHandler(FocusHandler* focusHandler) { Widget *const w = mModel->getElementAt(r, c); if (w) - w->_setFocusHandler(focusHandler); + w->setFocusHandler(focusHandler); } } } diff --git a/src/gui/widgets/guitable.h b/src/gui/widgets/guitable.h index 7cec854a8..64e0adae4 100644 --- a/src/gui/widgets/guitable.h +++ b/src/gui/widgets/guitable.h @@ -120,10 +120,10 @@ public: void moveToBottom(Widget *child) override final; - void _setFocusHandler(FocusHandler* focusHandler) override final; + void setFocusHandler(FocusHandler *const focusHandler) override final; // Inherited from KeyListener - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; /** * Sets the table to be opaque, that is sets the table @@ -144,13 +144,13 @@ public: { return mOpaque; } // Inherited from MouseListener - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; - void mouseWheelMovedUp(MouseEvent& mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent& event) override final; - void mouseWheelMovedDown(MouseEvent& mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; // Constraints inherited from TableModelListener void modelUpdated(const bool completed) override final; diff --git a/src/gui/widgets/icon.cpp b/src/gui/widgets/icon.cpp index 9a86fc9bf..3ffac4a7d 100644 --- a/src/gui/widgets/icon.cpp +++ b/src/gui/widgets/icon.cpp @@ -39,6 +39,7 @@ Icon::Icon(const Widget2 *const widget, const SDL_Rect &bounds = mImage->mBounds; setSize(bounds.w, bounds.h); } + mAllowLogic = false; } Icon::Icon(const Widget2 *const widget, @@ -51,6 +52,7 @@ Icon::Icon(const Widget2 *const widget, const SDL_Rect &bounds = mImage->mBounds; setSize(bounds.w, bounds.h); } + mAllowLogic = false; } Icon::~Icon() diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp index fe666e6f7..ee2e35920 100644 --- a/src/gui/widgets/itemcontainer.cpp +++ b/src/gui/widgets/itemcontainer.cpp @@ -29,6 +29,7 @@ #include "being/playerinfo.h" +#include "gui/font.h" #include "gui/gui.h" #include "gui/viewport.h" @@ -46,9 +47,10 @@ #include "resources/image.h" -#include "gui/font.h" #include "listeners/selectionlistener.h" +#include "utils/delete2.h" + #include <algorithm> #include "debug.h" @@ -168,8 +170,7 @@ ItemContainer::ItemContainer(const Widget2 *const widget, mName(), mItemPopup(new ItemPopup), mShowMatrix(nullptr), - mSkin(Theme::instance() ? Theme::instance()->load( - "itemcontainer.xml", "") : nullptr), + mSkin(theme ? theme->load("itemcontainer.xml", "") : nullptr), mEquipedColor(getThemeColor(Theme::ITEM_EQUIPPED)), mEquipedColor2(getThemeColor(Theme::ITEM_EQUIPPED_OUTLINE)), mUnEquipedColor(getThemeColor(Theme::ITEM_NOT_EQUIPPED)), @@ -197,6 +198,7 @@ ItemContainer::ItemContainer(const Widget2 *const widget, addKeyListener(this); addMouseListener(this); addWidgetListener(this); + mAllowLogic = false; } ItemContainer::~ItemContainer() @@ -215,11 +217,10 @@ ItemContainer::~ItemContainer() mProtectedImg = nullptr; } - if (Theme::instance()) - Theme::instance()->unload(mSkin); + if (theme) + theme->unload(mSkin); - delete mItemPopup; - mItemPopup = nullptr; + delete2(mItemPopup); delete []mShowMatrix; } @@ -403,6 +404,7 @@ void ItemContainer::mousePressed(MouseEvent &event) if (button == MouseEvent::LEFT || button == MouseEvent::RIGHT) { + event.consume(); const int index = getSlotIndex(event.getX(), event.getY()); if (index == Inventory::NO_SLOT_INDEX) return; diff --git a/src/gui/widgets/itemlinkhandler.cpp b/src/gui/widgets/itemlinkhandler.cpp index 2cf27ae30..efc6ef175 100644 --- a/src/gui/widgets/itemlinkhandler.cpp +++ b/src/gui/widgets/itemlinkhandler.cpp @@ -39,6 +39,8 @@ #include "input/mouseinput.h" +#include "utils/delete2.h" + #include <string> #include "debug.h" @@ -74,8 +76,7 @@ ItemLinkHandler::ItemLinkHandler() : ItemLinkHandler::~ItemLinkHandler() { - delete mItemPopup; - mItemPopup = nullptr; + delete2(mItemPopup); } void ItemLinkHandler::handleLink(const std::string &link, MouseEvent *event) diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp index b9dc3bec8..420eb5578 100644 --- a/src/gui/widgets/itemshortcutcontainer.cpp +++ b/src/gui/widgets/itemshortcutcontainer.cpp @@ -46,6 +46,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" ItemShortcutContainer::ItemShortcutContainer(Widget2 *const widget, @@ -95,10 +97,8 @@ ItemShortcutContainer::~ItemShortcutContainer() mBackgroundImg->decRef(); mBackgroundImg = nullptr; } - delete mItemPopup; - mItemPopup = nullptr; - delete mSpellPopup; - mSpellPopup = nullptr; + delete2(mItemPopup); + delete2(mSpellPopup); } void ItemShortcutContainer::setWidget2(const Widget2 *const widget) @@ -334,6 +334,7 @@ void ItemShortcutContainer::mousePressed(MouseEvent &event) if (event.getButton() == MouseEvent::LEFT) { + event.consume(); // Stores the selected item if theirs one. if (selShortcut->isItemSelected() && inventoryWindow && (inventoryWindow->isWindowVisible() @@ -352,6 +353,7 @@ void ItemShortcutContainer::mousePressed(MouseEvent &event) } else if (event.getButton() == MouseEvent::RIGHT) { + event.consume(); if (viewport && selShortcut) { viewport->showItemPopup(selShortcut->getItem(index), diff --git a/src/gui/widgets/label.cpp b/src/gui/widgets/label.cpp index b500ec7bb..c37308a1e 100644 --- a/src/gui/widgets/label.cpp +++ b/src/gui/widgets/label.cpp @@ -105,7 +105,6 @@ Label::~Label() mInstances --; if (mInstances == 0) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); } @@ -113,11 +112,11 @@ Label::~Label() void Label::init() { + mAllowLogic = false; mForegroundColor = getThemeColor(Theme::LABEL); mForegroundColor2 = getThemeColor(Theme::LABEL_OUTLINE); if (mInstances == 0) { - Theme *const theme = Theme::instance(); if (theme) mSkin = theme->load("label.xml", ""); } diff --git a/src/gui/widgets/layout.cpp b/src/gui/widgets/layout.cpp index 668334fd5..410c8188e 100644 --- a/src/gui/widgets/layout.cpp +++ b/src/gui/widgets/layout.cpp @@ -26,6 +26,8 @@ #include "gui/widgets/basiccontainer2.h" +#include "utils/delete2.h" + #include <cassert> #include "debug.h" @@ -45,10 +47,7 @@ LayoutCell &ContainerPlacer::operator() LayoutCell::~LayoutCell() { if (mType == ARRAY) - { - delete mArray; - mArray = nullptr; - } + delete2(mArray) } LayoutArray &LayoutCell::getArray() diff --git a/src/gui/widgets/listbox.cpp b/src/gui/widgets/listbox.cpp index 6f0c192c6..c41e32854 100644 --- a/src/gui/widgets/listbox.cpp +++ b/src/gui/widgets/listbox.cpp @@ -111,7 +111,6 @@ ListBox::ListBox(const Widget2 *const widget, mForegroundColor = getThemeColor(Theme::LISTBOX); mForegroundColor2 = getThemeColor(Theme::LISTBOX_OUTLINE); - Theme *const theme = Theme::instance(); if (theme) mSkin = theme->load(skin, "listbox.xml"); @@ -138,14 +137,14 @@ ListBox::~ListBox() if (gui) gui->removeDragged(this); - if (Theme::instance()) - Theme::instance()->unload(mSkin); + if (theme) + theme->unload(mSkin); } void ListBox::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (mAlpha != alpha) mAlpha = alpha; @@ -226,13 +225,13 @@ void ListBox::draw(Graphics *graphics) BLOCK_END("ListBox::draw") } -void ListBox::keyPressed(KeyEvent &keyEvent) +void ListBox::keyPressed(KeyEvent &event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT) { distributeActionEvent(); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_UP) { @@ -240,7 +239,7 @@ void ListBox::keyPressed(KeyEvent &keyEvent) setSelected(mSelected - 1); else if (mSelected == 0 && mWrappingEnabled && getListModel()) setSelected(getListModel()->getNumberOfElements() - 1); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_DOWN) { @@ -249,33 +248,35 @@ void ListBox::keyPressed(KeyEvent &keyEvent) setSelected(mSelected + 1); else if (mSelected == num && mWrappingEnabled) setSelected(0); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_HOME) { setSelected(0); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_END && getListModel()) { setSelected(getListModel()->getNumberOfElements() - 1); - keyEvent.consume(); + event.consume(); } } // Don't do anything on scrollwheel. ScrollArea will deal with that. -void ListBox::mouseWheelMovedUp(MouseEvent &mouseEvent A_UNUSED) +void ListBox::mouseWheelMovedUp(MouseEvent &event A_UNUSED) { } -void ListBox::mouseWheelMovedDown(MouseEvent &mouseEvent A_UNUSED) +void ListBox::mouseWheelMovedDown(MouseEvent &event A_UNUSED) { } void ListBox::mousePressed(MouseEvent &event) { mPressedIndex = getSelectionByMouse(event.getY()); + if (mPressedIndex != -1) + event.consume(); } void ListBox::mouseReleased(MouseEvent &event) @@ -313,11 +314,11 @@ void ListBox::mouseReleased(MouseEvent &event) mPressedIndex = -2; } -void ListBox::mouseReleased1(const MouseEvent &mouseEvent) +void ListBox::mouseReleased1(const MouseEvent &event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { - setSelected(std::max(0, getSelectionByMouse(mouseEvent.getY()))); + setSelected(std::max(0, getSelectionByMouse(event.getY()))); distributeActionEvent(); } } diff --git a/src/gui/widgets/listbox.h b/src/gui/widgets/listbox.h index f784b3237..e425b48ca 100644 --- a/src/gui/widgets/listbox.h +++ b/src/gui/widgets/listbox.h @@ -119,13 +119,13 @@ class ListBox : public Widget, // Inherited from KeyListener - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; // Inherited from MouseListener - void mouseWheelMovedUp(MouseEvent& mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent& event) override final; - void mouseWheelMovedDown(MouseEvent& mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent& event) override final; void mousePressed(MouseEvent &event) override; diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp index 2ba452620..6a0fbd607 100644 --- a/src/gui/widgets/playerbox.cpp +++ b/src/gui/widgets/playerbox.cpp @@ -83,10 +83,10 @@ PlayerBox::~PlayerBox() void PlayerBox::init(std::string name, std::string selectedName) { + mAllowLogic = false; setFrameSize(2); addMouseListener(this); - Theme *const theme = Theme::instance(); if (theme) { if (name.empty()) diff --git a/src/gui/widgets/popup.cpp b/src/gui/widgets/popup.cpp index 1114b4a5e..2116de113 100644 --- a/src/gui/widgets/popup.cpp +++ b/src/gui/widgets/popup.cpp @@ -27,6 +27,8 @@ #include "gui/viewport.h" +#include "utils/delete2.h" + #include "debug.h" Popup::Popup(const std::string &name, @@ -51,7 +53,6 @@ Popup::Popup(const std::string &name, if (skin == "") skin = "popup.xml"; - Theme *const theme = Theme::instance(); if (theme) { mSkin = theme->load(skin, "popup.xml"); @@ -73,12 +74,10 @@ Popup::~Popup() { logger->log("Popup::~Popup(\"%s\")", mPopupName.c_str()); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); if (mSkin) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); mSkin = nullptr; diff --git a/src/gui/widgets/popuplist.cpp b/src/gui/widgets/popuplist.cpp index cfb973384..fa0616fd2 100644 --- a/src/gui/widgets/popuplist.cpp +++ b/src/gui/widgets/popuplist.cpp @@ -43,7 +43,7 @@ PopupList::PopupList(DropDown *const widget, mModal(modal) { mListBox->postInit(); - + mAllowLogic = false; setFocusable(true); mListBox->setDistributeMousePressed(true); @@ -129,23 +129,24 @@ void PopupList::adjustSize() mListBox->setWidth(width); } -void PopupList::mousePressed(MouseEvent& mouseEvent) +void PopupList::mousePressed(MouseEvent& event) { mPressedIndex = mListBox->getSelectionByMouse( - mouseEvent.getY() + mPadding); + event.getY() + mPadding); + event.consume(); } -void PopupList::mouseReleased(MouseEvent& mouseEvent) +void PopupList::mouseReleased(MouseEvent& event) { if (mPressedIndex != mListBox->getSelectionByMouse( - mouseEvent.getY() + mPadding)) + event.getY() + mPadding)) { mPressedIndex = -2; return; } mPressedIndex = -2; - if (mouseEvent.getSource() == mScrollArea) + if (event.getSource() == mScrollArea) return; if (mDropDown) mDropDown->updateSelection(); diff --git a/src/gui/widgets/popuplist.h b/src/gui/widgets/popuplist.h index 32a9dfc47..b60e93b7f 100644 --- a/src/gui/widgets/popuplist.h +++ b/src/gui/widgets/popuplist.h @@ -65,9 +65,9 @@ class PopupList final : public Popup, void focusLost(const Event& event A_UNUSED) override final; - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; - void mouseReleased(MouseEvent& mouseEvent) override final; + void mouseReleased(MouseEvent& event) override final; private: ListModel *mListModel; diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp index 5bccd61ca..ea4ef11bd 100644 --- a/src/gui/widgets/progressbar.cpp +++ b/src/gui/widgets/progressbar.cpp @@ -28,6 +28,8 @@ #include "gui/font.h" #include "gui/gui.h" +#include "utils/delete2.h" + #include "debug.h" int ProgressBar::mInstances = 0; @@ -70,7 +72,6 @@ ProgressBar::ProgressBar(const Widget2 *const widget, addWidgetListener(this); setSize(width, height); - Theme *const theme = Theme::instance(); if (theme) { mSkin = theme->load(skin, "progressbar.xml"); @@ -94,7 +95,6 @@ ProgressBar::~ProgressBar() gui->removeDragged(this); mInstances--; - Theme *const theme = Theme::instance(); if (mSkin) { if (theme) @@ -102,8 +102,7 @@ ProgressBar::~ProgressBar() mSkin = nullptr; } Theme::unloadRect(mFillRect); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); } void ProgressBar::logic() @@ -142,7 +141,7 @@ void ProgressBar::logic() void ProgressBar::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); mAlpha = alpha; } diff --git a/src/gui/widgets/progressindicator.cpp b/src/gui/widgets/progressindicator.cpp index 8e86417bd..c960ad075 100644 --- a/src/gui/widgets/progressindicator.cpp +++ b/src/gui/widgets/progressindicator.cpp @@ -28,6 +28,8 @@ #include "resources/animation.h" #include "resources/imageset.h" +#include "utils/delete2.h" + #include "debug.h" ProgressIndicator::ProgressIndicator(Widget2 *const widget) : @@ -54,8 +56,7 @@ ProgressIndicator::~ProgressIndicator() if (gui) gui->removeDragged(this); - delete mIndicator; - mIndicator = nullptr; + delete2(mIndicator); } void ProgressIndicator::logic() diff --git a/src/gui/widgets/radiobutton.cpp b/src/gui/widgets/radiobutton.cpp index 411216455..643517f77 100644 --- a/src/gui/widgets/radiobutton.cpp +++ b/src/gui/widgets/radiobutton.cpp @@ -98,6 +98,7 @@ RadioButton::RadioButton(const Widget2 *const widget, mSpacing(2), mHasMouse(false) { + mAllowLogic = false; setCaption(caption); setGroup(group); setSelected(marked); @@ -110,7 +111,6 @@ RadioButton::RadioButton(const Widget2 *const widget, mForegroundColor2 = getThemeColor(Theme::RADIOBUTTON_OUTLINE); if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) { mSkin = theme->load("radio.xml", ""); @@ -142,7 +142,6 @@ RadioButton::~RadioButton() if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); } @@ -151,7 +150,7 @@ RadioButton::~RadioButton() void RadioButton::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (mAlpha != alpha) { @@ -236,14 +235,14 @@ void RadioButton::mouseExited(MouseEvent& event A_UNUSED) mHasMouse = false; } -void RadioButton::keyPressed(KeyEvent& keyEvent) +void RadioButton::keyPressed(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (action == Input::KEY_GUI_SELECT) { setSelected(true); distributeActionEvent(); - keyEvent.consume(); + event.consume(); } } @@ -272,18 +271,19 @@ void RadioButton::setSelected(const bool selected) mSelected = selected; } -void RadioButton::mouseClicked(MouseEvent& mouseEvent) +void RadioButton::mouseClicked(MouseEvent& event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { setSelected(true); + event.consume(); distributeActionEvent(); } } -void RadioButton::mouseDragged(MouseEvent& mouseEvent) +void RadioButton::mouseDragged(MouseEvent& event) { - mouseEvent.consume(); + event.consume(); } void RadioButton::setGroup(const std::string &group) diff --git a/src/gui/widgets/radiobutton.h b/src/gui/widgets/radiobutton.h index 5aa0d9289..ec1450f66 100644 --- a/src/gui/widgets/radiobutton.h +++ b/src/gui/widgets/radiobutton.h @@ -120,7 +120,7 @@ class RadioButton final : public Widget, */ void mouseExited(MouseEvent& event) override final; - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; void updateAlpha(); @@ -164,9 +164,9 @@ class RadioButton final : public Widget, void setCaption(const std::string &caption) { mCaption = caption; } - void mouseClicked(MouseEvent& mouseEvent) override final; + void mouseClicked(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; /** * Sets the group the radio button should belong to. Note that diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp index 47b8b0985..2efa144c9 100644 --- a/src/gui/widgets/scrollarea.cpp +++ b/src/gui/widgets/scrollarea.cpp @@ -72,6 +72,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" int ScrollArea::instances = 0; @@ -164,10 +166,8 @@ ScrollArea::~ScrollArea() } } - delete mVertexes; - mVertexes = nullptr; - delete mVertexes2; - mVertexes2 = nullptr; + delete2(mVertexes); + delete2(mVertexes2); setContent(nullptr); } @@ -195,7 +195,6 @@ void ScrollArea::init(std::string skinName) // +++ here probably need move background from static if (skinName == "") skinName = "scroll_background.xml"; - Theme *const theme = Theme::instance(); if (theme) { theme->loadRect(background, skinName, "scroll_background.xml"); @@ -207,8 +206,9 @@ void ScrollArea::init(std::string skinName) for (int i = 0; i < 2; i ++) { - Skin *const skin = Theme::instance()->load( - buttonFiles[i], "scrollbuttons.xml"); + Skin *skin = nullptr; + if (theme) + skin = theme->load(buttonFiles[i], "scrollbuttons.xml"); if (skin) { const ImageRect &rect = skin->getBorder(); @@ -230,7 +230,8 @@ void ScrollArea::init(std::string skinName) for (int f = UP; f < BUTTONS_DIR; f ++) buttons[f][i] = nullptr; } - Theme::instance()->unload(skin); + if (theme) + theme->unload(skin); } } mScrollbarWidth = mScrollbarSize; @@ -290,7 +291,7 @@ void ScrollArea::logic() void ScrollArea::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (alpha != mAlpha) { @@ -738,24 +739,28 @@ void ScrollArea::mousePressed(MouseEvent& event) setVerticalScrollAmount(mVScroll - mUpButtonScrollAmount); mUpButtonPressed = true; + event.consume(); } else if (getDownButtonDimension().isPointInRect(x, y)) { setVerticalScrollAmount(mVScroll + mDownButtonScrollAmount); mDownButtonPressed = true; + event.consume(); } else if (getLeftButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(mHScroll - mLeftButtonScrollAmount); mLeftButtonPressed = true; + event.consume(); } else if (getRightButtonDimension().isPointInRect(x, y)) { setHorizontalScrollAmount(mHScroll + mRightButtonScrollAmount); mRightButtonPressed = true; + event.consume(); } else if (getVerticalMarkerDimension().isPointInRect(x, y)) { @@ -763,6 +768,7 @@ void ScrollArea::mousePressed(MouseEvent& event) mIsVerticalMarkerDragged = true; mVerticalMarkerDragOffset = y - getVerticalMarkerDimension().y; + event.consume(); } else if (getVerticalBarDimension().isPointInRect(x, y)) { @@ -776,13 +782,14 @@ void ScrollArea::mousePressed(MouseEvent& event) setVerticalScrollAmount(mVScroll + static_cast<int>(getChildrenArea().height * 0.95)); } + event.consume(); } else if (getHorizontalMarkerDimension().isPointInRect(x, y)) { mIsHorizontalMarkerDragged = true; mIsVerticalMarkerDragged = false; - mHorizontalMarkerDragOffset = x - getHorizontalMarkerDimension().x; + event.consume(); } else if (getHorizontalBarDimension().isPointInRect(x, y)) { @@ -796,6 +803,7 @@ void ScrollArea::mousePressed(MouseEvent& event) setHorizontalScrollAmount(mHScroll + static_cast<int>(getChildrenArea().width * 0.95)); } + event.consume(); } if (event.getButton() == MouseEvent::LEFT) @@ -1301,26 +1309,26 @@ void ScrollArea::setDimension(const Rect& dimension) checkPolicies(); } -void ScrollArea::mouseWheelMovedUp(MouseEvent& mouseEvent) +void ScrollArea::mouseWheelMovedUp(MouseEvent& event) { - if (mouseEvent.isConsumed()) + if (event.isConsumed()) return; setVerticalScrollAmount(getVerticalScrollAmount() - getChildrenArea().height / 8); - mouseEvent.consume(); + event.consume(); } -void ScrollArea::mouseWheelMovedDown(MouseEvent& mouseEvent) +void ScrollArea::mouseWheelMovedDown(MouseEvent& event) { - if (mouseEvent.isConsumed()) + if (event.isConsumed()) return; setVerticalScrollAmount(getVerticalScrollAmount() + getChildrenArea().height / 8); - mouseEvent.consume(); + event.consume(); } void ScrollArea::checkPolicies() diff --git a/src/gui/widgets/scrollarea.h b/src/gui/widgets/scrollarea.h index 0b0cae2c3..d3d71b65a 100644 --- a/src/gui/widgets/scrollarea.h +++ b/src/gui/widgets/scrollarea.h @@ -420,9 +420,9 @@ class ScrollArea final : public BasicContainer, void setDimension(const Rect& dimension); - void mouseWheelMovedUp(MouseEvent& mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent& event) override final; - void mouseWheelMovedDown(MouseEvent& mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent& event) override final; protected: enum BUTTON_DIR diff --git a/src/gui/widgets/shoplistbox.cpp b/src/gui/widgets/shoplistbox.cpp index 007dc6442..ce2aa5aae 100644 --- a/src/gui/widgets/shoplistbox.cpp +++ b/src/gui/widgets/shoplistbox.cpp @@ -221,12 +221,12 @@ void ShopListBox::mouseMoved(MouseEvent &event) } } -void ShopListBox::mouseReleased(MouseEvent& mouseEvent) +void ShopListBox::mouseReleased(MouseEvent& event) { - ListBox::mouseReleased(mouseEvent); - if (mouseEvent.getButton() == MouseEvent::RIGHT) + ListBox::mouseReleased(event); + if (event.getButton() == MouseEvent::RIGHT) { - setSelected(std::max(0, getSelectionByMouse(mouseEvent.getY()))); + setSelected(std::max(0, getSelectionByMouse(event.getY()))); if (mSelected < 0 || mSelected >= mShopItems->getNumberOfElements()) return; @@ -236,7 +236,7 @@ void ShopListBox::mouseReleased(MouseEvent& mouseEvent) } } -void ShopListBox::mouseExited(MouseEvent& mouseEvent A_UNUSED) +void ShopListBox::mouseExited(MouseEvent& event A_UNUSED) { if (!mItemPopup) return; diff --git a/src/gui/widgets/shoplistbox.h b/src/gui/widgets/shoplistbox.h index 17c1ed4d5..ddb4407c7 100644 --- a/src/gui/widgets/shoplistbox.h +++ b/src/gui/widgets/shoplistbox.h @@ -76,9 +76,9 @@ class ShopListBox final : public ListBox void mouseMoved(MouseEvent &event) override final; - void mouseReleased(MouseEvent& mouseEvent) override final; + void mouseReleased(MouseEvent& event) override final; - void mouseExited(MouseEvent& mouseEvent) override final; + void mouseExited(MouseEvent& event) override final; void setProtectItems(bool p) { mProtectItems = p; } diff --git a/src/gui/widgets/shortcutcontainer.cpp b/src/gui/widgets/shortcutcontainer.cpp index 0d9aa64a6..49be84b88 100644 --- a/src/gui/widgets/shortcutcontainer.cpp +++ b/src/gui/widgets/shortcutcontainer.cpp @@ -26,6 +26,8 @@ #include "gui/gui.h" +#include "utils/delete2.h" + #include "debug.h" float ShortcutContainer::mAlpha = 1.0; @@ -43,6 +45,7 @@ ShortcutContainer::ShortcutContainer(Widget2 *const widget) : mVertexes(new ImageCollection), mRedraw(true) { + mAllowLogic = false; } ShortcutContainer::~ShortcutContainer() @@ -50,8 +53,7 @@ ShortcutContainer::~ShortcutContainer() if (gui) gui->removeDragged(this); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); } void ShortcutContainer::widgetResized(const Event &event A_UNUSED) diff --git a/src/gui/widgets/skillinfo.h b/src/gui/widgets/skillinfo.h index f9baec6cc..06e3b3583 100644 --- a/src/gui/widgets/skillinfo.h +++ b/src/gui/widgets/skillinfo.h @@ -27,6 +27,7 @@ #include <vector> #include <map> +#include <string> #include "localconsts.h" diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp index 700d31416..e440631ad 100644 --- a/src/gui/widgets/slider.cpp +++ b/src/gui/widgets/slider.cpp @@ -76,6 +76,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" ImageRect Slider::buttons[2]; @@ -130,10 +132,9 @@ Slider::~Slider() if (gui) gui->removeDragged(this); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); mInstances--; - if (mInstances == 0 && Theme::instance()) + if (mInstances == 0) { for (int mode = 0; mode < 2; mode ++) Theme::unloadRect(buttons[mode]); @@ -142,6 +143,7 @@ Slider::~Slider() void Slider::init() { + mAllowLogic = false; setFocusable(true); setFrameSize(1); @@ -153,7 +155,6 @@ void Slider::init() // Load resources if (mInstances == 0) { - Theme *const theme = Theme::instance(); if (theme) { for (int mode = 0; mode < 2; mode ++) @@ -171,7 +172,7 @@ void Slider::init() void Slider::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (alpha != mAlpha) { @@ -352,16 +353,17 @@ void Slider::mouseExited(MouseEvent& event A_UNUSED) mRedraw = true; } -void Slider::mousePressed(MouseEvent &mouseEvent) +void Slider::mousePressed(MouseEvent &event) { - const int x = mouseEvent.getX(); - const int y = mouseEvent.getY(); + const int x = event.getX(); + const int y = event.getY(); const int width = mDimension.width; const int height = mDimension.height; - if (mouseEvent.getButton() == MouseEvent::LEFT + if (event.getButton() == MouseEvent::LEFT && x >= 0 && x <= width && y >= 0 && y <= height) { + event.consume(); if (mOrientation == HORIZONTAL) setValue(markerPositionToValue(x - mMarkerLength / 2)); else @@ -371,40 +373,40 @@ void Slider::mousePressed(MouseEvent &mouseEvent) } } -void Slider::mouseDragged(MouseEvent &mouseEvent) +void Slider::mouseDragged(MouseEvent &event) { if (mOrientation == HORIZONTAL) { - setValue(markerPositionToValue(mouseEvent.getX() - mMarkerLength / 2)); + setValue(markerPositionToValue(event.getX() - mMarkerLength / 2)); } else { setValue(markerPositionToValue( - mDimension.height - mouseEvent.getY() - mMarkerLength / 2)); + mDimension.height - event.getY() - mMarkerLength / 2)); } distributeActionEvent(); - mouseEvent.consume(); + event.consume(); } -void Slider::mouseWheelMovedUp(MouseEvent &mouseEvent) +void Slider::mouseWheelMovedUp(MouseEvent &event) { setValue(mValue + mStepLength); distributeActionEvent(); - mouseEvent.consume(); + event.consume(); } -void Slider::mouseWheelMovedDown(MouseEvent &mouseEvent) +void Slider::mouseWheelMovedDown(MouseEvent &event) { setValue(mValue - mStepLength); distributeActionEvent(); - mouseEvent.consume(); + event.consume(); } -void Slider::keyPressed(KeyEvent& keyEvent) +void Slider::keyPressed(KeyEvent& event) { - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (mOrientation == HORIZONTAL) { @@ -412,13 +414,13 @@ void Slider::keyPressed(KeyEvent& keyEvent) { setValue(mValue + mStepLength); distributeActionEvent(); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_LEFT) { setValue(mValue - mStepLength); distributeActionEvent(); - keyEvent.consume(); + event.consume(); } } else @@ -427,13 +429,13 @@ void Slider::keyPressed(KeyEvent& keyEvent) { setValue(mValue + mStepLength); distributeActionEvent(); - keyEvent.consume(); + event.consume(); } else if (action == Input::KEY_GUI_DOWN) { setValue(mValue - mStepLength); distributeActionEvent(); - keyEvent.consume(); + event.consume(); } } } diff --git a/src/gui/widgets/slider.h b/src/gui/widgets/slider.h index 23d06de48..164048020 100644 --- a/src/gui/widgets/slider.h +++ b/src/gui/widgets/slider.h @@ -135,15 +135,15 @@ class Slider final : public Widget, */ void mouseExited(MouseEvent& event) override final; - void mousePressed(MouseEvent &mouseEvent) override final; + void mousePressed(MouseEvent &event) override final; - void mouseDragged(MouseEvent &mouseEvent) override final; + void mouseDragged(MouseEvent &event) override final; - void mouseWheelMovedUp(MouseEvent &mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent &event) override final; - void mouseWheelMovedDown(MouseEvent &mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent &event) override final; - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; /** * Sets the scale of the slider. diff --git a/src/gui/widgets/sliderlist.cpp b/src/gui/widgets/sliderlist.cpp index 03f0c4ed2..76e6b54c3 100644 --- a/src/gui/widgets/sliderlist.cpp +++ b/src/gui/widgets/sliderlist.cpp @@ -46,6 +46,7 @@ SliderList::SliderList(const Widget2 *const widget, mOldWidth(0), mSelectedIndex(0) { + mAllowLogic = false; setHeight(sliderHeight); } @@ -81,16 +82,16 @@ void SliderList::updateAlpha() Button::updateAlpha(); } -void SliderList::mouseWheelMovedUp(MouseEvent& mouseEvent) +void SliderList::mouseWheelMovedUp(MouseEvent& event) { setSelected(mSelectedIndex - 1); - mouseEvent.consume(); + event.consume(); } -void SliderList::mouseWheelMovedDown(MouseEvent& mouseEvent) +void SliderList::mouseWheelMovedDown(MouseEvent& event) { setSelected(mSelectedIndex + 1); - mouseEvent.consume(); + event.consume(); } void SliderList::resize() diff --git a/src/gui/widgets/sliderlist.h b/src/gui/widgets/sliderlist.h index 84f96ebe4..dac7beabd 100644 --- a/src/gui/widgets/sliderlist.h +++ b/src/gui/widgets/sliderlist.h @@ -49,9 +49,9 @@ class SliderList final : public Container, void updateAlpha(); - void mouseWheelMovedUp(MouseEvent& mouseEvent) override final; + void mouseWheelMovedUp(MouseEvent& event) override final; - void mouseWheelMovedDown(MouseEvent& mouseEvent) override final; + void mouseWheelMovedDown(MouseEvent& event) override final; void resize(); diff --git a/src/gui/widgets/spellshortcutcontainer.cpp b/src/gui/widgets/spellshortcutcontainer.cpp index ed92b62e1..e86376812 100644 --- a/src/gui/widgets/spellshortcutcontainer.cpp +++ b/src/gui/widgets/spellshortcutcontainer.cpp @@ -36,6 +36,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" SpellShortcutContainer::SpellShortcutContainer(Widget2 *const widget, @@ -78,8 +80,7 @@ SpellShortcutContainer::~SpellShortcutContainer() if (mBackgroundImg) mBackgroundImg->decRef(); mBackgroundImg = nullptr; - delete mSpellPopup; - mSpellPopup = nullptr; + delete2(mSpellPopup); } void SpellShortcutContainer::setWidget2(const Widget2 *const widget) @@ -189,6 +190,7 @@ void SpellShortcutContainer::mousePressed(MouseEvent &event) const int itemId = getItemByIndex(index); if (itemId > 0) mSpellClicked = true; + event.consume(); } else if (eventButton == MouseEvent::RIGHT) { @@ -198,6 +200,7 @@ void SpellShortcutContainer::mousePressed(MouseEvent &event) if (!spellShortcut || !spellManager) return; + event.consume(); const int itemId = getItemByIndex(index); spellManager->invoke(itemId); } diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp index 445f17982..cf55fa10b 100644 --- a/src/gui/widgets/tabbedarea.cpp +++ b/src/gui/widgets/tabbedarea.cpp @@ -75,6 +75,8 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/tabs/tab.h" +#include "utils/delete2.h" + #include "debug.h" TabbedArea::TabbedArea(const Widget2 *const widget) : @@ -127,21 +129,14 @@ TabbedArea::~TabbedArea() remove(mTabContainer); remove(mWidgetContainer); - delete mTabContainer; - mTabContainer = nullptr; - delete mWidgetContainer; - mWidgetContainer = nullptr; + delete2(mTabContainer); + delete2(mWidgetContainer); for (size_t i = 0, sz = mTabsToDelete.size(); i < sz; i++) - { - delete mTabsToDelete[i]; - mTabsToDelete[i] = nullptr; - } + delete2(mTabsToDelete[i]) - delete mArrowButton[0]; - mArrowButton[0] = nullptr; - delete mArrowButton[1]; - mArrowButton[1] = nullptr; + delete2(mArrowButton[0]); + delete2(mArrowButton[1]); } void TabbedArea::enableScrollButtons(const bool enable) @@ -366,19 +361,20 @@ void TabbedArea::logic() BLOCK_END("TabbedArea::logic") } -void TabbedArea::mousePressed(MouseEvent &mouseEvent) +void TabbedArea::mousePressed(MouseEvent &event) { - if (mouseEvent.isConsumed()) + if (event.isConsumed()) return; - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { Widget *const widget = mTabContainer->getWidgetAt( - mouseEvent.getX(), mouseEvent.getY()); + event.getX(), event.getY()); Tab *const tab = dynamic_cast<Tab *const>(widget); if (tab) { + event.consume(); setSelectedTab(tab); requestFocus(); } @@ -726,12 +722,12 @@ void TabbedArea::setDimension(const Rect &dimension) adjustSize(); } -void TabbedArea::keyPressed(KeyEvent& keyEvent) +void TabbedArea::keyPressed(KeyEvent& event) { - if (mBlockSwitching || keyEvent.isConsumed() || !isFocused()) + if (mBlockSwitching || event.isConsumed() || !isFocused()) return; - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == Input::KEY_GUI_LEFT) { @@ -743,7 +739,7 @@ void TabbedArea::keyPressed(KeyEvent& keyEvent) else setSelectedTab(mTabs[index].first); - keyEvent.consume(); + event.consume(); } else if (actionId == Input::KEY_GUI_RIGHT) { @@ -755,7 +751,7 @@ void TabbedArea::keyPressed(KeyEvent& keyEvent) else setSelectedTab(mTabs[index].first); - keyEvent.consume(); + event.consume(); } } diff --git a/src/gui/widgets/tabbedarea.h b/src/gui/widgets/tabbedarea.h index 0e7a032f0..578128abf 100644 --- a/src/gui/widgets/tabbedarea.h +++ b/src/gui/widgets/tabbedarea.h @@ -195,7 +195,7 @@ class TabbedArea final : public ActionListener, // Inherited from MouseListener - void mousePressed(MouseEvent &mouseEvent) override final; + void mousePressed(MouseEvent &event) override final; void enableScrollButtons(const bool enable); @@ -211,7 +211,7 @@ class TabbedArea final : public ActionListener, bool getFollowDownScroll() const A_WARN_UNUSED { return mFollowDownScroll; } - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; void setBlockSwitching(const bool b) { mBlockSwitching = b; } diff --git a/src/gui/widgets/tabs/chattab.cpp b/src/gui/widgets/tabs/chattab.cpp index 8fe9d707b..e52f935b3 100644 --- a/src/gui/widgets/tabs/chattab.cpp +++ b/src/gui/widgets/tabs/chattab.cpp @@ -45,6 +45,7 @@ #include "resources/db/itemdb.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -85,10 +86,8 @@ ChatTab::~ChatTab() if (chatWindow) chatWindow->removeTab(this); - delete mTextOutput; - mTextOutput = nullptr; - delete mScrollArea; - mScrollArea = nullptr; + delete2(mTextOutput); + delete2(mScrollArea); } void ChatTab::chatLog(std::string line, Own own, diff --git a/src/gui/widgets/tabs/setup_audio.cpp b/src/gui/widgets/tabs/setup_audio.cpp index 6cf675635..89a9594c1 100644 --- a/src/gui/widgets/tabs/setup_audio.cpp +++ b/src/gui/widgets/tabs/setup_audio.cpp @@ -35,6 +35,7 @@ #include "gui/widgets/layouthelper.h" #include "gui/widgets/scrollarea.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -160,11 +161,8 @@ Setup_Audio::Setup_Audio(const Widget2 *const widget) : Setup_Audio::~Setup_Audio() { - delete mSoundModel; - mSoundModel = nullptr; - - delete mChannelsList; - mChannelsList = nullptr; + delete2(mSoundModel); + delete2(mChannelsList); } void Setup_Audio::apply() diff --git a/src/gui/widgets/tabs/setup_colors.cpp b/src/gui/widgets/tabs/setup_colors.cpp index eb7e695f4..00537ad05 100644 --- a/src/gui/widgets/tabs/setup_colors.cpp +++ b/src/gui/widgets/tabs/setup_colors.cpp @@ -34,6 +34,7 @@ #include "gui/widgets/textfield.h" #include "gui/widgets/textpreview.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/stringutils.h" @@ -198,15 +199,9 @@ Setup_Colors::Setup_Colors(const Widget2 *const widget) : Setup_Colors::~Setup_Colors() { if (mPreviewBox && mPreviewBox->getContent() == mPreview) - { - delete mTextPreview; - mTextPreview = nullptr; - } + delete2(mTextPreview) else - { - delete mPreview; - mPreview = nullptr; - } + delete2(mPreview) } void Setup_Colors::action(const ActionEvent &event) diff --git a/src/gui/widgets/tabs/setup_input.cpp b/src/gui/widgets/tabs/setup_input.cpp index b04937881..a29e0d797 100644 --- a/src/gui/widgets/tabs/setup_input.cpp +++ b/src/gui/widgets/tabs/setup_input.cpp @@ -41,6 +41,8 @@ #include "gui/models/listmodel.h" +#include "utils/delete2.h" + #include "debug.h" static int selectedData = 0; @@ -169,21 +171,14 @@ Setup_Input::Setup_Input(const Widget2 *const widget) : Setup_Input::~Setup_Input() { - delete mKeyList; - mKeyList = nullptr; - delete mKeyListModel; - mKeyListModel = nullptr; - - delete mAssignKeyButton; - mAssignKeyButton = nullptr; - delete mUnassignKeyButton; - mUnassignKeyButton = nullptr; - delete mResetKeysButton; - mResetKeysButton = nullptr; + delete2(mKeyList); + delete2(mKeyListModel); + delete2(mAssignKeyButton); + delete2(mUnassignKeyButton); + delete2(mResetKeysButton); delete [] mActionDataSize; mActionDataSize = nullptr; - delete mScrollArea; - mScrollArea = nullptr; + delete2(mScrollArea); } void Setup_Input::apply() diff --git a/src/gui/widgets/tabs/setup_joystick.cpp b/src/gui/widgets/tabs/setup_joystick.cpp index b3d7b78b9..4d2845656 100644 --- a/src/gui/widgets/tabs/setup_joystick.cpp +++ b/src/gui/widgets/tabs/setup_joystick.cpp @@ -34,6 +34,7 @@ #include "gui/widgets/label.h" #include "gui/widgets/layouthelper.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -99,8 +100,7 @@ Setup_Joystick::Setup_Joystick(const Widget2 *const widget) : Setup_Joystick::~Setup_Joystick() { - delete mNamesModel; - mNamesModel = nullptr; + delete2(mNamesModel); } void Setup_Joystick::action(const ActionEvent &event) diff --git a/src/gui/widgets/tabs/setup_other.cpp b/src/gui/widgets/tabs/setup_other.cpp index e4801506c..ed8ba11ad 100644 --- a/src/gui/widgets/tabs/setup_other.cpp +++ b/src/gui/widgets/tabs/setup_other.cpp @@ -31,6 +31,7 @@ #include "configuration.h" #include "map.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -182,6 +183,10 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : "autofixPos", this, "autofixPosEvent"); // TRANSLATORS: settings option + new SetupItemCheckBox(_("Show server side position"), "", + "showserverpos", this, "showserverposEvent"); + + // TRANSLATORS: settings option new SetupItemCheckBox(_("Attack while moving"), "", "attackMoving", this, "attackMovingEvent"); @@ -334,6 +339,10 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : "serverAttack", this, "serverAttackEvent"); // TRANSLATORS: settings option + new SetupItemCheckBox(_("Hide support page link on error"), "", + "hidesupport", this, "hidesupportEvent"); + + // TRANSLATORS: settings option new SetupItemCheckBox(_("Enable double clicks"), "", "doubleClick", this, "doubleClickEvent"); @@ -396,12 +405,9 @@ Setup_Other::Setup_Other(const Widget2 *const widget) : Setup_Other::~Setup_Other() { - delete mProxyTypeList; - mProxyTypeList = nullptr; - delete mShortcutsList; - mShortcutsList = nullptr; - delete mDensityList; - mDensityList = nullptr; + delete2(mProxyTypeList); + delete2(mShortcutsList); + delete2(mDensityList); } void Setup_Other::apply() diff --git a/src/gui/widgets/tabs/setup_perfomance.cpp b/src/gui/widgets/tabs/setup_perfomance.cpp index 5a0566ec2..dad054e83 100644 --- a/src/gui/widgets/tabs/setup_perfomance.cpp +++ b/src/gui/widgets/tabs/setup_perfomance.cpp @@ -28,6 +28,7 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/setupitem.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -159,6 +160,5 @@ Setup_Perfomance::Setup_Perfomance(const Widget2 *const widget) : Setup_Perfomance::~Setup_Perfomance() { - delete mTexturesList; - mTexturesList = nullptr; + delete2(mTexturesList); } diff --git a/src/gui/widgets/tabs/setup_players.cpp b/src/gui/widgets/tabs/setup_players.cpp index b04a25e22..441ebba58 100644 --- a/src/gui/widgets/tabs/setup_players.cpp +++ b/src/gui/widgets/tabs/setup_players.cpp @@ -102,7 +102,7 @@ Setup_Players::Setup_Players(const Widget2 *const widget) : // TRANSLATORS: settings option new SetupItemCheckBox(_("Emulate right mouse button by long mouse click" - " (usefull for touch interfaces)"), + " (useful for touch interfaces)"), "", "longmouseclick", this, "longmouseclickEvent"); setDimension(Rect(0, 0, 550, 350)); diff --git a/src/gui/widgets/tabs/setup_relations.cpp b/src/gui/widgets/tabs/setup_relations.cpp index ca060477f..77a758cb4 100644 --- a/src/gui/widgets/tabs/setup_relations.cpp +++ b/src/gui/widgets/tabs/setup_relations.cpp @@ -37,6 +37,7 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/guitable.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -81,10 +82,8 @@ public: ~PlayerTableModel() { freeWidgets(); - delete mListModel; - mListModel = nullptr; - delete mPlayers; - mPlayers = nullptr; + delete2(mListModel) + delete2(mPlayers) } int getRows() const override final @@ -159,9 +158,7 @@ public: void freeWidgets() { - delete mPlayers; - mPlayers = nullptr; - + delete2(mPlayers) delete_all(mWidgets); mWidgets.clear(); } @@ -266,8 +263,7 @@ Setup_Relations::Setup_Relations(const Widget2 *const widget) : Setup_Relations::~Setup_Relations() { player_relations.removeListener(this); - delete mIgnoreActionChoicesModel; - mIgnoreActionChoicesModel = nullptr; + delete2(mIgnoreActionChoicesModel); } diff --git a/src/gui/widgets/tabs/setup_theme.cpp b/src/gui/widgets/tabs/setup_theme.cpp index 424828694..9b23fc3c3 100644 --- a/src/gui/widgets/tabs/setup_theme.cpp +++ b/src/gui/widgets/tabs/setup_theme.cpp @@ -37,6 +37,7 @@ #include "configuration.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "resources/resourcemanager.h" @@ -371,26 +372,13 @@ Setup_Theme::Setup_Theme(const Widget2 *const widget) : Setup_Theme::~Setup_Theme() { - delete mInfo; - mInfo = nullptr; - - delete mThemesModel; - mThemesModel = nullptr; - - delete mFontsModel; - mFontsModel = nullptr; - - delete mFontSizeListModel; - mFontSizeListModel = nullptr; - - delete mNpcFontSizeListModel; - mNpcFontSizeListModel = nullptr; - - delete mLangListModel; - mLangListModel = nullptr; - - delete mInfo; - mInfo = nullptr; + delete2(mInfo); + delete2(mThemesModel); + delete2(mFontsModel); + delete2(mFontSizeListModel); + delete2(mNpcFontSizeListModel); + delete2(mLangListModel); + delete2(mInfo); } void Setup_Theme::updateInfo() diff --git a/src/gui/widgets/tabs/setup_touch.cpp b/src/gui/widgets/tabs/setup_touch.cpp index fb50ab4d5..eab39ccb0 100644 --- a/src/gui/widgets/tabs/setup_touch.cpp +++ b/src/gui/widgets/tabs/setup_touch.cpp @@ -27,6 +27,7 @@ #include "gui/widgets/setuptouchitem.h" #include "gui/widgets/scrollarea.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/stringutils.h" @@ -126,10 +127,7 @@ Setup_Touch::Setup_Touch(const Widget2 *const widget) : Setup_Touch::~Setup_Touch() { - delete mSizeList; - mSizeList = nullptr; - delete mFormatList; - mFormatList = nullptr; - delete mActionsList; - mActionsList = nullptr; + delete2(mSizeList); + delete2(mFormatList); + delete2(mActionsList); } diff --git a/src/gui/widgets/tabs/setup_video.cpp b/src/gui/widgets/tabs/setup_video.cpp index 416ae8c3c..dfe14fa2c 100644 --- a/src/gui/widgets/tabs/setup_video.cpp +++ b/src/gui/widgets/tabs/setup_video.cpp @@ -41,6 +41,7 @@ #include "render/rendererslistsdl.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/sdlhelper.h" @@ -309,14 +310,10 @@ Setup_Video::Setup_Video(const Widget2 *const widget) : Setup_Video::~Setup_Video() { - delete mModeListModel; - mModeListModel = nullptr; - delete mModeList; - mModeList = nullptr; - delete mOpenGLListModel; - mOpenGLListModel = nullptr; - delete mDialog; - mDialog = nullptr; + delete2(mModeListModel); + delete2(mModeList); + delete2(mOpenGLListModel); + delete2(mDialog); } void Setup_Video::apply() diff --git a/src/gui/widgets/tabs/setup_visual.cpp b/src/gui/widgets/tabs/setup_visual.cpp index 860b1d516..eb6591f9f 100644 --- a/src/gui/widgets/tabs/setup_visual.cpp +++ b/src/gui/widgets/tabs/setup_visual.cpp @@ -28,6 +28,7 @@ #include "client.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -215,18 +216,12 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) : Setup_Visual::~Setup_Visual() { - delete mSpeachList; - mSpeachList = nullptr; - delete mAmbientFxList; - mAmbientFxList = nullptr; - delete mParticleList; - mParticleList = nullptr; - delete mParticleTypeList; - mParticleTypeList = nullptr; - delete mVSyncList; - mVSyncList = nullptr; - delete mScaleList; - mScaleList = nullptr; + delete2(mSpeachList); + delete2(mAmbientFxList); + delete2(mParticleList); + delete2(mParticleTypeList); + delete2(mVSyncList); + delete2(mScaleList); } void Setup_Visual::apply() diff --git a/src/gui/widgets/tabs/setuptabscroll.cpp b/src/gui/widgets/tabs/setuptabscroll.cpp index 9c185b2bb..cd169e0bf 100644 --- a/src/gui/widgets/tabs/setuptabscroll.cpp +++ b/src/gui/widgets/tabs/setuptabscroll.cpp @@ -24,6 +24,8 @@ #include "gui/widgets/setupitem.h" #include "gui/widgets/vertcontainer.h" +#include "utils/delete2.h" + #include "debug.h" SetupTabScroll::SetupTabScroll(const Widget2 *const widget) : @@ -41,10 +43,7 @@ SetupTabScroll::SetupTabScroll(const Widget2 *const widget) : SetupTabScroll::~SetupTabScroll() { mScroll = nullptr; - - delete mContainer; - mContainer = nullptr; - + delete2(mContainer); removeItems(); } diff --git a/src/gui/widgets/tabs/tab.cpp b/src/gui/widgets/tabs/tab.cpp index ede69619e..c2a6c0207 100644 --- a/src/gui/widgets/tabs/tab.cpp +++ b/src/gui/widgets/tabs/tab.cpp @@ -75,6 +75,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" int Tab::mInstances = 0; @@ -123,23 +125,20 @@ Tab::~Tab() gui->removeDragged(this); mInstances--; - if (mInstances == 0 && Theme::instance()) + if (mInstances == 0 && theme) { - Theme *const theme = Theme::instance(); for (int mode = 0; mode < TAB_COUNT; mode ++) theme->unload(tabImg[mode]); } - delete mLabel; - mLabel = nullptr; + delete2(mLabel); if (mImage) { mImage->decRef(); mImage = nullptr; } - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); } void Tab::init() @@ -154,7 +153,6 @@ void Tab::init() if (mInstances == 0) { // Load the skin - Theme *const theme = Theme::instance(); if (theme) { for (int mode = 0; mode < TAB_COUNT; mode ++) @@ -177,7 +175,7 @@ void Tab::init() void Tab::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (alpha != mAlpha) { @@ -373,12 +371,12 @@ const std::string &Tab::getCaption() const return mLabel->getCaption(); } -void Tab::mouseEntered(MouseEvent& mouseEvent A_UNUSED) +void Tab::mouseEntered(MouseEvent& event A_UNUSED) { mHasMouse = true; } -void Tab::mouseExited(MouseEvent& mouseEvent A_UNUSED) +void Tab::mouseExited(MouseEvent& event A_UNUSED) { mHasMouse = false; } diff --git a/src/gui/widgets/tabs/tab.h b/src/gui/widgets/tabs/tab.h index 246d90650..a0afa6fcd 100644 --- a/src/gui/widgets/tabs/tab.h +++ b/src/gui/widgets/tabs/tab.h @@ -189,9 +189,9 @@ class Tab : public BasicContainer, const std::string &getCaption() const A_WARN_UNUSED; - void mouseEntered(MouseEvent &mouseEvent) override final; + void mouseEntered(MouseEvent &event) override final; - void mouseExited(MouseEvent &mouseEvent) override final; + void mouseExited(MouseEvent &event) override final; void setImage(Image *const image); diff --git a/src/gui/widgets/tabstrip.cpp b/src/gui/widgets/tabstrip.cpp index 57520afce..e6459a103 100644 --- a/src/gui/widgets/tabstrip.cpp +++ b/src/gui/widgets/tabstrip.cpp @@ -30,6 +30,7 @@ TabStrip::TabStrip(const Widget2 *const widget, const int spacing) : WidgetGroup(widget, group, height, spacing) { + mAllowLogic = false; } TabStrip::TabStrip(const Widget2 *const widget, @@ -37,6 +38,7 @@ TabStrip::TabStrip(const Widget2 *const widget, const int spacing) : WidgetGroup(widget, "", height, spacing) { + mAllowLogic = false; } Widget *TabStrip::createWidget(const std::string &text) const @@ -55,8 +57,8 @@ void TabStrip::action(const ActionEvent &event) WidgetGroup::action(event); if (event.getSource()) { - Widget *const widget = event.getSource(); - if (static_cast<Button*>(widget)->isPressed2()) + const Widget *const widget = event.getSource(); + if (static_cast<const Button*>(widget)->isPressed2()) { FOR_EACH (WidgetListConstIterator, iter, mWidgets) { diff --git a/src/gui/widgets/textbox.cpp b/src/gui/widgets/textbox.cpp index 5f565259b..b1849e801 100644 --- a/src/gui/widgets/textbox.cpp +++ b/src/gui/widgets/textbox.cpp @@ -85,6 +85,7 @@ TextBox::TextBox(const Widget2 *const widget) : mEditable(true), mOpaque(true) { + mAllowLogic = false; setText(""); setFocusable(true); @@ -247,10 +248,10 @@ void TextBox::setText(const std::string& text) adjustSize(); } -void TextBox::keyPressed(KeyEvent& keyEvent) +void TextBox::keyPressed(KeyEvent& event) { - const Key &key = keyEvent.getKey(); - const int action = keyEvent.getActionId(); + const Key &key = event.getKey(); + const int action = event.getActionId(); switch (action) { @@ -429,7 +430,7 @@ void TextBox::keyPressed(KeyEvent& keyEvent) adjustSize(); scrollToCaret(); - keyEvent.consume(); + event.consume(); } void TextBox::draw(Graphics* graphics) @@ -581,28 +582,29 @@ void TextBox::addRow(const std::string &row) adjustSize(); } -void TextBox::mousePressed(MouseEvent& mouseEvent) +void TextBox::mousePressed(MouseEvent& event) { - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { const int height = getFont()->getHeight(); if (!height) return; - mCaretRow = mouseEvent.getY() / height; + event.consume(); + mCaretRow = event.getY() / height; const int sz = static_cast<int>(mTextRows.size()); if (mCaretRow >= sz) mCaretRow = sz - 1; mCaretColumn = getFont()->getStringIndexAt( - mTextRows[mCaretRow], mouseEvent.getX()); + mTextRows[mCaretRow], event.getX()); } } -void TextBox::mouseDragged(MouseEvent& mouseEvent) +void TextBox::mouseDragged(MouseEvent& event) { - mouseEvent.consume(); + event.consume(); } void TextBox::drawCaret(Graphics *const graphics, const int x, const int y) diff --git a/src/gui/widgets/textbox.h b/src/gui/widgets/textbox.h index e5cfbc7c9..e8c1d3840 100644 --- a/src/gui/widgets/textbox.h +++ b/src/gui/widgets/textbox.h @@ -105,7 +105,7 @@ class TextBox final : public Widget, int getMinWidth() const A_WARN_UNUSED { return mMinWidth; } - void keyPressed(KeyEvent& keyEvent) override final; + void keyPressed(KeyEvent& event) override final; void draw(Graphics* graphics) override final; @@ -272,9 +272,9 @@ class TextBox final : public Widget, void fontChanged() override final { adjustSize(); } - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; private: /** diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp index 7fe8c1bf3..f89d2ead2 100644 --- a/src/gui/widgets/textfield.cpp +++ b/src/gui/widgets/textfield.cpp @@ -78,6 +78,7 @@ #include "resources/image.h" #include "utils/copynpaste.h" +#include "utils/delete2.h" #include "utils/timer.h" #undef DELETE // Win32 compatibility hack @@ -113,6 +114,7 @@ TextField::TextField(const Widget2 *restrict const widget, mAllowSpecialActions(true), mSendAlwaysEvents(sendAlwaysEvents) { + mAllowLogic = false; setFocusable(true); addMouseListener(this); addKeyListener(this); @@ -125,7 +127,6 @@ TextField::TextField(const Widget2 *restrict const widget, if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) { mSkin = theme->loadSkinRect(skin, "textfield.xml", @@ -154,13 +155,11 @@ TextField::~TextField() if (gui) gui->removeDragged(this); - delete mPopupMenu; - mPopupMenu = nullptr; + delete2(mPopupMenu); instances--; if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) { theme->unload(mSkin); @@ -172,7 +171,7 @@ TextField::~TextField() void TextField::updateAlpha() { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); if (alpha != mAlpha) { @@ -246,16 +245,16 @@ int TextField::getValue() const return value; } -void TextField::keyPressed(KeyEvent &keyEvent) +void TextField::keyPressed(KeyEvent &event) { - const int val = keyEvent.getKey().getValue(); + const int val = event.getKey().getValue(); #ifdef USE_SDL2 if (val == Key::TEXTINPUT) { - std::string str = keyEvent.getText(); + std::string str = event.getText(); mText.insert(mCaretPosition, str); mCaretPosition += str.size(); - keyEvent.consume(); + event.consume(); fixScroll(); if (mSendAlwaysEvents) distributeActionEvent(); @@ -274,7 +273,7 @@ void TextField::keyPressed(KeyEvent &keyEvent) buf[1] = 0; mText.insert(mCaretPosition, std::string(buf)); mCaretPosition += 1; - keyEvent.consume(); + event.consume(); fixScroll(); if (mSendAlwaysEvents) distributeActionEvent(); @@ -306,7 +305,7 @@ void TextField::keyPressed(KeyEvent &keyEvent) mText.insert(mCaretPosition, std::string(buf, buf + len)); mCaretPosition += len; - keyEvent.consume(); + event.consume(); fixScroll(); if (mSendAlwaysEvents) distributeActionEvent(); @@ -324,14 +323,14 @@ void TextField::keyPressed(KeyEvent &keyEvent) bool consumed(false); #endif - const int action = keyEvent.getActionId(); + const int action = event.getActionId(); if (!inputManager.isActionActive(static_cast<int>( Input::KEY_GUI_CTRL))) { if (!handleNormalKeys(action, consumed)) { if (consumed) - keyEvent.consume(); + event.consume(); return; } } @@ -344,7 +343,7 @@ void TextField::keyPressed(KeyEvent &keyEvent) distributeActionEvent(); if (consumed) - keyEvent.consume(); + event.consume(); fixScroll(); } @@ -694,13 +693,14 @@ void TextField::fontChanged() fixScroll(); } -void TextField::mousePressed(MouseEvent &mouseEvent) +void TextField::mousePressed(MouseEvent &event) { #ifdef ANDROID if (!client->isKeyboardVisible()) inputManager.executeAction(Input::KEY_SHOW_KEYBOARD); #endif - if (mouseEvent.getButton() == MouseEvent::RIGHT) + event.consume(); + if (event.getButton() == MouseEvent::RIGHT) { if (viewport) { @@ -722,10 +722,10 @@ void TextField::mousePressed(MouseEvent &mouseEvent) } } } - else if (mouseEvent.getButton() == MouseEvent::LEFT) + else if (event.getButton() == MouseEvent::LEFT) { mCaretPosition = getFont()->getStringIndexAt( - mText, mouseEvent.getX() + mXScroll); + mText, event.getX() + mXScroll); fixScroll(); } } @@ -750,7 +750,7 @@ void TextField::setText(const std::string& text) mText = text; } -void TextField::mouseDragged(MouseEvent& mouseEvent) +void TextField::mouseDragged(MouseEvent& event) { - mouseEvent.consume(); + event.consume(); } diff --git a/src/gui/widgets/textfield.h b/src/gui/widgets/textfield.h index 93ae155be..1af5978b1 100644 --- a/src/gui/widgets/textfield.h +++ b/src/gui/widgets/textfield.h @@ -134,7 +134,7 @@ class TextField : public Widget, /** * Processes one keypress. */ - void keyPressed(KeyEvent &keyEvent) override; + void keyPressed(KeyEvent &event) override; /** * Set the minimum value for a range @@ -162,7 +162,7 @@ class TextField : public Widget, void setCaretPosition(unsigned int position); - void mousePressed(MouseEvent &mouseEvent) override final; + void mousePressed(MouseEvent &event) override final; void handlePaste(); @@ -219,7 +219,7 @@ class TextField : public Widget, unsigned int getCaretPosition() const { return mCaretPosition; } - void mouseDragged(MouseEvent& mouseEvent) override final; + void mouseDragged(MouseEvent& event) override final; protected: void drawCaret(Graphics* graphics, int x); diff --git a/src/gui/widgets/textpreview.cpp b/src/gui/widgets/textpreview.cpp index 10bd936c6..6f358e956 100644 --- a/src/gui/widgets/textpreview.cpp +++ b/src/gui/widgets/textpreview.cpp @@ -48,9 +48,9 @@ TextPreview::TextPreview(const Widget2 *const widget, mShadow(false), mOutline(false) { + mAllowLogic = false; if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) mSkin = theme->load("textpreview.xml", ""); } @@ -72,7 +72,6 @@ TextPreview::~TextPreview() if (instances == 0) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); } @@ -118,7 +117,7 @@ void TextPreview::draw(Graphics* graphics) Color(mTextColor2->r, mTextColor2->g, mTextColor2->b, alpha)); if (mOutline && mTextColor != mTextColor2) - graphics->setColor2(Theme::getThemeColor(Theme::OUTLINE)); + graphics->setColor2(getThemeColor(Theme::OUTLINE, 255)); mFont->drawString(graphics, mText, mPadding + 1, mPadding + 1); BLOCK_END("TextPreview::draw") diff --git a/src/gui/widgets/widget.cpp b/src/gui/widgets/widget.cpp index 5b2024b1f..aa3e6254b 100644 --- a/src/gui/widgets/widget.cpp +++ b/src/gui/widgets/widget.cpp @@ -77,8 +77,6 @@ #include "listeners/deathlistener.h" #include "listeners/widgetlistener.h" -#include "render/graphics.h" - #include "debug.h" Font* Widget::mGlobalFont = nullptr; @@ -96,20 +94,20 @@ Widget::Widget(const Widget2 *const widget) : mForegroundColor(0x000000), mBackgroundColor(0xffffff), mBaseColor(0x808090), - mSelectionColor(0xc3d9ff), + mDimension(), + mActionEventId(), + mId(), mFocusHandler(nullptr), mInternalFocusHandler(nullptr), mParent(nullptr), - mDimension(), + mCurrentFont(nullptr), mFrameSize(0), - mActionEventId(), mFocusable(false), mVisible(true), mTabIn(true), mTabOut(true), mEnabled(true), - mId(), - mCurrentFont(nullptr) + mAllowLogic(true) { mWidgets.push_back(this); mWidgetsSet.insert(this); @@ -117,87 +115,51 @@ Widget::Widget(const Widget2 *const widget) : Widget::~Widget() { - for (DeathListenerIterator iter = mDeathListeners.begin(); - iter != mDeathListeners.end(); - ++iter) + FOR_EACH (DeathListenerIterator, iter, mDeathListeners) { Event event(this); (*iter)->death(event); } - _setFocusHandler(nullptr); + setFocusHandler(nullptr); mWidgets.remove(this); mWidgetsSet.erase(this); } -void Widget::drawFrame(Graphics* graphics) -{ - BLOCK_START("Widget::drawFrame") - const Color &faceColor = getBaseColor(); - Color highlightColor = faceColor + Color(0x303030); - Color shadowColor = faceColor - Color(0x303030); - const int alpha = getBaseColor().a; - const int width = getWidth() + getFrameSize() * 2 - 1; - const int height = getHeight() + getFrameSize() * 2 - 1; - highlightColor.a = alpha; - shadowColor.a = alpha; - - for (unsigned int i = 0; i < getFrameSize(); ++i) - { - graphics->setColor(shadowColor); - graphics->drawLine(i, i, width - i, i); - graphics->drawLine(i, i + 1, i, height - i - 1); - graphics->setColor(highlightColor); - graphics->drawLine(width - i, i + 1, width - i, height - i); - graphics->drawLine(i, height - i, width - i - 1, height - i); - } - BLOCK_END("Widget::drawFrame") -} - -void Widget::_setParent(Widget* parent) -{ - mParent = parent; -} - -void Widget::setWidth(int width) +void Widget::setWidth(const int width) { Rect newDimension = mDimension; newDimension.width = width; - setDimension(newDimension); } -void Widget::setHeight(int height) +void Widget::setHeight(const int height) { Rect newDimension = mDimension; newDimension.height = height; - setDimension(newDimension); } -void Widget::setX(int x) +void Widget::setX(const int x) { Rect newDimension = mDimension; newDimension.x = x; - setDimension(newDimension); } -void Widget::setY(int y) +void Widget::setY(const int y) { Rect newDimension = mDimension; newDimension.y = y; - setDimension(newDimension); } -void Widget::setPosition(int x, int y) +void Widget::setPosition(const int x, const int y) { Rect newDimension = mDimension; newDimension.x = x; newDimension.y = y; - setDimension(newDimension); } @@ -212,36 +174,8 @@ void Widget::setDimension(const Rect& dimension) distributeResizedEvent(); } - if (mDimension.x != oldDimension.x - || mDimension.y != oldDimension.y) - { + if (mDimension.x != oldDimension.x || mDimension.y != oldDimension.y) distributeMovedEvent(); - } -} - -void Widget::setFrameSize(unsigned int frameSize) -{ - mFrameSize = frameSize; -} - -unsigned int Widget::getFrameSize() const -{ - return mFrameSize; -} - -const Rect& Widget::getDimension() const -{ - return mDimension; -} - -const std::string& Widget::getActionEventId() const -{ - return mActionEventId; -} - -void Widget::setActionEventId(const std::string& actionEventId) -{ - mActionEventId = actionEventId; } bool Widget::isFocused() const @@ -252,13 +186,10 @@ bool Widget::isFocused() const return (mFocusHandler->isFocused(this)); } -void Widget::setFocusable(bool focusable) +void Widget::setFocusable(const bool focusable) { if (!focusable && isFocused()) - { mFocusHandler->focusNone(); - } - mFocusable = focusable; } @@ -301,47 +232,7 @@ void Widget::setVisible(bool visible) mVisible = visible; } -void Widget::setBaseColor(const Color& color) -{ - mBaseColor = color; -} - -const Color& Widget::getBaseColor() const -{ - return mBaseColor; -} - -void Widget::setForegroundColor(const Color& color) -{ - mForegroundColor = color; -} - -const Color& Widget::getForegroundColor() const -{ - return mForegroundColor; -} - -void Widget::setBackgroundColor(const Color& color) -{ - mBackgroundColor = color; -} - -const Color& Widget::getBackgroundColor() const -{ - return mBackgroundColor; -} - -void Widget::setSelectionColor(const Color& color) -{ - mSelectionColor = color; -} - -const Color& Widget::getSelectionColor() const -{ - return mSelectionColor; -} - -void Widget::_setFocusHandler(FocusHandler* focusHandler) +void Widget::setFocusHandler(FocusHandler *const focusHandler) { if (mFocusHandler) { @@ -355,67 +246,62 @@ void Widget::_setFocusHandler(FocusHandler* focusHandler) mFocusHandler = focusHandler; } -FocusHandler* Widget::_getFocusHandler() -{ - return mFocusHandler; -} - -void Widget::addActionListener(ActionListener* actionListener) +void Widget::addActionListener(ActionListener *const actionListener) { mActionListeners.push_back(actionListener); } -void Widget::removeActionListener(ActionListener* actionListener) +void Widget::removeActionListener(ActionListener *const actionListener) { mActionListeners.remove(actionListener); } -void Widget::addDeathListener(DeathListener* deathListener) +void Widget::addDeathListener(DeathListener *const deathListener) { mDeathListeners.push_back(deathListener); } -void Widget::removeDeathListener(DeathListener* deathListener) +void Widget::removeDeathListener(DeathListener *const deathListener) { mDeathListeners.remove(deathListener); } -void Widget::addKeyListener(KeyListener* keyListener) +void Widget::addKeyListener(KeyListener *const keyListener) { mKeyListeners.push_back(keyListener); } -void Widget::removeKeyListener(KeyListener* keyListener) +void Widget::removeKeyListener(KeyListener *const keyListener) { mKeyListeners.remove(keyListener); } -void Widget::addFocusListener(FocusListener* focusListener) +void Widget::addFocusListener(FocusListener *const focusListener) { mFocusListeners.push_back(focusListener); } -void Widget::removeFocusListener(FocusListener* focusListener) +void Widget::removeFocusListener(FocusListener *const focusListener) { mFocusListeners.remove(focusListener); } -void Widget::addMouseListener(MouseListener* mouseListener) +void Widget::addMouseListener(MouseListener *const mouseListener) { mMouseListeners.push_back(mouseListener); } -void Widget::removeMouseListener(MouseListener* mouseListener) +void Widget::removeMouseListener(MouseListener *const mouseListener) { mMouseListeners.remove(mouseListener); } -void Widget::addWidgetListener(WidgetListener* widgetListener) +void Widget::addWidgetListener(WidgetListener *const widgetListener) { mWidgetListeners.push_back(widgetListener); } -void Widget::removeWidgetListener(WidgetListener* widgetListener) +void Widget::removeWidgetListener(WidgetListener *const widgetListener) { mWidgetListeners.remove(widgetListener); } @@ -446,19 +332,18 @@ Font* Widget::getFont() const return mCurrentFont; } -void Widget::setGlobalFont(Font* font) +void Widget::setGlobalFont(Font *const font) { mGlobalFont = font; - for (std::list<Widget*>::const_iterator iter = mWidgets.begin(); - iter != mWidgets.end(); ++iter) + FOR_EACH (std::list<Widget*>::const_iterator, iter, mWidgets) { if (!(*iter)->mCurrentFont) (*iter)->fontChanged(); } } -void Widget::setFont(Font* font) +void Widget::setFont(Font *const font) { mCurrentFont = font; fontChanged(); @@ -470,40 +355,14 @@ bool Widget::widgetExists(const Widget* widget) != mWidgetsSet.end(); } -bool Widget::isTabInEnabled() const -{ - return mTabIn; -} - -void Widget::setTabInEnabled(bool enabled) -{ - mTabIn = enabled; -} - -bool Widget::isTabOutEnabled() const -{ - return mTabOut; -} - -void Widget::setTabOutEnabled(bool enabled) -{ - mTabOut = enabled; -} - -void Widget::setSize(int width, int height) +void Widget::setSize(const int width, const int height) { Rect newDimension = mDimension; newDimension.width = width; newDimension.height = height; - setDimension(newDimension); } -void Widget::setEnabled(bool enabled) -{ - mEnabled = enabled; -} - bool Widget::isEnabled() const { return mEnabled && isVisible(); @@ -513,7 +372,6 @@ void Widget::requestModalFocus() { if (!mFocusHandler) return; - mFocusHandler->requestModalFocus(this); } @@ -521,7 +379,6 @@ void Widget::requestModalMouseInputFocus() { if (!mFocusHandler) return; - mFocusHandler->requestModalMouseInputFocus(this); } @@ -529,7 +386,6 @@ void Widget::releaseModalFocus() { if (!mFocusHandler) return; - mFocusHandler->releaseModalFocus(this); } @@ -537,7 +393,6 @@ void Widget::releaseModalMouseInputFocus() { if (!mFocusHandler) return; - mFocusHandler->releaseModalMouseInputFocus(this); } @@ -569,22 +424,17 @@ bool Widget::isModalMouseInputFocused() const return mFocusHandler->getModalMouseInputFocused() == this; } -Widget *Widget::getWidgetAt(int x A_UNUSED, int y A_UNUSED) -{ - return nullptr; -} - -const std::list<MouseListener*>& Widget::_getMouseListeners() +const std::list<MouseListener*>& Widget::getMouseListeners() { return mMouseListeners; } -const std::list<KeyListener*>& Widget::_getKeyListeners() +const std::list<KeyListener*>& Widget::getKeyListeners() { return mKeyListeners; } -const std::list<FocusListener*>& Widget::_getFocusListeners() +const std::list<FocusListener*>& Widget::getFocusListeners() { return mFocusListeners; } @@ -594,21 +444,19 @@ Rect Widget::getChildrenArea() return Rect(0, 0, 0, 0); } -FocusHandler* Widget::_getInternalFocusHandler() +FocusHandler* Widget::getInternalFocusHandler() { return mInternalFocusHandler; } -void Widget::setInternalFocusHandler(FocusHandler* focusHandler) +void Widget::setInternalFocusHandler(FocusHandler *const focusHandler) { mInternalFocusHandler = focusHandler; } void Widget::distributeResizedEvent() { - for (WidgetListenerIterator iter = mWidgetListeners.begin(); - iter != mWidgetListeners.end(); - ++ iter) + FOR_EACH (WidgetListenerIterator, iter, mWidgetListeners) { Event event(this); (*iter)->widgetResized(event); @@ -617,9 +465,7 @@ void Widget::distributeResizedEvent() void Widget::distributeMovedEvent() { - for (WidgetListenerIterator iter = mWidgetListeners.begin(); - iter != mWidgetListeners.end(); - ++ iter) + FOR_EACH (WidgetListenerIterator, iter, mWidgetListeners) { Event event(this); (*iter)->widgetMoved(event); @@ -628,9 +474,7 @@ void Widget::distributeMovedEvent() void Widget::distributeHiddenEvent() { - for (WidgetListenerIterator iter = mWidgetListeners.begin(); - iter != mWidgetListeners.end(); - ++ iter) + FOR_EACH (WidgetListenerIterator, iter, mWidgetListeners) { Event event(this); (*iter)->widgetHidden(event); @@ -639,9 +483,7 @@ void Widget::distributeHiddenEvent() void Widget::distributeActionEvent() { - for (ActionListenerIterator iter = mActionListeners.begin(); - iter != mActionListeners.end(); - ++iter) + FOR_EACH (ActionListenerIterator, iter, mActionListeners) { ActionEvent actionEvent(this, mActionEventId); (*iter)->action(actionEvent); @@ -650,16 +492,14 @@ void Widget::distributeActionEvent() void Widget::distributeShownEvent() { - for (WidgetListenerIterator iter = mWidgetListeners.begin(); - iter != mWidgetListeners.end(); - ++iter) + FOR_EACH (WidgetListenerIterator, iter, mWidgetListeners) { Event event(this); (*iter)->widgetShown(event); } } -void Widget::showPart(Rect rectangle) +void Widget::showPart(const Rect &rectangle) { if (mParent) mParent->showWidgetPart(this, rectangle); diff --git a/src/gui/widgets/widget.h b/src/gui/widgets/widget.h index 3af00d247..de5a79502 100644 --- a/src/gui/widgets/widget.h +++ b/src/gui/widgets/widget.h @@ -99,6 +99,8 @@ class WidgetListener; class Widget : public Widget2 { public: + friend class BasicContainer; + /** * Constructor. Resets member variables. Noteable, a widget is not * focusable as default, therefore, widgets that are supposed to be @@ -145,7 +147,8 @@ class Widget : public Widget2 * @see setFrameSize, getFrameSize * @since 0.8.0 */ - virtual void drawFrame(Graphics* graphics); + virtual void drawFrame(Graphics* graphics A_UNUSED) + { } /** * Sets the size of the widget's frame. The frame is not considered a part of @@ -161,7 +164,8 @@ class Widget : public Widget2 * @see getFrameSize, drawFrame * @since 0.8.0 */ - void setFrameSize(unsigned int frameSize); + void setFrameSize(const unsigned int frameSize) + { mFrameSize = frameSize; } /** * Gets the size of the widget's frame. The frame is not considered a part of @@ -177,7 +181,8 @@ class Widget : public Widget2 * @see setFrameSize, drawFrame * @since 0.8.0 */ - unsigned int getFrameSize() const A_WARN_UNUSED; + unsigned int getFrameSize() const A_WARN_UNUSED + { return mFrameSize; } /** * Called for all widgets in the gui each time Gui::logic is called. @@ -207,7 +212,7 @@ class Widget : public Widget2 * setDimension, getDimensi * @since 0.1.0 */ - void setWidth(int width); + void setWidth(const int width); /** * Gets the width of the widget. @@ -228,7 +233,7 @@ class Widget : public Widget2 * setDimension, getDimension * @since 0.1.0 */ - void setHeight(int height); + void setHeight(const int height); /** * Gets the height of the widget. @@ -250,7 +255,7 @@ class Widget : public Widget2 * setDimension, getDimension * @since 0.1.0 */ - void setSize(int width, int height); + void setSize(const int width, const int height); /** * Sets the x coordinate of the widget. The coordinate is @@ -260,7 +265,7 @@ class Widget : public Widget2 * @see getX, setY, getY, setPosition, setDimension, getDimension * @since 0.1.0 */ - void setX(int x); + void setX(const int x); /** * Gets the x coordinate of the widget. The coordinate is @@ -281,7 +286,7 @@ class Widget : public Widget2 * @see setY, setX, getX, setPosition, setDimension, getDimension * @since 0.1.0 */ - void setY(int y); + void setY(const int y); /** * Gets the y coordinate of the widget. The coordinate is @@ -303,7 +308,7 @@ class Widget : public Widget2 * @see setX, getX, setY, getY, setDimension, getDimension * @since 0.1.0 */ - void setPosition(int x, int y); + void setPosition(const int x, const int y); /** * Sets the dimension of the widget. The dimension is @@ -323,7 +328,8 @@ class Widget : public Widget2 * @see getDimension, setX, getX, setY, getY, setPosition * @since 0.1.0 */ - const Rect& getDimension() const A_WARN_UNUSED; + const Rect& getDimension() const A_WARN_UNUSED + { return mDimension; } /** * Sets the widget to be fosusable, or not. @@ -333,7 +339,7 @@ class Widget : public Widget2 * @see isFocusable * @since 0.1.0 */ - void setFocusable(bool focusable); + void setFocusable(const bool focusable); /** * Checks if a widget is focsable. @@ -361,7 +367,8 @@ class Widget : public Widget2 * @see isEnabled * @since 0.1.0 */ - void setEnabled(bool enabled); + void setEnabled(const bool enabled) + { mEnabled = enabled; } /** * Checks if the widget is enabled. A disabled @@ -399,7 +406,8 @@ class Widget : public Widget2 * @see getBaseColor * @since 0.1.0 */ - void setBaseColor(const Color& color); + void setBaseColor(const Color& color) + { mBaseColor = color; } /** * Gets the base color. @@ -408,7 +416,8 @@ class Widget : public Widget2 * @see setBaseColor * @since 0.1.0 */ - const Color& getBaseColor() const A_WARN_UNUSED; + const Color& getBaseColor() const A_WARN_UNUSED + { return mBaseColor; } /** * Sets the foreground color. @@ -417,7 +426,8 @@ class Widget : public Widget2 * @see getForegroundColor * @since 0.1.0 */ - void setForegroundColor(const Color& color); + void setForegroundColor(const Color& color) + { mForegroundColor = color; } /** * Gets the foreground color. @@ -425,7 +435,8 @@ class Widget : public Widget2 * @see setForegroundColor * @since 0.1.0 */ - const Color& getForegroundColor() const A_WARN_UNUSED; + const Color& getForegroundColor() const A_WARN_UNUSED + { return mForegroundColor; } /** * Sets the background color. @@ -434,7 +445,8 @@ class Widget : public Widget2 * @see setBackgroundColor * @since 0.1.0 */ - void setBackgroundColor(const Color& color); + void setBackgroundColor(const Color& color) + { mBackgroundColor = color; } /** * Gets the background color. @@ -442,25 +454,8 @@ class Widget : public Widget2 * @see setBackgroundColor * @since 0.1.0 */ - const Color& getBackgroundColor() const A_WARN_UNUSED; - - /** - * Sets the selection color. - * - * @param color The selection color. - * @see getSelectionColor - * @since 0.6.0 - */ - void setSelectionColor(const Color& color); - - /** - * Gets the selection color. - * - * @return The selection color. - * @see setSelectionColor - * @since 0.6.0 - */ - const Color& getSelectionColor() const A_WARN_UNUSED; + const Color& getBackgroundColor() const A_WARN_UNUSED + { return mBackgroundColor; } /** * Requests focus for the widget. A widget will only recieve focus @@ -486,10 +481,10 @@ class Widget : public Widget2 * are doing. * * @param focusHandler The focus handler to use. - * @see _getFocusHandler + * @see getFocusHandler * @since 0.1.0 */ - virtual void _setFocusHandler(FocusHandler* focusHandler); + virtual void setFocusHandler(FocusHandler *const focusHandler); /** * Gets the focus handler used. @@ -499,10 +494,11 @@ class Widget : public Widget2 * are doing. * * @return The focus handler used. - * @see _setFocusHandler + * @see setFocusHandler * @since 0.1.0 */ - virtual FocusHandler* _getFocusHandler() A_WARN_UNUSED; + virtual FocusHandler* getFocusHandler() A_WARN_UNUSED + { return mFocusHandler; } /** * Adds an action listener to the widget. When an action event @@ -513,7 +509,7 @@ class Widget : public Widget2 * @see removeActionListener * @since 0.1.0 */ - void addActionListener(ActionListener* actionListener); + void addActionListener(ActionListener *const actionListener); /** * Removes an added action listener from the widget. @@ -522,7 +518,7 @@ class Widget : public Widget2 * @see addActionListener * @since 0.1.0 */ - void removeActionListener(ActionListener* actionListener); + void removeActionListener(ActionListener *const actionListener); /** * Adds a death listener to the widget. When a death event is @@ -533,7 +529,7 @@ class Widget : public Widget2 * @see removeDeathListener * @since 0.1.0 */ - void addDeathListener(DeathListener* deathListener); + void addDeathListener(DeathListener *const deathListener); /** * Removes an added death listener from the widget. @@ -542,7 +538,7 @@ class Widget : public Widget2 * @see addDeathListener * @since 0.1.0 */ - void removeDeathListener(DeathListener* deathListener); + void removeDeathListener(DeathListener *const deathListener); /** * Adds a mouse listener to the widget. When a mouse event is @@ -553,7 +549,7 @@ class Widget : public Widget2 * @see removeMouseListener * @since 0.1.0 */ - void addMouseListener(MouseListener* mouseListener); + void addMouseListener(MouseListener *const mouseListener); /** * Removes an added mouse listener from the widget. @@ -562,7 +558,7 @@ class Widget : public Widget2 * @see addMouseListener * @since 0.1.0 */ - void removeMouseListener(MouseListener* mouseListener); + void removeMouseListener(MouseListener *const mouseListener); /** * Adds a key listener to the widget. When a key event is @@ -573,7 +569,7 @@ class Widget : public Widget2 * @see removeKeyListener * @since 0.1.0 */ - void addKeyListener(KeyListener* keyListener); + void addKeyListener(KeyListener *const keyListener); /** * Removes an added key listener from the widget. @@ -582,7 +578,7 @@ class Widget : public Widget2 * @see addKeyListener * @since 0.1.0 */ - void removeKeyListener(KeyListener* keyListener); + void removeKeyListener(KeyListener *const keyListener); /** * Adds a focus listener to the widget. When a focus event is @@ -593,7 +589,7 @@ class Widget : public Widget2 * @see removeFocusListener * @since 0.7.0 */ - void addFocusListener(FocusListener* focusListener); + void addFocusListener(FocusListener *const focusListener); /** * Removes an added focus listener from the widget. @@ -602,7 +598,7 @@ class Widget : public Widget2 * @see addFocusListener * @since 0.7.0 */ - void removeFocusListener(FocusListener* focusListener); + void removeFocusListener(FocusListener *const focusListener); /** * Adds a widget listener to the widget. When a widget event is @@ -613,7 +609,7 @@ class Widget : public Widget2 * @see removeWidgetListener * @since 0.8.0 */ - void addWidgetListener(WidgetListener* widgetListener); + void addWidgetListener(WidgetListener *const widgetListener); /** * Removes an added widget listener from the widget. @@ -622,7 +618,7 @@ class Widget : public Widget2 * @see addWidgetListener * @since 0.8.0 */ - void removeWidgetListener(WidgetListener* widgetListener); + void removeWidgetListener(WidgetListener *const widgetListener); /** * Sets the action event identifier of the widget. The identifier is @@ -636,7 +632,8 @@ class Widget : public Widget2 * @see getActionEventId * @since 0.6.0 */ - void setActionEventId(const std::string& actionEventId); + void setActionEventId(const std::string& actionEventId) + { mActionEventId = actionEventId; } /** * Gets the action event identifier of the widget. @@ -645,7 +642,8 @@ class Widget : public Widget2 * @see setActionEventId * @since 0.6.0 */ - const std::string& getActionEventId() const; + const std::string& getActionEventId() const + { return mActionEventId; } /** * Gets the absolute position on the screen for the widget. @@ -667,7 +665,8 @@ class Widget : public Widget2 * @see getParent * @since 0.1.0 */ - virtual void _setParent(Widget* parent); + virtual void setParent(Widget* parent) + { mParent = parent; } /** * Gets the font set for the widget. If no font has been set, @@ -687,7 +686,7 @@ class Widget : public Widget2 * @see getGlobalFont * @since 0.1.0 */ - static void setGlobalFont(Font* font); + static void setGlobalFont(Font *const font); /** * Sets the font for the widget. If NULL is passed, the global font @@ -697,7 +696,7 @@ class Widget : public Widget2 * @see getFont * @since 0.1.0 */ - void setFont(Font* font); + void setFont(Font *const font); /** * Called when the font has changed. If the change is global, @@ -729,7 +728,8 @@ class Widget : public Widget2 * @see setTabInEnabled * @since 0.1.0 */ - bool isTabInEnabled() const A_WARN_UNUSED; + bool isTabInEnabled() const A_WARN_UNUSED + { return mTabIn; } /** * Sets tab in enabled, or not. Tab in means that you can set focus @@ -741,7 +741,8 @@ class Widget : public Widget2 * @see isTabInEnabled * @since 0.1.0 */ - void setTabInEnabled(bool enabled); + void setTabInEnabled(const bool enabled) + { mTabIn = enabled; } /** * Checks if tab out is enabled. Tab out means that you can lose @@ -753,7 +754,8 @@ class Widget : public Widget2 * @see setTabOutEnabled * @since 0.1.0 */ - bool isTabOutEnabled() const A_WARN_UNUSED; + bool isTabOutEnabled() const A_WARN_UNUSED + { return mTabOut; } /** * Sets tab out enabled. Tab out means that you can lose @@ -765,7 +767,8 @@ class Widget : public Widget2 * @see isTabOutEnabled * @since 0.1.0 */ - void setTabOutEnabled(bool enabled); + void setTabOutEnabled(const bool enabled) + { mTabOut = enabled; } /** * Requests modal focus. When a widget has modal focus, only that @@ -839,7 +842,9 @@ class Widget : public Widget2 * if no widget is found. * @since 0.6.0 */ - virtual Widget *getWidgetAt(int x, int y) A_WARN_UNUSED; + virtual Widget *getWidgetAt(int x A_UNUSED, + int y A_UNUSED) A_WARN_UNUSED + { return nullptr; } /** * Gets the mouse listeners of the widget. @@ -847,8 +852,8 @@ class Widget : public Widget2 * @return The mouse listeners of the widget. * @since 0.6.0 */ - virtual const std::list<MouseListener*>& _getMouseListeners() - A_WARN_UNUSED; + virtual const std::list<MouseListener*>& getMouseListeners() + A_WARN_UNUSED; /** * Gets the key listeners of the widget. @@ -856,8 +861,8 @@ class Widget : public Widget2 * @return The key listeners of the widget. * @since 0.6.0 */ - virtual const std::list<KeyListener*>& _getKeyListeners() - A_WARN_UNUSED; + virtual const std::list<KeyListener*>& getKeyListeners() + A_WARN_UNUSED; /** * Gets the focus listeners of the widget. @@ -865,8 +870,8 @@ class Widget : public Widget2 * @return The focus listeners of the widget. * @since 0.7.0 */ - virtual const std::list<FocusListener*>& _getFocusListeners() - A_WARN_UNUSED; + virtual const std::list<FocusListener*>& getFocusListeners() + A_WARN_UNUSED; /** * Gets the area of the widget occupied by the widget's children. @@ -898,7 +903,7 @@ class Widget : public Widget2 * @see setInternalFocusHandler * @since 0.1.0 */ - virtual FocusHandler* _getInternalFocusHandler() A_WARN_UNUSED; + virtual FocusHandler* getInternalFocusHandler() A_WARN_UNUSED; /** * Sets the internal focus handler. An internal focus handler is @@ -909,7 +914,7 @@ class Widget : public Widget2 * @see getInternalFocusHandler * @since 0.1.0 */ - void setInternalFocusHandler(FocusHandler* internalFocusHandler); + void setInternalFocusHandler(FocusHandler *const internalFocusHandler); /** * Moves a widget to the top of this widget. The moved widget will be @@ -970,7 +975,7 @@ class Widget : public Widget2 * has an id. * * @param id The id to set to the widget. - * @see getId, BasicContainer::findWidgetById + * @see getId * @since 0.8.0 */ void setId(const std::string& id) @@ -983,7 +988,7 @@ class Widget : public Widget2 * has an id. * * @param id The id to set to the widget. - * @see setId, BasicContainer::findWidgetById + * @see setId * @since 0.8.0 */ const std::string& getId() const A_WARN_UNUSED @@ -999,7 +1004,10 @@ class Widget : public Widget2 * @param rectangle The rectangle to be shown. * @since 0.8.0 */ - virtual void showPart(Rect rectangle); + virtual void showPart(const Rect &rectangle); + + bool isAllowLogic() const + { return mAllowLogic; } protected: /** @@ -1143,9 +1151,19 @@ class Widget : public Widget2 Color mBaseColor; /** - * Holds the selection color of the widget. + * Holds the dimension of the widget. */ - Color mSelectionColor; + Rect mDimension; + + /** + * Holds the action event of the widget. + */ + std::string mActionEventId; + + /** + * Holds the id of the widget. + */ + std::string mId; /** * Holds the focus handler used by the widget. @@ -1165,9 +1183,9 @@ class Widget : public Widget2 Widget* mParent; /** - * Holds the dimension of the widget. + * Holds the font used by the widget. */ - Rect mDimension; + Font* mCurrentFont; /** * Holds the frame size of the widget. @@ -1175,11 +1193,6 @@ class Widget : public Widget2 unsigned int mFrameSize; /** - * Holds the action event of the widget. - */ - std::string mActionEventId; - - /** * True if the widget focusable, false otherwise. */ bool mFocusable; @@ -1204,15 +1217,7 @@ class Widget : public Widget2 */ bool mEnabled; - /** - * Holds the id of the widget. - */ - std::string mId; - - /** - * Holds the font used by the widget. - */ - Font* mCurrentFont; + bool mAllowLogic; /** * Holds the global font used by the widget. diff --git a/src/gui/widgets/widget2.h b/src/gui/widgets/widget2.h index ff565815f..7890fd648 100644 --- a/src/gui/widgets/widget2.h +++ b/src/gui/widgets/widget2.h @@ -36,16 +36,18 @@ class Widget2 const int alpha = 255) const A_WARN_UNUSED { - return Theme::getThemeColor(mPaletteOffset + type, alpha); + return theme->getColor(mPaletteOffset + type, alpha); } inline const Color &getThemeCharColor(const signed char c, bool &valid) const A_WARN_UNUSED { - const int colorId = Theme::getThemeIdByChar(c, valid); + if (!theme) + return Palette::BLACK; + const int colorId = theme->getIdByChar(c, valid); if (valid) - return Theme::getThemeColor(mPaletteOffset + colorId); + return theme->getColor(mPaletteOffset + colorId, 255); else return Palette::BLACK; } diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index 5a636013b..9e032f75b 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -82,6 +82,8 @@ #include "resources/cursor.h" #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" const int resizeMask = 8 + 4 + 2 + 1; @@ -155,7 +157,6 @@ Window::Window(const std::string &caption, const bool modal, int childPalette = 1; // Loads the skin - Theme *const theme = Theme::instance(); if (theme) { mSkin = theme->load(skin, "window.xml"); @@ -220,8 +221,7 @@ Window::~Window() saveWindowState(); - delete mLayout; - mLayout = nullptr; + delete2(mLayout); while (!mWidgets.empty()) delete mWidgets.front(); @@ -229,14 +229,12 @@ Window::~Window() mWidgets.clear(); removeWidgetListener(this); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); windowInstances--; if (mSkin) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); mSkin = nullptr; @@ -643,6 +641,7 @@ void Window::setStickyButton(const bool flag) void Window::setSticky(const bool sticky) { mSticky = sticky; + mRedraw = true; } void Window::setStickyButtonLock(const bool lock) @@ -706,6 +705,9 @@ void Window::scheduleDelete() void Window::mousePressed(MouseEvent &event) { + if (event.isConsumed()) + return; + if (event.getSource() == this) { if (getParent()) @@ -716,7 +718,8 @@ void Window::mousePressed(MouseEvent &event) mMoved = event.getY() <= static_cast<int>(mTitleBarHeight); } - if (event.getButton() == MouseEvent::LEFT) + const unsigned int button = event.getButton(); + if (button == MouseEvent::LEFT) { const int x = event.getX(); const int y = event.getY(); @@ -726,6 +729,7 @@ void Window::mousePressed(MouseEvent &event) { mouseResize = 0; mMoved = 0; + event.consume(); close(); return; } @@ -736,17 +740,27 @@ void Window::mousePressed(MouseEvent &event) setSticky(!isSticky()); mouseResize = 0; mMoved = 0; - mRedraw = true; + event.consume(); return; } // Handle window resizing mouseResize = getResizeHandles(event) & resizeMask; + if (mouseResize != 0) + event.consume(); if (canMove()) mMoved = !mouseResize; else mMoved = false; } + else if (button == MouseEvent::RIGHT) + { + if (viewport) + { + event.consume(); + viewport->showWindowPopup(this); + } + } } void Window::close() @@ -1207,7 +1221,7 @@ bool Window::isResizeAllowed(const MouseEvent &event) const int Window::getGuiAlpha() const { const float alpha = std::max(client->getGuiAlpha(), - Theme::instance()->getMinimumOpacity()); + theme->getMinimumOpacity()); return static_cast<int>(alpha * 255.0F); } @@ -1248,8 +1262,7 @@ void Window::reflowLayout(int w, int h) return; mLayout->reflow(w, h); - delete mLayout; - mLayout = nullptr; + delete2(mLayout); setContentSize(w, h); } diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h index 2c4ee5e5f..dfd1f63b7 100644 --- a/src/gui/widgets/window.h +++ b/src/gui/widgets/window.h @@ -170,6 +170,9 @@ class Window : public BasicContainer2, */ void setCloseButton(const bool flag); + bool getCloseButton() const A_WARN_UNUSED + { return mCloseWindowButton; } + /** * Returns whether the window can be resized. */ diff --git a/src/gui/widgets/windowcontainer.cpp b/src/gui/widgets/windowcontainer.cpp index a9b556410..20c3328a7 100644 --- a/src/gui/widgets/windowcontainer.cpp +++ b/src/gui/widgets/windowcontainer.cpp @@ -64,18 +64,34 @@ void WindowContainer::moveWidgetAfter(Widget *const after, const WidgetListIterator widgetIter = std::find( mWidgets.begin(), mWidgets.end(), widget); - if (widgetIter == mWidgets.end()) - return; + if (widgetIter != mWidgets.end()) + { + WidgetListIterator afterIter = std::find( + mWidgets.begin(), mWidgets.end(), after); - WidgetListIterator afterIter = std::find( - mWidgets.begin(), mWidgets.end(), after); + if (afterIter != mWidgets.end()) + { + ++ afterIter; + mWidgets.erase(widgetIter); + mWidgets.insert(afterIter, widget); + } + } - if (afterIter == mWidgets.end()) - return; + const WidgetListIterator widgetIter2 = std::find( + mLogicWidgets.begin(), mLogicWidgets.end(), widget); - ++ afterIter; - mWidgets.erase(widgetIter); - mWidgets.insert(afterIter, widget); + if (widgetIter2 != mLogicWidgets.end()) + { + WidgetListIterator afterIter = std::find( + mLogicWidgets.begin(), mLogicWidgets.end(), after); + + if (afterIter != mLogicWidgets.end()) + { + ++ afterIter; + mLogicWidgets.erase(widgetIter2); + mLogicWidgets.insert(afterIter, widget); + } + } } #ifdef USE_PROFILER diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index 795f2ad5a..910bba705 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -34,6 +34,7 @@ #include "gui/widgets/button.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -46,8 +47,7 @@ WindowMenu::WindowMenu(const Widget2 *const widget) : ActionListener(), SelectionListener(), MouseListener(), - mSkin(Theme::instance() ? Theme::instance()->load("windowmenu.xml", "") - : nullptr), + mSkin(theme ? theme->load("windowmenu.xml", "") : nullptr), mPadding(mSkin ? mSkin->getPadding() : 1), mSpacing(mSkin ? mSkin->getOption("spacing", 3) : 3), mTextPopup(new TextPopup), @@ -172,8 +172,7 @@ WindowMenu::~WindowMenu() config.removeListener("autohideButtons", this); CHECKLISTENERS - delete mTextPopup; - mTextPopup = nullptr; + delete2(mTextPopup); for (std::map <std::string, ButtonInfo*>::iterator it = mButtonNames.begin(), it_end = mButtonNames.end(); it != it_end; ++it) @@ -181,22 +180,18 @@ WindowMenu::~WindowMenu() delete (*it).second; } mButtonNames.clear(); - for (std::vector <Button*>::iterator it = mButtons.begin(), - it_end = mButtons.end(); it != it_end; ++it) + FOR_EACH (std::vector <Button*>::iterator, it, mButtons) { Button *const btn = dynamic_cast<Button*>(*it); if (!btn) continue; if (!btn->isVisible()) - { delete btn; - } } delete_all(mButtonTexts); mButtonTexts.clear(); if (mSkin) { - Theme *const theme = Theme::instance(); if (theme) theme->unload(mSkin); mSkin = nullptr; @@ -206,7 +201,6 @@ WindowMenu::~WindowMenu() void WindowMenu::action(const ActionEvent &event) { const std::string &eventId = event.getId(); - const std::map <std::string, ButtonInfo*>::iterator it = mButtonNames.find(eventId); if (it == mButtonNames.end()) @@ -221,7 +215,9 @@ void WindowMenu::action(const ActionEvent &event) void WindowMenu::addButton(const char *const text, const std::string &description, - int &restrict x, int &restrict h, const int key, + int &restrict x, + int &restrict h, + const int key, const bool visible) { Button *const btn = new Button(this, gettext(text), text, this); @@ -243,8 +239,12 @@ void WindowMenu::mousePressed(MouseEvent &event) if (!viewport) return; - if (!mSmallWindow && event.getButton() == MouseEvent::RIGHT) + if (event.getButton() == MouseEvent::RIGHT) { + if (mSmallWindow) + return; + + event.consume(); Button *const btn = dynamic_cast<Button*>(event.getSource()); if (!btn) return; @@ -295,7 +295,7 @@ void WindowMenu::mouseMoved(MouseEvent &event) } } -void WindowMenu::mouseExited(MouseEvent& mouseEvent A_UNUSED) +void WindowMenu::mouseExited(MouseEvent& event A_UNUSED) { mHaveMouse = false; if (!mTextPopup) @@ -393,9 +393,7 @@ void WindowMenu::loadButtons() void WindowMenu::saveButtons() const { int i = 0; - for (std::vector <Button*>::const_iterator it = mButtons.begin(), - it_end = mButtons.end(); - it != it_end; ++it) + FOR_EACH (std::vector <Button*>::const_iterator, it, mButtons) { const Button *const btn = dynamic_cast<const Button *const>(*it); if (btn && !btn->isVisible()) diff --git a/src/gui/windowmenu.h b/src/gui/windowmenu.h index a1ed66a7d..9eb520bff 100644 --- a/src/gui/windowmenu.h +++ b/src/gui/windowmenu.h @@ -94,7 +94,7 @@ class WindowMenu final : public Container, void mouseMoved(MouseEvent &event) override final; - void mouseExited(MouseEvent& mouseEvent A_UNUSED) override final; + void mouseExited(MouseEvent& event A_UNUSED) override final; std::map <std::string, ButtonInfo*> &getButtonNames() A_WARN_UNUSED { return mButtonNames; } diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp index 86e819121..8bece77ef 100644 --- a/src/gui/windows/buydialog.cpp +++ b/src/gui/windows/buydialog.cpp @@ -47,6 +47,7 @@ #include "resources/iteminfo.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <algorithm> @@ -302,9 +303,7 @@ void BuyDialog::init() BuyDialog::~BuyDialog() { - delete mShopItems; - mShopItems = nullptr; - + delete2(mShopItems); instances.remove(this); } diff --git a/src/gui/windows/changeemaildialog.cpp b/src/gui/windows/changeemaildialog.cpp index b8f9c1fd2..ce9ec84e8 100644 --- a/src/gui/windows/changeemaildialog.cpp +++ b/src/gui/windows/changeemaildialog.cpp @@ -35,6 +35,7 @@ #include "net/loginhandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <string> @@ -105,8 +106,7 @@ ChangeEmailDialog::ChangeEmailDialog(LoginData *const data): ChangeEmailDialog::~ChangeEmailDialog() { - delete mWrongDataNoticeListener; - mWrongDataNoticeListener = nullptr; + delete2(mWrongDataNoticeListener); } void ChangeEmailDialog::action(const ActionEvent &event) diff --git a/src/gui/windows/changepassworddialog.cpp b/src/gui/windows/changepassworddialog.cpp index 05c7a9309..051fa6434 100644 --- a/src/gui/windows/changepassworddialog.cpp +++ b/src/gui/windows/changepassworddialog.cpp @@ -36,6 +36,7 @@ #include "net/loginhandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <string> @@ -84,8 +85,7 @@ ChangePasswordDialog::ChangePasswordDialog(LoginData *const data): ChangePasswordDialog::~ChangePasswordDialog() { - delete mWrongDataNoticeListener; - mWrongDataNoticeListener = nullptr; + delete2(mWrongDataNoticeListener); } void ChangePasswordDialog::action(const ActionEvent &event) diff --git a/src/gui/windows/charcreatedialog.cpp b/src/gui/windows/charcreatedialog.cpp index 1df282189..42bbb4b88 100644 --- a/src/gui/windows/charcreatedialog.cpp +++ b/src/gui/windows/charcreatedialog.cpp @@ -313,8 +313,7 @@ CharCreateDialog::CharCreateDialog(CharSelectDialog *const parent, CharCreateDialog::~CharCreateDialog() { - delete mPlayer; - mPlayer = nullptr; + delete2(mPlayer); if (Net::getCharServerHandler()) Net::getCharServerHandler()->setCharCreateDialog(nullptr); @@ -491,14 +490,11 @@ void CharCreateDialog::setAttributes(const StringVect &labels, for (unsigned i = 0; i < mAttributeLabel.size(); i++) { remove(mAttributeLabel[i]); - delete mAttributeLabel[i]; - mAttributeLabel[i] = nullptr; + delete2(mAttributeLabel[i]) remove(mAttributeSlider[i]); - delete mAttributeSlider[i]; - mAttributeSlider[i] = nullptr; + delete2(mAttributeSlider[i]) remove(mAttributeValue[i]); - delete mAttributeValue[i]; - mAttributeValue[i] = nullptr; + delete2(mAttributeValue[i]) } mAttributeLabel.resize(labels.size()); @@ -655,13 +651,13 @@ void CharCreateDialog::updatePlayer() } } -void CharCreateDialog::keyPressed(KeyEvent &keyEvent) +void CharCreateDialog::keyPressed(KeyEvent &event) { - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); switch (actionId) { case Input::KEY_GUI_CANCEL: - keyEvent.consume(); + event.consume(); action(ActionEvent(mCancelButton, mCancelButton->getActionEventId())); break; diff --git a/src/gui/windows/charcreatedialog.h b/src/gui/windows/charcreatedialog.h index 6342450ec..652254776 100644 --- a/src/gui/windows/charcreatedialog.h +++ b/src/gui/windows/charcreatedialog.h @@ -78,7 +78,7 @@ class CharCreateDialog final : public Window, void updatePlayer(); - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; private: int getDistributedPoints() const A_WARN_UNUSED; diff --git a/src/gui/windows/charselectdialog.cpp b/src/gui/windows/charselectdialog.cpp index 4480f06af..887937232 100644 --- a/src/gui/windows/charselectdialog.cpp +++ b/src/gui/windows/charselectdialog.cpp @@ -317,20 +317,20 @@ void CharSelectDialog::use(const int selected) } } -void CharSelectDialog::keyPressed(KeyEvent &keyEvent) +void CharSelectDialog::keyPressed(KeyEvent &event) { - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); switch (actionId) { case Input::KEY_GUI_CANCEL: - keyEvent.consume(); + event.consume(); action(ActionEvent(mSwitchLoginButton, mSwitchLoginButton->getActionEventId())); break; case Input::KEY_GUI_RIGHT: { - keyEvent.consume(); + event.consume(); int idx = mCharacterView->getSelected(); if (idx >= 0) { @@ -345,7 +345,7 @@ void CharSelectDialog::keyPressed(KeyEvent &keyEvent) case Input::KEY_GUI_LEFT: { - keyEvent.consume(); + event.consume(); int idx = mCharacterView->getSelected(); if (idx >= 0) { @@ -360,7 +360,7 @@ void CharSelectDialog::keyPressed(KeyEvent &keyEvent) case Input::KEY_GUI_UP: { - keyEvent.consume(); + event.consume(); int idx = mCharacterView->getSelected(); if (idx >= 0) { @@ -375,7 +375,7 @@ void CharSelectDialog::keyPressed(KeyEvent &keyEvent) case Input::KEY_GUI_DOWN: { - keyEvent.consume(); + event.consume(); int idx = mCharacterView->getSelected(); if (idx >= 0) { @@ -390,7 +390,7 @@ void CharSelectDialog::keyPressed(KeyEvent &keyEvent) case Input::KEY_GUI_DELETE: { - keyEvent.consume(); + event.consume(); const int idx = mCharacterView->getSelected(); if (idx >= 0 && mCharacterEntries[idx] && mCharacterEntries[idx]->getCharacter()) @@ -402,7 +402,7 @@ void CharSelectDialog::keyPressed(KeyEvent &keyEvent) case Input::KEY_GUI_SELECT: { - keyEvent.consume(); + event.consume(); use(mCharacterView->getSelected()); break; } diff --git a/src/gui/windows/charselectdialog.h b/src/gui/windows/charselectdialog.h index 38c307f30..cf44f30b9 100644 --- a/src/gui/windows/charselectdialog.h +++ b/src/gui/windows/charselectdialog.h @@ -62,7 +62,7 @@ class CharSelectDialog final : public Window, void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; enum SelectAction { diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index 5698973f3..8d1d3e046 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -67,6 +67,7 @@ #include "net/net.h" #include "utils/copynpaste.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "resources/resourcemanager.h" @@ -266,12 +267,9 @@ ChatWindow::~ChatWindow() saveState(); config.setValue("ReturnToggles", mReturnToggles); removeAllWhispers(); - delete mItemLinkHandler; - mItemLinkHandler = nullptr; - delete mColorPicker; - mColorPicker = nullptr; - delete mColorListModel; - mColorListModel = nullptr; + delete2(mItemLinkHandler); + delete2(mColorPicker); + delete2(mColorListModel); } void ChatWindow::postInit() @@ -646,8 +644,7 @@ void ChatWindow::ignoreAllWhispers() PlayerRelation::IGNORED); } - delete (iter->second); - iter->second = nullptr; + delete2(iter->second) } } @@ -732,6 +729,7 @@ void ChatWindow::mousePressed(MouseEvent &event) Tab *const tab = mChatTabs->getSelectedTab(); if (tab) { + event.consume(); if (inputManager.isActionActive(static_cast<int>( Input::KEY_CHAT_MOD))) { @@ -1857,16 +1855,16 @@ void ChatWindow::mouseMoved(MouseEvent &event) Window::mouseMoved(event); } -void ChatWindow::mouseEntered(MouseEvent& mouseEvent) +void ChatWindow::mouseEntered(MouseEvent& event) { mHaveMouse = true; - Window::mouseEntered(mouseEvent); + Window::mouseEntered(event); } -void ChatWindow::mouseExited(MouseEvent& mouseEvent) +void ChatWindow::mouseExited(MouseEvent& event) { updateVisibility(); - Window::mouseExited(mouseEvent); + Window::mouseExited(event); } void ChatWindow::draw(Graphics* graphics) diff --git a/src/gui/windows/chatwindow.h b/src/gui/windows/chatwindow.h index bd5374c56..e755e43f2 100644 --- a/src/gui/windows/chatwindow.h +++ b/src/gui/windows/chatwindow.h @@ -274,11 +274,11 @@ class ChatWindow final : public Window, void optionChanged(const std::string &name) override final; - void mouseEntered(MouseEvent& mouseEvent) override final; + void mouseEntered(MouseEvent& event) override final; void mouseMoved(MouseEvent &event) override final; - void mouseExited(MouseEvent& mouseEvent A_UNUSED) override final; + void mouseExited(MouseEvent& event A_UNUSED) override final; void draw(Graphics* graphics) override final; diff --git a/src/gui/windows/debugwindow.cpp b/src/gui/windows/debugwindow.cpp index 50dc5dbe5..438103f0a 100644 --- a/src/gui/windows/debugwindow.cpp +++ b/src/gui/windows/debugwindow.cpp @@ -42,6 +42,7 @@ #include "net/packetcounters.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/stringutils.h" #include "utils/timer.h" @@ -88,12 +89,9 @@ DebugWindow::DebugWindow() : DebugWindow::~DebugWindow() { - delete mMapWidget; - mMapWidget = nullptr; - delete mTargetWidget; - mTargetWidget = nullptr; - delete mNetWidget; - mNetWidget = nullptr; + delete2(mMapWidget); + delete2(mTargetWidget); + delete2(mNetWidget); } void DebugWindow::postInit() diff --git a/src/gui/windows/editserverdialog.cpp b/src/gui/windows/editserverdialog.cpp index 316a7051b..6a25a2d77 100644 --- a/src/gui/windows/editserverdialog.cpp +++ b/src/gui/windows/editserverdialog.cpp @@ -242,12 +242,12 @@ void EditServerDialog::action(const ActionEvent &event) } } -void EditServerDialog::keyPressed(KeyEvent &keyEvent) +void EditServerDialog::keyPressed(KeyEvent &event) { - if (keyEvent.isConsumed()) + if (event.isConsumed()) return; - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == static_cast<int>(Input::KEY_GUI_CANCEL)) { diff --git a/src/gui/windows/editserverdialog.h b/src/gui/windows/editserverdialog.h index b70d1031b..98f5e07fd 100644 --- a/src/gui/windows/editserverdialog.h +++ b/src/gui/windows/editserverdialog.h @@ -59,7 +59,7 @@ class EditServerDialog final : public Window, */ void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; private: TextField *mServerAddressField; diff --git a/src/gui/windows/emotewindow.cpp b/src/gui/windows/emotewindow.cpp index 3a7141533..0f286b145 100644 --- a/src/gui/windows/emotewindow.cpp +++ b/src/gui/windows/emotewindow.cpp @@ -28,6 +28,7 @@ #include "gui/widgets/scrollarea.h" #include "gui/widgets/tabbedarea.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "resources/image.h" @@ -121,20 +122,13 @@ EmoteWindow::~EmoteWindow() { mTabs->removeAll(false); mTabs->removeTab(mTabs->getTabByIndex(0)); - delete mEmotePage; - mEmotePage = nullptr; - delete mColorPage; - mColorPage = nullptr; - delete mColorModel; - mColorModel = nullptr; - delete mScrollColorPage; - mScrollColorPage = nullptr; - delete mFontPage; - mFontPage = nullptr; - delete mFontModel; - mFontModel = nullptr; - delete mScrollFontPage; - mScrollFontPage = nullptr; + delete2(mEmotePage); + delete2(mColorPage); + delete2(mColorModel); + delete2(mScrollColorPage); + delete2(mFontPage); + delete2(mFontModel); + delete2(mScrollFontPage); if (mImageSet) { mImageSet->decRef(); diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp index c45595dff..4c026281b 100644 --- a/src/gui/windows/equipmentwindow.cpp +++ b/src/gui/windows/equipmentwindow.cpp @@ -44,6 +44,7 @@ #include "resources/imageset.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -122,7 +123,7 @@ void EquipmentWindow::postInit() mUnequip->setEnabled(false); ImageRect rect; - Theme::instance()->loadRect(rect, "equipment_background.xml", "", 0, 1); + theme->loadRect(rect, "equipment_background.xml", "", 0, 1); mSlotBackground = rect.grid[0]; mSlotHighlightedBackground = rect.grid[1]; add(mPlayerBox); @@ -132,14 +133,12 @@ void EquipmentWindow::postInit() EquipmentWindow::~EquipmentWindow() { - delete mItemPopup; - mItemPopup = nullptr; + delete2(mItemPopup); if (this == beingEquipmentWindow) { if (mEquipment) delete mEquipment->getBackend(); - delete mEquipment; - mEquipment = nullptr; + delete2(mEquipment) } delete_all(mBoxes); mBoxes.clear(); @@ -152,8 +151,7 @@ EquipmentWindow::~EquipmentWindow() mSlotBackground->decRef(); if (mSlotHighlightedBackground) mSlotHighlightedBackground->decRef(); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); } void EquipmentWindow::draw(Graphics *graphics) @@ -295,22 +293,22 @@ Item *EquipmentWindow::getItem(const int x, const int y) const return nullptr; } -void EquipmentWindow::mousePressed(MouseEvent& mouseEvent) +void EquipmentWindow::mousePressed(MouseEvent& event) { if (!mEquipment) { - Window::mousePressed(mouseEvent); + Window::mousePressed(event); return; } - const int x = mouseEvent.getX(); - const int y = mouseEvent.getY(); + const int x = event.getX(); + const int y = event.getY(); - if (mouseEvent.getButton() == MouseEvent::LEFT) + if (event.getButton() == MouseEvent::LEFT) { if (mForing) { - Window::mousePressed(mouseEvent); + Window::mousePressed(event); return; } // Checks if any of the presses were in the equip boxes. @@ -332,6 +330,7 @@ void EquipmentWindow::mousePressed(MouseEvent& mouseEvent) inBox = true; if (item) { + event.consume(); setSelected(i); dragDrop.dragItem(item, DRAGDROP_SOURCE_EQUIPMENT); return; @@ -341,7 +340,7 @@ void EquipmentWindow::mousePressed(MouseEvent& mouseEvent) return; } } - else if (mouseEvent.getButton() == MouseEvent::RIGHT) + else if (event.getButton() == MouseEvent::RIGHT) { if (Item *const item = getItem(x, y)) { @@ -355,6 +354,7 @@ void EquipmentWindow::mousePressed(MouseEvent& mouseEvent) const int my = y + getY(); if (viewport) { + event.consume(); if (mForing) viewport->showUndressPopup(mx, my, mBeing, item); else @@ -363,12 +363,12 @@ void EquipmentWindow::mousePressed(MouseEvent& mouseEvent) } } } - Window::mousePressed(mouseEvent); + Window::mousePressed(event); } -void EquipmentWindow::mouseReleased(MouseEvent &mouseEvent) +void EquipmentWindow::mouseReleased(MouseEvent &event) { - Window::mouseReleased(mouseEvent); + Window::mouseReleased(event); const DragDropSource src = dragDrop.getSource(); if (dragDrop.isEmpty() || (src != DRAGDROP_SOURCE_INVENTORY && src != DRAGDROP_SOURCE_EQUIPMENT)) @@ -397,8 +397,8 @@ void EquipmentWindow::mouseReleased(MouseEvent &mouseEvent) { if (item->isEquipment()) { - const int x = mouseEvent.getX(); - const int y = mouseEvent.getY(); + const int x = event.getX(); + const int y = event.getY(); for (std::vector<EquipmentBox*>::const_iterator it = mBoxes.begin(), it_end = mBoxes.end(); it != it_end; ++ it) diff --git a/src/gui/windows/equipmentwindow.h b/src/gui/windows/equipmentwindow.h index 245328b8e..45d4246e3 100644 --- a/src/gui/windows/equipmentwindow.h +++ b/src/gui/windows/equipmentwindow.h @@ -86,7 +86,7 @@ class EquipmentWindow final : public Window, void action(const ActionEvent &event) override final; - void mousePressed(MouseEvent& mouseEvent) override final; + void mousePressed(MouseEvent& event) override final; const Item* getEquipment(const int i) const A_WARN_UNUSED { return mEquipment ? mEquipment->getEquipment(i) : nullptr; } diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp index 92b21dfd1..c2a4b4636 100644 --- a/src/gui/windows/inventorywindow.cpp +++ b/src/gui/windows/inventorywindow.cpp @@ -59,6 +59,8 @@ #include "net/inventoryhandler.h" #include "net/net.h" +#include "utils/delete2.h" + #include <string> #include "debug.h" @@ -98,8 +100,8 @@ InventoryWindow::InventoryWindow(Inventory *const inventory): mCompactMode(false) { mTextPopup->postInit(); - mSlotsBar->setColor(Theme::getThemeColor(Theme::SLOTS_BAR), - Theme::getThemeColor(Theme::SLOTS_BAR_OUTLINE)); + mSlotsBar->setColor(getThemeColor(Theme::SLOTS_BAR), + getThemeColor(Theme::SLOTS_BAR_OUTLINE)); if (inventory) { @@ -194,8 +196,8 @@ InventoryWindow::InventoryWindow(Inventory *const inventory): mEquipmentButton = new Button(this, _("Equipment"), "equipment", this); mWeightBar = new ProgressBar(this, 0.0F, 100, 0, Theme::PROG_WEIGHT, "weightprogressbar.xml", "weightprogressbar_fill.xml"); - mWeightBar->setColor(Theme::getThemeColor(Theme::WEIGHT_BAR), - Theme::getThemeColor(Theme::WEIGHT_BAR_OUTLINE)); + mWeightBar->setColor(getThemeColor(Theme::WEIGHT_BAR), + getThemeColor(Theme::WEIGHT_BAR_OUTLINE)); place(0, 0, mWeightBar, 4); mSlotsBarCell = &place(4, 0, mSlotsBar, 5); @@ -274,8 +276,7 @@ InventoryWindow::~InventoryWindow() invInstances.front()->updateDropButton(); mSortDropDown->hideDrop(false); - delete mSortModel; - mSortModel = nullptr; + delete2(mSortModel); mTextPopup = nullptr; } diff --git a/src/gui/windows/itemamountwindow.cpp b/src/gui/windows/itemamountwindow.cpp index ec581a96e..472057060 100644 --- a/src/gui/windows/itemamountwindow.cpp +++ b/src/gui/windows/itemamountwindow.cpp @@ -48,6 +48,7 @@ #include "gui/widgets/label.h" #include "gui/widgets/slider.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -261,8 +262,7 @@ void ItemAmountWindow::postInit() ItemAmountWindow::~ItemAmountWindow() { - delete mItemPopup; - mItemPopup = nullptr; + delete2(mItemPopup); } // Show ItemTooltip @@ -388,7 +388,7 @@ void ItemAmountWindow::close() scheduleDelete(); } -void ItemAmountWindow::keyReleased(KeyEvent &keyEvent A_UNUSED) +void ItemAmountWindow::keyReleased(KeyEvent &event A_UNUSED) { mItemAmountSlide->setValue(mItemAmountTextField->getValue()); } diff --git a/src/gui/windows/itemamountwindow.h b/src/gui/windows/itemamountwindow.h index 2a414bb24..d2dca064e 100644 --- a/src/gui/windows/itemamountwindow.h +++ b/src/gui/windows/itemamountwindow.h @@ -82,7 +82,7 @@ class ItemAmountWindow final : public Window, */ void close(); - void keyReleased(KeyEvent &keyEvent) override final; + void keyReleased(KeyEvent &event) override final; /** * Creates the dialog, or bypass it if there aren't enough items. diff --git a/src/gui/windows/logindialog.cpp b/src/gui/windows/logindialog.cpp index 71abf153a..b2242d3f6 100644 --- a/src/gui/windows/logindialog.cpp +++ b/src/gui/windows/logindialog.cpp @@ -208,10 +208,8 @@ void LoginDialog::postInit() LoginDialog::~LoginDialog() { - delete mUpdateTypeModel; - mUpdateTypeModel = nullptr; - delete mUpdateListModel; - mUpdateListModel = nullptr; + delete2(mUpdateTypeModel); + delete2(mUpdateListModel); } void LoginDialog::action(const ActionEvent &event) @@ -256,15 +254,15 @@ void LoginDialog::action(const ActionEvent &event) } } -void LoginDialog::keyPressed(KeyEvent &keyEvent) +void LoginDialog::keyPressed(KeyEvent &event) { - if (keyEvent.isConsumed()) + if (event.isConsumed()) { mLoginButton->setEnabled(canSubmit()); return; } - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == static_cast<int>(Input::KEY_GUI_CANCEL)) { action(ActionEvent(nullptr, mServerButton->getActionEventId())); diff --git a/src/gui/windows/logindialog.h b/src/gui/windows/logindialog.h index 7150b62c1..1813e1817 100644 --- a/src/gui/windows/logindialog.h +++ b/src/gui/windows/logindialog.h @@ -71,7 +71,7 @@ class LoginDialog final : public Window, /** * Called when a key is pressed in one of the text fields. */ - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; void close() override final; diff --git a/src/gui/windows/minimap.cpp b/src/gui/windows/minimap.cpp index 583a37746..9be6d7304 100644 --- a/src/gui/windows/minimap.cpp +++ b/src/gui/windows/minimap.cpp @@ -39,6 +39,7 @@ #include "resources/imagehelper.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/sdlcheckutils.h" @@ -97,8 +98,7 @@ Minimap::~Minimap() mMapImage->decRef(); mMapImage = nullptr; } - delete mTextPopup; - mTextPopup = nullptr; + delete2(mTextPopup); } void Minimap::setMap(const Map *const map) diff --git a/src/gui/windows/ministatuswindow.cpp b/src/gui/windows/ministatuswindow.cpp index 226132652..885ea619b 100644 --- a/src/gui/windows/ministatuswindow.cpp +++ b/src/gui/windows/ministatuswindow.cpp @@ -42,6 +42,7 @@ #include "net/playerhandler.h" #include "net/gamehandler.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -52,7 +53,7 @@ extern volatile int tick_time; typedef std::vector <ProgressBar*>::const_iterator ProgressBarVectorCIter; MiniStatusWindow::MiniStatusWindow() : - Popup("MiniStatus", "ministatus.xml"), + Window("MiniStatus", false, nullptr, "ministatus.xml"), InventoryListener(), mBars(), mBarNames(), @@ -114,8 +115,8 @@ MiniStatusWindow::MiniStatusWindow() : StatusWindow::updateHPBar(mHpBar); - if (Net::getGameHandler()->canUseMagicBar()) - StatusWindow::updateMPBar(mMpBar); + if (Net::getGameHandler()->canUseMagicBar() && statusWindow) + statusWindow->updateMPBar(mMpBar); const int job = Net::getPlayerHandler()->getJobLocation() && serverConfig.getValueBool("showJob", true); @@ -134,7 +135,7 @@ MiniStatusWindow::MiniStatusWindow() : loadBars(); updateBars(); - setVisible(config.getValueBool(getPopupName() + "Visible", true)); + setVisible(true); addMouseListener(this); Inventory *const inv = PlayerInfo::getInventory(); if (inv) @@ -147,10 +148,8 @@ MiniStatusWindow::MiniStatusWindow() : MiniStatusWindow::~MiniStatusWindow() { - delete mTextPopup; - mTextPopup = nullptr; - delete mStatusPopup; - mStatusPopup = nullptr; + delete2(mTextPopup); + delete2(mStatusPopup); delete_all(mIcons); mIcons.clear(); @@ -183,8 +182,7 @@ ProgressBar *MiniStatusWindow::createBar(const float progress, progress, width, height, backColor, skin, skinFill); bar->setActionEventId(name); bar->setId(description); - bar->setColor(Theme::getThemeColor(textColor), - Theme::getThemeColor(textColor + 1)); + bar->setColor(getThemeColor(textColor), getThemeColor(textColor + 1)); mBars.push_back(bar); mBarNames[name] = bar; return bar; @@ -195,7 +193,7 @@ void MiniStatusWindow::updateBars() int x = 0; const ProgressBar *lastBar = nullptr; FOR_EACH (ProgressBarVectorCIter, it, mBars) - safeRemove(*it); + remove(*it); FOR_EACH (ProgressBarVectorCIter, it, mBars) { @@ -264,7 +262,7 @@ void MiniStatusWindow::processEvent(const Channels channel A_UNUSED, } else if (id == PlayerInfo::MP || id == PlayerInfo::MAX_MP) { - StatusWindow::updateMPBar(mMpBar); + statusWindow->updateMPBar(mMpBar); } else if (id == PlayerInfo::EXP || id == PlayerInfo::EXP_NEEDED) { @@ -282,14 +280,14 @@ void MiniStatusWindow::processEvent(const Channels channel A_UNUSED, } else if (event.getName() == EVENT_UPDATESTAT) { - StatusWindow::updateMPBar(mMpBar); + statusWindow->updateMPBar(mMpBar); StatusWindow::updateJobBar(mJobBar); } } void MiniStatusWindow::updateStatus() { - StatusWindow::updateStatusBar(mStatusBar); + statusWindow->updateStatusBar(mStatusBar); if (mStatusPopup && mStatusPopup->isPopupVisible()) mStatusPopup->update(); } @@ -297,7 +295,7 @@ void MiniStatusWindow::updateStatus() void MiniStatusWindow::logic() { BLOCK_START("MiniStatusWindow::logic") - Popup::logic(); + Window::logic(); for (size_t i = 0, sz = mIcons.size(); i < sz; i++) { @@ -317,7 +315,7 @@ void MiniStatusWindow::draw(Graphics *graphics) void MiniStatusWindow::mouseMoved(MouseEvent &event) { - Popup::mouseMoved(event); + Window::mouseMoved(event); const int x = event.getX(); const int y = event.getY(); @@ -444,6 +442,7 @@ void MiniStatusWindow::mousePressed(MouseEvent &event) event.getSource()); if (!bar) return; + event.consume(); if (viewport) { viewport->showPopup(getX() + event.getX(), @@ -454,7 +453,7 @@ void MiniStatusWindow::mousePressed(MouseEvent &event) void MiniStatusWindow::mouseExited(MouseEvent &event) { - Popup::mouseExited(event); + Window::mouseExited(event); mTextPopup->hide(); mStatusPopup->hide(); diff --git a/src/gui/windows/ministatuswindow.h b/src/gui/windows/ministatuswindow.h index ee20ef69b..6939f8f54 100644 --- a/src/gui/windows/ministatuswindow.h +++ b/src/gui/windows/ministatuswindow.h @@ -27,7 +27,7 @@ #include "listeners/depricatedlistener.h" -#include "gui/widgets/popup.h" +#include "gui/widgets/window.h" #include <vector> @@ -42,7 +42,7 @@ class TextPopup; * * \ingroup Interface */ -class MiniStatusWindow final : public Popup, +class MiniStatusWindow final : public Window, public InventoryListener, public DepricatedListener { @@ -71,7 +71,7 @@ class MiniStatusWindow final : public Popup, void draw(Graphics *graphics) override final; - void mouseMoved(MouseEvent &mouseEvent) override final; + void mouseMoved(MouseEvent &event) override final; void mousePressed(MouseEvent &event) override final; diff --git a/src/gui/windows/npcdialog.cpp b/src/gui/windows/npcdialog.cpp index 17454b6ab..56306a90f 100644 --- a/src/gui/windows/npcdialog.cpp +++ b/src/gui/windows/npcdialog.cpp @@ -57,6 +57,7 @@ #include "net/npchandler.h" #include "utils/copynpaste.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -216,44 +217,23 @@ NpcDialog::~NpcDialog() delete mPlayerBox; } - delete mTextBox; - mTextBox = nullptr; - delete mClearButton; - mClearButton = nullptr; - delete mButton; - mButton = nullptr; - delete mButton2; - mButton2 = nullptr; - delete mButton3; - mButton3 = nullptr; - - // These might not actually be in the layout, so lets be safe - delete mScrollArea; - mScrollArea = nullptr; - delete mItemList; - mItemList = nullptr; - delete mTextField; - mTextField = nullptr; - delete mIntField; - mIntField = nullptr; - delete mResetButton; - mResetButton = nullptr; - delete mPlusButton; - mPlusButton = nullptr; - delete mMinusButton; - mMinusButton = nullptr; - delete mItemLinkHandler; - mItemLinkHandler = nullptr; - - delete mItemContainer; - mItemContainer = nullptr; - delete mInventory; - mInventory = nullptr; - delete mItemScrollArea; - mItemScrollArea = nullptr; - - delete mListScrollArea; - mListScrollArea = nullptr; + delete2(mTextBox); + delete2(mClearButton); + delete2(mButton); + delete2(mButton2); + delete2(mButton3); + delete2(mScrollArea); + delete2(mItemList); + delete2(mTextField); + delete2(mIntField); + delete2(mResetButton); + delete2(mPlusButton); + delete2(mMinusButton); + delete2(mItemLinkHandler); + delete2(mItemContainer); + delete2(mInventory); + delete2(mItemScrollArea); + delete2(mListScrollArea); FOR_EACH (ImageVectorIter, it, mImages) { @@ -896,8 +876,7 @@ void NpcDialog::showAvatar(const uint16_t avatarId) } else { - delete mAvatarBeing; - mAvatarBeing = nullptr; + delete2(mAvatarBeing) mPlayerBox->setPlayer(nullptr); } if (needShow != mShowAvatar) @@ -969,6 +948,7 @@ void NpcDialog::mousePressed(MouseEvent &event) if (event.getButton() == MouseEvent::RIGHT && event.getSource() == mTextBox) { + event.consume(); if (viewport) viewport->showNpcDialogPopup(mNpcId); } diff --git a/src/gui/windows/questswindow.cpp b/src/gui/windows/questswindow.cpp index 8d4eae9c8..b57ed9bd7 100644 --- a/src/gui/windows/questswindow.cpp +++ b/src/gui/windows/questswindow.cpp @@ -38,6 +38,7 @@ #include "gui/widgets/itemlinkhandler.h" #include "gui/widgets/scrollarea.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -178,8 +179,7 @@ QuestsWindow::QuestsWindow() : QuestsWindow::~QuestsWindow() { - delete mQuestsModel; - mQuestsModel = nullptr; + delete2(mQuestsModel); for (std::map<int, std::vector<QuestItem*> >::iterator it = mQuests.begin(), it_end = mQuests.end(); it != it_end; ++ it) @@ -194,8 +194,7 @@ QuestsWindow::~QuestsWindow() delete_all(mAllEffects); mAllEffects.clear(); - delete mItemLinkHandler; - mItemLinkHandler = nullptr; + delete2(mItemLinkHandler); mQuests.clear(); mQuestLinks.clear(); if (mCompleteIcon) diff --git a/src/gui/windows/quitdialog.cpp b/src/gui/windows/quitdialog.cpp index 98aa70c70..a1add2711 100644 --- a/src/gui/windows/quitdialog.cpp +++ b/src/gui/windows/quitdialog.cpp @@ -131,14 +131,10 @@ QuitDialog::~QuitDialog() { if (mMyPointer) *mMyPointer = nullptr; - delete mForceQuit; - mForceQuit = nullptr; - delete mLogoutQuit; - mLogoutQuit = nullptr; - delete mSwitchAccountServer; - mSwitchAccountServer = nullptr; - delete mSwitchCharacter; - mSwitchCharacter = nullptr; + delete2(mForceQuit); + delete2(mLogoutQuit); + delete2(mSwitchAccountServer); + delete2(mSwitchCharacter); } void QuitDialog::placeOption(ContainerPlacer &placer, @@ -203,9 +199,9 @@ void QuitDialog::action(const ActionEvent &event) scheduleDelete(); } -void QuitDialog::keyPressed(KeyEvent &keyEvent) +void QuitDialog::keyPressed(KeyEvent &event) { - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); int dir = 0; switch (actionId) diff --git a/src/gui/windows/quitdialog.h b/src/gui/windows/quitdialog.h index 8ce60d06c..ffcea4122 100644 --- a/src/gui/windows/quitdialog.h +++ b/src/gui/windows/quitdialog.h @@ -64,7 +64,7 @@ class QuitDialog final : public Window, */ void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; private: void placeOption(ContainerPlacer &placer, diff --git a/src/gui/windows/registerdialog.cpp b/src/gui/windows/registerdialog.cpp index 50344f223..55a328fa8 100644 --- a/src/gui/windows/registerdialog.cpp +++ b/src/gui/windows/registerdialog.cpp @@ -40,6 +40,7 @@ #include "net/loginhandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -169,8 +170,7 @@ void RegisterDialog::postInit() RegisterDialog::~RegisterDialog() { - delete mWrongDataNoticeListener; - mWrongDataNoticeListener = nullptr; + delete2(mWrongDataNoticeListener); } void RegisterDialog::action(const ActionEvent &event) @@ -282,14 +282,14 @@ void RegisterDialog::action(const ActionEvent &event) } } -void RegisterDialog::keyPressed(KeyEvent &keyEvent) +void RegisterDialog::keyPressed(KeyEvent &event) { - if (keyEvent.isConsumed()) + if (event.isConsumed()) { mRegisterButton->setEnabled(canSubmit()); return; } - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == static_cast<int>(Input::KEY_GUI_CANCEL)) { action(ActionEvent(nullptr, mCancelButton->getActionEventId())); diff --git a/src/gui/windows/registerdialog.h b/src/gui/windows/registerdialog.h index 1d5b5e48b..90087b5e2 100644 --- a/src/gui/windows/registerdialog.h +++ b/src/gui/windows/registerdialog.h @@ -87,7 +87,7 @@ class RegisterDialog final : public Window, /** * Called when a key is pressed in one of the text fields. */ - void keyPressed(KeyEvent &keyEvent) override; + void keyPressed(KeyEvent &event) override; void close() override; diff --git a/src/gui/windows/selldialog.cpp b/src/gui/windows/selldialog.cpp index ebee65d1e..604caa72e 100644 --- a/src/gui/windows/selldialog.cpp +++ b/src/gui/windows/selldialog.cpp @@ -45,6 +45,7 @@ #include "resources/iteminfo.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -162,8 +163,7 @@ void SellDialog::init() SellDialog::~SellDialog() { - delete mShopItems; - mShopItems = nullptr; + delete2(mShopItems); instances.remove(this); } diff --git a/src/gui/windows/serverdialog.cpp b/src/gui/windows/serverdialog.cpp index 112d1588d..9e85f5c89 100644 --- a/src/gui/windows/serverdialog.cpp +++ b/src/gui/windows/serverdialog.cpp @@ -46,6 +46,7 @@ #include "gui/widgets/listbox.h" #include "gui/widgets/scrollarea.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/langs.h" @@ -295,11 +296,9 @@ ServerDialog::~ServerDialog() if (mDownload) { mDownload->cancel(); - delete mDownload; - mDownload = nullptr; + delete2(mDownload) } - delete mServersListModel; - mServersListModel = nullptr; + delete2(mServersListModel); } void ServerDialog::connectToSelectedServer() @@ -389,18 +388,18 @@ void ServerDialog::action(const ActionEvent &event) } } -void ServerDialog::keyPressed(KeyEvent &keyEvent) +void ServerDialog::keyPressed(KeyEvent &event) { - switch (keyEvent.getActionId()) + switch (event.getActionId()) { case Input::KEY_GUI_CANCEL: - keyEvent.consume(); + event.consume(); client->setState(STATE_EXIT); return; case Input::KEY_GUI_SELECT: case Input::KEY_GUI_SELECT2: - keyEvent.consume(); + event.consume(); action(ActionEvent(nullptr, mConnectButton->getActionEventId())); return; @@ -435,8 +434,8 @@ void ServerDialog::keyPressed(KeyEvent &keyEvent) default: break; } - if (!keyEvent.isConsumed()) - mServersList->keyPressed(keyEvent); + if (!event.isConsumed()) + mServersList->keyPressed(event); } void ServerDialog::valueChanged(const SelectionEvent &) @@ -450,13 +449,17 @@ void ServerDialog::valueChanged(const SelectionEvent &) mDeleteButton->setEnabled(true); } -void ServerDialog::mouseClicked(MouseEvent &mouseEvent) +void ServerDialog::mouseClicked(MouseEvent &event) { - if (mouseEvent.getClickCount() == 2 && - mouseEvent.getSource() == mServersList) + if (event.getButton() == MouseEvent::LEFT) { - action(ActionEvent(mConnectButton, - mConnectButton->getActionEventId())); + event.consume(); + if (event.getClickCount() == 2 && + event.getSource() == mServersList) + { + action(ActionEvent(mConnectButton, + mConnectButton->getActionEventId())); + } } } @@ -513,8 +516,7 @@ void ServerDialog::downloadServerList() if (mDownload) { mDownload->cancel(); - delete mDownload; - mDownload = nullptr; + delete2(mDownload) } mDownload = new Net::Download(this, listFile, diff --git a/src/gui/windows/serverdialog.h b/src/gui/windows/serverdialog.h index 7c3a05ab3..88b6a7caf 100644 --- a/src/gui/windows/serverdialog.h +++ b/src/gui/windows/serverdialog.h @@ -74,14 +74,14 @@ class ServerDialog final : public Window, */ void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; /** * Called when the selected value changed in the servers list box. */ void valueChanged(const SelectionEvent &event) override final; - void mouseClicked(MouseEvent &mouseEvent) override final; + void mouseClicked(MouseEvent &event) override final; void logic() override final; diff --git a/src/gui/windows/setupwindow.cpp b/src/gui/windows/setupwindow.cpp index 1760d00bd..7239061ff 100644 --- a/src/gui/windows/setupwindow.cpp +++ b/src/gui/windows/setupwindow.cpp @@ -48,6 +48,7 @@ #include "gui/widgets/label.h" #include "gui/widgets/tabbedarea.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -223,8 +224,7 @@ void SetupWindow::unloadModTab() mTabs.remove(mModsTab); Tab *const tab = mPanel->getTab(mModsTab->getName()); mPanel->removeTab(tab); - delete mModsTab; - mModsTab = nullptr; + delete2(mModsTab) } } diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp index 923511baa..b44dcc19e 100644 --- a/src/gui/windows/shopwindow.cpp +++ b/src/gui/windows/shopwindow.cpp @@ -58,6 +58,7 @@ #include "resources/iteminfo.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <sstream> @@ -197,11 +198,8 @@ ShopWindow::~ShopWindow() { saveList(); - delete mBuyShopItems; - mBuyShopItems = nullptr; - - delete mSellShopItems; - mSellShopItems = nullptr; + delete2(mBuyShopItems); + delete2(mSellShopItems); instances.remove(this); } diff --git a/src/gui/windows/shortcutwindow.cpp b/src/gui/windows/shortcutwindow.cpp index 6ec442cd5..8387d7e91 100644 --- a/src/gui/windows/shortcutwindow.cpp +++ b/src/gui/windows/shortcutwindow.cpp @@ -30,6 +30,8 @@ #include "gui/widgets/shortcutcontainer.h" #include "gui/widgets/tabs/tab.h" +#include "utils/delete2.h" + #include "debug.h" static const int SCROLL_PADDING = 0; @@ -152,10 +154,8 @@ ShortcutWindow::~ShortcutWindow() { if (mTabs) mTabs->removeAll(); - delete mTabs; - mTabs = nullptr; - delete mItems; - mItems = nullptr; + delete2(mTabs); + delete2(mItems); } void ShortcutWindow::addTab(const std::string &name, diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp index 21cc009bc..f077341bf 100644 --- a/src/gui/windows/skilldialog.cpp +++ b/src/gui/windows/skilldialog.cpp @@ -50,6 +50,7 @@ #include "net/playerhandler.h" #include "net/skillhandler.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -83,10 +84,8 @@ class SkillListBox final : public ListBox ~SkillListBox() { - delete mModel; - mModel = nullptr; - delete mPopup; - mPopup = nullptr; + delete2(mModel) + delete2(mPopup) } SkillInfo *getSelectedInfo() const @@ -215,6 +214,7 @@ class SkillListBox final : public ListBox const SkillInfo *const skill = getSkillByEvent(event); if (!skill) return; + event.consume(); mSkillClicked = true; } } @@ -255,8 +255,7 @@ class SkillTab final : public Tab ~SkillTab() { - delete mListBox; - mListBox = nullptr; + delete2(mListBox) } SkillInfo *getSelectedInfo() const diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp index 8e6becca1..3f6fe663d 100644 --- a/src/gui/windows/socialwindow.cpp +++ b/src/gui/windows/socialwindow.cpp @@ -57,6 +57,7 @@ #include "net/guildhandler.h" #include "net/partyhandler.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -206,10 +207,8 @@ public: ~SocialGuildTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; + delete2(mList) + delete2(mScroll) } void action(const ActionEvent &event) override final @@ -342,10 +341,8 @@ public: ~SocialGuildTab2() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; + delete2(mList) + delete2(mScroll) } void action(const ActionEvent &event A_UNUSED) override final @@ -411,10 +408,8 @@ public: ~SocialPartyTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; + delete2(mList) + delete2(mScroll) } void action(const ActionEvent &event) override final @@ -530,12 +525,9 @@ public: ~SocialPlayersTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; - delete mBeings; - mBeings = nullptr; + delete2(mList) + delete2(mScroll) + delete2(mBeings) } void updateList() override final @@ -568,6 +560,7 @@ public: avatar->setLevel(being->getLevel()); avatar->setGender(being->getGender()); avatar->setIp(being->getIp()); + avatar->setPoison(being->getPoison()); } } @@ -696,12 +689,9 @@ public: ~SocialNavigationTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; - delete mBeings; - mBeings = nullptr; + delete2(mList) + delete2(mScroll) + delete2(mBeings) } void updateList() override final @@ -1025,12 +1015,9 @@ public: ~SocialAttackTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; - delete mBeings; - mBeings = nullptr; + delete2(mList) + delete2(mScroll) + delete2(mBeings) } void updateList() override final @@ -1072,12 +1059,9 @@ public: ~SocialPickupTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; - delete mBeings; - mBeings = nullptr; + delete2(mList) + delete2(mScroll) + delete2(mBeings) } void updateList() override final @@ -1119,12 +1103,9 @@ public: ~SocialFriendsTab() { - delete mList; - mList = nullptr; - delete mScroll; - mScroll = nullptr; - delete mBeings; - mBeings = nullptr; + delete2(mList) + delete2(mScroll) + delete2(mBeings) } void updateList() override final @@ -1370,18 +1351,12 @@ SocialWindow::~SocialWindow() mPartyInviter.clear(); } - delete mCreatePopup; - mCreatePopup = nullptr; - delete mPlayers; - mPlayers = nullptr; - delete mNavigation; - mNavigation = nullptr; - delete mAttackFilter; - mAttackFilter = nullptr; - delete mPickupFilter; - mPickupFilter = nullptr; - delete mFriends; - mFriends = nullptr; + delete2(mCreatePopup); + delete2(mPlayers); + delete2(mNavigation); + delete2(mAttackFilter); + delete2(mPickupFilter); + delete2(mFriends); } bool SocialWindow::addTab(Guild *const guild) diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp index 05172c9b3..98d3ea82e 100644 --- a/src/gui/windows/statuswindow.cpp +++ b/src/gui/windows/statuswindow.cpp @@ -49,6 +49,7 @@ #include "net/playerhandler.h" #include "net/gamehandler.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <SDL_timer.h> @@ -193,16 +194,16 @@ StatusWindow::StatusWindow() : mHpBar = new ProgressBar(this, static_cast<float>(PlayerInfo::getAttribute( PlayerInfo::HP)) / static_cast<float>(max), 80, 0, Theme::PROG_HP, "hpprogressbar.xml", "hpprogressbar_fill.xml"); - mHpBar->setColor(Theme::getThemeColor(Theme::HP_BAR), - Theme::getThemeColor(Theme::HP_BAR_OUTLINE)); + mHpBar->setColor(getThemeColor(Theme::HP_BAR), + getThemeColor(Theme::HP_BAR_OUTLINE)); max = PlayerInfo::getAttribute(PlayerInfo::EXP_NEEDED); mXpBar = new ProgressBar(this, max ? static_cast<float>(PlayerInfo::getAttribute(PlayerInfo::EXP)) / static_cast<float>(max) : static_cast<float>(0), 80, 0, Theme::PROG_EXP, "xpprogressbar.xml", "xpprogressbar_fill.xml"); - mXpBar->setColor(Theme::getThemeColor(Theme::XP_BAR), - Theme::getThemeColor(Theme::XP_BAR_OUTLINE)); + mXpBar->setColor(getThemeColor(Theme::XP_BAR), + getThemeColor(Theme::XP_BAR_OUTLINE)); const bool magicBar = Net::getGameHandler()->canUseMagicBar(); const int job = Net::getPlayerHandler()->getJobLocation() @@ -222,13 +223,13 @@ StatusWindow::StatusWindow() : useMagic ? "mpprogressbar_fill.xml" : "nompprogressbar_fill.xml"); if (useMagic) { - mMpBar->setColor(Theme::getThemeColor(Theme::MP_BAR), - Theme::getThemeColor(Theme::MP_BAR_OUTLINE)); + mMpBar->setColor(getThemeColor(Theme::MP_BAR), + getThemeColor(Theme::MP_BAR_OUTLINE)); } else { - mMpBar->setColor(Theme::getThemeColor(Theme::NO_MP_BAR), - Theme::getThemeColor(Theme::NO_MP_BAR_OUTLINE)); + mMpBar->setColor(getThemeColor(Theme::NO_MP_BAR), + getThemeColor(Theme::NO_MP_BAR_OUTLINE)); } } else @@ -260,8 +261,8 @@ StatusWindow::StatusWindow() : mJobLabel = new Label(this, _("Job:")); mJobBar = new ProgressBar(this, 0.0F, 80, 0, Theme::PROG_JOB, "jobprogressbar.xml", "jobprogressbar_fill.xml"); - mJobBar->setColor(Theme::getThemeColor(Theme::JOB_BAR), - Theme::getThemeColor(Theme::JOB_BAR_OUTLINE)); + mJobBar->setColor(getThemeColor(Theme::JOB_BAR), + getThemeColor(Theme::JOB_BAR_OUTLINE)); place(3, 0, mJobLvlLabel, 3); place(5, 2, mJobLabel).setPadding(3); @@ -524,7 +525,8 @@ void StatusWindow::updateHPBar(ProgressBar *const bar, const bool showMax) bar->setProgress(prog); } -void StatusWindow::updateMPBar(ProgressBar *const bar, const bool showMax) +void StatusWindow::updateMPBar(ProgressBar *const bar, + const bool showMax) const { if (!bar) return; @@ -542,14 +544,14 @@ void StatusWindow::updateMPBar(ProgressBar *const bar, const bool showMax) if (Net::getPlayerHandler()->canUseMagic()) { - bar->setColor(Theme::getThemeColor(Theme::MP_BAR), - Theme::getThemeColor(Theme::MP_BAR_OUTLINE)); + bar->setColor(getThemeColor(Theme::MP_BAR), + getThemeColor(Theme::MP_BAR_OUTLINE)); bar->setProgressPalette(Theme::PROG_MP); } else { - bar->setColor(Theme::getThemeColor(Theme::NO_MP_BAR), - Theme::getThemeColor(Theme::NO_MP_BAR_OUTLINE)); + bar->setColor(getThemeColor(Theme::NO_MP_BAR), + getThemeColor(Theme::NO_MP_BAR_OUTLINE)); bar->setProgressPalette(Theme::PROG_NO_MP); } @@ -715,7 +717,7 @@ std::string StatusWindow::translateLetter2(std::string letters) } void StatusWindow::updateStatusBar(ProgressBar *const bar, - const bool percent A_UNUSED) + const bool percent A_UNUSED) const { if (!player_node || !viewport) return; @@ -741,9 +743,9 @@ void StatusWindow::updateStatusBar(ProgressBar *const bar, bar->setProgress(50); if (player_node->getDisableGameModifiers()) - bar->setBackgroundColor(Theme::getThemeColor(Theme::STATUSBAR_ON)); + bar->setBackgroundColor(getThemeColor(Theme::STATUSBAR_ON)); else - bar->setBackgroundColor(Theme::getThemeColor(Theme::STATUSBAR_OFF)); + bar->setBackgroundColor(getThemeColor(Theme::STATUSBAR_OFF)); } void StatusWindow::action(const ActionEvent &event) @@ -790,8 +792,7 @@ AttrDisplay::AttrDisplay(const Widget2 *const widget, AttrDisplay::~AttrDisplay() { - delete mLayout; - mLayout = nullptr; + delete2(mLayout); } std::string AttrDisplay::update() diff --git a/src/gui/windows/statuswindow.h b/src/gui/windows/statuswindow.h index 3b171a25e..35bba74cd 100644 --- a/src/gui/windows/statuswindow.h +++ b/src/gui/windows/statuswindow.h @@ -66,7 +66,7 @@ class StatusWindow final : public Window, static void updateHPBar(ProgressBar *const bar, const bool showMax = false); - static void updateMPBar(ProgressBar *bar, const bool showMax = false); + void updateMPBar(ProgressBar *bar, const bool showMax = false) const; static void updateJobBar(ProgressBar *const bar, const bool percent = true); static void updateXPBar(ProgressBar *const bar, @@ -75,8 +75,8 @@ class StatusWindow final : public Window, static void updateInvSlotsBar(ProgressBar *const bar); static void updateMoneyBar(ProgressBar *const bar); static void updateArrowsBar(ProgressBar *const bar); - static void updateStatusBar(ProgressBar *const bar, - const bool percent = true); + void updateStatusBar(ProgressBar *const bar, + const bool percent = true) const; static void updateProgressBar(ProgressBar *const bar, const int value, const int max, const bool percent); static void updateProgressBar(ProgressBar *const bar, diff --git a/src/gui/windows/textcommandeditor.cpp b/src/gui/windows/textcommandeditor.cpp index dead469bc..2eccb255d 100644 --- a/src/gui/windows/textcommandeditor.cpp +++ b/src/gui/windows/textcommandeditor.cpp @@ -38,6 +38,7 @@ #include "gui/widgets/layout.h" #include "gui/widgets/radiobutton.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -191,12 +192,9 @@ void TextCommandEditor::postInit() TextCommandEditor::~TextCommandEditor() { - delete mIconsModel; - mIconsModel = nullptr; - delete mTargetTypeModel; - mTargetTypeModel = nullptr; - delete mMagicSchoolModel; - mMagicSchoolModel = nullptr; + delete2(mIconsModel); + delete2(mTargetTypeModel); + delete2(mMagicSchoolModel); } void TextCommandEditor::action(const ActionEvent &event) diff --git a/src/gui/windows/unregisterdialog.cpp b/src/gui/windows/unregisterdialog.cpp index 3326ca2bb..bb309c6f1 100644 --- a/src/gui/windows/unregisterdialog.cpp +++ b/src/gui/windows/unregisterdialog.cpp @@ -35,6 +35,7 @@ #include "net/loginhandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <string> @@ -97,8 +98,7 @@ void UnRegisterDialog::postInit() UnRegisterDialog::~UnRegisterDialog() { - delete mWrongDataNoticeListener; - mWrongDataNoticeListener = nullptr; + delete2(mWrongDataNoticeListener); } void UnRegisterDialog::action(const ActionEvent &event) diff --git a/src/gui/windows/updaterwindow.cpp b/src/gui/windows/updaterwindow.cpp index 247ef8707..cd0e7e0d8 100644 --- a/src/gui/windows/updaterwindow.cpp +++ b/src/gui/windows/updaterwindow.cpp @@ -42,6 +42,7 @@ #include "resources/db/moddb.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "utils/mkdir.h" #include "utils/paths.h" @@ -242,8 +243,7 @@ UpdaterWindow::~UpdaterWindow() { mDownload->cancel(); - delete mDownload; - mDownload = nullptr; + delete2(mDownload) } free(mMemoryBuffer); } @@ -292,9 +292,9 @@ void UpdaterWindow::action(const ActionEvent &event) } } -void UpdaterWindow::keyPressed(KeyEvent &keyEvent) +void UpdaterWindow::keyPressed(KeyEvent &event) { - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == static_cast<int>(Input::KEY_GUI_CANCEL)) { action(ActionEvent(nullptr, mCancelButton->getActionEventId())); diff --git a/src/gui/windows/updaterwindow.h b/src/gui/windows/updaterwindow.h index 39e1e84f3..4874ba8ba 100644 --- a/src/gui/windows/updaterwindow.h +++ b/src/gui/windows/updaterwindow.h @@ -121,7 +121,7 @@ class UpdaterWindow final : public Window, void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; void logic() override final; diff --git a/src/gui/windows/worldselectdialog.cpp b/src/gui/windows/worldselectdialog.cpp index 58c1aaee8..5cd0a3b2f 100644 --- a/src/gui/windows/worldselectdialog.cpp +++ b/src/gui/windows/worldselectdialog.cpp @@ -38,6 +38,7 @@ #include "net/loginhandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include "debug.h" @@ -95,8 +96,7 @@ void WorldSelectDialog::postInit() WorldSelectDialog::~WorldSelectDialog() { - delete mWorldListModel; - mWorldListModel = nullptr; + delete2(mWorldListModel); } void WorldSelectDialog::action(const ActionEvent &event) @@ -118,9 +118,9 @@ void WorldSelectDialog::action(const ActionEvent &event) } } -void WorldSelectDialog::keyPressed(KeyEvent &keyEvent) +void WorldSelectDialog::keyPressed(KeyEvent &event) { - const int actionId = keyEvent.getActionId(); + const int actionId = event.getActionId(); if (actionId == static_cast<int>(Input::KEY_GUI_CANCEL)) { diff --git a/src/gui/windows/worldselectdialog.h b/src/gui/windows/worldselectdialog.h index 9d06ac25e..b91beeece 100644 --- a/src/gui/windows/worldselectdialog.h +++ b/src/gui/windows/worldselectdialog.h @@ -65,7 +65,7 @@ class WorldSelectDialog final : public Window, */ void action(const ActionEvent &event) override final; - void keyPressed(KeyEvent &keyEvent) override final; + void keyPressed(KeyEvent &event) override final; private: WorldListModel *mWorldListModel; diff --git a/src/guildmanager.cpp b/src/guildmanager.cpp index a1fab3b1e..48485e9b4 100644 --- a/src/guildmanager.cpp +++ b/src/guildmanager.cpp @@ -36,6 +36,7 @@ #include "net/chathandler.h" #include "net/net.h" +#include "utils/delete2.h" #include "utils/timer.h" #include "debug.h" @@ -60,8 +61,7 @@ GuildManager::GuildManager() : GuildManager::~GuildManager() { - delete mTab; - mTab = nullptr; + delete2(mTab); } void GuildManager::init() @@ -85,8 +85,7 @@ void GuildManager::init() } else if (guildManager) { - delete guildManager; - guildManager = nullptr; + delete2(guildManager); } } @@ -108,8 +107,7 @@ void GuildManager::reload() if (guild && socialWindow) socialWindow->removeTab(guild); } - delete mTab; - mTab = nullptr; + delete2(mTab); } void GuildManager::send(const std::string &msg) @@ -520,8 +518,7 @@ bool GuildManager::afterRemove() player_node->clearGuilds(); } NotifyManager::notify(NotifyManager::GUILD_LEFT); - delete mTab; - mTab = nullptr; + delete2(mTab); if (socialWindow) socialWindow->removeTab(guild); diff --git a/src/input/keyboarddata.h b/src/input/keyboarddata.h index 37a36b45f..c099e573e 100644 --- a/src/input/keyboarddata.h +++ b/src/input/keyboarddata.h @@ -63,14 +63,14 @@ static const KeyData keyData[Input::KEY_TOTAL] = { Input::KEY_NO_VALUE, 50, COND_ARROWKEYS}, {"keyAttack", - INPUT_KEYBOARD, SDLK_LCTRL, + INPUT_KEYBOARD, SDLK_x, INPUT_UNKNOWN, Input::KEY_NO_VALUE, Input::GRP_DEFAULT | Input::GRP_REPEAT, &ActionManager::attack, Input::KEY_NO_VALUE, 50, COND_GAME | COND_NOFOLLOW | COND_VALIDSPEED}, {"keyTargetAttack", - INPUT_KEYBOARD, SDLK_x, + INPUT_KEYBOARD, SDLK_LCTRL, INPUT_JOYSTICK, 0, Input::GRP_DEFAULT, &ActionManager::targetAttack, diff --git a/src/inventory.cpp b/src/inventory.cpp index 90fd1c94a..6213b44c9 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -30,6 +30,7 @@ #include "resources/iteminfo.h" +#include "utils/delete2.h" #include "utils/gettext.h" #include <algorithm> @@ -153,8 +154,7 @@ void Inventory::removeItem(const int id) void Inventory::removeItemAt(const int index) { - delete mItems[index]; - mItems[index] = nullptr; + delete2(mItems[index]); mUsed--; if (mUsed < 0) // Already at 0, no need to distribute event mUsed = 0; diff --git a/src/item.cpp b/src/item.cpp index fe2fcaa92..02c5d0c16 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -92,11 +92,12 @@ void Item::setId(const int id, const unsigned char color) } } -bool Item::isHaveTag(const int tagId) +bool Item::isHaveTag(const int tagId) const { - if (mTags.find(tagId) == mTags.end()) + const std::map <int, int>::const_iterator it = mTags.find(tagId); + if (it == mTags.end()) return false; - return mTags[tagId] > 0; + return (*it).second > 0; } Image *Item::getImage(const int id, const unsigned char color) @@ -112,7 +113,7 @@ Image *Item::getImage(const int id, const unsigned char color) return image; } -std::string Item::getName() +std::string Item::getName() const { const ItemInfo &info = ItemDB::get(mId); if (serverVersion > 0) diff --git a/src/item.h b/src/item.h index adb6ec03e..dc4600d8b 100644 --- a/src/item.h +++ b/src/item.h @@ -153,12 +153,12 @@ class Item const ItemInfo &getInfo() const A_WARN_UNUSED { return ItemDB::get(mId); } - std::string getName() A_WARN_UNUSED; + std::string getName() const A_WARN_UNUSED; static Image *getImage(const int id, const unsigned char color) A_WARN_UNUSED; - bool isHaveTag(const int tagId) A_WARN_UNUSED; + bool isHaveTag(const int tagId) const A_WARN_UNUSED; unsigned char getColor() const A_WARN_UNUSED { return mColor; } diff --git a/src/listeners/keylistener.h b/src/listeners/keylistener.h index efc387300..7a2bdd2c9 100644 --- a/src/listeners/keylistener.h +++ b/src/listeners/keylistener.h @@ -89,17 +89,17 @@ class KeyListener * If a key is held down the widget will generate multiple key * presses. * - * @param keyEvent Discribes the event. + * @param event Discribes the event. */ - virtual void keyPressed(KeyEvent &keyEvent A_UNUSED) + virtual void keyPressed(KeyEvent &event A_UNUSED) { } /** * Called if a key is released when the widget has keyboard focus. * - * @param keyEvent Discribes the event. + * @param event Discribes the event. */ - virtual void keyReleased(KeyEvent &keyEvent A_UNUSED) + virtual void keyReleased(KeyEvent &event A_UNUSED) { } protected: diff --git a/src/listeners/mouselistener.h b/src/listeners/mouselistener.h index 9a2a4ef04..e3c7c7ccb 100644 --- a/src/listeners/mouselistener.h +++ b/src/listeners/mouselistener.h @@ -86,20 +86,20 @@ class MouseListener /** * Called when the mouse has entered into the widget area. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseEntered(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseEntered(MouseEvent &event A_UNUSED) { } /** * Called when the mouse has exited the widget area. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseExited(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseExited(MouseEvent &event A_UNUSED) { } @@ -109,20 +109,20 @@ class MouseListener * NOTE: A mouse press is NOT equal to a mouse click. * Use mouseClickMessage to check for mouse clicks. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mousePressed(MouseEvent &mouseEvent A_UNUSED) + virtual void mousePressed(MouseEvent &event A_UNUSED) { } /** * Called when a mouse button has been released on the widget area. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseReleased(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseReleased(MouseEvent &event A_UNUSED) { } @@ -130,20 +130,20 @@ class MouseListener * Called when a mouse button is pressed and released (clicked) on * the widget area. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseClicked(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseClicked(MouseEvent &event A_UNUSED) { } /** * Called when the mouse wheel has moved up on the widget area. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseWheelMovedUp(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseWheelMovedUp(MouseEvent &event A_UNUSED) { } @@ -153,7 +153,7 @@ class MouseListener * @param mousEvent Describes the event. * @since 0.6.0 */ - virtual void mouseWheelMovedDown(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseWheelMovedDown(MouseEvent &event A_UNUSED) { } @@ -161,10 +161,10 @@ class MouseListener * Called when the mouse has moved in the widget area and no mouse button * has been pressed (i.e no widget is being dragged). * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseMoved(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseMoved(MouseEvent &event A_UNUSED) { } @@ -172,10 +172,10 @@ class MouseListener * Called when the mouse has moved and the mouse has previously been * pressed on the widget. * - * @param mouseEvent Describes the event. + * @param event Describes the event. * @since 0.6.0 */ - virtual void mouseDragged(MouseEvent &mouseEvent A_UNUSED) + virtual void mouseDragged(MouseEvent &event A_UNUSED) { } diff --git a/src/localconsts.h b/src/localconsts.h index 92c36d92a..d71126c11 100644 --- a/src/localconsts.h +++ b/src/localconsts.h @@ -112,4 +112,7 @@ // use file access fuzzer // #define USE_FUZZER 1 +#ifdef DYECMD +#undef USE_FUZZER +#endif #include "utils/perfomance.h" diff --git a/src/main.cpp b/src/main.cpp index 75305233f..35a5570ea 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,7 @@ #include <iostream> #include <unistd.h> +#include "utils/delete2.h" #include "utils/gettext.h" #ifdef ANDROID #include "utils/mkdir.h" @@ -320,8 +321,7 @@ int main(int argc, char *argv[]) client->testsInit(); ret = client->testsExec(); } - delete client; - client = nullptr; + delete2(client); #if SDL_MIXER_VERSION_ATLEAST(1, 2, 11) Mix_Quit(); diff --git a/src/main.h b/src/main.h index b0f793360..60ecfb981 100644 --- a/src/main.h +++ b/src/main.h @@ -45,8 +45,8 @@ * different interfaces, which have different implementations for each server. */ -#define SMALL_VERSION "1.4.3.15" -#define CHECK_VERSION "01.04.03.15" +#define SMALL_VERSION "1.4.3.29" +#define CHECK_VERSION "01.04.03.29" #ifdef HAVE_CONFIG_H #include "../config.h" diff --git a/src/map.cpp b/src/map.cpp index c86c51bce..b4112231d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -42,6 +42,7 @@ #include "resources/resourcemanager.h" #include "resources/subimage.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/mkdir.h" #include "utils/physfstools.h" @@ -98,8 +99,7 @@ TileAnimation::TileAnimation(Animation *const ani): TileAnimation::~TileAnimation() { - delete mAnimation; - mAnimation = nullptr; + delete2(mAnimation); } bool TileAnimation::update(const int ticks) @@ -202,7 +202,6 @@ Map::~Map() config.removeListeners(this); CHECKLISTENERS - // delete metadata, layers, tilesets and overlays delete [] mMetaTiles; for (int i = 0; i < NB_BLOCKTYPES; i++) delete [] mOccupation[i]; @@ -218,20 +217,16 @@ Map::~Map() delete_all(mForegrounds); delete_all(mBackgrounds); delete_all(mTileAnimations); - delete mSpecialLayer; - mSpecialLayer = nullptr; - delete mTempLayer; - mTempLayer = nullptr; - delete mObjects; - mObjects = nullptr; + delete2(mSpecialLayer); + delete2(mTempLayer); + delete2(mObjects); delete_all(mMapPortals); if (mAtlas) { mAtlas->decRef(); mAtlas = nullptr; } - delete mHeights; - mHeights = nullptr; + delete2(mHeights); } void Map::optionChanged(const std::string &value) diff --git a/src/maplayer.cpp b/src/maplayer.cpp index 701fa9958..2db140d67 100644 --- a/src/maplayer.cpp +++ b/src/maplayer.cpp @@ -39,6 +39,7 @@ #include "gui/font.h" #include "gui/gui.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "debug.h" @@ -586,10 +587,7 @@ SpecialLayer::SpecialLayer(const int width, const int height) : SpecialLayer::~SpecialLayer() { for (int f = 0; f < mWidth * mHeight; f ++) - { - delete mTiles[f]; - mTiles[f] = nullptr; - } + delete2(mTiles[f]) delete [] mTiles; } diff --git a/src/net/charserverhandler.h b/src/net/charserverhandler.h index 625bf57fc..095558cec 100644 --- a/src/net/charserverhandler.h +++ b/src/net/charserverhandler.h @@ -26,6 +26,8 @@ #include "being/localplayer.h" #include "being/playerinfo.h" +#include "utils/delete2.h" + #include <string> #include <vector> @@ -51,8 +53,7 @@ struct Character final ~Character() { - delete dummy; - dummy = nullptr; + delete2(dummy); } int slot; /**< The index in the list of characters */ diff --git a/src/net/ea/chathandler.cpp b/src/net/ea/chathandler.cpp index 997e4bfc1..4ae292860 100644 --- a/src/net/ea/chathandler.cpp +++ b/src/net/ea/chathandler.cpp @@ -389,6 +389,7 @@ void ChatHandler::processChat(Net::MessageIn &msg, const bool normalChat, mMotdTime = cur_time + 1; else if (mMotdTime == cur_time || mMotdTime < cur_time) mSkipping = false; + BLOCK_END("ChatHandler::processChat") return; } diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp index 1e56ac75b..fc1ef8def 100644 --- a/src/net/ea/guildhandler.cpp +++ b/src/net/ea/guildhandler.cpp @@ -34,6 +34,8 @@ #include "net/ea/gui/guildtab.h" +#include "utils/delete2.h" + #include "debug.h" namespace Ea @@ -48,8 +50,7 @@ GuildHandler::GuildHandler() : GuildHandler::~GuildHandler() { - delete guildTab; - guildTab = nullptr; + delete2(guildTab); } void GuildHandler::requestAlliance(const int guildId A_UNUSED, @@ -462,8 +463,7 @@ void GuildHandler::processGuildLeave(Net::MessageIn &msg) const taGuild->clearMembers(); } NotifyManager::notify(NotifyManager::GUILD_LEFT); - delete guildTab; - guildTab = nullptr; + delete2(guildTab) if (socialWindow && taGuild) socialWindow->removeTab(taGuild); @@ -506,8 +506,7 @@ void GuildHandler::processGuildExpulsion(Net::MessageIn &msg) const taGuild->clearMembers(); } NotifyManager::notify(NotifyManager::GUILD_KICKED); - delete guildTab; - guildTab = nullptr; + delete2(guildTab) if (socialWindow && taGuild) socialWindow->removeTab(taGuild); diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index 2262a79f9..f3c8040e1 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -33,6 +33,8 @@ #include "net/ea/eaprotocol.h" +#include "utils/delete2.h" + #include "debug.h" extern int serverVersion; @@ -95,14 +97,12 @@ InventoryHandler::~InventoryHandler() mStorageWindow = nullptr; } - delete mStorage; - mStorage = nullptr; + delete2(mStorage); } void InventoryHandler::clear() { - delete mStorage; - mStorage = nullptr; + delete2(mStorage); } bool InventoryHandler::canSplit(const Item *const item A_UNUSED) const @@ -491,8 +491,7 @@ void InventoryHandler::processPlayerStorageClose(Net::MessageIn &msg A_UNUSED) if (mStorage) mStorage->clear(); - delete mStorage; - mStorage = nullptr; + delete2(mStorage); } void InventoryHandler::processPlayerEquipment(Net::MessageIn &msg) diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 4e4cac3df..32b08046e 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -35,6 +35,8 @@ #include "net/ea/gui/partytab.h" +#include "utils/delete2.h" + #include "debug.h" namespace Ea @@ -52,8 +54,7 @@ PartyHandler::PartyHandler() : PartyHandler::~PartyHandler() { - delete partyTab; - partyTab = nullptr; + delete2(partyTab); } void PartyHandler::join(const int partyId A_UNUSED) const @@ -347,8 +348,7 @@ void PartyHandler::processPartyLeave(Net::MessageIn &msg) const Ea::taParty->clearMembers(); } NotifyManager::notify(NotifyManager::PARTY_LEFT); - delete Ea::partyTab; - Ea::partyTab = nullptr; + delete2(Ea::partyTab) if (socialWindow && Ea::taParty) socialWindow->removeTab(Ea::taParty); diff --git a/src/net/eathena/generalhandler.cpp b/src/net/eathena/generalhandler.cpp index 3a18dede9..92afd945c 100644 --- a/src/net/eathena/generalhandler.cpp +++ b/src/net/eathena/generalhandler.cpp @@ -105,8 +105,7 @@ GeneralHandler::GeneralHandler() : GeneralHandler::~GeneralHandler() { - delete mNetwork; - mNetwork = nullptr; + delete2(mNetwork); } void GeneralHandler::handleMessage(Net::MessageIn &msg) @@ -272,11 +271,8 @@ void GeneralHandler::gameEnded() const socialWindow->removeTab(Ea::taParty); } - delete Ea::guildTab; - Ea::guildTab = nullptr; - - delete Ea::partyTab; - Ea::partyTab = nullptr; + delete2(Ea::guildTab); + delete2(Ea::partyTab); } } // namespace EAthena diff --git a/src/net/eathena/network.cpp b/src/net/eathena/network.cpp index 0162d82e8..87d5d4b5a 100644 --- a/src/net/eathena/network.cpp +++ b/src/net/eathena/network.cpp @@ -28,6 +28,8 @@ #include "net/eathena/messagein.h" #include "net/eathena/protocol.h" +#include "utils/delete2.h" + #include "debug.h" namespace EAthena @@ -120,8 +122,7 @@ Network::Network() : Network::~Network() { clearHandlers(); - delete mMessageHandlers; - mMessageHandlers = nullptr; + delete2(mMessageHandlers); mInstance = nullptr; } diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp index 46d1d490f..eef89324e 100644 --- a/src/net/tmwa/generalhandler.cpp +++ b/src/net/tmwa/generalhandler.cpp @@ -115,8 +115,7 @@ GeneralHandler::GeneralHandler() : GeneralHandler::~GeneralHandler() { - delete mNetwork; - mNetwork = nullptr; + delete2(mNetwork); } void GeneralHandler::handleMessage(Net::MessageIn &msg) @@ -320,11 +319,8 @@ void GeneralHandler::gameEnded() const socialWindow->removeTab(Ea::taParty); } - delete Ea::guildTab; - Ea::guildTab = nullptr; - - delete Ea::partyTab; - Ea::partyTab = nullptr; + delete2(Ea::guildTab); + delete2(Ea::partyTab); } } // namespace TmwAthena diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp index cc94b6161..b778d6b31 100644 --- a/src/net/tmwa/network.cpp +++ b/src/net/tmwa/network.cpp @@ -28,6 +28,8 @@ #include "net/tmwa/messagein.h" #include "net/tmwa/protocol.h" +#include "utils/delete2.h" + #include "debug.h" namespace TmwAthena @@ -98,8 +100,7 @@ Network::Network() : Network::~Network() { clearHandlers(); - delete mMessageHandlers; - mMessageHandlers = nullptr; + delete2(mMessageHandlers); mInstance = nullptr; } diff --git a/src/particle/animationparticle.cpp b/src/particle/animationparticle.cpp index 4381ceb8a..dccd3d037 100644 --- a/src/particle/animationparticle.cpp +++ b/src/particle/animationparticle.cpp @@ -24,6 +24,8 @@ #include "simpleanimation.h" +#include "utils/delete2.h" + #include "debug.h" AnimationParticle::AnimationParticle(Animation *const animation) : @@ -41,8 +43,7 @@ AnimationParticle::AnimationParticle(XmlNodePtrConst animationNode, AnimationParticle::~AnimationParticle() { - delete mAnimation; - mAnimation = nullptr; + delete2(mAnimation); mImage = nullptr; } diff --git a/src/particle/particlecontainer.cpp b/src/particle/particlecontainer.cpp index 0c73d2762..07eb36dc4 100644 --- a/src/particle/particlecontainer.cpp +++ b/src/particle/particlecontainer.cpp @@ -23,6 +23,8 @@ #include "particle/particle.h" #include "particle/particlecontainer.h" +#include "utils/delete2.h" + #include "debug.h" typedef std::list<Particle *>::iterator ParticleListIter; @@ -40,10 +42,7 @@ ParticleContainer::~ParticleContainer() // +++ call virtul method in destructor clearLocally(); if (mDelParent) - { - delete mNext; - mNext = nullptr; - } + delete2(mNext) } void ParticleContainer::clear() diff --git a/src/particle/rotationalparticle.cpp b/src/particle/rotationalparticle.cpp index 2a1fe7904..976234f83 100644 --- a/src/particle/rotationalparticle.cpp +++ b/src/particle/rotationalparticle.cpp @@ -24,6 +24,8 @@ #include "simpleanimation.h" +#include "utils/delete2.h" + #include <cmath> #include "debug.h" @@ -46,8 +48,7 @@ RotationalParticle::RotationalParticle(const XmlNodePtr animationNode, RotationalParticle::~RotationalParticle() { - delete mAnimation; - mAnimation = nullptr; + delete2(mAnimation); mImage = nullptr; } diff --git a/src/particle/textparticle.cpp b/src/particle/textparticle.cpp index 41ea683f6..9d37ca73d 100644 --- a/src/particle/textparticle.cpp +++ b/src/particle/textparticle.cpp @@ -80,7 +80,7 @@ void TextParticle::draw(Graphics *const graphics, graphics->setColor(color); if (mOutline) { - graphics->setColor2(Theme::getThemeColor( + graphics->setColor2(theme->getColor( Theme::OUTLINE, static_cast<int>(alpha))); } mTextFont->drawString(graphics, mText, screenX - mTextWidth, screenY); diff --git a/src/render/graphics.cpp b/src/render/graphics.cpp index 17f444eb8..3a423aac2 100644 --- a/src/render/graphics.cpp +++ b/src/render/graphics.cpp @@ -129,7 +129,7 @@ Graphics::Graphics() : Graphics::~Graphics() { - _endDraw(); + endDraw(); #ifdef USE_SDL2 if (mRenderer) { @@ -470,7 +470,7 @@ bool Graphics::setFullscreen(const bool fs) bool Graphics::resizeScreen(const int width, const int height) { #ifdef USE_SDL2 - _endDraw(); + endDraw(); mRect.w = width / mScale; mRect.h = height / mScale; @@ -488,14 +488,14 @@ bool Graphics::resizeScreen(const int width, const int height) // +++ need impliment resize in soft mode #endif // USE_OPENGL - _beginDraw(); + beginDraw(); return true; #else const int prevWidth = mWidth; const int prevHeight = mHeight; - _endDraw(); + endDraw(); const bool success = setVideoMode(width, height, mScale, mBpp, mFullscreen, mHWAccel, mEnableResize, mNoFrame); @@ -511,7 +511,7 @@ bool Graphics::resizeScreen(const int width, const int height) } } - _beginDraw(); + beginDraw(); return success; #endif // USE_SDL2 diff --git a/src/render/graphics.h b/src/render/graphics.h index 75b26a241..49080f4de 100644 --- a/src/render/graphics.h +++ b/src/render/graphics.h @@ -81,6 +81,7 @@ #endif #include <stack> +#include <string> #include "localconsts.h" @@ -461,21 +462,21 @@ class Graphics * NOTE: You will never need to call this function yourself, unless * you use a Graphics object outside of Guichan. * - * @see _endDraw, Gui::draw + * @see endDraw, Gui::draw */ - virtual void _beginDraw() + virtual void beginDraw() { } /** * Deinitializes drawing. Called by the Gui when a Gui::draw() is done. - * done. It should reset any state changes made by _beginDraw(). + * done. It should reset any state changes made by beginDraw(). * * NOTE: You will never need to call this function yourself, unless * you use a Graphics object outside of Guichan. * - * @see _beginDraw, Gui::draw + * @see beginDraw, Gui::draw */ - virtual void _endDraw() + virtual void endDraw() { } int mWidth; diff --git a/src/render/graphicsdef.hpp b/src/render/graphicsdef.hpp index 80d3c7cf8..b11f88249 100644 --- a/src/render/graphicsdef.hpp +++ b/src/render/graphicsdef.hpp @@ -33,9 +33,9 @@ public: const int x2, const int y2, const int width, const int height) override final; - void _beginDraw(); + void beginDraw(); - void _endDraw(); + void endDraw(); bool pushClipArea(Rect area) override final; diff --git a/src/render/mobileopenglgraphics.cpp b/src/render/mobileopenglgraphics.cpp index 86707fac8..0ad5bfeb7 100644 --- a/src/render/mobileopenglgraphics.cpp +++ b/src/render/mobileopenglgraphics.cpp @@ -113,10 +113,14 @@ void MobileOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size const int sz = mMaxVertices * 4 + 30; vertexBufSize = mMaxVertices; - mFloatTexArray = new GLfloat[sz]; - mShortVertArray = new GLshort[sz]; - mFloatTexArrayCached = new GLfloat[sz]; - mShortVertArrayCached = new GLshort[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mShortVertArray) + mShortVertArray = new GLshort[sz]; + if (!mFloatTexArrayCached) + mFloatTexArrayCached = new GLfloat[sz]; + if (!mShortVertArrayCached) + mShortVertArrayCached = new GLshort[sz]; } bool MobileOpenGLGraphics::setVideoMode(const int w, const int h, @@ -835,7 +839,7 @@ void MobileOpenGLGraphics::updateScreen() BLOCK_END("Graphics::updateScreen") } -void MobileOpenGLGraphics::_beginDraw() +void MobileOpenGLGraphics::beginDraw() { glMatrixMode(GL_TEXTURE); glLoadIdentity(); @@ -887,7 +891,7 @@ void MobileOpenGLGraphics::_beginDraw() pushClipArea(Rect(0, 0, mRect.w, mRect.h)); } -void MobileOpenGLGraphics::_endDraw() +void MobileOpenGLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/normalopenglgraphics.cpp b/src/render/normalopenglgraphics.cpp index 6bc25be32..72fbd8a99 100644 --- a/src/render/normalopenglgraphics.cpp +++ b/src/render/normalopenglgraphics.cpp @@ -131,12 +131,18 @@ void NormalOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size vertexBufSize = mMaxVertices; const int sz = mMaxVertices * 4 + 30; - mFloatTexArray = new GLfloat[sz]; - mIntTexArray = new GLint[sz]; - mIntVertArray = new GLint[sz]; - mFloatTexArrayCached = new GLfloat[sz]; - mIntTexArrayCached = new GLint[sz]; - mIntVertArrayCached = new GLint[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mIntTexArray) + mIntTexArray = new GLint[sz]; + if (!mIntVertArray) + mIntVertArray = new GLint[sz]; + if (!mFloatTexArrayCached) + mFloatTexArrayCached = new GLfloat[sz]; + if (!mIntTexArrayCached) + mIntTexArrayCached = new GLint[sz]; + if (!mIntVertArrayCached) + mIntVertArrayCached = new GLint[sz]; } bool NormalOpenGLGraphics::setVideoMode(const int w, const int h, @@ -1094,7 +1100,7 @@ void NormalOpenGLGraphics::updateScreen() BLOCK_END("Graphics::updateScreen") } -void NormalOpenGLGraphics::_beginDraw() +void NormalOpenGLGraphics::beginDraw() { glMatrixMode(GL_TEXTURE); glLoadIdentity(); @@ -1148,7 +1154,7 @@ void NormalOpenGLGraphics::_beginDraw() pushClipArea(Rect(0, 0, w, h)); } -void NormalOpenGLGraphics::_endDraw() +void NormalOpenGLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/nullopenglgraphics.cpp b/src/render/nullopenglgraphics.cpp index d09d7b13b..919b43c10 100644 --- a/src/render/nullopenglgraphics.cpp +++ b/src/render/nullopenglgraphics.cpp @@ -77,9 +77,12 @@ void NullOpenGLGraphics::initArrays() // need alocate small size, after if limit reached reallocate to double size vertexBufSize = mMaxVertices; const int sz = mMaxVertices * 4 + 30; - mFloatTexArray = new GLfloat[sz]; - mIntTexArray = new GLint[sz]; - mIntVertArray = new GLint[sz]; + if (!mFloatTexArray) + mFloatTexArray = new GLfloat[sz]; + if (!mIntTexArray) + mIntTexArray = new GLint[sz]; + if (!mIntVertArray) + mIntVertArray = new GLint[sz]; } bool NullOpenGLGraphics::setVideoMode(const int w, const int h, @@ -916,12 +919,12 @@ void NullOpenGLGraphics::updateScreen() BLOCK_END("Graphics::updateScreen") } -void NullOpenGLGraphics::_beginDraw() +void NullOpenGLGraphics::beginDraw() { pushClipArea(Rect(0, 0, 640, 480)); } -void NullOpenGLGraphics::_endDraw() +void NullOpenGLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/safeopenglgraphics.cpp b/src/render/safeopenglgraphics.cpp index faf2de76e..a191142b5 100644 --- a/src/render/safeopenglgraphics.cpp +++ b/src/render/safeopenglgraphics.cpp @@ -431,7 +431,7 @@ void SafeOpenGLGraphics::calcWindow(ImageCollection *const vertCol A_UNUSED, { } -void SafeOpenGLGraphics::_beginDraw() +void SafeOpenGLGraphics::beginDraw() { glMatrixMode(GL_TEXTURE); glLoadIdentity(); @@ -462,7 +462,7 @@ void SafeOpenGLGraphics::_beginDraw() pushClipArea(Rect(0, 0, mRect.w, mRect.h)); } -void SafeOpenGLGraphics::_endDraw() +void SafeOpenGLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/sdl2graphics.cpp b/src/render/sdl2graphics.cpp index 8c78c8cdd..c93622920 100644 --- a/src/render/sdl2graphics.cpp +++ b/src/render/sdl2graphics.cpp @@ -653,12 +653,12 @@ void SDLGraphics::fillRectangle(const Rect &rectangle) SDL_RenderFillRects(mRenderer, &rect, 1); } -void SDLGraphics::_beginDraw() +void SDLGraphics::beginDraw() { pushClipArea(Rect(0, 0, mRect.w, mRect.h)); } -void SDLGraphics::_endDraw() +void SDLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/sdl2softwaregraphics.cpp b/src/render/sdl2softwaregraphics.cpp index 0844cd52e..54cd010a8 100644 --- a/src/render/sdl2softwaregraphics.cpp +++ b/src/render/sdl2softwaregraphics.cpp @@ -1115,12 +1115,12 @@ void SDL2SoftwareGraphics::fillRectangle(const Rect &rectangle) } } -void SDL2SoftwareGraphics::_beginDraw() +void SDL2SoftwareGraphics::beginDraw() { pushClipArea(Rect(0, 0, mRect.w, mRect.h)); } -void SDL2SoftwareGraphics::_endDraw() +void SDL2SoftwareGraphics::endDraw() { popClipArea(); } diff --git a/src/render/sdlgraphics.cpp b/src/render/sdlgraphics.cpp index 44dcc426d..cbd3f0689 100644 --- a/src/render/sdlgraphics.cpp +++ b/src/render/sdlgraphics.cpp @@ -1112,12 +1112,12 @@ void SDLGraphics::fillRectangle(const Rect& rectangle) } } -void SDLGraphics::_beginDraw() +void SDLGraphics::beginDraw() { pushClipArea(Rect(0, 0, mRect.w, mRect.h)); } -void SDLGraphics::_endDraw() +void SDLGraphics::endDraw() { popClipArea(); } diff --git a/src/render/surfacegraphics.h b/src/render/surfacegraphics.h index 8e85356da..44c2691ae 100644 --- a/src/render/surfacegraphics.h +++ b/src/render/surfacegraphics.h @@ -57,10 +57,10 @@ class SurfaceGraphics final : public Graphics SDL_Surface *getTarget() const { return mTarget; } - void _beginDraw() override final + void beginDraw() override final { } - void _endDraw() override final + void endDraw() override final { } bool pushClipArea(Rect rect A_UNUSED) override final diff --git a/src/resources/atlasmanager.cpp b/src/resources/atlasmanager.cpp index 870de40a9..90aea108d 100644 --- a/src/resources/atlasmanager.cpp +++ b/src/resources/atlasmanager.cpp @@ -231,7 +231,7 @@ SDL_Surface *AtlasManager::createSDLAtlas(TextureAtlas *const atlas) SurfaceGraphics *const graphics = new SurfaceGraphics(); graphics->setTarget(surface); - graphics->_beginDraw(); + graphics->beginDraw(); // drawing SDL images to surface FOR_EACH (std::vector<AtlasItem*>::iterator, it, atlas->items) diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp index 40ea7af1a..8b76d7e2a 100644 --- a/src/resources/beinginfo.cpp +++ b/src/resources/beinginfo.cpp @@ -25,6 +25,7 @@ #include "configuration.h" #include "logger.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -168,10 +169,8 @@ void BeingInfo::addAttack(const int id, std::string action, void BeingInfo::clear() { - delete unknown; - unknown = nullptr; - delete empty; - empty = nullptr; + delete2(unknown); + delete2(empty); } void BeingInfo::init() diff --git a/src/resources/db/itemdb.cpp b/src/resources/db/itemdb.cpp index 931377639..09a5ce08f 100644 --- a/src/resources/db/itemdb.cpp +++ b/src/resources/db/itemdb.cpp @@ -28,6 +28,7 @@ #include "resources/beingcommon.h" #include "resources/iteminfo.h" +#include "utils/delete2.h" #include "utils/dtor.h" #include "utils/gettext.h" @@ -543,8 +544,7 @@ void ItemDB::unload() { logger->log1("Unloading item database..."); - delete mUnknown; - mUnknown = nullptr; + delete2(mUnknown); delete_all(mItemInfos); mItemInfos.clear(); diff --git a/src/resources/dye.cpp b/src/resources/dye.cpp index 4f9e8a738..7e6692c50 100644 --- a/src/resources/dye.cpp +++ b/src/resources/dye.cpp @@ -26,6 +26,8 @@ #include "resources/db/palettedb.h" +#include "utils/delete2.h" + #include <cmath> #include <sstream> @@ -442,10 +444,7 @@ Dye::Dye(const std::string &description) Dye::~Dye() { for (int i = 0; i < dyePalateSize; ++i) - { - delete mDyePalettes[i]; - mDyePalettes[i] = nullptr; - } + delete2(mDyePalettes[i]) } void Dye::instantiate(std::string &restrict target, diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 4da901b09..baabbeaec 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -37,6 +37,7 @@ #include "resources/db/mapdb.h" #include "utils/base64.h" +#include "utils/delete2.h" #include <iostream> #include <zlib.h> @@ -202,6 +203,7 @@ void MapReader::addLayerToList(const std::string &fileName) return; } + int cnt = 0; for_each_xml_child_node(childNode, node) { if (!xmlNameEqual(childNode, "layer")) @@ -213,8 +215,10 @@ void MapReader::addLayerToList(const std::string &fileName) logger->log("found patch layer: " + name); mKnownLayers[name] = childNode; mKnownDocs.insert(doc); + cnt ++; } - delete doc; + if (!cnt) + delete doc; } Map *MapReader::readMap(const std::string &restrict filename, @@ -974,14 +978,9 @@ Tileset *MapReader::readTileset(XmlNodePtr node, } if (ani->getLength() > 0) - { map->addAnimation(tileGID, new TileAnimation(ani)); - } else - { - delete ani; - ani = nullptr; - } + delete2(ani) } } } diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 954930b64..4eca5552e 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -37,6 +37,7 @@ #include "resources/soundeffect.h" #include "resources/spritedef.h" +#include "utils/delete2.h" #include "utils/mkdir.h" #include "utils/paths.h" #include "utils/physfscheckutils.h" @@ -953,8 +954,7 @@ void ResourceManager::deleteInstance() } } #endif - delete instance; - instance = nullptr; + delete2(instance); } void *ResourceManager::loadFile(const std::string &fileName, int &fileSize) diff --git a/src/shopitem.cpp b/src/shopitem.cpp index 8ee8da670..45ab60e05 100644 --- a/src/shopitem.cpp +++ b/src/shopitem.cpp @@ -138,7 +138,6 @@ int ShopItem::sellCurrentDuplicate(const int quantity) if (dupl->quantity == 0) { delete dupl; - dupl = nullptr; mDuplicates.pop(); } return sellCount; diff --git a/src/simpleanimation.cpp b/src/simpleanimation.cpp index 075c98c06..a2c765cb8 100644 --- a/src/simpleanimation.cpp +++ b/src/simpleanimation.cpp @@ -32,6 +32,8 @@ #include "resources/imageset.h" #include "resources/resourcemanager.h" +#include "utils/delete2.h" + #include "debug.h" SimpleAnimation::SimpleAnimation(Animation *const animation) : @@ -62,8 +64,7 @@ SimpleAnimation::SimpleAnimation(const XmlNodePtr animationNode, SimpleAnimation::~SimpleAnimation() { - delete mAnimation; - mAnimation = nullptr; + delete2(mAnimation); if (mImageSet) { mImageSet->decRef(); diff --git a/src/statuseffect.cpp b/src/statuseffect.cpp index 647c6dd99..fd9f60851 100644 --- a/src/statuseffect.cpp +++ b/src/statuseffect.cpp @@ -47,7 +47,8 @@ StatusEffect::StatusEffect() : mParticleEffect(), mIcon(), mAction(), - mPersistentParticleEffect(false) + mPersistentParticleEffect(false), + mIsPoison(false) { } @@ -153,9 +154,9 @@ void StatusEffect::loadXmlFile(const std::string &fileName) { if (xmlNameEqual(node, "include")) { - const std::string name = XML::getProperty(node, "name", ""); - if (!name.empty()) - loadXmlFile(name); + const std::string incName = XML::getProperty(node, "name", ""); + if (!incName.empty()) + loadXmlFile(incName); continue; } @@ -181,11 +182,14 @@ void StatusEffect::loadXmlFile(const std::string &fileName) { StatusEffect *startEffect = (*the_map)[1][index]; StatusEffect *endEffect = (*the_map)[0][index]; + const std::string name = XML::getProperty(node, "name", ""); if (!startEffect) startEffect = new StatusEffect; if (!endEffect) endEffect = new StatusEffect; + startEffect->mIsPoison = + (name == paths.getStringValue("poisonEffectName")); startEffect->mMessage = XML::getProperty( node, "start-message", ""); startEffect->mSFXEffect = XML::getProperty( @@ -198,6 +202,7 @@ void StatusEffect::loadXmlFile(const std::string &fileName) startEffect->mPersistentParticleEffect = (XML::getProperty( node, "persistent-particle-effect", "no")) != "no"; + endEffect->mIsPoison = startEffect->mIsPoison; endEffect->mMessage = XML::getProperty(node, "end-message", ""); endEffect->mSFXEffect = XML::getProperty(node, "end-audio", ""); endEffect->mParticleEffect = XML::getProperty( diff --git a/src/statuseffect.h b/src/statuseffect.h index 8bb164820..e30d9d1bd 100644 --- a/src/statuseffect.h +++ b/src/statuseffect.h @@ -73,6 +73,8 @@ public: bool particleEffectIsPersistent() const A_WARN_UNUSED { return mPersistentParticleEffect; } + bool isPoison() const A_WARN_UNUSED + { return mIsPoison; } /** * Retrieves a status effect. @@ -118,6 +120,7 @@ private: std::string mIcon; std::string mAction; bool mPersistentParticleEffect; + bool mIsPoison; }; #endif // STATUSEFFECT_H diff --git a/src/test/testmain.cpp b/src/test/testmain.cpp index fadeb206e..fbd7588ef 100644 --- a/src/test/testmain.cpp +++ b/src/test/testmain.cpp @@ -25,6 +25,7 @@ #include "client.h" +#include "utils/delete2.h" #include "utils/paths.h" #include "utils/process.h" @@ -46,8 +47,7 @@ TestMain::TestMain() : TestMain::~TestMain() { - delete log; - log = nullptr; + delete2(log); } void TestMain::initConfig() diff --git a/src/text.cpp b/src/text.cpp index 27d794d33..542dc60d9 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -32,6 +32,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" int Text::mInstances = 0; @@ -49,15 +51,15 @@ Text::Text(const std::string &text, const int x, const int y, mXOffset(0), mText(text), mColor(color), - mOutlineColor(Theme::getThemeColor(Theme::OUTLINE)), + mOutlineColor(theme->getColor(Theme::OUTLINE, 255)), mIsSpeech(isSpeech) { if (!textManager) { textManager = new TextManager; - if (Theme::instance()) + if (theme) { - Theme::instance()->loadRect(mBubble, "bubble.xml", ""); + theme->loadRect(mBubble, "bubble.xml", ""); } else { @@ -99,8 +101,7 @@ Text::~Text() textManager->removeText(this); if (--mInstances == 0) { - delete textManager; - textManager = nullptr; + delete2(textManager); for (int f = 0; f < 9; f ++) { if (mBubble.grid[f]) diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp index b1ed41fdc..d1c29999c 100644 --- a/src/touchmanager.cpp +++ b/src/touchmanager.cpp @@ -37,6 +37,8 @@ #include "resources/image.h" +#include "utils/delete2.h" + #include "debug.h" TouchManager touchManager; @@ -70,8 +72,7 @@ TouchManager::TouchManager() : TouchManager::~TouchManager() { clear(); - delete mVertexes; - mVertexes = nullptr; + delete2(mVertexes); CHECKLISTENERS } @@ -122,7 +123,6 @@ void TouchManager::loadTouchItem(TouchItem **item, const std::string &name, const TouchFuncPtr fOut) { *item = nullptr; - Theme *const theme = Theme::instance(); if (!theme) return; ImageRect *images = new ImageRect; @@ -243,8 +243,8 @@ void TouchManager::draw() return; Font *const font = boldFont; - mainGraphics->setColorAll(Theme::getThemeColor(Theme::TEXT), - Theme::getThemeColor(Theme::TEXT_OUTLINE)); + mainGraphics->setColorAll(theme->getColor(Theme::TEXT, 255), + theme->getColor(Theme::TEXT_OUTLINE, 255)); FOR_EACH (TouchItemVectorCIter, it, mObjects) { const TouchItem *const item = *it; @@ -358,8 +358,7 @@ void TouchManager::unload(TouchItem *const item) if (item->images) { Theme::unloadRect(*item->images); - delete item->images; - item->images = nullptr; + delete2(item->images); if (item->icon) { item->icon->decRef(); @@ -394,7 +393,6 @@ void TouchManager::loadPad() void TouchManager::loadButtons() { const int sz = (mButtonsSize + 1) * 50; - Theme *const theme = Theme::instance(); if (!theme) return; Skin *const skin = theme->load("dbutton.xml", ""); diff --git a/src/utils/delete2.h b/src/utils/delete2.h new file mode 100644 index 000000000..104f6fa60 --- /dev/null +++ b/src/utils/delete2.h @@ -0,0 +1,30 @@ +/* + * The ManaPlus Client + * Copyright (C) 2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UTILS_DELETE2_H +#define UTILS_DELETE2_H + +#define delete2(var) \ + {\ + delete var;\ + var = nullptr;\ + } + +#endif // UTILS_DELETE2_H diff --git a/src/utils/translation/translationmanager.cpp b/src/utils/translation/translationmanager.cpp index 893e4d33f..9bbdec810 100644 --- a/src/utils/translation/translationmanager.cpp +++ b/src/utils/translation/translationmanager.cpp @@ -20,6 +20,7 @@ #include "utils/translation/translationmanager.h" +#include "utils/delete2.h" #include "utils/stringutils.h" #include "utils/translation/podict.h" @@ -46,8 +47,7 @@ void TranslationManager::loadCurrentLang() void TranslationManager::close() { - delete translator; - translator = nullptr; + delete2(translator); } PoDict *TranslationManager::loadLang(const LangVect &lang, |