ugfx/include/gdisp/options.h

320 lines
9.1 KiB
C

/*
* This file is subject to the terms of the GFX License. If a copy of
* the license was not distributed with this file, you can obtain one at:
*
* http://ugfx.org/license.html
*/
/**
* @file include/gdisp/options.h
* @brief GDISP sub-system options header file.
*
* @addtogroup GDISP
* @{
*/
#ifndef _GDISP_OPTIONS_H
#define _GDISP_OPTIONS_H
/**
* @name GDISP Functionality to be included
* @{
*/
/**
* @brief Should support for multiple displays be provided.
* @details Defaults to FALSE.
* @note Setting this to TRUE can significantly increase code size as many
* optimizations that remove code through conditional compilation can't
* be done. It may also slow some graphics operations as extra tests must
* be performed to determine how to do a particular operation. For these
* reasons do not set it to TRUE unless you really need multiple display
* support.
*/
#ifndef GDISP_MULTIPLE_DRIVERS
#define GDISP_MULTIPLE_DRIVERS FALSE
#endif
/**
* @brief Should all operations be clipped to the screen and colors validated.
* @details Defaults to TRUE.
* @note If this is FALSE, any operations that extend beyond the
* edge of the screen will have undefined results. Any
* out-of-range colors will produce undefined results.
* @note This should always be left as the default (TRUE) unless you
* are a maniac for speed and you have thoroughly tested your code
* and it never overwrites the edges of the screen.
* @note Setting GDISP_NEED_CLIP to TRUE internally uses the same mechanism
* as this validation. There is no advantage in setting this FALSE if
* GDISP_NEED_CLIP is TRUE.
*/
#ifndef GDISP_NEED_VALIDATION
#define GDISP_NEED_VALIDATION TRUE
#endif
/**
* @brief Are clipping functions needed.
* @details Defaults to TRUE
*/
#ifndef GDISP_NEED_CLIP
#define GDISP_NEED_CLIP TRUE
#endif
/**
* @brief Streaming functions are needed
* @details Defaults to FALSE.
*/
#ifndef GDISP_NEED_STREAMING
#define GDISP_NEED_STREAMING FALSE
#endif
/**
* @brief Are text functions needed.
* @details Defaults to TRUE
* @note You must also define at least one font.
*/
#ifndef GDISP_NEED_TEXT
#define GDISP_NEED_TEXT TRUE
#endif
/**
* @brief Are circle functions needed.
* @details Defaults to FALSE
* @note Uses integer algorithms only. It does not use any trig or floating point.
*/
#ifndef GDISP_NEED_CIRCLE
#define GDISP_NEED_CIRCLE FALSE
#endif
/**
* @brief Are ellipse functions needed.
* @details Defaults to FALSE
* @note Uses integer algorithms only. It does not use any trig or floating point.
*/
#ifndef GDISP_NEED_ELLIPSE
#define GDISP_NEED_ELLIPSE FALSE
#endif
/**
* @brief Are arc functions needed.
* @details Defaults to FALSE
* @note This can be compiled using fully integer mathematics by
* defining GFX_USE_GMISC and GMISC_NEED_FIXEDTRIG as TRUE.
* @note This can be compiled to use floating point but no trig functions
* by defining GFX_USE_GMISC and GMISC_NEED_FASTTRIG as TRUE.
* @note If neither of the above are defined it requires the maths library
* to be included in the link to provide floating point and trig support.
* ie include -lm in your compiler flags.
*/
#ifndef GDISP_NEED_ARC
#define GDISP_NEED_ARC FALSE
#endif
/**
* @brief Are convex polygon functions needed.
* @details Defaults to FALSE
* @note Convex polygons are those that have no internal angles. That is;
* you can draw a line from any point on the polygon to any other point
* on the polygon without it going outside the polygon.
*/
#ifndef GDISP_NEED_CONVEX_POLYGON
#define GDISP_NEED_CONVEX_POLYGON FALSE
#endif
/**
* @brief Are scrolling functions needed.
* @details Defaults to FALSE
* @note This function must be supported by the low level GDISP driver
* you have included in your project. If it isn't, defining this
* option will cause a compile error.
*/
#ifndef GDISP_NEED_SCROLL
#define GDISP_NEED_SCROLL FALSE
#endif
/**
* @brief Is the capability to read pixels back needed.
* @details Defaults to FALSE
* @note This function must be supported by the low level GDISP driver
* you have included in your project. If it isn't, defining this
* option will cause a compile error.
*/
#ifndef GDISP_NEED_PIXELREAD
#define GDISP_NEED_PIXELREAD FALSE
#endif
/**
* @brief Control some aspect of the hardware operation.
* @details Defaults to FALSE
* @note This allows control of hardware specific features such as
* screen rotation, backlight levels, contrast etc
*/
#ifndef GDISP_NEED_CONTROL
#define GDISP_NEED_CONTROL FALSE
#endif
/**
* @brief Query some aspect of the hardware operation.
* @details Defaults to FALSE
* @note This allows query of hardware specific features
*/
#ifndef GDISP_NEED_QUERY
#define GDISP_NEED_QUERY FALSE
#endif
/**
* @brief Is the image interface required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE
#define GDISP_NEED_IMAGE FALSE
#endif
/**
* @}
*
* @name GDISP Image Options
* @pre GDISP_NEED_IMAGE must be TRUE
* @{
*/
/**
* @brief Is native image decoding required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_NATIVE
#define GDISP_NEED_IMAGE_NATIVE FALSE
#endif
/**
* @brief Is GIF image decoding required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_GIF
#define GDISP_NEED_IMAGE_GIF FALSE
#endif
/**
* @brief Is BMP image decoding required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_BMP
#define GDISP_NEED_IMAGE_BMP FALSE
#endif
/**
* @brief Is JPG image decoding required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_JPG
#define GDISP_NEED_IMAGE_JPG FALSE
#endif
/**
* @brief Is PNG image decoding required.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_PNG
#define GDISP_NEED_IMAGE_PNG FALSE
#endif
/**
* @brief Is memory accounting required during image decoding.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_IMAGE_ACCOUNTING
#define GDISP_NEED_IMAGE_ACCOUNTING FALSE
#endif
/**
* @}
*
* @name GDISP Text Rendering Options
* @{
*/
/**
* @brief Enable UTF-8 support for text rendering.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_UTF8
#define GDISP_NEED_UTF8 FALSE
#endif
/**
* @brief Enable kerning for font rendering (improves character placement).
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_TEXT_KERNING
#define GDISP_NEED_TEXT_KERNING FALSE
#endif
/**
* @brief Enable antialiased font support
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_ANTIALIAS
#define GDISP_NEED_ANTIALIAS FALSE
#endif
/**
* @}
*
* @name GDISP Multi-Threading Options
* @{
*/
/**
* @brief Do the drawing functions need to be thread-safe.
* @details Defaults to FALSE
*/
#ifndef GDISP_NEED_MULTITHREAD
#define GDISP_NEED_MULTITHREAD FALSE
#endif
/**
* @}
*
* @name GDISP Fonts
* @{
*/
/**
* @brief Predefined built in fonts
* @note Turning off the ones you are not using can save program size.
*/
/**
* @}
*
* @name GDISP Optional Sizing Parameters
* @{
*/
/**
* @brief The size of pixel buffer (in pixels) used for optimization.
* @details Set to zero to guarantee disabling of the buffer.
* @note Depending on the driver and what operations the application
* needs, this buffer may never be allocated.
* @note Setting the size to zero may cause some operations to not
* compile eg. Scrolling if there is no hardware scroll support.
* @note Increasing the size will speedup certain operations
* at the expense of RAM.
* @note Currently only used to support scrolling on hardware without
* scrolling support, and to increase the speed of streaming
* operations on non-streaming hardware where there is a
* hardware supported bit-blit.
*/
#ifndef GDISP_LINEBUF_SIZE
#define GDISP_LINEBUF_SIZE 128
#endif
/**
* @}
*
* @name GDISP Optional Low Level Driver Defines
* @{
*/
/**
* @brief Use a custom board definition even if a board definition exists.
* @details Defaults to FALSE
* @details If TRUE, add gdisp_lld_board.h to your project directory and customise it.
* @note Not all GDISP low level drivers currently use board definition files.
*/
#ifndef GDISP_USE_CUSTOM_BOARD
#define GDISP_USE_CUSTOM_BOARD FALSE
#endif
/**
* @brief Set the screen height and width.
* @note Ignored by some low level GDISP drivers, optional for others.
* @note Where these values are allowed, a default is always provided be the low level driver.
* @note The list of GDISP low level drivers that allow these to be set are...
* WIN32, SSD1289, SSD1963, TestStub
*/
/* #define GDISP_SCREEN_WIDTH nnnn */
/* #define GDISP_SCREEN_HEIGHT nnnn */
/**
* @brief Define which bus interface to use.
* @details Only required by the SSD1963 driver.
* @note This will be replaced eventually by board definition files
*/
/* #define GDISP_USE_FSMC */
/* #define GDISP_USE_GPIO */
/** @} */
#endif /* _GDISP_OPTIONS_H */
/** @} */