From 788db64b8642bf31de6930d18a62177c64163ee0 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 13 Mar 2015 12:24:02 +0200 Subject: Add grlib, fixes #5 --- grlib/context.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 grlib/context.c (limited to 'grlib/context.c') diff --git a/grlib/context.c b/grlib/context.c new file mode 100644 index 0000000..11014b5 --- /dev/null +++ b/grlib/context.c @@ -0,0 +1,227 @@ +//***************************************************************************** +// +// context.c - Routines for handling drawing contexts. +// +// Copyright (c) 2007-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva Graphics Library. +// +//***************************************************************************** + +#include +#include +#include "driverlib/debug.h" +#include "grlib/grlib.h" + +//***************************************************************************** +// +//! \addtogroup primitives_api +//! @{ +// +//***************************************************************************** + +#ifndef GRLIB_REMOVE_WIDE_FONT_SUPPORT +//***************************************************************************** +// +// A pointer to the application-passed structure containing default values for +// various text rendering properties. +// +//***************************************************************************** +static tGrLibDefaults const *g_psGrLibDefaults; + +// +// Default text mapping functions. This table allows the use of 8 bit encoded +// source text with either Unicode encoded wide fonts or legacy fonts +// which are assumed to contain ISO8859-1 text (ASCII + western European). +// +const tCodePointMap g_psDefaultCodePointMapTable[] = +{ + {CODEPAGE_ISO8859_1, CODEPAGE_UNICODE, GrMapISO8859_1_Unicode}, + {CODEPAGE_ISO8859_1, CODEPAGE_ISO8859_1, GrMapISO8859_1_Unicode} +}; + +#define NUM_DEFAULT_CODEPOINT_MAPS (sizeof(g_psDefaultCodePointMapTable) / \ + sizeof(tCodePointMap)) + +//***************************************************************************** +// +//! Initializes graphics library default text rendering values. +//! +//! \param pDefaults points to a structure containing default values to use. +//! +//! This function allows an application to set global default values that the +//! graphics library will use when initializing any graphics context. These +//! values set the source text codepage, the rendering function to use for +//! strings and mapping functions used to allow extraction of the correct +//! glyphs from fonts. +//! +//! If this function is not called by an application, the graphics library +//! assumes that text strings are ISO8859-1 encoded and that the default string +//! renderer is used. +//! +//! \return None. +// +//***************************************************************************** +void +GrLibInit(const tGrLibDefaults *pDefaults) +{ + ASSERT(pDefaults); + + // + // Remember the pointer to the defaults structure. + // + g_psGrLibDefaults = pDefaults; +} + +#endif + +//***************************************************************************** +// +//! Initializes a drawing context. +//! +//! \param psContext is a pointer to the drawing context to initialize. +//! \param psDisplay is a pointer to the tDisplayInfo structure that describes +//! the display driver to use. +//! +//! This function initializes a drawing context, preparing it for use. The +//! provided display driver will be used for all subsequent graphics +//! operations, and the default clipping region will be set to the extent of +//! the screen. +//! +//! \return None. +// +//***************************************************************************** +void +GrContextInit(tContext *psContext, const tDisplay *psDisplay) +{ + // + // Check the arguments. + // + ASSERT(psContext); + ASSERT(psDisplay); + + // + // Set the size of the context. + // + psContext->i32Size = sizeof(tContext); + + // + // Save the pointer to the display. + // + psContext->psDisplay = psDisplay; + + // + // Initialize the extent of the clipping region to the extents of the + // screen. + // + psContext->sClipRegion.i16XMin = 0; + psContext->sClipRegion.i16YMin = 0; + psContext->sClipRegion.i16XMax = psDisplay->ui16Width - 1; + psContext->sClipRegion.i16YMax = psDisplay->ui16Height - 1; + + // + // Provide a default color and font. + // + psContext->ui32Foreground = 0; + psContext->ui32Background = 0; + psContext->psFont = 0; + +#ifndef GRLIB_REMOVE_WIDE_FONT_SUPPORT + // + // Set defaults for all text rendering options. + // + if(g_psGrLibDefaults) + { + psContext->pfnStringRenderer = g_psGrLibDefaults->pfnStringRenderer; + psContext->pCodePointMapTable = g_psGrLibDefaults->pCodePointMapTable; + psContext->ui16Codepage = g_psGrLibDefaults->ui16Codepage; + psContext->ui8NumCodePointMaps = g_psGrLibDefaults->ui8NumCodePointMaps; + psContext->ui8Reserved = g_psGrLibDefaults->ui8Reserved; + } + else + { + psContext->pfnStringRenderer = GrDefaultStringRenderer; + psContext->pCodePointMapTable = g_psDefaultCodePointMapTable; + psContext->ui16Codepage = CODEPAGE_ISO8859_1; + psContext->ui8NumCodePointMaps = NUM_DEFAULT_CODEPOINT_MAPS; + psContext->ui8Reserved = 0; + } + psContext->ui8CodePointMap = 0; +#endif +} + +//***************************************************************************** +// +//! Sets the extents of the clipping region. +//! +//! \param psContext is a pointer to the drawing context to use. +//! \param pRect is a pointer to the structure containing the extents of the +//! clipping region. +//! +//! This function sets the extents of the clipping region. The clipping region +//! is not allowed to exceed the extents of the screen, but may be a portion of +//! the screen. +//! +//! The supplied coordinate are inclusive; \e i16XMin of 1 and \e i16XMax of 1 +//! will define a clipping region that will display only the pixels in the +//! X = 1 column. A consequence of this is that the clipping region must +//! contain at least one row and one column. +//! +//! \return None. +// +//***************************************************************************** +void +GrContextClipRegionSet(tContext *psContext, tRectangle *pRect) +{ + uint32_t ui32W, ui32H; + + // + // Check the arguments. + // + ASSERT(psContext); + ASSERT(pRect); + + // + // Get the width and height of the display. + // + ui32W = DpyWidthGet(psContext->psDisplay); + ui32H = DpyHeightGet(psContext->psDisplay); + + // + // Set the extents of the clipping region, forcing them to reside within + // the extents of the screen. + // + psContext->sClipRegion.i16XMin = ((pRect->i16XMin < 0) ? 0 : + ((pRect->i16XMin >= ui32W) ? (ui32W - 1) : + pRect->i16XMin)); + psContext->sClipRegion.i16YMin = ((pRect->i16YMin < 0) ? 0 : + ((pRect->i16YMin >= ui32H) ? (ui32H - 1) : + pRect->i16YMin)); + psContext->sClipRegion.i16XMax = ((pRect->i16XMax < 0) ? 0 : + ((pRect->i16XMax >= ui32W) ? (ui32W - 1) : + pRect->i16XMax)); + psContext->sClipRegion.i16YMax = ((pRect->i16YMax < 0) ? 0 : + ((pRect->i16YMax >= ui32H) ? (ui32H - 1) : + pRect->i16YMax)); +} + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** -- cgit v1.3.1