diff --git a/gfxlcd/font/scalable_font.py b/gfxlcd/font/scalable_font.py new file mode 100644 index 0000000..2856d26 --- /dev/null +++ b/gfxlcd/font/scalable_font.py @@ -0,0 +1,181 @@ +"""scalable font""" +from gfxlcd.abstract.font import Font + + +def scaleBinaryRow(binaryRow, multiplier): + originalRow = bin(binaryRow).replace("0b", "") + scaledRow = "" + for binaryDigit in originalRow: + for i in range(0, multiplier): + scaledRow += binaryDigit + return int(scaledRow, 2) + + +def scaleCharacter(originalCharacter, multiplier): + scaledCharacter = [] + for row in originalCharacter: + scaledRow = scaleBinaryRow(row, multiplier) + for i in range(0, multiplier): + scaledCharacter.append(scaledRow) + return scaledCharacter + + +def scaleFont(originalFont, multiplier): + scaledFont = [] + for originalCharacter in originalFont: + scaledCharacter = scaleCharacter(originalCharacter, multiplier) + scaledFont.append(scaledCharacter) + return scaledFont + + +class FontScalable(Font): + + def __init__(self, scaling): + if not isinstance(scaling, int): + raise TypeError(f"Parameter 'scaling' should be an integer but is {type(scaling)} instead.") + self.size = (8 * scaling, 8 * scaling) + self.font = scaleFont(self.font, scaling) + + size = (8, 8) + font = [ + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0000 (nul) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0001 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0002 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0003 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0004 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0005 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0006 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0007 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0008 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0009 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000A + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000B + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000C + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000D + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000E + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+000F + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0010 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0011 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0012 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0013 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0014 + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0015 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0016 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0017 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0018 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0019 + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001A + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001B + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001C + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001D + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001E + + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+001F + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0020 (space) + [0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00], # U+0021 (!) + [0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0022 (") + [0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00], # U+0023 (#) + [0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00], # U+0024 ($) + [0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00], # U+0025 (%) + [0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00], # U+0026 (&) + [0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0027 (') + [0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00], # U+0028 (() + + [0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00], # U+0029 ()) + [0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00], # U+002A (*) + [0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00], # U+002B (+) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06], # U+002C (,) + [0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00], # U+002D (-) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00], # U+002E (.) + [0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00], # U+002F (/) + [0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00], # U+0030 (0) + [0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00], # U+0031 (1) + [0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00], # U+0032 (2) + + [0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00], # U+0033 (3) + [0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00], # U+0034 (4) + [0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00], # U+0035 (5) + [0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00], # U+0036 (6) + [0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00], # U+0037 (7) + [0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00], # U+0038 (8) + [0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00], # U+0039 (9) + [0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00], # U+003A (:) + [0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06], # U+003B (# ) + [0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00], # U+003C (<) + + [0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00], # U+003D (=) + [0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00], # U+003E (>) + [0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00], # U+003F (?) + [0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00], # U+0040 (@) + [0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00], # U+0041 (A) + [0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00], # U+0042 (B) + [0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00], # U+0043 (C) + [0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00], # U+0044 (D) + [0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00], # U+0045 (E) + [0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00], # U+0046 (F) + + [0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], # U+0047 (G) + [0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00], # U+0048 (H) + [0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0049 (I) + [0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00], # U+004A (J) + [0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00], # U+004B (K) + [0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00], # U+004C (L) + [0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00], # U+004D (M) + [0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00], # U+004E (N) + [0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00], # U+004F (O) + [0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00], # U+0050 (P) + + [0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00], # U+0051 (Q) + [0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00], # U+0052 (R) + [0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00], # U+0053 (S) + [0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0054 (T) + [0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00], # U+0055 (U) + [0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], # U+0056 (V) + [0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00], # U+0057 (W) + [0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00], # U+0058 (X) + [0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00], # U+0059 (Y) + [0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00], # U+005A (Z) + + [0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00], # U+005B ([) + [0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00], # U+005C (\) + [0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00], # U+005D (]) + [0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00], # U+005E (^) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF], # U+005F (_) + [0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], # U+0060 (`) + [0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00], # U+0061 (a) + [0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00], # U+0062 (b) + [0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00], # U+0063 (c) + [0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00], # U+0064 (d) + [0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00], # U+0065 (e) + + [0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00], # U+0066 (f) + [0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F], # U+0067 (g) + [0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00], # U+0068 (h) + [0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+0069 (i) + [0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E], # U+006A (j) + [0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00], # U+006B (k) + [0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], # U+006C (l) + [0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00], # U+006D (m) + [0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00], # U+006E (n) + [0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00], # U+006F (o) + + [0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F], # U+0070 (p) + [0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78], # U+0071 (q) + [0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00], # U+0072 (r) + [0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00], # U+0073 (s) + [0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00], # U+0074 (t) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00], # U+0075 (u) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], # U+0076 (v) + [0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00], # U+0077 (w) + [0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00], # U+0078 (x) + [0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F], # U+0079 (y) + [0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00], # U+007A (z) + + [0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00], # U+007B ([) + [0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], # U+007C (|) + [0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00], # U+007D (]) + [0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], # U+007E (~) + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] # U+007F + ]