From 44e66882f6e517b06522cb1e510ed9dea7574273 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 21 Nov 2020 18:20:00 +0100 Subject: Render emoji in text, do not show notification count for cache sync, lazy load 4chan board --- generate-emoji-sprite.py | 98 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 30 deletions(-) (limited to 'generate-emoji-sprite.py') 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 + +// 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 + +// 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 -- cgit v1.2.3