mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-28 04:51:40 +00:00
chat option panel UI improved
This commit is contained in:
parent
78ad942ad5
commit
1225b8472c
17 changed files with 221 additions and 48 deletions
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Průhlednost pozadí chatu"
|
|||
CHAT_TEXT_OPACITY = "Průhlednost textu chatu"
|
||||
CHAT_LIFETIME = "Doba zobrazení zpráv"
|
||||
CHAT_CHAR_COUNTER = "Zobrazit počitadlo znaků chatu"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Skrýt chat, když je zavřený"
|
||||
CHAT_CLOSED_MODE = "Zobrazit historii chatu"
|
||||
CHAT_CLOSED_DISABLED = "Skrytý"
|
||||
CHAT_CLOSED_LIFETIME = "Skrýt po: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Vždy viditelný"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACE"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Transparantie van de chatachtergrond"
|
|||
CHAT_TEXT_OPACITY = "Transparantie van de chattekst"
|
||||
CHAT_LIFETIME = "Weergaveduur berichten"
|
||||
CHAT_CHAR_COUNTER = "Chat-tekensteller weergeven"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Chat verbergen wanneer gesloten"
|
||||
CHAT_CLOSED_MODE = "Chatgeschiedenis tonen"
|
||||
CHAT_CLOSED_DISABLED = "Verborgen"
|
||||
CHAT_CLOSED_LIFETIME = "Verbergen na: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Altijd zichtbaar"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATIE"
|
||||
|
|
|
|||
|
|
@ -350,7 +350,10 @@ CHAT_BACKGROUND_OPACITY = "Chat Background Opacity"
|
|||
CHAT_TEXT_OPACITY = "Chat Text Opacity"
|
||||
CHAT_LIFETIME = "Chat Message Lifetime"
|
||||
CHAT_CHAR_COUNTER = "Show Chat Character Counter"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Hide Chat When Closed"
|
||||
CHAT_CLOSED_MODE = "Show chat history"
|
||||
CHAT_CLOSED_DISABLED = "Hide immediately"
|
||||
CHAT_CLOSED_LIFETIME = "Fade after: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Always visible"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Opacité du fond du chat"
|
|||
CHAT_TEXT_OPACITY = "Opacité du texte du chat"
|
||||
CHAT_LIFETIME = "Durée d'affichage des messages"
|
||||
CHAT_CHAR_COUNTER = "Afficher le compteur de caractères du chat"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Masquer le chat lorsqu'il est fermé"
|
||||
CHAT_CLOSED_MODE = "Afficher l'historique du chat"
|
||||
CHAT_CLOSED_DISABLED = "Masqué"
|
||||
CHAT_CLOSED_LIFETIME = "Masquer après : %us"
|
||||
CHAT_CLOSED_ALWAYS = "Toujours visible"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Chat-Hintergrundtransparenz"
|
|||
CHAT_TEXT_OPACITY = "Chat-Texttransparenz"
|
||||
CHAT_LIFETIME = "Chat-Anzeigedauer"
|
||||
CHAT_CHAR_COUNTER = "Chat-Zeichenzähler anzeigen"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Verstecke Chat wenn geschlossen"
|
||||
CHAT_CLOSED_MODE = "Chatverlauf anzeigen"
|
||||
CHAT_CLOSED_DISABLED = "Sofort ausblenden"
|
||||
CHAT_CLOSED_LIFETIME = "Ausblenden nach: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Dauerhaft anzeigen"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -349,7 +349,10 @@ CHAT_BACKGROUND_OPACITY = "Opacità sfondo chat"
|
|||
CHAT_TEXT_OPACITY = "Opacità testo chat"
|
||||
CHAT_LIFETIME = "Durata messaggi chat"
|
||||
CHAT_CHAR_COUNTER = "Mostra contatore caratteri della chat"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Nascondi chat quando è chiusa"
|
||||
CHAT_CLOSED_MODE = "Mostrare la cronologia della chat"
|
||||
CHAT_CLOSED_DISABLED = "Disattivata"
|
||||
CHAT_CLOSED_LIFETIME = "Nascondi dopo: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Sempre visibile"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -352,7 +352,10 @@ CHAT_BACKGROUND_OPACITY = "チャット背景の不透明度"
|
|||
CHAT_TEXT_OPACITY = "チャット文字の不透明度"
|
||||
CHAT_LIFETIME = "メッセージ表示時間"
|
||||
CHAT_CHAR_COUNTER = "チャットの文字数カウンターを表示"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "閉じているときはチャットを隠す"
|
||||
CHAT_CLOSED_MODE = "チャット履歴の表示"
|
||||
CHAT_CLOSED_DISABLED = "非表示"
|
||||
CHAT_CLOSED_LIFETIME = "非表示まで: %us"
|
||||
CHAT_CLOSED_ALWAYS = "常に表示"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Przezroczystość tła czatu"
|
|||
CHAT_TEXT_OPACITY = "Przezroczystość tekstu czatu"
|
||||
CHAT_LIFETIME = "Czas wyświetlania wiadomości"
|
||||
CHAT_CHAR_COUNTER = "Pokaż licznik znaków czatu"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Ukryj czat, gdy jest zamknięty"
|
||||
CHAT_CLOSED_MODE = "Wyświetlanie historii czatu"
|
||||
CHAT_CLOSED_DISABLED = "Wyłączony"
|
||||
CHAT_CLOSED_LIFETIME = "Ukryj po: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Zawsze widoczny"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACJA"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Opacidade do fundo do chat"
|
|||
CHAT_TEXT_OPACITY = "Opacidade do texto do chat"
|
||||
CHAT_LIFETIME = "Duração da mensagem do chat"
|
||||
CHAT_CHAR_COUNTER = "Mostrar contador de caracteres do chat"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Ocultar chat quando fechado"
|
||||
CHAT_CLOSED_MODE = "Exibir histórico do chat"
|
||||
CHAT_CLOSED_DISABLED = "Oculto"
|
||||
CHAT_CLOSED_LIFETIME = "Ocultar após: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Sempre visível"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMAÇÃO"
|
||||
|
|
|
|||
|
|
@ -349,7 +349,10 @@ CHAT_BACKGROUND_OPACITY = "Прозрачность фона чата"
|
|||
CHAT_TEXT_OPACITY = "Прозрачность текста чата"
|
||||
CHAT_LIFETIME = "Время показа сообщений"
|
||||
CHAT_CHAR_COUNTER = "Показывать счётчик символов чата"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Скрывать чат, когда он закрыт"
|
||||
CHAT_CLOSED_MODE = "Показывать историю чата"
|
||||
CHAT_CLOSED_DISABLED = "Скрыт"
|
||||
CHAT_CLOSED_LIFETIME = "Скрывать через: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Всегда виден"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -351,7 +351,10 @@ CHAT_BACKGROUND_OPACITY = "Opacidad del fondo del chat"
|
|||
CHAT_TEXT_OPACITY = "Opacidad del texto del chat"
|
||||
CHAT_LIFETIME = "Duración del mensaje de chat"
|
||||
CHAT_CHAR_COUNTER = "Mostrar contador de caracteres del chat"
|
||||
DISABLE_CHAT_WHEN_CLOSED = "Ocultar chat cuando esté cerrado"
|
||||
CHAT_CLOSED_MODE = "Mostrar historial de chat"
|
||||
CHAT_CLOSED_DISABLED = "Oculto"
|
||||
CHAT_CLOSED_LIFETIME = "Ocultar tras: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Siempre visible"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACIÓN"
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ bool configBackgroundGamepad = true;
|
|||
bool configDisableGamepads = false;
|
||||
bool configUseStandardKeyBindingsChat = true;
|
||||
bool configChatCharCounter = true;
|
||||
bool configDisableChatWhenClosed = false;
|
||||
unsigned int configChatClosedMode = 1;
|
||||
unsigned int configChatWidth = 800;
|
||||
unsigned int configChatHeight = 400;
|
||||
unsigned int configChatTextScale = 100;
|
||||
|
|
@ -293,8 +293,8 @@ static const struct ConfigOption options[] = {
|
|||
{.name = "chat_background_opacity", .type = CONFIG_TYPE_UINT, .uintValue = &configChatBackgroundOpacity},
|
||||
{.name = "chat_text_opacity", .type = CONFIG_TYPE_UINT, .uintValue = &configChatTextOpacity},
|
||||
{.name = "chat_message_lifetime", .type = CONFIG_TYPE_UINT, .uintValue = &configChatMessageLifetime},
|
||||
{.name = "chat_closed_mode", .type = CONFIG_TYPE_UINT, .uintValue = &configChatClosedMode},
|
||||
{.name = "chat_char_counter", .type = CONFIG_TYPE_BOOL, .boolValue = &configChatCharCounter},
|
||||
{.name = "disable_chat_when_closed", .type = CONFIG_TYPE_BOOL, .boolValue = &configDisableChatWhenClosed},
|
||||
{.name = "smooth_scrolling", .type = CONFIG_TYPE_BOOL, .boolValue = &configSmoothScrolling},
|
||||
{.name = "stick_rotate_left", .type = CONFIG_TYPE_BOOL, .boolValue = &configStick.rotateLeft},
|
||||
{.name = "stick_invert_left_x", .type = CONFIG_TYPE_BOOL, .boolValue = &configStick.invertLeftX},
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ extern bool configBackgroundGamepad;
|
|||
extern bool configDisableGamepads;
|
||||
extern bool configUseStandardKeyBindingsChat;
|
||||
extern bool configChatCharCounter;
|
||||
extern bool configDisableChatWhenClosed;
|
||||
extern unsigned int configChatClosedMode;
|
||||
extern unsigned int configChatWidth;
|
||||
extern unsigned int configChatHeight;
|
||||
extern unsigned int configChatTextScale;
|
||||
|
|
|
|||
|
|
@ -16,28 +16,39 @@ static bool djui_chat_message_render(struct DjuiBase* base) {
|
|||
struct DjuiChatMessage* chatMessage = (struct DjuiChatMessage*)base;
|
||||
struct DjuiBase* ctBase = &chatMessage->message->base;
|
||||
|
||||
f32 lifeTime = (f32)configChatMessageLifetime;
|
||||
if (lifeTime < 1.0f) lifeTime = 1.0f;
|
||||
if (lifeTime > 120.0f) lifeTime = 120.0f;
|
||||
|
||||
f32 seconds = clock_elapsed() - chatMessage->createTime;
|
||||
f32 f = 1.0f;
|
||||
if (seconds >= (lifeTime - 1.0f)) {
|
||||
f = fmax(1.0f - (seconds - (lifeTime - 1.0f)), 0.0f);
|
||||
f *= f;
|
||||
f *= f;
|
||||
}
|
||||
|
||||
if (gDjuiChatBoxFocus) {
|
||||
djui_base_set_color(base, 0, 0, 0, 0);
|
||||
djui_base_set_color(ctBase, 255, 255, 255, 255);
|
||||
djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(base, 1.0f, chatMessage->base.height.value);
|
||||
} else if (configDisableChatWhenClosed) {
|
||||
return false;
|
||||
} else if (f <= 0.1f) {
|
||||
return false;
|
||||
} else {
|
||||
u32 mode = configChatClosedMode;
|
||||
if (mode > 2) { mode = 1; }
|
||||
|
||||
if (mode == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mode == 1) {
|
||||
f32 lifeTime = (f32)configChatMessageLifetime;
|
||||
if (lifeTime < 1.0f) lifeTime = 1.0f;
|
||||
if (lifeTime > 120.0f) lifeTime = 120.0f;
|
||||
|
||||
f32 seconds = clock_elapsed() - chatMessage->createTime;
|
||||
if (seconds >= (lifeTime - 1.0f)) {
|
||||
f = fmax(1.0f - (seconds - (lifeTime - 1.0f)), 0.0f);
|
||||
f *= f;
|
||||
f *= f;
|
||||
}
|
||||
if (f <= 0.1f) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
f = 1.0f;
|
||||
}
|
||||
|
||||
int bgAlphaI = (int)(configChatBackgroundOpacity * f * 2.55f);
|
||||
if (bgAlphaI > 255) { bgAlphaI = 255; }
|
||||
if (bgAlphaI < 0) { bgAlphaI = 0; }
|
||||
|
|
|
|||
|
|
@ -1,15 +1,19 @@
|
|||
#include "djui.h"
|
||||
#include "djui_panel.h"
|
||||
#include "djui_panel_menu.h"
|
||||
#include "djui_selectionbox.h"
|
||||
#include "pc/utils/misc.h"
|
||||
#include "pc/configfile.h"
|
||||
|
||||
#define CHAT_WIDTH_DEFAULT 800
|
||||
#define CHAT_HEIGHT_DEFAULT 400
|
||||
#define CHAT_TEXT_SCALE_DEFAULT 100
|
||||
#define CHAT_BG_OPACITY_DEFAULT 70
|
||||
#define CHAT_TEXT_OPACITY_DEFAULT 100
|
||||
#define CHAT_LIFETIME_DEFAULT 10
|
||||
#define CHAT_WIDTH_DEFAULT 800
|
||||
#define CHAT_HEIGHT_DEFAULT 400
|
||||
#define CHAT_TEXT_SCALE_DEFAULT 100
|
||||
#define CHAT_BG_OPACITY_DEFAULT 70
|
||||
#define CHAT_TEXT_OPACITY_DEFAULT 100
|
||||
#define CHAT_LIFETIME_DEFAULT 10
|
||||
#define CHAT_USE_STD_KEY_BINDINGS_DEFAULT true
|
||||
#define CHAT_CHAR_COUNTER_DEFAULT true
|
||||
#define CHAT_CLOSED_MODE_DEFAULT 1
|
||||
|
||||
static const u8 CHAT_LABEL_LOW_RGB[3] = { 32, 64, 255 };
|
||||
static const u8 CHAT_LABEL_DEFAULT_RGB[3] = { 32, 224, 32 };
|
||||
|
|
@ -29,12 +33,23 @@ static struct DjuiSlider* sSliderBgOpacity = NULL;
|
|||
static struct DjuiSlider* sSliderTextOpacity = NULL;
|
||||
static struct DjuiSlider* sSliderLifetime = NULL;
|
||||
|
||||
static struct DjuiCheckbox* sCheckboxUseStdChat = NULL;
|
||||
static struct DjuiCheckbox* sCheckboxCharCounter = NULL;
|
||||
|
||||
static struct DjuiButton* sResetWidthButton = NULL;
|
||||
static struct DjuiButton* sResetHeightButton = NULL;
|
||||
static struct DjuiButton* sResetTextScaleButton = NULL;
|
||||
static struct DjuiButton* sResetBgOpacityButton = NULL;
|
||||
static struct DjuiButton* sResetTextOpacityButton = NULL;
|
||||
static struct DjuiButton* sResetLifetimeButton = NULL;
|
||||
static struct DjuiButton* sResetUseStdChatButton = NULL;
|
||||
static struct DjuiButton* sResetCharCounterButton = NULL;
|
||||
static struct DjuiButton* sResetClosedModeButton = NULL;
|
||||
|
||||
static void djui_panel_chat_update_lifetime_slider_enabled(void);
|
||||
static void djui_panel_chat_update_closed_mode_lifetime_label(void);
|
||||
|
||||
static struct DjuiSelectionbox* sChatClosedModeSelection = NULL;
|
||||
|
||||
static void djui_panel_chat_apply_chatbox_style(void) {
|
||||
djui_chat_messages_apply_style();
|
||||
|
|
@ -127,27 +142,36 @@ static void djui_panel_chat_update_value_labels(void) {
|
|||
snprintf(buf, sizeof(buf), "%us", configChatMessageLifetime);
|
||||
djui_text_set_text(sChatLifetimeLabel, buf);
|
||||
struct DjuiBase* base = &sChatLifetimeLabel->base;
|
||||
if (configChatMessageLifetime < 10) {
|
||||
djui_base_set_color(base, CHAT_LABEL_LOW_RGB[0], CHAT_LABEL_LOW_RGB[1], CHAT_LABEL_LOW_RGB[2], 255);
|
||||
} else if (configChatMessageLifetime == 10) {
|
||||
djui_base_set_color(base, CHAT_LABEL_DEFAULT_RGB[0], CHAT_LABEL_DEFAULT_RGB[1], CHAT_LABEL_DEFAULT_RGB[2], 255);
|
||||
|
||||
if (configChatClosedMode != 1) {
|
||||
// Deaktivierter Modus: Wert grau darstellen
|
||||
djui_base_set_color(base, 160, 160, 160, 255);
|
||||
} else {
|
||||
djui_base_set_color(base, CHAT_LABEL_HIGH_RGB[0], CHAT_LABEL_HIGH_RGB[1], CHAT_LABEL_HIGH_RGB[2], 255);
|
||||
if (configChatMessageLifetime < CHAT_LIFETIME_DEFAULT) {
|
||||
djui_base_set_color(base, CHAT_LABEL_LOW_RGB[0], CHAT_LABEL_LOW_RGB[1], CHAT_LABEL_LOW_RGB[2], 255);
|
||||
} else if (configChatMessageLifetime == CHAT_LIFETIME_DEFAULT) {
|
||||
djui_base_set_color(base, CHAT_LABEL_DEFAULT_RGB[0], CHAT_LABEL_DEFAULT_RGB[1], CHAT_LABEL_DEFAULT_RGB[2], 255);
|
||||
} else {
|
||||
djui_base_set_color(base, CHAT_LABEL_HIGH_RGB[0], CHAT_LABEL_HIGH_RGB[1], CHAT_LABEL_HIGH_RGB[2], 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_panel_chat_update_reset_buttons(void) {
|
||||
const struct { struct DjuiButton** btn; bool active; } entries[] = {
|
||||
{ &sResetUseStdChatButton, configUseStandardKeyBindingsChat != CHAT_USE_STD_KEY_BINDINGS_DEFAULT },
|
||||
{ &sResetCharCounterButton, configChatCharCounter != CHAT_CHAR_COUNTER_DEFAULT },
|
||||
{ &sResetClosedModeButton, configChatClosedMode != CHAT_CLOSED_MODE_DEFAULT },
|
||||
{ &sResetWidthButton, configChatWidth != CHAT_WIDTH_DEFAULT },
|
||||
{ &sResetHeightButton, configChatHeight != CHAT_HEIGHT_DEFAULT },
|
||||
{ &sResetTextScaleButton, configChatTextScale != CHAT_TEXT_SCALE_DEFAULT },
|
||||
{ &sResetBgOpacityButton, configChatBackgroundOpacity != CHAT_BG_OPACITY_DEFAULT },
|
||||
{ &sResetTextOpacityButton, configChatTextOpacity != CHAT_TEXT_OPACITY_DEFAULT },
|
||||
{ &sResetLifetimeButton, configChatMessageLifetime != CHAT_LIFETIME_DEFAULT },
|
||||
{ &sResetLifetimeButton, (configChatClosedMode == 1) && (configChatMessageLifetime != CHAT_LIFETIME_DEFAULT) },
|
||||
};
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
struct DjuiButton* btn = *entries[i].btn;
|
||||
if (btn == NULL) { continue; }
|
||||
|
||||
|
|
@ -164,6 +188,12 @@ static void djui_panel_chat_update_reset_buttons(void) {
|
|||
}
|
||||
}
|
||||
|
||||
static void djui_panel_chat_update_lifetime_slider_enabled(void) {
|
||||
if (sSliderLifetime == NULL) { return; }
|
||||
bool lifetimeActive = (configChatClosedMode == 1);
|
||||
djui_base_set_enabled(&sSliderLifetime->base, lifetimeActive);
|
||||
}
|
||||
|
||||
static void djui_panel_chat_slider_on_cursor_down(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
u32 min = slider->min;
|
||||
|
|
@ -243,6 +273,24 @@ static void djui_panel_chat_on_style_change(UNUSED struct DjuiBase* b) {
|
|||
static void djui_panel_chat_on_lifetime_change(UNUSED struct DjuiBase* b) {
|
||||
djui_panel_chat_update_value_labels();
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
djui_panel_chat_update_closed_mode_lifetime_label();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_closed_mode_change(UNUSED struct DjuiBase* b) {
|
||||
if (configChatClosedMode > 2) {
|
||||
configChatClosedMode = 1;
|
||||
}
|
||||
djui_panel_chat_update_lifetime_slider_enabled();
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
djui_panel_chat_update_value_labels();
|
||||
djui_panel_chat_update_closed_mode_lifetime_label();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_update_closed_mode_lifetime_label(void) {
|
||||
if (sChatClosedModeSelection == NULL) { return; }
|
||||
char buf[64];
|
||||
snprintf(buf, sizeof(buf), DLANG(CHAT_OPTIONS, CHAT_CLOSED_LIFETIME), configChatMessageLifetime);
|
||||
djui_selectionbox_set_choice_text(sChatClosedModeSelection, 1, buf);
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_reset_width(UNUSED struct DjuiBase* b) {
|
||||
|
|
@ -308,16 +356,58 @@ static void djui_panel_chat_on_reset_lifetime(UNUSED struct DjuiBase* b) {
|
|||
}
|
||||
djui_panel_chat_update_value_labels();
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
djui_panel_chat_update_closed_mode_lifetime_label();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_reset_use_std_chat(UNUSED struct DjuiBase* b) {
|
||||
configUseStandardKeyBindingsChat = CHAT_USE_STD_KEY_BINDINGS_DEFAULT;
|
||||
if (sCheckboxUseStdChat != NULL && sCheckboxUseStdChat->rectValue != NULL) {
|
||||
djui_base_set_visible(&sCheckboxUseStdChat->rectValue->base, configUseStandardKeyBindingsChat);
|
||||
}
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_reset_char_counter(UNUSED struct DjuiBase* b) {
|
||||
configChatCharCounter = CHAT_CHAR_COUNTER_DEFAULT;
|
||||
if (sCheckboxCharCounter != NULL && sCheckboxCharCounter->rectValue != NULL) {
|
||||
djui_base_set_visible(&sCheckboxCharCounter->rectValue->base, configChatCharCounter);
|
||||
}
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_reset_closed_mode(UNUSED struct DjuiBase* b) {
|
||||
configChatClosedMode = CHAT_CLOSED_MODE_DEFAULT;
|
||||
if (sChatClosedModeSelection != NULL) {
|
||||
djui_selectionbox_update_value(&sChatClosedModeSelection->base);
|
||||
djui_panel_chat_on_closed_mode_change(&sChatClosedModeSelection->base);
|
||||
} else {
|
||||
djui_panel_chat_on_closed_mode_change(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_checkbox_change(UNUSED struct DjuiBase* b) {
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
}
|
||||
|
||||
void djui_panel_chat_create(struct DjuiBase* caller) {
|
||||
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(CHAT_OPTIONS, CHAT), false);
|
||||
struct DjuiBase* body = djui_three_panel_get_body(panel);
|
||||
{
|
||||
djui_checkbox_create(body, DLANG(CHAT_OPTIONS, USE_STANDARD_KEY_BINDINGS_CHAT), &configUseStandardKeyBindingsChat, NULL);
|
||||
struct DjuiRect* rowUseStdChat = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowCharCounter = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowClosedMode = djui_rect_container_create(body, 32);
|
||||
|
||||
djui_checkbox_create(body, DLANG(CHAT_OPTIONS, CHAT_CHAR_COUNTER), &configChatCharCounter, NULL);
|
||||
djui_checkbox_create(body, DLANG(CHAT_OPTIONS, DISABLE_CHAT_WHEN_CLOSED), &configDisableChatWhenClosed, NULL);
|
||||
sCheckboxUseStdChat = djui_checkbox_create(&rowUseStdChat->base, DLANG(CHAT_OPTIONS, USE_STANDARD_KEY_BINDINGS_CHAT), &configUseStandardKeyBindingsChat, djui_panel_chat_on_checkbox_change);
|
||||
sCheckboxCharCounter = djui_checkbox_create(&rowCharCounter->base, DLANG(CHAT_OPTIONS, CHAT_CHAR_COUNTER), &configChatCharCounter, djui_panel_chat_on_checkbox_change);
|
||||
|
||||
char lifetimeChoice[64];
|
||||
snprintf(lifetimeChoice, sizeof(lifetimeChoice), DLANG(CHAT_OPTIONS, CHAT_CLOSED_LIFETIME), configChatMessageLifetime);
|
||||
char* chatClosedModeChoices[] = {
|
||||
DLANG(CHAT_OPTIONS, CHAT_CLOSED_DISABLED),
|
||||
lifetimeChoice,
|
||||
DLANG(CHAT_OPTIONS, CHAT_CLOSED_ALWAYS),
|
||||
};
|
||||
sChatClosedModeSelection = djui_selectionbox_create(&rowClosedMode->base, DLANG(CHAT_OPTIONS, CHAT_CLOSED_MODE), chatClosedModeChoices, 3, &configChatClosedMode, djui_panel_chat_on_closed_mode_change);
|
||||
|
||||
char* chatSizeChoices[] = {
|
||||
DLANG(CHAT_OPTIONS, CHAT_SIZE_MINIMUM),
|
||||
|
|
@ -334,19 +424,33 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
};
|
||||
(void)chatSizeChoices;
|
||||
|
||||
// Checkbox- / Selection-Basis und -Track an Sliderbreite anpassen
|
||||
if (sCheckboxUseStdChat != NULL) {
|
||||
djui_base_set_size(&sCheckboxUseStdChat->base, 0.94f, 32.0f);
|
||||
}
|
||||
if (sCheckboxCharCounter != NULL) {
|
||||
djui_base_set_size(&sCheckboxCharCounter->base, 0.94f, 32.0f);
|
||||
}
|
||||
if (sChatClosedModeSelection != NULL) {
|
||||
djui_base_set_size(&sChatClosedModeSelection->base, 0.94f, 32.0f);
|
||||
if (sChatClosedModeSelection->rect != NULL) {
|
||||
djui_base_set_size(&sChatClosedModeSelection->rect->base, 0.46f, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
struct DjuiRect* rowLifetime = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowWidth = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowHeight = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowTextScale = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowBgOpacity = djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowTextOpacity= djui_rect_container_create(body, 32);
|
||||
struct DjuiRect* rowLifetime = djui_rect_container_create(body, 32);
|
||||
|
||||
sSliderLifetime = djui_slider_create(&rowLifetime->base, DLANG(CHAT_OPTIONS, CHAT_LIFETIME), &configChatMessageLifetime, 1, 120, djui_panel_chat_on_lifetime_change);
|
||||
sSliderWidth = djui_slider_create(&rowWidth->base, DLANG(CHAT_OPTIONS, CHAT_WIDTH), &configChatWidth, 200, 2000, djui_panel_chat_on_width_slider_change);
|
||||
sSliderHeight = djui_slider_create(&rowHeight->base, DLANG(CHAT_OPTIONS, CHAT_HEIGHT), &configChatHeight, 100, 1000, djui_panel_chat_on_height_slider_change);
|
||||
sSliderTextScale = djui_slider_create(&rowTextScale->base, DLANG(CHAT_OPTIONS, CHAT_TEXT_SCALE), &configChatTextScale, 50, 200, djui_panel_chat_on_style_change);
|
||||
sSliderBgOpacity = djui_slider_create(&rowBgOpacity->base, DLANG(CHAT_OPTIONS, CHAT_BACKGROUND_OPACITY), &configChatBackgroundOpacity, 0, 100, djui_panel_chat_on_style_change);
|
||||
sSliderTextOpacity = djui_slider_create(&rowTextOpacity->base, DLANG(CHAT_OPTIONS, CHAT_TEXT_OPACITY), &configChatTextOpacity, 0, 100, djui_panel_chat_on_style_change);
|
||||
sSliderLifetime = djui_slider_create(&rowLifetime->base, DLANG(CHAT_OPTIONS, CHAT_LIFETIME), &configChatMessageLifetime, 1, 120, djui_panel_chat_on_lifetime_change);
|
||||
|
||||
{
|
||||
struct DjuiSlider* slidersForCursor[] = {
|
||||
|
|
@ -429,6 +533,9 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
djui_text_set_alignment(sChatLifetimeLabel, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
|
||||
djui_text_set_drop_shadow(sChatLifetimeLabel, 64, 64, 64, 100);
|
||||
|
||||
sResetUseStdChatButton = djui_button_create(&rowUseStdChat->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_use_std_chat);
|
||||
sResetCharCounterButton = djui_button_create(&rowCharCounter->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_char_counter);
|
||||
sResetClosedModeButton = djui_button_create(&rowClosedMode->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_closed_mode);
|
||||
sResetWidthButton = djui_button_create(&rowWidth->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_width);
|
||||
sResetHeightButton = djui_button_create(&rowHeight->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_height);
|
||||
sResetTextScaleButton = djui_button_create(&rowTextScale->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_text_scale);
|
||||
|
|
@ -437,6 +544,9 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
sResetLifetimeButton = djui_button_create(&rowLifetime->base, "X", DJUI_BUTTON_STYLE_NORMAL, djui_panel_chat_on_reset_lifetime);
|
||||
|
||||
struct DjuiButton* buttons[] = {
|
||||
sResetUseStdChatButton,
|
||||
sResetCharCounterButton,
|
||||
sResetClosedModeButton,
|
||||
sResetWidthButton,
|
||||
sResetHeightButton,
|
||||
sResetTextScaleButton,
|
||||
|
|
@ -444,7 +554,7 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
sResetTextOpacityButton,
|
||||
sResetLifetimeButton,
|
||||
};
|
||||
for (int i = 0; i < 6; i++) {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
struct DjuiButton* btn = buttons[i];
|
||||
if (btn == NULL) { continue; }
|
||||
djui_base_set_alignment(&btn->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_CENTER);
|
||||
|
|
@ -453,6 +563,7 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
}
|
||||
|
||||
djui_panel_chat_update_value_labels();
|
||||
djui_panel_chat_update_lifetime_slider_enabled();
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
|
||||
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
|
||||
|
|
|
|||
|
|
@ -167,3 +167,20 @@ struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const
|
|||
|
||||
return selectionbox;
|
||||
}
|
||||
|
||||
void djui_selectionbox_set_choice_text(struct DjuiSelectionbox* selectionbox, u8 index, const char* text) {
|
||||
if (selectionbox == NULL) { return; }
|
||||
if (index >= selectionbox->choiceCount) { return; }
|
||||
|
||||
if (selectionbox->choices[index] != NULL) {
|
||||
free(selectionbox->choices[index]);
|
||||
}
|
||||
|
||||
u32 length = strlen(text);
|
||||
selectionbox->choices[index] = calloc(length + 1, sizeof(char));
|
||||
sprintf(selectionbox->choices[index], "%s", text);
|
||||
|
||||
if (*selectionbox->value == index && selectionbox->rectText != NULL) {
|
||||
djui_text_set_text(selectionbox->rectText, selectionbox->choices[index]);
|
||||
}
|
||||
}
|
||||
|
|
@ -14,4 +14,5 @@ struct DjuiSelectionbox {
|
|||
};
|
||||
|
||||
struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value, void (*on_value_change)(struct DjuiBase*));
|
||||
void djui_selectionbox_update_value(struct DjuiBase* base);
|
||||
void djui_selectionbox_update_value(struct DjuiBase* base);
|
||||
void djui_selectionbox_set_choice_text(struct DjuiSelectionbox* selectionbox, u8 index, const char* text);
|
||||
Loading…
Add table
Reference in a new issue