Jump to content

Search the Community

Showing results for tags 'fonts'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News
    • Announcements
    • Suggestions
    • New users say Hi!
  • Spotlight!
    • Sponsor Spotlight
    • Sponsor Giveaways
  • Energia
    • Energia - MSP
    • Energia - TivaC/CC3XXX
    • Energia - C2000
    • Energia Libraries
  • MSP Technical Forums
    • General
    • Compilers and IDEs
    • Development Kits
    • Programmers and Debuggers
    • Code vault
    • Projects
    • Booster Packs
    • Energia
  • Tiva-C, Hercules, CCXXXX ARM Technical Forums
    • General
    • SensorTag
    • Tiva-C, Hercules, CC3XXX Launchpad Booster Packs
    • Code Vault
    • Projects
    • Compilers and IDEs
    • Development Kits and Custom Boards
  • Beagle ARM Cortex A8 Technical Forums
    • General
    • Code Snippets and Scripts
    • Cases, Capes and Plugin Boards
    • Projects
  • General Electronics Forum
    • General Electronics
    • Other Microcontrollers
  • Connect
    • Embedded Systems/Test Equipment Deals
    • Buy, Trade and Sell
    • The 43oh Store
    • Community Projects
    • Fireside Chat
  • C2000 Technical Forums
    • General
    • Development Kits
    • Code Vault
    • Projects
    • BoosterPacks

Calendars

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


Location


Interests


Sparkfun


Github

Found 1 result

  1. While searching for a font creator I found an interesting one here: http://www.mikrocontroller.net/topic/99701#865331 It creates fontdata that are bit aligned so was a bit tricky to render but I have managed to create code that does that. By default it generates proportional fonts (from True Type) and also includes the top bit set characters that I need for my radio library. So, here is my initial code for rendering fonts generated by this utility - please note it is cannot handle fonts higher than 24 pixes. Add as font.h or to graphics.h: #include <stdbool.h> typedef struct Font { // common shared fields uint16_t font_Size_in_Bytes_over_all_included_Size_it_self; uint8_t font_Width_in_Pixel_for_fixed_drawing; uint8_t font_Height_in_Pixel_for_all_Characters; uint8_t font_Bits_per_Pixels; // if MSB are set then font is a compressed font uint8_t font_First_Char; uint8_t font_Last_Char; uint8_t font_Char_Widths[1]; // size dependent on number of glyphs uint8_t font_data[]; // bit field of all characters } Font; uint8_t getFontWidth (Font *font); uint8_t getFontHeight (Font *font); inline uint8_t getCharWidth (Font *font, unsigned char c); uint16_t getStringWidth (Font *font, unsigned char *string); uint8_t drawFontChar (Font *font, uint16_t x, uint16_t y, unsigned char c, bool opaque); void drawFontString (Font *font, uint16_t x, uint16_t y, unsigned char *string, bool opaque); Add to graphics.c - also include font.h if code above not added to graphics.h : static uint16_t getoffset (Font *font, unsigned char c) { uint16_t offset = 0; if(c > font->font_First_Char) { c -= font->font_First_Char; while(c--) { offset += font->font_Char_Widths[c]; }; } return offset; } uint8_t getFontWidth (Font *font) { return font->font_Width_in_Pixel_for_fixed_drawing; } uint8_t getFontHeight (Font *font) { return font->font_Height_in_Pixel_for_all_Characters; } uint8_t getCharWidth (Font *font, unsigned char c) { return c != ' ' && (c < font->font_First_Char || c > font->font_Last_Char) ? 0 : ((c == ' ' || font->font_Char_Widths[c - font->font_First_Char] == 0 ? font->font_Width_in_Pixel_for_fixed_drawing / 4 : font->font_Char_Widths[c - font->font_First_Char]) + 2); } uint16_t getStringWidth (Font *font, unsigned char *string) { unsigned char c; uint16_t width = 0; while((c = *string++)) { width += getCharWidth(font, c); } return width; } uint8_t drawFontChar (Font *font, uint16_t x, uint16_t y, unsigned char c, bool opaque) { uint8_t width = getCharWidth(font, c); uint32_t row, column, bitOffset, dataIndex, preShift, pixels; bool paintSpace; unsigned char *fontData = font->font_Char_Widths + font->font_Last_Char - font->font_First_Char + 1; if(width) { bitOffset = getoffset(font, c) * font->font_Height_in_Pixel_for_all_Characters; dataIndex = bitOffset >> 3; preShift = bitOffset - (dataIndex << 3); column = width; width -= 2; paintSpace = c == ' ' || !font->font_Char_Widths[c - font->font_First_Char]; if(!paintSpace || opaque) { x += column; while(column--) { row = font->font_Height_in_Pixel_for_all_Characters; if(!((column == 0) || (column > width)) && !paintSpace) { pixels = *((uint32_t *)&fontData[dataIndex]) >> preShift; while(row--) { if(pixels & 0x01) { setArea(x - column, y - row, x - column, y - row); writeData(colorHighByte); writeData(colorLowByte); } else if(opaque) { setArea(x - column, y - row, x - column, y - row); writeData(bgColorHighByte); writeData(bgColorLowByte); } pixels >>= 1; } bitOffset += font->font_Height_in_Pixel_for_all_Characters; dataIndex = bitOffset >> 3; preShift = bitOffset - (dataIndex << 3); } else if(opaque) { while(row--) { setArea(x - column, y - row, x - column, y - row); writeData(bgColorHighByte); writeData(bgColorLowByte); } } } } } return width == 0 ? 0 : width + 2; } void drawFontString (Font *font, uint16_t x, uint16_t y, unsigned char *string, bool opaque) { uint32_t xs = x; unsigned char c; while((c = *string++)) { xs += drawFontChar(font, xs, y, c, opaque); } } The font files has to be modified slightly before they can be used - it should be quite obvious what to remove. Example: drawFontString((Font *)pixelmix, 5, 100, "The lazy fox...", false); There are room for optimizations, but I'll leave that for later - my primary goal is to get the DAB project on air. Terje
×