1 /** 2 * Draw a bitmap font. 3 * 4 * License: 5 * This Source Code Form is subject to the terms of 6 * the Mozilla Public License, v. 2.0. If a copy of 7 * the MPL was not distributed with this file, You 8 * can obtain one at http://mozilla.org/MPL/2.0/. 9 * 10 * Authors: 11 * Vladimir Panteleev <ae@cy.md> 12 */ 13 14 module ae.utils.graphics.fonts.draw; 15 16 import ae.utils.graphics.draw; 17 import ae.utils.graphics.view; 18 19 /// Draw text using a bitmap font. 20 void drawText(V, FONT, S, COLOR)(auto ref V v, xy_t x, xy_t y, S s, ref FONT font, COLOR color) 21 if (isWritableView!V && is(COLOR : ViewColor!V)) 22 { 23 auto x0 = x; 24 foreach (c; s) 25 { 26 if (c == '\r') 27 x = x0; 28 else 29 if (c == '\n') 30 { 31 x = x0; 32 y += font.height; 33 } 34 else 35 { 36 auto glyph = font.getGlyph(font.hasGlyph(c) ? c : ' '); 37 foreach (cy; 0..font.height) 38 foreach (cx; 0..glyph.width) 39 if (glyph.rows[cy] & (1 << cx)) 40 v.safePut(x+cx, y+cy, color); 41 x += glyph.width; 42 } 43 } 44 } 45 46 version(unittest) 47 { 48 import ae.utils.graphics.image; 49 import ae.utils.graphics.fonts.font8x8; 50 } 51 52 unittest 53 { 54 auto v = Image!ubyte(100, 8); 55 v.drawText(0, 0, "Hello World!", font8x8, ubyte(255)); 56 //v.toPNG.toFile("test.png"); 57 }