source/code/menudef_themes.cpp
browsing at commit = 5f4ad77b31050a82a610db65a7248b8ef02632a7
/*
===========================================================================
blockattack - Block Attack - Rise of the Blocks
Copyright (C) 2005-2013 Poul Sander
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
(at your option) 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/
Source information and contacts persons can be found at
http://blockattack.net
===========================================================================
*/
#include "global.hpp"
#include "menudef_themes.hpp"
#include "MenuSystem.h"
#include "BlockGameSdl.hpp"
#include <fmt/core.h>
static void switchTheme() {
globalData.theme = ThemesGetNext();
}
static void testMusic() {
static bool highbeatNext = false;
int musicVolume = Config::getInstance()->getInt("volume_music");
std::string music_name = "bgmusic";
if (highbeatNext) {
music_name = "highbeat";
}
Mix_PlayMusic(globalData.spriteHolder->GetDataHolder().getMusicHandler(music_name.c_str()).get(), 1);
Mix_VolumeMusic(musicVolume);
highbeatNext = !highbeatNext; //Toggle between standard and highbeat
}
class ThemesMenu : public Menu {
private:
std::shared_ptr<BlockGameSdl> game;
sago::SagoTextField themeTitle;
public:
ThemesMenu(SDL_Renderer* screen, const std::string& title, bool submenu) : Menu(screen, title, submenu) {
game = std::make_shared<BlockGameSdl>(globalData.xsize-450,100,&globalData.spriteHolder->GetDataHolder());
game->putSampleBlocks();
sagoTextSetBlueFont(themeTitle);
}
void placeButtons() override {
int nextY = 100;
int X = 10;
for (Button* it : buttons) {
it->x = X;
it->y = nextY;
nextY += it->standardButton.ysize+10;
}
exit.x = X;
exit.y = nextY;
}
void Draw(SDL_Renderer* target) override {
Menu::Draw(target);
game->DoPaintJob();
themeTitle.SetText(fmt::format(_("Theme: {}"), globalData.theme.theme_name));
themeTitle.Draw(target, 10, globalData.ysize-50,sago::SagoTextField::Alignment::left);
}
};
void OpenThemesMenu() {
ThemesMenu tm(globalData.screen, _("Themes"), true);
Button bSwitchTheme;
bSwitchTheme.setLabel(_("Switch theme"));
bSwitchTheme.setAction(&switchTheme);
tm.addButton(&bSwitchTheme);
if (!globalData.NoSound) {
Button bTestMusic;
bTestMusic.setLabel(_("Test music"));
bTestMusic.setAction(&testMusic);
tm.addButton(&bTestMusic);
}
RunGameState(tm);
}