]> git.localhorst.tv Git - l2e.git/blobdiff - src/graphics/Menu.h
added cursor sprite for menu
[l2e.git] / src / graphics / Menu.h
index 083e741864b552b161173f5b117ed09c9d4f8f34..ab661c7660a94f561ba394b5e35bab725b71f5fa 100644 (file)
@@ -9,6 +9,7 @@
 #define GRAPHICS_MENU_H_
 
 #include "Font.h"
+#include "Sprite.h"
 #include "../geometry/operators.h"
 #include "../geometry/Point.h"
 #include "../geometry/Vector.h"
@@ -27,7 +28,8 @@ template<class T>
 class Menu {
 
 public:
-       explicit Menu(const Font *font = NULL, int charsPerEntry = 16, int rows = 1, int rowGap = 0, int cols = 1, int colGap = 0);
+       Menu();
+       Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap = 0, int cols = 1, int colGap = 0);
 
 public:
        int Width() const;
@@ -71,6 +73,8 @@ private:
                bool enabled;
        };
        const Font *font;
+       const Font *disabledFont;
+       const Sprite *cursor;
        std::vector<Entry> entries;
        int charsPerEntry;
        int rows;
@@ -84,8 +88,25 @@ private:
 
 
 template<class T>
-Menu<T>::Menu(const Font *font, int charsPerEntry, int rows, int rowGap, int cols, int colGap)
+Menu<T>::Menu()
+: font(0)
+, disabledFont(0)
+, cursor(0)
+, charsPerEntry(0)
+, rows(0)
+, rowGap(0)
+, cols(0)
+, colGap(0)
+, selected(0)
+, topRow(0) {
+
+}
+
+template<class T>
+Menu<T>::Menu(const Font *font, const Font *disabledFont, const Sprite *cursor, int charsPerEntry, int rows, int rowGap, int cols, int colGap)
 : font(font)
+, disabledFont(disabledFont ? disabledFont : font)
+, cursor(cursor)
 , charsPerEntry(charsPerEntry)
 , rows(rows)
 , rowGap(rowGap)
@@ -147,9 +168,19 @@ void Menu<T>::Draw(SDL_Surface *dest, geometry::Point<int> position) const {
        int items(entries.size() - start);
        int end(items < slots ? items : slots);
        for (int i(0), count(end - start); i < count; ++i) {
-               geometry::Vector<int> offset((i % cols) * (ColWidth() + colGap), (i / cols) * RowHeight());
-               font->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry);
+               geometry::Vector<int> offset(
+                               (i % cols) * (ColWidth() + colGap),
+                               (i / cols) * RowHeight());
+               if (entries[start + i].enabled) {
+                       font->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry);
+               } else {
+                       disabledFont->DrawString(entries[start + i].title, dest, position + offset, charsPerEntry);
+               }
        }
+       geometry::Vector<int> cursorOffset(
+                       (selected % cols) * (ColWidth() + colGap) - cursor->Width(),
+                       (selected / cols) * RowHeight());
+       cursor->Draw(dest, position + cursorOffset);
 }
 
 }