changeset 608:9620208f7ff4

More work on setup.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 12 Apr 2013 11:33:56 +0300
parents 360b1ad83ed9
children 877dba1b8a1f
files dmsimple.c
diffstat 1 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/dmsimple.c	Fri Apr 12 11:21:37 2013 +0300
+++ b/dmsimple.c	Fri Apr 12 11:33:56 2013 +0300
@@ -5,8 +5,10 @@
 #include "dmimage.h"
 #include "setupfont.h"
 #include "setupimage.h"
+#include "setupmenubar.h"
 
 static const char *engineSetupImageName = "SetupImage.png";
+static const char *engineSetupMenuBarName = "SetupMenuBar.png";
 static const char *engineSetupFontName = "SetupFont.dmf";
 
 static DMEngineData engine;
@@ -172,7 +174,7 @@
 {
     DMBitmapFont *menuFont = NULL;
     DMResource *file = NULL;
-    SDL_Surface *menuBgImage = NULL;
+    SDL_Surface *menuBgImage = NULL, *menuBarImage = NULL;
     int result, menuState = -1, nmenuList, menuChoice = 0;
     DMScaledBlitFunc menuBgBlit;
     char menuStr[64];
@@ -192,9 +194,16 @@
     menuBgImage = dmLoadImage(file);
     dmf_close(file);
 
-    if (menuBgImage == NULL)
+    file = dmf_open(engine.resources, engineSetupMenuBarName);
+    if (file == NULL)
+        file = dmf_create_memio(NULL, engineSetupMenuBarName, engineSetupMenuBar, sizeof(engineSetupMenuBar));
+
+    menuBarImage = dmLoadImage(file);
+    dmf_close(file);
+
+    if (menuBgImage == NULL || menuBarImage == NULL)
     {
-        dmError("Could not instantiate setup screen image, %d: %s\n",
+        dmError("Could not instantiate setup screen images, %d: %s\n",
             result, dmErrorStr(result));
         goto out;
     }
@@ -230,6 +239,7 @@
         menuHeight = DM_VSETUP_MENU_HEIGHT / menuEntryHeight;
 
     // Enter the main loop of the menu
+    engine.startTime = SDL_GetTicks();
     menuState = 0;
     while (!menuState)
     {
@@ -270,6 +280,7 @@
         }
 
         // Draw frame
+        engine.frameTime = SDL_GetTicks();
         if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
         {
             dmError("Can't lock surface.\n");
@@ -281,19 +292,20 @@
         menuBgBlit(menuBgImage, 0, 0, engine.screen->w, engine.screen->h, engine.screen);
         
         // XXX/TODO: Some hardcoded bits here ...
+        float t = engineGetTimeDT(&engine);
         int entry;
         nmenuList = 5;
         
-        dmFillRect(engine.screen,
+        dmScaledBlitSurface32to32TransparentGA(menuBarImage,
             DM_VSETUP_MENU_XC,
             DM_VSETUP_MENU_YC + (menuChoice * menuEntryHeight),
-            DM_VSETUP_MENU_XC + DM_VSETUP_MENU_WIDTH,
-            DM_VSETUP_MENU_YC + (menuChoice * menuEntryHeight) + menuEntryHeight + 2,
-            dmMapRGBA(engine.screen, 255, 255, 255, 100));
+            DM_VSETUP_MENU_WIDTH, menuEntryHeight + 2,
+            engine.screen,
+            200 + sin(t * 10.0) * 50);
             
         for (entry = 0; entry < nmenuList && entry < menuHeight; entry++)
         {
-            snprintf(menuStr, sizeof(menuStr), "SUPERMEGA %d", menuHeight);
+            snprintf(menuStr, sizeof(menuStr), "%4d X %4d", 640 * (entry + 1), 480 * (entry + 1));
             dmDrawBMTextConst(
                 engine.screen, menuFont, DMD_TRANSPARENT,
                 DM_VSETUP_MENU_XC + 2,
@@ -311,6 +323,10 @@
     }
 
 out:
+    SDL_FreeSurface(menuBgImage);
+    SDL_FreeSurface(menuBarImage);
+    dmFreeBitmapFont(menuFont);
+    
     return menuState;
 }