From 5e323cd9ab81072b7a1b7b6fb45f3fc98fd0e120 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Mon, 4 Dec 2017 20:37:55 +0800 Subject: [PATCH] fix VCaptain to change avatar's border color on mode change --- src/resources/themes/v_white/v_white.palette | 5 +++++ src/vcaptain.cpp | 6 +++--- src/vcaptain.h | 4 ++++ src/vmainwindow.cpp | 14 ++++++++++++++ src/vpalette.cpp | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/resources/themes/v_white/v_white.palette b/src/resources/themes/v_white/v_white.palette index 7fb3890e..1ca8f9f1 100644 --- a/src/resources/themes/v_white/v_white.palette +++ b/src/resources/themes/v_white/v_white.palette @@ -43,6 +43,11 @@ content_bg=#FFFFFF selection_fg=#000000 selection_bg=#64b5f6 +[soft_defined] +; VAvatar. +; The border background color of the avatar when Captain mode is triggered. +avatar_captain_mode_border_bg=#6C6C6C + [widgets] ; Widget color attributes. diff --git a/src/vcaptain.cpp b/src/vcaptain.cpp index fe01d6df..916d5e21 100644 --- a/src/vcaptain.cpp +++ b/src/vcaptain.cpp @@ -199,7 +199,7 @@ void VCaptain::exitCaptainMode() restoreFocus(); - qDebug() << "exit Captain mode"; + emit captainModeChanged(false); } bool VCaptain::registerCaptainTarget(const QString &p_name, @@ -255,14 +255,14 @@ bool VCaptain::navigationModeByCaptain(void *p_target, void *p_data) void VCaptain::triggerCaptainMode() { - qDebug() << "trigger Captain mode"; - m_widgetBeforeCaptain = QApplication::focusWidget(); m_ignoreFocusChange = false; setMode(CaptainMode::Pending); + emit captainModeChanged(true); + // Focus to listen pending key press. setFocus(); } diff --git a/src/vcaptain.h b/src/vcaptain.h index 73e82282..15d4670f 100644 --- a/src/vcaptain.h +++ b/src/vcaptain.h @@ -43,6 +43,10 @@ public: void *p_target, CaptainFunc p_func); +signals: + // Emit when mode changed. + void captainModeChanged(bool p_captainMode); + protected: void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE; diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index 7dff73ce..5a92c0bd 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -33,11 +33,14 @@ #include "vsnippetlist.h" #include "vtoolbox.h" #include "vbuttonmenuitem.h" +#include "vpalette.h" VMainWindow *g_mainWin; extern VConfigManager *g_config; +extern VPalette *g_palette; + VNote *g_vnote; const int VMainWindow::c_sharedMemTimerInterval = 1000; @@ -110,6 +113,17 @@ void VMainWindow::initCaptain() // VCaptain should be visible to accpet key focus. But VCaptain // may hide other widgets. m_captain = new VCaptain(this); + connect(m_captain, &VCaptain::captainModeChanged, + this, [this](bool p_captainMode) { + static QString normalBaseColor = m_avatar->getBaseColor(); + static QString captainModeColor = g_palette->color("avatar_captain_mode_border_bg"); + + if (p_captainMode) { + m_avatar->updateBaseColor(captainModeColor); + } else { + m_avatar->updateBaseColor(normalBaseColor); + } + }); } void VMainWindow::registerCaptainAndNavigationTargets() diff --git a/src/vpalette.cpp b/src/vpalette.cpp index 13730c8f..69995c62 100644 --- a/src/vpalette.cpp +++ b/src/vpalette.cpp @@ -20,6 +20,7 @@ void VPalette::init(const QString &p_file) QSettings settings(p_file, QSettings::IniFormat); initMetaData(&settings, "metadata"); initPaleteFromSettings(&settings, "phony"); + initPaleteFromSettings(&settings, "soft_defined"); initPaleteFromSettings(&settings, "widgets"); }