]> git.sesse.net Git - ccbs/commitdiff
Parametrize color scheme into a separate header file.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 18 Feb 2012 16:21:51 +0000 (17:21 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 18 Feb 2012 16:21:51 +0000 (17:21 +0100)
bigscreen/design.h [new file with mode: 0644]
bigscreen/fonts.cpp
bigscreen/fonts.h
bigscreen/groupscreen.cpp
bigscreen/splitscreen.cpp
bigscreen/top10scorescreen.cpp
bigscreen/top5chosenscreen.cpp

diff --git a/bigscreen/design.h b/bigscreen/design.h
new file mode 100644 (file)
index 0000000..6cffd32
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef DESIGN_H
+#define DESIGN_H 1
+
+#define BACKGROUND_RED 0
+#define BACKGROUND_GREEN 0
+#define BACKGROUND_BLUE 0
+
+#define MAIN_HEADING_RED 255
+#define MAIN_HEADING_GREEN 255
+#define MAIN_HEADING_BLUE 255
+
+#define COLUMN_HEADING_RED 255
+#define COLUMN_HEADING_GREEN 255
+#define COLUMN_HEADING_BLUE 255
+
+#define ROW_HEADING_RED 255
+#define ROW_HEADING_GREEN 255
+#define ROW_HEADING_BLUE 255
+
+#define DATA_RED 255
+#define DATA_GREEN 255
+#define DATA_BLUE 255
+
+#define FRESH_DATA_RED 255
+#define FRESH_DATA_GREEN 0
+#define FRESH_DATA_BLUE 0
+
+#define DIVIDER_RED 127
+#define DIVIDER_GREEN 127
+#define DIVIDER_BLUE 127
+
+#endif
index df2360be5fc37436e1f005cf6aab9c4994093295..86910a6b2757a4c27974274eecc2b874fde95eb4 100644 (file)
@@ -126,13 +126,19 @@ unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, in
        return x * LOGICAL_SCREEN_WIDTH / screen_width;
 }
 
-void my_draw_text_deferred(std::vector<TextDefer> &td, const widestring &str, double size, int xpos, int ypos)
+void my_draw_text_deferred(std::vector<TextDefer> &td, const widestring &str, double size, int xpos, int ypos, int r, int g, int b, int rn, int gn, int bn)
 {
        TextDefer newtd;
        newtd.str = str;
        newtd.size = size;
        newtd.xpos = xpos;
        newtd.ypos = ypos;
+       newtd.r = r;
+       newtd.g = g;
+       newtd.b = b;
+       newtd.rn = rn;
+       newtd.gn = gn;
+       newtd.bn = bn;
        td.push_back(newtd);
 }
 
@@ -142,11 +148,13 @@ void draw_all_deferred_text(unsigned char *buf, std::vector<TextDefer> &current,
                int r, g, b;
                if (i < old.size() && current[i].str != old[i].str) {
                        // changed text
-                       r = 255;
-                       g = 0;
-                       b = 0;
+                       r = current[i].rn;
+                       g = current[i].gn;
+                       b = current[i].bn;
                } else {
-                       r = g = b = 255;
+                       r = current[i].r;
+                       g = current[i].g;
+                       b = current[i].b;
                }       
                
                my_draw_text(current[i].str, buf, current[i].size, current[i].xpos, current[i].ypos, r, g, b);
index eb7b6fa6cde447ad0ae87bfa3e24545aef696730..6950168432abb4f0d6973f91ef5ba6776d50b8d3 100644 (file)
@@ -5,21 +5,24 @@
 #include FT_FREETYPE_H
 #include <vector>
 #include "widestring.h"
+#include "design.h"
 
 struct TextDefer {
        widestring str;
        double size;
        unsigned xpos, ypos;
+       int r, g, b;
+       int rn, gn, bn;
 
        bool changed;
 };
 
 void init_freetype();
 void set_screen_size(unsigned width, unsigned height);
-unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, int xpos = 0, int ypos = 0, int r = 255, int g = 255, int b = 255);
+unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, int xpos = 0, int ypos = 0, int r = DATA_RED, int g = DATA_GREEN, int b = DATA_BLUE);
 
 // draw_all_deferred_text draws every string in current that is not the same in old, in red
-void my_draw_text_deferred(std::vector<TextDefer> &td, const widestring &str, double size, int xpos, int ypos);
+void my_draw_text_deferred(std::vector<TextDefer> &td, const widestring &str, double size, int xpos, int ypos, int r = DATA_RED, int g = DATA_GREEN, int b = DATA_BLUE, int rn = FRESH_DATA_RED, int gn = FRESH_DATA_GREEN, int bn = FRESH_DATA_BLUE);
 void draw_all_deferred_text(unsigned char *buf, std::vector<TextDefer> &current, std::vector<TextDefer> &old);
 
 #endif /* !defined(_FONTS_H) */
index 88fce1cc03606f527cce3c12158cd641c2956466..6639f4c057db0a83494ebe10e5c07963d9c1656e 100644 (file)
@@ -3,6 +3,7 @@
 #include <map>
 #include <assert.h>
 
+#include "design.h"
 #include "resolution.h"
 #include "groupscreen.h"
 #include "fetch_group.h"
@@ -60,7 +61,7 @@ void GroupScreen::draw_main_heading(std::vector<TextDefer> &td)
        }
 
        unsigned width = my_draw_text(heading, NULL, 40.0);
-       my_draw_text_deferred(td, heading, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60);
+       my_draw_text_deferred(td, heading, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60, MAIN_HEADING_RED, MAIN_HEADING_GREEN, MAIN_HEADING_BLUE);
 }
 
 // make column headings from the first player's songs
@@ -73,16 +74,16 @@ void GroupScreen::draw_column_headings(std::vector<TextDefer> &td, const Group &
        for (std::vector<Score>::const_iterator i = group.players[0].scores.begin(); i != group.players[0].scores.end(); ++i, ++col) {
                if (!i->chosen) {
                        unsigned this_width = my_draw_text(i->song.short_title, NULL, 12.0);
-                       my_draw_text_deferred(td, i->song.short_title, 12.0, x + colwidth[col] / 2 - this_width / 2, 100);
+                       my_draw_text_deferred(td, i->song.short_title, 12.0, x + colwidth[col] / 2 - this_width / 2, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
                }
                x += colwidth[col] + 20;
        }
 
        if (num_scores > 1) {
-               my_draw_text_deferred(td, "Total", 12.0, x + colwidth[num_scores + 1] / 2 - my_draw_text("Total", NULL, 12.0) / 2, 100);
+               my_draw_text_deferred(td, "Total", 12.0, x + colwidth[num_scores + 1] / 2 - my_draw_text("Total", NULL, 12.0) / 2, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
                x += colwidth[num_scores + 1] + 20;
        }
-       my_draw_text_deferred(td, "Rank", 12.0, x + colwidth[num_scores + 2] / 2 - my_draw_text("Rank", NULL, 12.0) / 2, 100);
+       my_draw_text_deferred(td, "Rank", 12.0, x + colwidth[num_scores + 2] / 2 - my_draw_text("Rank", NULL, 12.0) / 2, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
 }      
        
 // show all the players and the scores
@@ -100,7 +101,7 @@ void GroupScreen::draw_scores(std::vector<TextDefer> &td, const Group &group, un
                if (m-1 < min_player)
                        continue;
 
-               my_draw_text_deferred(td, i->nick, 18.0, 20, y);
+               my_draw_text_deferred(td, i->nick, 18.0, 20, y, ROW_HEADING_RED, ROW_HEADING_GREEN, ROW_HEADING_BLUE);
 
                x = 40 + colwidth[0];
 
@@ -601,7 +602,13 @@ void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height)
        conn.perform(FetchGroup(tournament, round, parallel, &group));
        gettimeofday(&last_updated, NULL);
 
-       memset(buf, 0, width * height * 4);
+       unsigned char *ptr = buf;
+       for (unsigned i = 0; i < width * height; ++i) {
+               *ptr++ = BACKGROUND_BLUE;
+               *ptr++ = BACKGROUND_GREEN;
+               *ptr++ = BACKGROUND_RED;
+               *ptr++ = 0;
+       }
 
        std::vector<unsigned> colwidth;
        
index e4bb4c441155ec962ee92a0ec2366f3607c04c4b..b2939be755e2769eef5656bf0bd1e036a6388978 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <cstring>
 #include "splitscreen.h"
+#include "design.h"
 
 SplitScreen::SplitScreen(GenericScreen *s1, GenericScreen *s2, GenericScreen *s3, GenericScreen *s4)
        : valid(false)
@@ -52,17 +53,17 @@ void SplitScreen::draw(unsigned char *buf, unsigned width, unsigned height)
        // make divider lines
        unsigned char *ptr = buf + (height/2) * width * 4;
        for (unsigned x = 0; x < width; ++x) {
-               *ptr++ = 255;
-               *ptr++ = 255;
-               *ptr++ = 255;
+               *ptr++ = DIVIDER_BLUE;
+               *ptr++ = DIVIDER_GREEN;
+               *ptr++ = DIVIDER_RED;
                *ptr++ = 0;
        }
        
        ptr = buf + (width/2) * 4;
        for (unsigned y = 0; y < height; ++y) {
-               ptr[0] = 255;
-               ptr[1] = 255;
-               ptr[2] = 255;
+               ptr[0] = DIVIDER_BLUE;
+               ptr[1] = DIVIDER_GREEN;
+               ptr[2] = DIVIDER_RED;
                ptr[3] = 0;
 
                ptr += width * 4;
index 275a4f5dc998531f1d97dcb8186264cf0b3f841f..5ff01a88f54db6f9689c52d928aa690d483b0dfb 100644 (file)
@@ -45,7 +45,13 @@ bool Top10ScoreScreen::check_invalidated()
 void Top10ScoreScreen::draw(unsigned char *buf, unsigned width, unsigned height)
 {
        scores_changed.reset_flag();
-       memset(buf, 0, width * height * 4);
+       unsigned char *ptr = buf;
+       for (unsigned i = 0; i < width * height; ++i) {
+               *ptr++ = BACKGROUND_BLUE;
+               *ptr++ = BACKGROUND_GREEN;
+               *ptr++ = BACKGROUND_RED;
+               *ptr++ = 0;
+       }
        set_screen_size(width, height);
 
        // fetch the top 10 scores
@@ -54,28 +60,30 @@ void Top10ScoreScreen::draw(unsigned char *buf, unsigned width, unsigned height)
 
        {
                unsigned width = my_draw_text("Today's top 10 scores", NULL, 40.0);
-               my_draw_text("Today's top 10 scores", buf, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60);
+               my_draw_text("Today's top 10 scores", buf, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60, MAIN_HEADING_RED, MAIN_HEADING_GREEN, MAIN_HEADING_BLUE);
        }
 
        // simple headings
-       my_draw_text("Player", buf, 12.0, PLAYER_X, 100);
-       my_draw_text("Song", buf, 12.0, SONG_X, 100);
+       my_draw_text("Player", buf, 12.0, PLAYER_X, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
+       my_draw_text("Song", buf, 12.0, SONG_X, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
        width = my_draw_text("Score", NULL, 12.0);
-       my_draw_text("Score", buf, 12.0, SCORE_X - width/2, 100);
+       my_draw_text("Score", buf, 12.0, SCORE_X - width/2, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
        
        unsigned row = 1, y = 140;
        for (std::vector<TopScore>::const_iterator i = scores.begin(); i != scores.end(); ++i) {
                char str[16];
-               unsigned r = 255, g = 255, b = 255;
+               unsigned r = DATA_RED, g = DATA_GREEN, b = DATA_BLUE, rh = ROW_HEADING_RED, gh = ROW_HEADING_GREEN, bh = ROW_HEADING_BLUE;
 
                // print new entries in red
                if (seen_topscore.count(*i) == 0 && seen_topscore.size() > 0) {
-                       g = b = 0;
+                       r = rh = FRESH_DATA_RED;
+                       g = gh = FRESH_DATA_GREEN;
+                       b = bh = FRESH_DATA_BLUE;
                }
 
                std::sprintf(str, "%u", row++);
                unsigned width = my_draw_text(str, NULL, 24.0);
-               my_draw_text(str, buf, 24.0, RANK_X - width/2, y);
+               my_draw_text(str, buf, 24.0, RANK_X - width/2, y, rh, gh, bh);
 
                my_draw_text(i->nick, buf, 24.0, PLAYER_X, y, r, g, b);
 
index 5d2e9dc947bbe421897a65e4f2e5d5fda3f1e660..3f50f82d121095e42c0bdc941f09b62564207133 100644 (file)
@@ -44,7 +44,13 @@ bool Top5ChosenScreen::check_invalidated()
 void Top5ChosenScreen::draw(unsigned char *buf, unsigned width, unsigned height)
 {
        scores_changed.reset_flag();
-       memset(buf, 0, width * height * 4);
+       unsigned char *ptr = buf;
+       for (unsigned i = 0; i < width * height; ++i) {
+               *ptr++ = BACKGROUND_BLUE;
+               *ptr++ = BACKGROUND_GREEN;
+               *ptr++ = BACKGROUND_RED;
+               *ptr++ = 0;
+       }
        set_screen_size(width, height);
 
        // fetch the top 5 chosen songs
@@ -53,27 +59,29 @@ void Top5ChosenScreen::draw(unsigned char *buf, unsigned width, unsigned height)
 
        {
                unsigned width = my_draw_text("Today's top 5 chosen songs", NULL, 40.0);
-               my_draw_text("Today's top 5 chosen songs", buf, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60);
+               my_draw_text("Today's top 5 chosen songs", buf, 40.0, LOGICAL_SCREEN_WIDTH/2 - width/2, 60, MAIN_HEADING_RED, MAIN_HEADING_GREEN, MAIN_HEADING_BLUE);
        }
 
        // simple headings
-       my_draw_text("Song", buf, 12.0, SONG_X, 100);
+       my_draw_text("Song", buf, 12.0, SONG_X, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
        width = my_draw_text("Frequency", NULL, 12.0);
-       my_draw_text("Frequency", buf, 12.0, FREQUENCY_X - width/2, 100);
+       my_draw_text("Frequency", buf, 12.0, FREQUENCY_X - width/2, 100, COLUMN_HEADING_RED, COLUMN_HEADING_GREEN, COLUMN_HEADING_BLUE);
        
        unsigned row = 1, y = 140;
        for (std::vector<TopChosen>::const_iterator i = scores.begin(); i != scores.end(); ++i) {
                char str[16];
-               unsigned r = 255, g = 255, b = 255;
+               unsigned r = DATA_RED, g = DATA_GREEN, b = DATA_BLUE, rh = ROW_HEADING_RED, gh = ROW_HEADING_GREEN, bh = ROW_HEADING_BLUE;
 
                // print new entries in red
                if (seen_topchosen.count(*i) == 0 && seen_topchosen.size() > 0) {
-                       g = b = 0;
+                       r = rh = FRESH_DATA_RED;
+                       g = gh = FRESH_DATA_GREEN;
+                       b = bh = FRESH_DATA_BLUE;
                }
 
                std::sprintf(str, "%u", row++);
                unsigned width = my_draw_text(str, NULL, 24.0);
-               my_draw_text(str, buf, 24.0, RANK_X - width/2, y);
+               my_draw_text(str, buf, 24.0, RANK_X - width/2, y, rh, gh, bh);
 
                if (my_draw_text(i->title, NULL, 24.0) > SONG_MAX_WIDTH) {
                        my_draw_text(i->shorttitle, buf, 24.0, SONG_X, y, r, g, b);