aboutsummaryrefslogtreecommitdiff
path: root/generate-emoji-sprite.py
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-11-21 18:20:00 +0100
committerdec05eba <dec05eba@protonmail.com>2020-11-21 18:20:00 +0100
commit44e66882f6e517b06522cb1e510ed9dea7574273 (patch)
treec25095570a1a9438d267b724236fefd22e68aeed /generate-emoji-sprite.py
parent9d36cfb599490888fa54110c796e14b542c402df (diff)
Render emoji in text, do not show notification count for cache sync, lazy load 4chan board
Diffstat (limited to 'generate-emoji-sprite.py')
-rwxr-xr-xgenerate-emoji-sprite.py98
1 files changed, 68 insertions, 30 deletions
diff --git a/generate-emoji-sprite.py b/generate-emoji-sprite.py
index b0e9dc3..849a81d 100755
--- a/generate-emoji-sprite.py
+++ b/generate-emoji-sprite.py
@@ -1,35 +1,73 @@
#!/usr/bin/env python3
-import requests
-from subprocess import Popen, PIPE
+from gi.repository import Gtk, Gdk, Pango, PangoCairo
+import cairo
-def create_image_with_text(text, image_filepath):
- process = Popen(["convert", "-size", "1024x", "-background", "#ff00ff", "-strip", "pango:" + text, image_filepath])
- _, _ = process.communicate()
+surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1024, 1512)
+context = cairo.Context(surface)
+pc = PangoCairo.create_context(context)
+layout = PangoCairo.create_layout(context)
+layout.set_font_description(Pango.FontDescription('NotoSans Emoji Normal 12'))
+layout.set_width(1024*Pango.SCALE)
+layout.set_wrap(Pango.WrapMode.CHAR)
-resp = requests.get("https://unicode.org/Public/emoji/13.1/emoji-test.txt")
-resp.raise_for_status()
-emoji_sequences = resp.text
-
-ss = []
+emoji_start = 0x1F000
+emoji_end = 0x1FB6F
emoji_characters = []
-for line in emoji_sequences.splitlines():
- if len(line) == 0 or line[0] == '#':
- continue
-
- columns = line.split(";")
- sequences = columns[0].strip().split()
- text = [chr(int(c, 16)) for c in sequences]
- emoji_characters.extend(text)
- ss.append(int(sequences[0], 16))
- #print(str(sequences))
-
-#print(str(len(emoji_characters)))
-create_image_with_text("".join(emoji_characters), "emoji.jpg")
-
-sow = list(set(ss))
-sow.sort()
-for i in range(len(sow) - 1):
- s1 = sow[i]
- s2 = sow[i + 1]
- print(str(s2-s1))
+i = emoji_start
+while i <= emoji_end:
+ emoji_characters.append(chr(i))
+ i += 1
+
+layout.set_text("".join(emoji_characters), -1)
+PangoCairo.show_layout(context, layout)
+surface.write_to_png('images/emoji.png')
+
+with open("generated/Emoji.hpp", "w") as header_file:
+ header_file.write("""#pragma once
+
+#include <stdint.h>
+
+// This file was automatically generated with generate-emoji-sprite.py, do not edit manually!
+
+namespace QuickMedia {
+ struct EmojiRectangle {
+ int x, y;
+ int width, height;
+ };
+
+ bool codepoint_is_emoji(uint32_t codepoint);
+ EmojiRectangle emoji_get_extents(uint32_t codepoint);
+}""")
+
+with open("generated/Emoji.cpp", "w") as source_file:
+ source_file.write("""#include "Emoji.hpp"
+#include <assert.h>
+
+// This file was automatically generated with generate-emoji-sprite.py, do not edit manually!
+
+namespace QuickMedia {
+ static EmojiRectangle emoji_extents[%s] = {
+""" % len(emoji_characters))
+
+ i = 0
+ index = 0
+ for e in emoji_characters:
+ emoji_pos = layout.index_to_pos(index)
+ source_file.write(" {%s, %s, %s, %s}%s\n" % (int(emoji_pos.x/Pango.SCALE), int(emoji_pos.y/Pango.SCALE), int(emoji_pos.width/Pango.SCALE), int(emoji_pos.height/Pango.SCALE), "," if i < len(emoji_characters) - 1 else ""))
+ i += 1
+ index += 4
+
+ source_file.write(
+""" };
+
+ bool codepoint_is_emoji(uint32_t codepoint) {
+ return codepoint >= 0x1F000 && codepoint <= 0x1FB6F;
+ }
+
+ EmojiRectangle emoji_get_extents(uint32_t codepoint) {
+ assert(codepoint_is_emoji(codepoint));
+ return emoji_extents[codepoint - 0x1F000];
+ }
+}
+""") \ No newline at end of file