/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

#ifndef __LCD_DISPBOX_H_
#define __LCD_DISPBOX_H_

#include "DemobinHeader.h"

//------------------------------------------------------------------------------
//      Definitions
//------------------------------------------------------------------------------

///display margin in pixel in dispbox area
#define DISPMARGIN 2
///line distance in pixel in dispbox area
#define LINEDISTANCE 2
///char distance in pixel, actually this is used to meet API LIB DrawString(...)
#define CHARDISTANCE 2
///status of enable display box
#define DISPBOX_ENABLE 1
///status of disable display box
#define DISPBOX_DISABLE 0

typedef struct _DISPBOX_ZONE {
  /// display box top
  unsigned int top;
  /// display box left
  unsigned int left;
  /// display box width
  unsigned int width;
  /// display box height
  unsigned int height;  
} TDISPBOX_ZONE;

typedef struct _DISPBOX_INFO {
  unsigned int dispBoxEnable;
  TDISPBOX_ZONE dispBoxZone;
  unsigned int bgColor;// background color
  unsigned int fontColor;// font color of display box
  unsigned int xCursor;
  unsigned int yCursor;
} TDISPBOX_INFO;

typedef struct _DISPBOX_MGR {
  unsigned int dispBoxCount;
  TDISPBOX_INFO dispBoxInfo[MAX_DISPBOX_PER_SLIDE];
} TDISPBOX_MGR;

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------

//set display box position info
extern void SetDispBoxPos(
                   unsigned int dispBoxID, 
                   unsigned int enabledispbox, 
                   unsigned int top,
                   unsigned int left,
                   unsigned int width,
                   unsigned int height);

//Draw a string in display box with 
extern void DrawStringInDispBox(
    // lcd frame buffer address
    void *pBuffer,
    // display box ID, starting from 1
    unsigned int dispBoxID,
    //pointer to string for show
    const char *pStr,
    //display string font color,
    unsigned int fontColor,
    //display string background color, 0xFFFFFFFF means no need to set bgColor
    unsigned int bgColor,
    //flag for scroll way, current only support 'clear or not clear display box'
    //when display string reach end and roll back to show. 
    //0 means clear, 1 means don't clear.
    unsigned int scrollFlag);

//Draw a string in display box with default font color
extern void DrawStrInDispBoxDefault(void *pBuffer, unsigned int dispBoxID, const char *pStr);

//Draw a string in display box with default font and background color
//if scroll back, don't clear
void DrawStrInDispBoxScrollNoClear(void *pBuffer, unsigned int dispBoxID, const char *pStr);

//clear display box zone with 'color'
extern void ClearDispBoxZoneColor(unsigned int dispBoxID, unsigned int color);

//Clear display box with default background color
extern void ClearDispBoxZoneDefault(unsigned int dispBoxID);

//disable display box
extern void DisableDispBox(unsigned int dispBoxID);

//enable display box
extern void EnableDispBox(unsigned int dispBoxID);

#endif

