All pastes #960885 Raw Edit

Zeug

public c v1 · immutable
#960885 ·published 2008-03-28 15:00 UTC
rendered paste body
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: viewport.c 16812 2008-03-26 03:35:24Z jdgordon $ * * Copyright (C) 2008 by Jonathan Gordon * * 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 "config.h"#include "lcd.h"#include "lcd-remote.h"#include "font.h"#include "sprintf.h"#include "string.h"#include "settings.h"#include "kernel.h"#include "system.h"#include "misc.h"#include "atoi.h"#include "viewport.h"#include "statusbar.h"#include "screen_access.h"#include "debug.h"#define VP_STRUCTURE_PARAM_ERROR 0int viewport_get_nb_lines(struct viewport *vp){#ifdef HAVE_LCD_BITMAP    return vp->height/font_get(vp->font)->height;#else    (void)vp;    return 2;#endif}void viewport_set_defaults(struct viewport *vp, enum screen_type screen){    vp->xmargin = 0;    vp->ymargin = 0;    vp->x = 0;    vp->width = screens[screen].width;        vp->y = global_settings.statusbar?STATUSBAR_HEIGHT:0;    vp->height = screens[screen].height - vp->y;#ifdef HAVE_LCD_BITMAP    vp->drawmode = DRMODE_SOLID;    vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */#endif#ifdef HAVE_REMOTE_LCD    /* We only need this test if there is a remote LCD */    if (screen == SCREEN_MAIN)#endif    {#ifdef HAVE_LCD_COLOR        vp->fg_pattern = global_settings.fg_color;        vp->bg_pattern = global_settings.bg_color;        vp->lss_pattern = global_settings.lss_color;        vp->lse_pattern = global_settings.lse_color;        vp->lst_pattern = global_settings.lst_color;#elif LCD_DEPTH > 1        vp->fg_pattern = LCD_DEFAULT_FG;        vp->bg_pattern = LCD_DEFAULT_BG;#endif    }#if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1    if (screen == SCREEN_REMOTE)    {        vp->fg_pattern = LCD_REMOTE_DEFAULT_FG;        vp->bg_pattern = LCD_REMOTE_DEFAULT_BG;    }#endif}/* custonlist code handles status bar seperately, since statusbar height * is ignored when the list y position > statusbar height */void viewport_set_defaults_ignoring_statusbar(struct viewport *vp, enum screen_type screen){    viewport_set_defaults(vp, screen);    vp->y = 0;    vp->height = screens[screen].height;}int viewport_parse_viewport(struct viewport *vp,         const char *bufptr, const char seperator, enum screen_type screen){    /* parse the list to the viewport struct */    char *ptr = bufptr;#if LCD_DEPTH > 2    if (!(ptr = parse_list("dddddcc", seperator, ptr, &vp->x, &vp->y, &vp->width,        &vp->height, &vp->font, &vp->fg_pattern,&vp->bg_pattern)))#endif#if (LCD_DEPTH == 2) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH == 2)    if (!(ptr = parse_list("dddddgg", seperator, ptr, &vp->x, &vp->y, &vp->width,            &vp->height, &vp->font, &vp->fg_pattern, &vp->bg_pattern)))#endif#if (LCD_DEPTH == 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH == 1)    if (!(ptr = parse_list("ddddd", seperator, ptr, &vp->x, &vp->y, &vp->width,                                                  &vp->height, &vp->font)))#endif    {        return VP_STRUCTURE_PARAM_ERROR;    }    /* Validate the viewport dimensions - we know that the numbers are       non-negative integers */    if ((vp->x >= screens[screen].width) ||        ((vp->x + vp->width) > screens[screen].width) ||        (vp->y >= screens[screen].height) ||        ((vp->y + vp->height) > screens[screen].height))    {        return VP_STRUCTURE_PARAM_ERROR;    }    /* Default to using the user font if the font was an invalid number */    if ((vp->font != FONT_SYSFIXED) && (vp->font != FONT_UI))        vp->font = FONT_UI;    return ptr;}