feat(chat): custom DragonX emoji via the :drgx: shortcode
Add a DragonX custom emoji to chat. The emoji picker gains a DragonX tile (first cell) that inserts the text ":drgx:"; message bodies containing it render the mark inline via layoutChatBodyRich, which flows text words + the emoji image with word wrap (plain bodies keep the tighter layoutChatBody path, so normal messages are unaffected). Other clients simply show the literal ":drgx:" text — a portable encoding with graceful degradation. The emoji is the DragonX SVG rasterized once at fixed brand colors (crimson body, white detail) via LoadTextureFromSvg — theme-independent so it looks identical for sender and receiver — exposed as App::getDrgxEmojiTexture(). Emoji insertion is factored into one insertToken() helper (space-prepend + on-chain byte cap), shared by the DragonX tile and the Unicode emojis. Drag-to-select text is skipped on ":drgx:" messages (their inline layout doesn't match the plain-text hit-test geometry); right-click "copy" still copies the whole message. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1361,6 +1361,13 @@ void App::handleGlobalShortcuts()
|
||||
// theme accent, so it re-rasterizes whenever the accent or the dark↔light variant changes.
|
||||
void App::ensureLogoTexture()
|
||||
{
|
||||
// DragonX custom chat emoji (":drgx:") — the mark in FIXED brand colors (crimson body + white detail),
|
||||
// rasterized once. Kept theme-independent so it looks identical for the sender and the receiver.
|
||||
if (!drgx_emoji_tex_) {
|
||||
util::LoadTextureFromSvg(embedded::kLogoDragonXSvg, 96, IM_COL32(0xD8, 0x26, 0x52, 0xFF),
|
||||
IM_COL32(255, 255, 255, 255), &drgx_emoji_tex_, &drgx_emoji_w_, &drgx_emoji_h_);
|
||||
}
|
||||
|
||||
const bool wantDark = ui::material::IsDarkTheme();
|
||||
const ImU32 logoAccent = ui::material::Primary();
|
||||
if (logo_loaded_ && wantDark == logo_is_dark_variant_ && logoAccent == logo_accent_)
|
||||
|
||||
Reference in New Issue
Block a user