test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anhtran 0:e9fd5575b10e 1 /* Copyright (c) 2016 dkato
anhtran 0:e9fd5575b10e 2 * SPDX-License-Identifier: Apache-2.0
anhtran 0:e9fd5575b10e 3 *
anhtran 0:e9fd5575b10e 4 * Licensed under the Apache License, Version 2.0 (the "License");
anhtran 0:e9fd5575b10e 5 * you may not use this file except in compliance with the License.
anhtran 0:e9fd5575b10e 6 * You may obtain a copy of the License at
anhtran 0:e9fd5575b10e 7 *
anhtran 0:e9fd5575b10e 8 * http://www.apache.org/licenses/LICENSE-2.0
anhtran 0:e9fd5575b10e 9 *
anhtran 0:e9fd5575b10e 10 * Unless required by applicable law or agreed to in writing, software
anhtran 0:e9fd5575b10e 11 * distributed under the License is distributed on an "AS IS" BASIS,
anhtran 0:e9fd5575b10e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
anhtran 0:e9fd5575b10e 13 * See the License for the specific language governing permissions and
anhtran 0:e9fd5575b10e 14 * limitations under the License.
anhtran 0:e9fd5575b10e 15 */
anhtran 0:e9fd5575b10e 16 #include "mbed.h"
anhtran 0:e9fd5575b10e 17 #include "AsciiFont.h"
anhtran 0:e9fd5575b10e 18 #include "ascii.h"
anhtran 0:e9fd5575b10e 19
anhtran 0:e9fd5575b10e 20 AsciiFont::AsciiFont(uint8_t * p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour) :
anhtran 0:e9fd5575b10e 21 p_text_field(p_buf), max_width(width), max_height(height), buf_stride(stride), pixel_num(byte_per_pixel), background_colour(colour) {
anhtran 0:e9fd5575b10e 22
anhtran 0:e9fd5575b10e 23 }
anhtran 0:e9fd5575b10e 24
anhtran 0:e9fd5575b10e 25 void AsciiFont::Erase() {
anhtran 0:e9fd5575b10e 26 Erase(background_colour, 0, 0, max_width, max_height);
anhtran 0:e9fd5575b10e 27 }
anhtran 0:e9fd5575b10e 28
anhtran 0:e9fd5575b10e 29 void AsciiFont::Erase(uint32_t const colour) {
anhtran 0:e9fd5575b10e 30 Erase(colour, 0, 0, max_width, max_height);
anhtran 0:e9fd5575b10e 31 }
anhtran 0:e9fd5575b10e 32
anhtran 0:e9fd5575b10e 33 void AsciiFont::Erase(uint32_t const colour, int x, int y, int width, int height) {
anhtran 0:e9fd5575b10e 34 int idx_base;
anhtran 0:e9fd5575b10e 35 int wk_idx, i, j ,k;
anhtran 0:e9fd5575b10e 36
anhtran 0:e9fd5575b10e 37 background_colour = colour;
anhtran 0:e9fd5575b10e 38 if ((x + width) > max_width) {
anhtran 0:e9fd5575b10e 39 width = max_width - x;
anhtran 0:e9fd5575b10e 40 }
anhtran 0:e9fd5575b10e 41 if ((y + height) > max_height) {
anhtran 0:e9fd5575b10e 42 height = max_height - y;
anhtran 0:e9fd5575b10e 43 }
anhtran 0:e9fd5575b10e 44 idx_base = (x * pixel_num) + (buf_stride * y);
anhtran 0:e9fd5575b10e 45 for (i = 0; i < height; i++) {
anhtran 0:e9fd5575b10e 46 wk_idx = idx_base + (buf_stride * i);
anhtran 0:e9fd5575b10e 47 for (j = 0; j < width; j++) {
anhtran 0:e9fd5575b10e 48 for (k = (pixel_num - 1); k >= 0; k--) {
anhtran 0:e9fd5575b10e 49 p_text_field[wk_idx++] = (uint8_t)(background_colour >> (8 * k));
anhtran 0:e9fd5575b10e 50 }
anhtran 0:e9fd5575b10e 51 }
anhtran 0:e9fd5575b10e 52 }
anhtran 0:e9fd5575b10e 53 }
anhtran 0:e9fd5575b10e 54
anhtran 0:e9fd5575b10e 55 int AsciiFont::DrawStr(const char * str, int x, int y, uint32_t const colour, int font_size, uint16_t const max_char_num) {
anhtran 0:e9fd5575b10e 56 int char_num = 0;
anhtran 0:e9fd5575b10e 57
anhtran 0:e9fd5575b10e 58 if ((str == NULL) || (font_size <= 0)) {
anhtran 0:e9fd5575b10e 59 return 0;
anhtran 0:e9fd5575b10e 60 }
anhtran 0:e9fd5575b10e 61 while ((*str != '\0') && (char_num < max_char_num)) {
anhtran 0:e9fd5575b10e 62 if (DrawChar(*str, x, y, colour, font_size) == false) {
anhtran 0:e9fd5575b10e 63 break;
anhtran 0:e9fd5575b10e 64 }
anhtran 0:e9fd5575b10e 65 str++;
anhtran 0:e9fd5575b10e 66 x += CHAR_PIX_WIDTH * font_size;
anhtran 0:e9fd5575b10e 67 char_num++;
anhtran 0:e9fd5575b10e 68 }
anhtran 0:e9fd5575b10e 69 return char_num;
anhtran 0:e9fd5575b10e 70 }
anhtran 0:e9fd5575b10e 71
anhtran 0:e9fd5575b10e 72 bool AsciiFont::DrawChar(char c, int x, int y, uint32_t const colour, int font_size) {
anhtran 0:e9fd5575b10e 73 int idx_base;
anhtran 0:e9fd5575b10e 74 int idx_y = 0;
anhtran 0:e9fd5575b10e 75 int wk_idx, i, j ,k, fw, fh;
anhtran 0:e9fd5575b10e 76 char * p_pattern;
anhtran 0:e9fd5575b10e 77 uint8_t mask = 0x80;
anhtran 0:e9fd5575b10e 78 uint32_t wk_colour;
anhtran 0:e9fd5575b10e 79
anhtran 0:e9fd5575b10e 80 if (font_size <= 0) {
anhtran 0:e9fd5575b10e 81 return false;
anhtran 0:e9fd5575b10e 82 }
anhtran 0:e9fd5575b10e 83 if ((x + (CHAR_PIX_WIDTH * font_size)) > max_width) {
anhtran 0:e9fd5575b10e 84 return false;
anhtran 0:e9fd5575b10e 85 }
anhtran 0:e9fd5575b10e 86 if ((y + (CHAR_PIX_HEIGHT * font_size)) > max_height) {
anhtran 0:e9fd5575b10e 87 return false;
anhtran 0:e9fd5575b10e 88 }
anhtran 0:e9fd5575b10e 89
anhtran 0:e9fd5575b10e 90 if ((c >= 0x20) && (c <= 0x7e)) {
anhtran 0:e9fd5575b10e 91 p_pattern = (char *)&g_ascii_table[c - 0x20][0];
anhtran 0:e9fd5575b10e 92 } else {
anhtran 0:e9fd5575b10e 93 p_pattern = (char *)&g_ascii_table[10][0]; /* '*' */
anhtran 0:e9fd5575b10e 94 }
anhtran 0:e9fd5575b10e 95 idx_base = (x * pixel_num) + (buf_stride * y);
anhtran 0:e9fd5575b10e 96
anhtran 0:e9fd5575b10e 97 /* Drawing */
anhtran 0:e9fd5575b10e 98 for (i = 0; i < CHAR_PIX_HEIGHT; i++) {
anhtran 0:e9fd5575b10e 99 for (fh = 0; fh < font_size; fh++) {
anhtran 0:e9fd5575b10e 100 wk_idx = idx_base + (buf_stride * idx_y);
anhtran 0:e9fd5575b10e 101 for (j = 0; j < CHAR_PIX_WIDTH; j++) {
anhtran 0:e9fd5575b10e 102 if (p_pattern[j] & mask) {
anhtran 0:e9fd5575b10e 103 wk_colour = colour;
anhtran 0:e9fd5575b10e 104 } else {
anhtran 0:e9fd5575b10e 105 wk_colour = background_colour;
anhtran 0:e9fd5575b10e 106 }
anhtran 0:e9fd5575b10e 107 for (fw = 0; fw < font_size; fw++) {
anhtran 0:e9fd5575b10e 108 for (k = (pixel_num - 1); k >= 0; k--) {
anhtran 0:e9fd5575b10e 109 p_text_field[wk_idx++] = (uint8_t)(wk_colour >> (8 * k));
anhtran 0:e9fd5575b10e 110 }
anhtran 0:e9fd5575b10e 111 }
anhtran 0:e9fd5575b10e 112 }
anhtran 0:e9fd5575b10e 113 idx_y++;
anhtran 0:e9fd5575b10e 114 }
anhtran 0:e9fd5575b10e 115 mask = (uint8_t)(mask >> 1);
anhtran 0:e9fd5575b10e 116 }
anhtran 0:e9fd5575b10e 117 return true;
anhtran 0:e9fd5575b10e 118 }
anhtran 0:e9fd5575b10e 119