badge/ui/event.c \\r
badge/ui/font.c \\r
badge/ui/menu.c \\r
- badge/ui/sprite.c\r
+ badge/ui/sprite.c \\r
+ badge/ui/vanity.c\r
\r
SRCS += \\r
dataflash/iobase.c \\r
#include "ui/font.h"
#include "ui/menu.h"
#include "ui/sprite.h"
+#include "ui/vanity.h"
#include "util/util.h"
#include "jumpnrun/jumpnrun.h"
scrolltest();
}
+ if(badge_input_raw() & BADGE_EVENT_KEY_LEFT) {
+ badge_vanity_show();
+ }
+
jumpnrun_play();
usbmode();
--- /dev/null
+#include "vanity.h"
+
+#include "display.h"
+#include "event.h"
+#include <drivers/fatfs/ff.h>
+
+#define VANITY_IMAGE_FILE "/vanity.dat"
+
+void badge_vanity_read_from_fd(FIL *fd, badge_framebuffer *dest) {
+ UINT bytes;
+ f_read(fd, dest, sizeof(*dest), &bytes);
+}
+
+void badge_vanity_show(void) {
+ FIL fd;
+ badge_framebuffer fb;
+
+ if(FR_OK == f_open(&fd, VANITY_IMAGE_FILE, FA_OPEN_EXISTING | FA_READ)) {
+ badge_vanity_read_from_fd(&fd, &fb);
+ f_close(&fd);
+
+ badge_framebuffer_flush(&fb);
+
+ badge_event_t ev;
+ do {
+ ev = badge_event_wait();
+ } while(badge_event_type(ev) != BADGE_EVENT_USER_INPUT);
+
+ for(;;);
+ }
+}
--- /dev/null
+#ifndef INCLUDED_BADGE_UI_VANITY_H
+#define INCLUDED_BADGE_UI_VANITY_H
+
+void badge_vanity_show(void);
+
+#endif
--- /dev/null
+/* XPM */
+static char * test_xpm[] = {
+"96 68 2 1",
+" g #FFFFFF",
+". g #000000",
+" ",
+" ",
+" ",
+" ",
+" ............. ",
+" ................. .. ",
+" .. . .. ........ ",
+" ..... .. . . ... . ",
+" .. ... .. .. .. ... ",
+" . . .......... ............ ..... ",
+" . .... ..... .... ",
+" . . . . .. ",
+" . . .... ",
+" .. . ",
+" ... ",
+" . ",
+" .. ",
+" .. ",
+" .............. .. ",
+" ..... .. .. ",
+" ..... .. . . ",
+" ... . . . ",
+" . .. . . ",
+" . . . . ",
+" . .. . ",
+" . ..... ",
+" . . . ",
+" . . . . ",
+" .. .............. . ",
+" . . . ......... ",
+" . . . ",
+" . . . ",
+" . .. .. ",
+" . ..... . . . ",
+" . .. .. ... . . ",
+" . . . . . . . ",
+" . .. .. . . . . ",
+" . . . . .. . . ",
+" . . .. .. .. . . ",
+" . . .. .. .. . .. ",
+" . .... .. .. . . ",
+" . .... . . . . ",
+" . . ...... . .. ... ",
+" .. . .... ... ",
+" . . ......... ",
+" .. . ...... ",
+" .... ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ............ ........................................... ",
+" ...... .... .. .. ... .. .... ",
+" .. .. .. ....... . . . ",
+" . .. . . ..... .. ",
+" . ... ... ",
+" ..... ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+#include <SFML/Graphics/Image.hpp>
+
+#include <cmath>
+#include <fstream>
+#include <iostream>
+#include <numeric>
+
+#include <badge/ui/display.h>
+
+double square(double x) { return x * x; }
+
+int main(int argc, char *argv[]) {
+ if(argc != 2) {
+ std::cerr << "Usage: " << argv[0] << " [ FILE ]\n";
+ return -1;
+ }
+
+ sf::Image img;
+ if(!img.loadFromFile(argv[1])) {
+ std::cerr << "Could not open file.\n";
+ return -2;
+ }
+
+ if(img.getSize().x != BADGE_DISPLAY_WIDTH ||
+ img.getSize().y != BADGE_DISPLAY_HEIGHT) {
+ std::cerr << "Image must be " << BADGE_DISPLAY_WIDTH << "x" << BADGE_DISPLAY_HEIGHT << " pixels.\n";
+ return -3;
+ }
+
+ badge_framebuffer fb = { { { 0 } } };
+
+ for(unsigned x = 0; x < BADGE_DISPLAY_WIDTH; ++x) {
+ for(unsigned y = 0; y < BADGE_DISPLAY_HEIGHT; ++y) {
+ sf::Color c = img.getPixel(x, y);
+
+ if(std::sqrt(0.241 * square(c.r / 255.) + 0.691 * square(c.g / 255.) + 0.068 * square(c.b / 255.)) < 0.5) {
+ badge_framebuffer_pixel_on(&fb, x, y);
+ }
+ }
+ }
+
+ std::ofstream out("vanity.dat", std::ios::out | std::ios::binary);
+
+ if(out) {
+ out.write(static_cast<char const *>(static_cast<void const *>(&fb)), sizeof(fb));
+ }
+
+ return 0;
+}