From 93b2f9fd447b73fff736d71826880ef9ac64bd94 Mon Sep 17 00:00:00 2001 From: Kevin Ferrare Date: Sat, 4 Aug 2007 03:01:46 +0000 Subject: Rewrote the clock plugin in a cleaner and more modular way so that it can scale on remote screens. Use left-right keys to change the type of clock displayed (analogic, digital, binary) and up/downto change the look of the clock git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14174 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/clock/clock_draw_digital.c | 87 +++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 apps/plugins/clock/clock_draw_digital.c (limited to 'apps/plugins/clock/clock_draw_digital.c') diff --git a/apps/plugins/clock/clock_draw_digital.c b/apps/plugins/clock/clock_draw_digital.c new file mode 100644 index 0000000000..9fff47c520 --- /dev/null +++ b/apps/plugins/clock/clock_draw_digital.c @@ -0,0 +1,87 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: jackpot.c 14034 2007-07-28 05:42:55Z kevin $ + * + * Copyright (C) 2007 Copyright Kévin Ferrare + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "clock.h" +#include "clock_draw_digital.h" +#include "clock_bitmap_strings.h" +#include "clock_bitmaps.h" +#include "picture.h" + +const struct picture* digits_skin[]={digits,segments}; +const struct picture* smalldigits_skin[]={smalldigits,smallsegments}; + +#define buffer_printf(buffer, buffer_pos, ... ) \ + buffer_pos+=rb->snprintf(&buffer[buffer_pos], sizeof(buffer)-buffer_pos, __VA_ARGS__); + +void digital_clock_draw(struct screen* display, + struct time* time, + struct clock_settings* settings, + struct counter* counter, + int skin){ + bool display_colon; + const struct picture* digits_bitmaps = &(digits_skin[skin][display->screen_type]); + const struct picture* smalldigits_bitmaps = &(smalldigits_skin[skin][display->screen_type]); + int hour=time->hour; + int str_w, str_h; + char buffer[20]; + int buffer_pos=0; + + if(settings->digital.blinkcolon){ + display_colon=(time->second%2==0); + } + else + display_colon=true; + + if(settings->general.hour_format==H12){/* AM/PM format */ + if(hour>12){ + buffer_printf(buffer, buffer_pos, "P");/* AM */ + /* readjust the hour to 12-hour format + * ( 13:00+ -> 1:00+ ) */ + hour -= 12; + }else + buffer_printf(buffer, buffer_pos, "A");/* AM */ + } + buffer_printf(buffer, buffer_pos, "%02d", hour); + buffer_printf(buffer, buffer_pos, "%c", display_colon?':':' '); + buffer_printf(buffer, buffer_pos, "%02d", time->minute); + getstringsize(digits_bitmaps, buffer, &str_w, &str_h); + draw_string(display, digits_bitmaps, buffer, (display->width-str_w)/2, 0); + if(settings->digital.show_seconds){ + buffer_pos=0; + buffer_printf(buffer, buffer_pos, "%02d", time->second); + getstringsize(digits_bitmaps, buffer, &str_w, &str_h); + draw_string(display, digits_bitmaps, buffer, (display->width-str_w)/2, + digits_bitmaps->height); + } + if(settings->general.date_format!=NONE){ + format_date(buffer, time, settings->general.date_format); + getstringsize(smalldigits_bitmaps, buffer, &str_w, &str_h); + draw_string(display, smalldigits_bitmaps, buffer, (display->width-str_w)/2, + display->height-smalldigits_bitmaps->height*2); + } + if(counter){ + struct time counter_time; + counter_get_elapsed_time(counter, &counter_time); + rb->snprintf(buffer, 20, "%02d:%02d:%02d", + counter_time.hour, counter_time.minute, counter_time.second); + getstringsize(smalldigits_bitmaps, buffer, &str_w, &str_h); + draw_string(display, smalldigits_bitmaps, buffer, (display->width-str_w)/2, + display->height-str_h); + } +} -- cgit v1.2.3