69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * fonts.c
 | |
|  *
 | |
|  *  Created on: 23 maj 2021
 | |
|  *      Author: bartool
 | |
|  */
 | |
| 
 | |
| //#include "main.h"
 | |
| #include "fonts.h"
 | |
| #include "SSD1306_oled.h"
 | |
| 
 | |
| uint8_t font_print_str(const FONT_INFO * font, uint8_t * text, uint8_t pos_x, uint8_t pos_y)
 | |
| {
 | |
| 	uint8_t height = font->heightPixels;
 | |
| 
 | |
| 	uint8_t x = pos_x;
 | |
| 
 | |
| 	uint8_t width = font_string_lenght_px(font, text);
 | |
| 
 | |
| 	ssd1306_clear_buffer(width, height, pos_x, pos_y);
 | |
| 
 | |
| 	while(*text)
 | |
| 	{
 | |
| 		uint8_t actual_char = *text++;
 | |
| 		if (actual_char < ' ' || actual_char > 126)
 | |
| 		{
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| //		if (actual_char == ' ')
 | |
| //		{
 | |
| //			x += font->spacePixels + font->interspacePixels;
 | |
| //			continue;
 | |
| //		}
 | |
| 
 | |
| 		uint8_t char_nr = actual_char - font->startChar;
 | |
| 		const FONT_CHAR_INFO *charinfo =  &font->charInfo[char_nr];
 | |
| 
 | |
| 
 | |
| 		ssd1306_write_to_buffer(font->data + charinfo->offset, charinfo->widthBits, height, x, pos_y);
 | |
| 
 | |
| 		x += charinfo->widthBits + font->interspacePixels;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	return x;
 | |
| }
 | |
| 
 | |
| uint8_t font_string_lenght_px(const FONT_INFO * font, uint8_t * text)
 | |
| {
 | |
| 	uint8_t x;
 | |
| 	while(*text)
 | |
| 	{
 | |
| 		uint8_t actual_char = *text++;
 | |
| 		uint8_t char_nr = actual_char - font->startChar;
 | |
| 		if (actual_char < ' ' || actual_char > 126) {
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| //		if (actual_char == ' ') {
 | |
| //			x += font->spacePixels + font->interspacePixels;
 | |
| //		} else {
 | |
| 			x += font->charInfo[char_nr].widthBits + font->interspacePixels;
 | |
| //		}
 | |
| 
 | |
| 	}
 | |
| 	return x;
 | |
| }
 |