FreeCalypso > hg > fc-tourmaline
diff src/ui/atb/ATBDisplay.c @ 3:67bfe9f274f6
src/ui: import of src/ui3 from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:33:10 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui/atb/ATBDisplay.c Fri Oct 16 06:33:10 2020 +0000 @@ -0,0 +1,404 @@ +/******************************************************************************* + + CONDAT (UK) + +******************************************************************************** + + This software product is the property of Condat (UK) Ltd and may not be + disclosed to any third party without the express permission of the owner. + +******************************************************************************** + + $Project name: Basic MMI + $Project code: BMI (6349) + $Module: ATB + $File: ATBDisplay.c + $Revision: 1.0 + + $Author: SH - Condat(UK) + $Date: 11/11/02 + +******************************************************************************** + + Description: ATB/Display interface. + + + +******************************************************************************** + + $History: ATBDisplay.c + + 15/03/02 Original Condat(UK) BMI version. + $End + +*******************************************************************************/ + +#ifndef ATB_DISPLAY_C +#define ATB_DISPLAY_C + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#include <stdio.h> +#include <string.h> + +#include "mfw_mfw.h" +#include "mfw_sys.h" +#include "gdi.h" +#include "font_bitmaps.h" +#include "dspl.h" +#include "ATBCommon.h" +#include "ATBDisplay.h" + +/* ++--------------------------------------------------------------------+ +| LOCAL FUNCTION PROTOTYPES | ++--------------------------------------------------------------------+ +*/ + +extern t_font_bitmap* get_bitmap(USHORT selected_code); +t_font_bitmap *ATB_display_GetBitmap(USHORT character); +void ATB_display_ShowBitmap(int x,int y,t_font_bitmap* current_bitmap,T_DS_TEXTFORMAT *format, + int xstart, int ystart, int width, int height); + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay | +| STATE : code ROUTINE : ATB_display_Cursor | ++--------------------------------------------------------------------+ + + PURPOSE : set cursor at specified position + +*/ + +void ATB_display_Cursor (T_ATB_TEXT *text, USHORT textIndex, UBYTE type, SHORT x, SHORT y, USHORT width, USHORT height) +{ + T_ATB_TEXT charTxt; + UBYTE charData[4]; + USHORT character; + T_DS_TEXTFORMAT format; + + switch(type) + { + // bar cursor + case DS_CURSOR_BAR: + dspl_DrawLine(x,y,x,y+height-1); + break; + + // underscore cursor + case DS_CURSOR_UNDERLINE: + dspl_DrawLine(x,y+height-1, x+width-1, y+height-1); + break; + + // block cursor + case DS_CURSOR_BLOCK: + charTxt.data = charData; + charTxt.dcs = text->dcs; + charTxt.len = 1; + + character = ATB_string_GetChar(text, textIndex); + if (!ATB_char_IsVisible(character)) + character = UNICODE_SPACE; + + ATB_string_SetChar(&charTxt, 0, character); + ATB_string_SetChar(&charTxt, 1, UNICODE_EOLN); + + ATB_display_SetFormatAttr(&format, 0, TRUE); + ATB_display_Text(x,y, &format, &charTxt); + break; + } + return; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_Text | ++--------------------------------------------------------------------+ + + PURPOSE : draw 'length' characters of string 'text' at x,y in format 'format'. + +*/ + +void ATB_display_Text(SHORT x, SHORT y, T_DS_TEXTFORMAT *format, T_ATB_TEXT *text) +{ + + USHORT charStore; + UBYTE attr; + + attr = 0; + + if (text->dcs==ATB_DCS_UNICODE) + attr |= DSPL_TXTATTR_UNICODE; + if (format->highlight) + attr |= DSPL_TXTATTR_INVERS; + + charStore = ATB_string_GetChar(text, text->len); + ATB_string_SetChar(text, text->len, UNICODE_EOLN); + dspl_TextOut((USHORT)x, (USHORT)y, attr, (char *)text->data); + ATB_string_SetChar(text, text->len, charStore); + + return; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_GetCharWidth | ++--------------------------------------------------------------------+ + + PURPOSE : get height of character in current font + +*/ + +int ATB_display_GetCharWidth (USHORT character, T_DS_TEXTFORMAT *format) +{ + t_font_bitmap *current_bitmap; + int width; + + if (character==UNICODE_WIDEST_CHAR) + { + width = ATB_display_GetMaxCharWidth(format); + } + else + { + current_bitmap = ATB_display_GetBitmap(character); + if (!current_bitmap) + { + current_bitmap = ATB_display_GetBitmap(UNICODE_SPACE); + } + width = (int)current_bitmap->width; + } + + + //TRACE_EVENT_P2("Width of char %d is %d", character, width); + + return width; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_GetMaxCharWidth | ++--------------------------------------------------------------------+ + + PURPOSE : Get maximum width of a character in the current font and style + +*/ + +int ATB_display_GetMaxCharWidth (T_DS_TEXTFORMAT *format) +{ + int width; + + width = 16; + + return width; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay | +| STATE : code ROUTINE : ATB_display_GetCharHeight | ++--------------------------------------------------------------------+ + + PURPOSE : get height of character in current font + +*/ + +int ATB_display_GetCharHeight (USHORT character, T_DS_TEXTFORMAT *format) +{ + + /*t_font_bitmap *current_bitmap; + int height; + + current_bitmap = ATB_display_GetBitmap(character); + if (!current_bitmap) + { + current_bitmap = ATB_display_GetBitmap(UNICODE_SPACE); + } + height = (int)current_bitmap->height; + + return height;*/ + + return (int)dspl_GetFontHeight(); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATB Display | +| STATE : code ROUTINE : | ++--------------------------------------------------------------------+ + + PURPOSE : Return width of string in pixels. NOTE: End of line characters + will be included in the width - same width as a space - if the "length" + parameter includes them. + + text - the text whose width is to be calculated + length - the length of text to be considered + format - pointer to the format attributes at the start of the string +*/ + +USHORT ATB_display_StringWidth(T_ATB_TEXT *text, T_DS_TEXTFORMAT *format) +{ + USHORT width; + USHORT textIndex; + USHORT character; + T_DS_TEXTFORMAT tempFormat; // Temporary storage for format attributes + BOOL endFound; + +#ifdef TRACE_ATBEDITOR + TRACE_FUNCTION("ATB Editor: ATB_display_StringWidth()"); +#endif + + width = 0; + textIndex = 0; + endFound = FALSE; + ATB_display_CopyFormat(&tempFormat, format); // Make a copy of the original format + + while (!endFound) + { + character = ATB_string_GetChar(text, textIndex); // Get the next character + width += ATB_display_GetCharWidth(character, &tempFormat); + textIndex++; + + if(!(textIndex<text->len)) + endFound = TRUE; + } + + return (width); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATB Display | +| STATE : code ROUTINE : | ++--------------------------------------------------------------------+ + + PURPOSE : Return height of tallest character in next 'length' characters of string +*/ + +USHORT ATB_display_StringHeight(T_ATB_TEXT *text, T_DS_TEXTFORMAT *format) +{ + USHORT height; + USHORT currentHeight; + USHORT textIndex; + USHORT character; + BOOL endFound; + T_DS_TEXTFORMAT tempFormat; // Temporary storage for format attributes + + TRACE_FUNCTION("ATB_display_StringHeight()"); + + height = 0; + textIndex = 0; + endFound = FALSE; + ATB_display_CopyFormat(&tempFormat, format); // Store the original format + + while (!endFound) + { + character = ATB_string_GetChar(text, textIndex); // Get the next character + currentHeight = ATB_display_GetCharHeight(character, &tempFormat); + if (currentHeight>height) + height = currentHeight; + textIndex++; + + if(!(textIndex<text->len)) + endFound = TRUE; + } + + return (height); +} + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_SetFormatAttr | ++--------------------------------------------------------------------+ + + PURPOSE : Sets format attributes and highlighting + attr - the rich text formatting + highlight - TRUE if highlighting is to be switched on for the whole string +*/ + +void ATB_display_SetFormatAttr(T_DS_TEXTFORMAT *format, USHORT attr, BOOL highlight) +{ + format->attr = attr; + format->highlight = highlight; + + return; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_ClearFormat | ++--------------------------------------------------------------------+ + + PURPOSE : Clears the formatting attributes + format - pointer to the current formatting attributes +*/ + +void ATB_display_ClearFormat(T_DS_TEXTFORMAT *format) +{ + format->attr = 0; + format->highlight = FALSE; + return; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_ClearFormat | ++--------------------------------------------------------------------+ + + PURPOSE : Duplicates format attributes + dest - pointer to the destination format structure (caller allocated) + src - pointer to the source format structure (caller allocated) +*/ + +void ATB_display_CopyFormat(T_DS_TEXTFORMAT *dest, T_DS_TEXTFORMAT *src) +{ + memcpy((void *)dest, (void *)src, sizeof(T_DS_TEXTFORMAT)); + return; +} + + +/* ++------------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : ATBDisplay.c | +| STATE : code ROUTINE : ATB_display_GetBitmap | ++------------------------------------------------------------------------+ + + PURPOSE : Returns address of bitmap based on unicode number (our coding scheme) +*/ + +t_font_bitmap *ATB_display_GetBitmap(USHORT character) +{ + USHORT current_code; + + current_code = (USHORT)(character<<8)+(USHORT)(character>>8); // Swap bytes round for correct unicode + return (t_font_bitmap *)get_bitmap(current_code); +} + +#endif