commit 1383de53
Now uses fake fullscreen and reloads all content on fullscreen toggle.
Changed files
| M | source/code/MenuSystem.cpp before |
| M | source/code/MenuSystem.h before |
| M | source/code/main.cpp before |
| M | source/code/menudef.cpp before |
diff --git a/source/code/MenuSystem.cpp b/source/code/MenuSystem.cpp
index 91c9fc3..24d0b9b 100644
--- a/source/code/MenuSystem.cpp
+++ b/source/code/MenuSystem.cpp
@@ -34,11 +34,11 @@ using namespace std;
ButtonGfx standardButton;
-void ButtonGfx::setSurfaces(sago::SagoSprite& marked, sago::SagoSprite& unmarked) {
+void ButtonGfx::setSurfaces(sago::SagoSprite* marked, sago::SagoSprite* unmarked) {
this->marked = marked;
this->unmarked = unmarked;
- xsize=(marked).GetWidth();
- ysize=(marked).GetHeight();
+ xsize=(marked)->GetWidth();
+ ysize=(marked)->GetHeight();
if (verboseLevel) {
cout << "Surfaces set, size: " <<xsize << " , " << ysize << endl;
}
@@ -91,10 +91,10 @@ void Button::drawToScreen() {
//cout << "Painting button: " << label << " at: " << x << "," << y << endl;
#endif
if (marked) {
- gfx->marked.Draw(screen, SDL_GetTicks(), x, y);
+ gfx->marked->Draw(screen, SDL_GetTicks(), x, y);
}
else {
- gfx->unmarked.Draw(screen, SDL_GetTicks(), x, y);
+ gfx->unmarked->Draw(screen, SDL_GetTicks(), x, y);
}
gfx->thefont->draw(screen, x+gfx->xsize/2,y+gfx->ysize/2-gfx->thefont->getHeight("%s", label.c_str())/2, NFont::CENTER, "%s", label.c_str());
}
diff --git a/source/code/MenuSystem.h b/source/code/MenuSystem.h
index c034fe1..12ce9b0 100644
--- a/source/code/MenuSystem.h
+++ b/source/code/MenuSystem.h
@@ -36,15 +36,15 @@ http://blockattack.net
struct ButtonGfx
{
//Holds the graphic for a button that is selected
- sago::SagoSprite marked;
+ sago::SagoSprite* marked;
//Holds the graphic for a button that is not selected
- sago::SagoSprite unmarked;
+ sago::SagoSprite* unmarked;
//The size of the buttons, so we don't have to ask w and h from the SDL Surfaces each time
int xsize;
int ysize;
//A TTFont used for writing the label on the buttons
NFont* thefont;
- void setSurfaces(sago::SagoSprite& marked, sago::SagoSprite& unmarked);
+ void setSurfaces(sago::SagoSprite* marked, sago::SagoSprite* unmarked);
};
extern ButtonGfx standardButton;
diff --git a/source/code/main.cpp b/source/code/main.cpp
index eb1613f..5d6770e 100644
--- a/source/code/main.cpp
+++ b/source/code/main.cpp
@@ -253,26 +253,20 @@ static void NFont_Write(SDL_Renderer* target, int x, int y, const char* text) {
SDL_Window* sdlWindow;
+std::unique_ptr<sago::SagoDataHolder> dataHolder;
+std::unique_ptr<sago::SagoSpriteHolder> spriteHolder;
+
void ResetFullscreen() {
-#if defined(_WIN32)
- /* if (bFullscreen) {
- screen=SDL_SetVideoMode(xsize,ysize,32,SDL_SWSURFACE|SDL_FULLSCREEN|SDL_ANYFORMAT);
- }
- else {
- screen=SDL_SetVideoMode(xsize,ysize,32,SDL_SWSURFACE|SDL_ANYFORMAT);
- }
- DrawIMG(background, screen, 0, 0);
- */
-#else
- //TODO: Find SDL2 alternative
- //SDL_WM_ToggleFullScreen(screen); //Will only work in Linux
-#endif
+ Mix_HaltMusic(); //We need to reload all data in case the screen type changes. Music must be stopped before unload.
if (bFullscreen) {
- SDL_SetWindowFullscreen(sdlWindow, SDL_WINDOW_FULLSCREEN /*_DESKTOP*/);
+ SDL_SetWindowFullscreen(sdlWindow, SDL_WINDOW_FULLSCREEN_DESKTOP);
}
else {
SDL_SetWindowFullscreen(sdlWindow, 0);
}
+ dataHolder.reset(new sago::SagoDataHolder(screen));
+ spriteHolder.reset(new sago::SagoSpriteHolder( *(dataHolder.get()) ) );
+ InitImages(*(spriteHolder.get()) );
SDL_ShowCursor(SDL_DISABLE);
}
@@ -1786,10 +1780,6 @@ int main(int argc, char* argv[]) {
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1");
//Open video
int createWindowParams = 0; //SDL_WINDOW_RESIZABLE;
- if ((bFullscreen)&&(!singlePuzzle)) {
- createWindowParams |= SDL_WINDOW_FULLSCREEN;
- }
-
sdlWindow = SDL_CreateWindow("Block Attack - Rise of the Blocks",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
@@ -1798,13 +1788,9 @@ int main(int argc, char* argv[]) {
dieOnNullptr(sdlWindow, "Unable to create window");
SDL_Renderer* renderer = SDL_CreateRenderer(sdlWindow, -1, 0);
dieOnNullptr(renderer, "Unable to create render");
- //SDL_RenderSetLogicalSize(renderer, xsize, ysize);
+ SDL_RenderSetLogicalSize(renderer, xsize, ysize);
screen = renderer;
-
- sago::SagoDataHolder d(renderer);
- d.setVerbose(false);
- sago::SagoSpriteHolder spriteholder(d);
- InitImages(spriteholder);
+ ResetFullscreen();
SetSDLIcon(sdlWindow);
if (verboseLevel) {
diff --git a/source/code/menudef.cpp b/source/code/menudef.cpp
index 02d7006..a24a684 100644
--- a/source/code/menudef.cpp
+++ b/source/code/menudef.cpp
@@ -94,7 +94,7 @@ void Button_changekey::doAction() {
}
void InitMenues() {
- standardButton.setSurfaces(menuMarked,menuUnmarked);
+ standardButton.setSurfaces(&menuMarked,&menuUnmarked);
standardButton.thefont = &nf_scoreboard_font;
}