mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-27 20:41:42 +00:00
added slider fine adjustment
This commit is contained in:
parent
1a41b4a583
commit
7e960bc02f
14 changed files with 113 additions and 11 deletions
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Zobrazit historii chatu"
|
|||
CHAT_CLOSED_DISABLED = "Skrytý"
|
||||
CHAT_CLOSED_LIFETIME = "Skrýt po: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Vždy viditelný"
|
||||
CHAT_SHIFT_HINT = "Podržte Shift pro jemné nastavení"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Jemné nastavení aktivní"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACE"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Chatgeschiedenis tonen"
|
|||
CHAT_CLOSED_DISABLED = "Verborgen"
|
||||
CHAT_CLOSED_LIFETIME = "Verbergen na: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Altijd zichtbaar"
|
||||
CHAT_SHIFT_HINT = "Houd Shift ingedrukt voor fijne aanpassing"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Fijne aanpassing actief"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATIE"
|
||||
|
|
|
|||
|
|
@ -354,6 +354,8 @@ CHAT_CLOSED_MODE = "Show Chat History"
|
|||
CHAT_CLOSED_DISABLED = "Hide immediately"
|
||||
CHAT_CLOSED_LIFETIME = "Fade after: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Always visible"
|
||||
CHAT_SHIFT_HINT = "Hold Shift for fine adjustment"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Fine adjustment active"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Afficher l'historique du chat"
|
|||
CHAT_CLOSED_DISABLED = "Masqué"
|
||||
CHAT_CLOSED_LIFETIME = "Masquer après : %us"
|
||||
CHAT_CLOSED_ALWAYS = "Toujours visible"
|
||||
CHAT_SHIFT_HINT = "Maintenir Shift pour réglage fin"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Réglage fin actif"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Chatverlauf anzeigen"
|
|||
CHAT_CLOSED_DISABLED = "Sofort ausblenden"
|
||||
CHAT_CLOSED_LIFETIME = "Ausblenden nach: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Dauerhaft anzeigen"
|
||||
CHAT_SHIFT_HINT = "Shift für Feinjustierung gedrückt halten"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Feinjustierung aktiv"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -353,6 +353,8 @@ CHAT_CLOSED_MODE = "Mostrare la cronologia della chat"
|
|||
CHAT_CLOSED_DISABLED = "Disattivata"
|
||||
CHAT_CLOSED_LIFETIME = "Nascondi dopo: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Sempre visibile"
|
||||
CHAT_SHIFT_HINT = "Tieni premuto Shift per regolazione fine"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Regolazione fine attiva"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -356,6 +356,8 @@ CHAT_CLOSED_MODE = "チャット履歴の表示"
|
|||
CHAT_CLOSED_DISABLED = "非表示"
|
||||
CHAT_CLOSED_LIFETIME = "非表示まで: %us"
|
||||
CHAT_CLOSED_ALWAYS = "常に表示"
|
||||
CHAT_SHIFT_HINT = "微調整にはShiftキーを押し続けてください"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "微調整が有効です"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFO"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Wyświetlanie historii czatu"
|
|||
CHAT_CLOSED_DISABLED = "Wyłączony"
|
||||
CHAT_CLOSED_LIFETIME = "Ukryj po: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Zawsze widoczny"
|
||||
CHAT_SHIFT_HINT = "Przytrzymaj Shift dla precyzyjnej regulacji"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Precyzyjna regulacja aktywna"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACJA"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ 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"
|
||||
CHAT_SHIFT_HINT = "Mantenha Shift pressionado para ajuste fino"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Ajuste fino ativo"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMAÇÃO"
|
||||
|
|
|
|||
|
|
@ -353,6 +353,8 @@ CHAT_CLOSED_MODE = "Показывать историю чата"
|
|||
CHAT_CLOSED_DISABLED = "Скрыт"
|
||||
CHAT_CLOSED_LIFETIME = "Скрывать через: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Всегда виден"
|
||||
CHAT_SHIFT_HINT = "Удерживайте Shift для точной настройки"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Точная настройка активна"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMATION"
|
||||
|
|
|
|||
|
|
@ -355,6 +355,8 @@ CHAT_CLOSED_MODE = "Mostrar historial de chat"
|
|||
CHAT_CLOSED_DISABLED = "Oculto"
|
||||
CHAT_CLOSED_LIFETIME = "Ocultar tras: %us"
|
||||
CHAT_CLOSED_ALWAYS = "Siempre visible"
|
||||
CHAT_SHIFT_HINT = "Mantén presionado Shift para ajuste fino"
|
||||
CHAT_SHIFT_HINT_ACTIVE = "Ajuste fino activo"
|
||||
|
||||
[INFORMATION]
|
||||
INFORMATION_TITLE = "INFORMACIÓN"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "djui_panel_pause.h"
|
||||
#include "djui_panel_modlist.h"
|
||||
#include "djui_panel_playerlist.h"
|
||||
#include "djui_panel_chat.h"
|
||||
|
||||
#include "pc/controller/controller_sdl.h"
|
||||
#include "pc/controller/controller_mouse.h"
|
||||
|
|
@ -198,6 +199,19 @@ bool djui_interactable_on_key_down(int scancode) {
|
|||
return true;
|
||||
}
|
||||
|
||||
switch (scancode) {
|
||||
case SCANCODE_SHIFT_LEFT: gDjuiInputHeldShift |= (1 << 0); break;
|
||||
case SCANCODE_SHIFT_RIGHT: gDjuiInputHeldShift |= (1 << 1); break;
|
||||
case SCANCODE_CONTROL_LEFT: gDjuiInputHeldControl |= (1 << 0); break;
|
||||
case SCANCODE_CONTROL_RIGHT: gDjuiInputHeldControl |= (1 << 1); break;
|
||||
case SCANCODE_ALT_LEFT: gDjuiInputHeldAlt |= (1 << 0); break;
|
||||
case SCANCODE_ALT_RIGHT: gDjuiInputHeldAlt |= (1 << 1); break;
|
||||
}
|
||||
|
||||
if ((scancode == SCANCODE_SHIFT_LEFT || scancode == SCANCODE_SHIFT_RIGHT) && djui_panel_is_active()) {
|
||||
djui_panel_chat_update_shift_hint();
|
||||
}
|
||||
|
||||
bool keyFocused = (gInteractableFocus != NULL)
|
||||
&& (gInteractableFocus->interactable != NULL)
|
||||
&& (gInteractableFocus->interactable->on_key_down != NULL);
|
||||
|
|
@ -285,6 +299,18 @@ bool djui_interactable_on_key_down(int scancode) {
|
|||
}
|
||||
|
||||
void djui_interactable_on_key_up(int scancode) {
|
||||
switch (scancode) {
|
||||
case SCANCODE_SHIFT_LEFT: gDjuiInputHeldShift &= ~(1 << 0); break;
|
||||
case SCANCODE_SHIFT_RIGHT: gDjuiInputHeldShift &= ~(1 << 1); break;
|
||||
case SCANCODE_CONTROL_LEFT: gDjuiInputHeldControl &= ~(1 << 0); break;
|
||||
case SCANCODE_CONTROL_RIGHT: gDjuiInputHeldControl &= ~(1 << 1); break;
|
||||
case SCANCODE_ALT_LEFT: gDjuiInputHeldAlt &= ~(1 << 0); break;
|
||||
case SCANCODE_ALT_RIGHT: gDjuiInputHeldAlt &= ~(1 << 1); break;
|
||||
}
|
||||
|
||||
if ((scancode == SCANCODE_SHIFT_LEFT || scancode == SCANCODE_SHIFT_RIGHT) && djui_panel_is_active()) {
|
||||
djui_panel_chat_update_shift_hint();
|
||||
}
|
||||
|
||||
bool keyFocused = (gInteractableFocus != NULL)
|
||||
&& (gInteractableFocus->interactable != NULL)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,21 @@ static struct DjuiButton* sResetUseStdChatButton = NULL;
|
|||
static struct DjuiButton* sResetCharCounterButton = NULL;
|
||||
static struct DjuiButton* sResetClosedModeButton = NULL;
|
||||
|
||||
static f32 sChatSliderLastCursorX = 0.0f;
|
||||
static bool sChatSliderFineAdjust = false;
|
||||
static struct DjuiText* sChatShiftHintText = NULL;
|
||||
|
||||
void djui_panel_chat_update_shift_hint(void) {
|
||||
if (sChatShiftHintText == NULL) { return; }
|
||||
if (gDjuiInputHeldShift) {
|
||||
djui_text_set_text(sChatShiftHintText, DLANG(CHAT_OPTIONS, CHAT_SHIFT_HINT_ACTIVE));
|
||||
djui_base_set_color(&sChatShiftHintText->base, 255, 165, 0, 255);
|
||||
} else {
|
||||
djui_text_set_text(sChatShiftHintText, DLANG(CHAT_OPTIONS, CHAT_SHIFT_HINT));
|
||||
djui_base_set_color(&sChatShiftHintText->base, 128, 128, 128, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void djui_panel_chat_update_lifetime_slider_enabled(void);
|
||||
static void djui_panel_chat_update_closed_mode_lifetime_label(void);
|
||||
|
||||
|
|
@ -199,20 +214,41 @@ static void djui_panel_chat_slider_on_cursor_down(struct DjuiBase* base) {
|
|||
u32 min = slider->min;
|
||||
u32 max = slider->max;
|
||||
u32* value = slider->value;
|
||||
f32 x = slider->rect->base.elem.x;
|
||||
f32 w = slider->rect->base.elem.width;
|
||||
f32 cursorX = gCursorX;
|
||||
cursorX = fmax(cursorX, x);
|
||||
cursorX = fmin(cursorX, x + w);
|
||||
|
||||
f32 t = 0.0f;
|
||||
if (w > 0.0f) {
|
||||
t = (cursorX - x) / w;
|
||||
sChatSliderFineAdjust = (gDjuiInputHeldShift != 0);
|
||||
djui_panel_chat_update_shift_hint();
|
||||
|
||||
int newValue = (int)*value;
|
||||
|
||||
if (sChatSliderFineAdjust) {
|
||||
f32 w = slider->rect->base.elem.width;
|
||||
if (w <= 0.0f) { w = 1.0f; }
|
||||
|
||||
f32 baseStepPerPixel = (f32)(max - min) / w;
|
||||
f32 fineStepPerPixel = baseStepPerPixel * 0.1f;
|
||||
|
||||
f32 cursorX = gCursorX;
|
||||
f32 deltaX = cursorX - sChatSliderLastCursorX;
|
||||
sChatSliderLastCursorX = cursorX;
|
||||
|
||||
newValue = (int)((f32)newValue + deltaX * fineStepPerPixel + 0.5f);
|
||||
} else {
|
||||
f32 x = slider->rect->base.elem.x;
|
||||
f32 w = slider->rect->base.elem.width;
|
||||
f32 cursorX = gCursorX;
|
||||
cursorX = fmax(cursorX, x);
|
||||
cursorX = fmin(cursorX, x + w);
|
||||
|
||||
f32 t = 0.0f;
|
||||
if (w > 0.0f) {
|
||||
t = (cursorX - x) / w;
|
||||
}
|
||||
if (t < 0.0f) t = 0.0f;
|
||||
if (t > 1.0f) t = 1.0f;
|
||||
|
||||
newValue = (int)(t * (f32)(max - min) + 0.5f) + (int)min;
|
||||
}
|
||||
if (t < 0.0f) t = 0.0f;
|
||||
if (t > 1.0f) t = 1.0f;
|
||||
|
||||
int newValue = (int)(t * (f32)(max - min) + 0.5f) + (int)min;
|
||||
if (newValue < (int)min) newValue = (int)min;
|
||||
if (newValue > (int)max) newValue = (int)max;
|
||||
*value = (u32)newValue;
|
||||
|
|
@ -230,6 +266,9 @@ static void djui_panel_chat_slider_on_cursor_down_begin(struct DjuiBase* base, b
|
|||
if (inputCursor) {
|
||||
djui_interactable_set_input_focus(base);
|
||||
} else {
|
||||
sChatSliderLastCursorX = gCursorX;
|
||||
sChatSliderFineAdjust = (gDjuiInputHeldShift != 0);
|
||||
djui_panel_chat_update_shift_hint();
|
||||
slider->base.interactable->on_cursor_down = djui_panel_chat_slider_on_cursor_down;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -240,6 +279,8 @@ static void djui_panel_chat_slider_on_cursor_down_begin(struct DjuiBase* base, b
|
|||
static void djui_panel_chat_slider_on_cursor_down_end(struct DjuiBase* base) {
|
||||
struct DjuiSlider* slider = (struct DjuiSlider*)base;
|
||||
slider->base.interactable->on_cursor_down = NULL;
|
||||
sChatSliderFineAdjust = false;
|
||||
djui_panel_chat_update_shift_hint();
|
||||
}
|
||||
|
||||
static void djui_panel_chat_on_width_slider_change(UNUSED struct DjuiBase* b) {
|
||||
|
|
@ -566,6 +607,18 @@ void djui_panel_chat_create(struct DjuiBase* caller) {
|
|||
djui_panel_chat_update_lifetime_slider_enabled();
|
||||
djui_panel_chat_update_reset_buttons();
|
||||
|
||||
struct DjuiRect* rowShiftHint = djui_rect_container_create(body, 32);
|
||||
djui_base_set_color(&rowShiftHint->base, 0, 0, 0, 0);
|
||||
|
||||
sChatShiftHintText = djui_text_create(&rowShiftHint->base, "");
|
||||
djui_base_set_alignment(&sChatShiftHintText->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
|
||||
djui_base_set_size_type(&sChatShiftHintText->base, DJUI_SVT_RELATIVE, DJUI_SVT_RELATIVE);
|
||||
djui_base_set_size(&sChatShiftHintText->base, 1.0f, 1.0f);
|
||||
djui_text_set_alignment(sChatShiftHintText, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
|
||||
djui_text_set_drop_shadow(sChatShiftHintText, 64, 64, 64, 100);
|
||||
djui_base_set_visible(&sChatShiftHintText->base, true);
|
||||
djui_panel_chat_update_shift_hint();
|
||||
|
||||
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,5 +2,6 @@
|
|||
#include "djui.h"
|
||||
|
||||
void djui_panel_chat_create(struct DjuiBase* caller);
|
||||
void djui_panel_chat_update_shift_hint(void);
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue