summaryrefslogtreecommitdiffstats
path: root/minui
diff options
context:
space:
mode:
authorCEnnis91 <cennis91@gmail.com>2013-05-02 13:29:53 -0400
committerTom Marshall <tdm@cyngn.com>2015-11-20 15:46:40 -0800
commit9dc02b1f906832f2e741d7a73469e1f874dd52da (patch)
tree6e9cae0aba6e6383345075effa9bc52df6219920 /minui
parent27b1a0ff456b7a21923aea866976cdd8b00c8379 (diff)
downloadbootable_recovery-9dc02b1f906832f2e741d7a73469e1f874dd52da.zip
bootable_recovery-9dc02b1f906832f2e741d7a73469e1f874dd52da.tar.gz
bootable_recovery-9dc02b1f906832f2e741d7a73469e1f874dd52da.tar.bz2
OMGRainbows
No longer will we get bad reviews on CWM recovery for its lack of rainbows! Originally design by gweedo767, this patch brings back the wrap count mechanism from v2.0.2.4 to toggle Rainbow Mode for the user. In the original design, every character has a different color, but that method requires modifying graphics.c which will cause breakage in devices with custom graphics.c. This Rainbow Mode has a different color for each line, instead. The wrap_count has been set to 5 instead of the previous 3 so the toggle won't occur as often, if on accident. (port to CM12.1 by cyanogen) Change-Id: Ie9f6f1b6ed94ee69d4d8d9fe27f9a5417cc3f212 improve Rainbow Mode * Require 5 consecutive menu "wraps" in the same direction to help prevent accidental toggling * Align colors into stripes (i.e. columns) a) less prone to induce dizziness in some people when they change b) better resembles a rainbow * Move the stripes to the right when the selection moves up and move the stripes to the left when the selection moves down Change-Id: I3feae173b22f5703c554ca33e634881749ff54cf
Diffstat (limited to 'minui')
-rw-r--r--minui/graphics.cpp32
-rw-r--r--minui/minui.h3
2 files changed, 35 insertions, 0 deletions
diff --git a/minui/graphics.cpp b/minui/graphics.cpp
index c0eea9e..43c28ce 100644
--- a/minui/graphics.cpp
+++ b/minui/graphics.cpp
@@ -103,6 +103,36 @@ static void text_blend(unsigned char* src_p, int src_row_bytes,
}
}
+static int rainbow_index = 0;
+static int rainbow_enabled = 0;
+static int rainbow_colors[] = { 255, 0, 0, // red
+ 255, 127, 0, // orange
+ 255, 255, 0, // yellow
+ 0, 255, 0, // green
+ 60, 80, 255, // blue
+ 143, 0, 255 }; // violet
+static int num_rb_colors =
+ (sizeof(rainbow_colors)/sizeof(rainbow_colors[0])) / 3;
+
+static void rainbow(int col) {
+ int rainbow_color = ((rainbow_index + col) % num_rb_colors) * 3;
+ gr_color(rainbow_colors[rainbow_color], rainbow_colors[rainbow_color+1],
+ rainbow_colors[rainbow_color+2], 255);
+}
+
+void set_rainbow_mode(int enabled) {
+ rainbow_enabled = enabled;
+}
+
+void move_rainbow(int x) {
+ rainbow_index += x;
+ if (rainbow_index < 0) {
+ rainbow_index = num_rb_colors - 1;
+ } else if (rainbow_index >= num_rb_colors) {
+ rainbow_index = 0;
+ }
+}
+
void gr_text(int x, int y, const char *s, bool bold)
{
GRFont* font = gr_font;
@@ -116,6 +146,8 @@ void gr_text(int x, int y, const char *s, bool bold)
unsigned char ch;
while ((ch = *s++)) {
+ if (rainbow_enabled) rainbow(x / font->cwidth);
+
if (outside(x, y) || outside(x+font->cwidth-1, y+font->cheight-1)) break;
if (ch < ' ' || ch > '~') {
diff --git a/minui/minui.h b/minui/minui.h
index bdde083..d714632 100644
--- a/minui/minui.h
+++ b/minui/minui.h
@@ -120,4 +120,7 @@ int res_create_localized_alpha_surface(const char* name, const char* locale,
// functions.
void res_free_surface(GRSurface* surface);
+void set_rainbow_mode(int enabled);
+void move_rainbow(int x);
+
#endif