From d88eb0f53b97e648048d55085725d549ae9e8fc5 Mon Sep 17 00:00:00 2001 From: Vasily Date: Fri, 28 Feb 2020 13:05:24 +0100 Subject: [PATCH] Add push to mute icon when using push to mute feature The PTM icon was quickly made in mspaint and (in my opinion) adequately reflects push to mute. Fixes https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/342 --- .../img/audio/microphone/ptm_notification.png | Bin 0 -> 4765 bytes src/tabcontrollers/AudioTabController.cpp | 104 ++++++++++++------ src/tabcontrollers/AudioTabController.h | 10 +- 3 files changed, 79 insertions(+), 35 deletions(-) create mode 100644 src/res/img/audio/microphone/ptm_notification.png diff --git a/src/res/img/audio/microphone/ptm_notification.png b/src/res/img/audio/microphone/ptm_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfa181637c17c2359aee2af86cc17f7642600af GIT binary patch literal 4765 zcmZu#c{J2-)c=kdV;i#XOCgedCre{D5<=OxtP_Tibz+RQu@5mKYh^2BEXfiR5!uQv zj3p_;6j@5%`MrO>=Y7t(&pr1(=iGCjd!GAw?!6DJEKHag`56HKU`Ci4T2ncONR|B+5V3(<9hhE-1veXh)kL0N73uhI+P< zu0I~rg>m)s4_tjDp2!NnWB$}EM}m=2dwn8LLJ!9p{g6&Hl2s&C54;h7zRaCH`!@zt z#z|X}s!O4_gw$N7H@$X2MM}{Wt{-` zuHAZTB0a-U#X|HbEa~yNF3?*baI0sXp;DDYM9NN$euZbqJ{Xf{4!Muf;n!mJbrql@h$+E0AI*luZkIuFb}aiLAr2-h?Iugm=u zM{Ct?P1`i3O&9`HYm?sk`g0q6dY6?W`)=jE1anf;%`BLh(}#E@Y`ig6X!g}*kZ_G- zVSu9Wh2EPX!-PwDQ!<2AIr4<#l!pOocEDB3&6(*1!Wu1AdLn?B$SI8Ch-Tpjn`9AB zAKxN;S5uHt;ZtEo(0mrmRN4mP zY9+Z|q$}t0Iak(tbF}4VnUYen8r=DV;iZMz7Z)G}q+GVWihIBJ-;4X2!;qL#r3U)a z>B<4T?1r8S)-M?~){@Yz)4_lgyL}0qN^+u|pjXUwl?!9`(W!2(=WI{u)zNE=YWZ2ELk8K|) zd&=-i0AP|o1U|@hO0Em%;-kId>p<(=uMq9EtdSeM?;SWQjln2rwvAQiX|JWdY2#ja z!_*CS=1FWCXdNfd&i0!gF$WeaguevYGfA{Y+v#KL@Ok$MssWMZ(b@XU9G8@U2AYR* zF1RP#2JUdoo=p(Ppc>{gHu9vy`ro@)e`98|_D-oMRSaHya3tvS+0s~pIAV@2F77IR z=yH=$J1nL=49L&e1C6b?P)5=pGZl??Z&sWnL3Gfm1pmft+0#dx6u3aKq1>;OH z66D}aKF~mJS!FWVwnKvl6nnvw>~3VN0npG@AwX( zrw-&7PP(kSb=HPsh)k6yIi^@gs$h!K7#z2KXi8Rz@VfGC8w?&h-w%=b^6pCc3m#Vq zJw`rw#`rEnT@mIc`j+3nWaDf7Jn?4aZ(fxcQk|@>B_l7qZhDt-_+Pp(t^IISvmElD ztC@|97-mrNH!4VNq5TN4H3IS2@}vq-zi zOs4)~CA7N#bHoxW_eaAg^OWS)s$nWN{1SuQ?Jf}Za)X)X1Oy0k!8P!O?DOV!ADk*NhHcjDO1HqrV0{7|h2$Uu>j( z);Agto}%H7V|$YeAHp!A92i zNy=Z~-k36_fNMnm_Ph@D$W$N5iV+rjl$K@1*Yg%_tV>Y=;pY_aN2!kY%)9}jsGVWu zg9eFwHB5p^z8bIa@RMfE-qGJCM2xlAPQ78H5QnkK7$?8I{ zX}%JMAM3CP$yWsGtYq4vZ>hy!g!PEBGRot22|YAWcdlijjv~wuaH!L*v??@>8vfIM zX0NB1hm)^JVc1c=RqN<~*@}<+`>~d|QHmR)l?#qq_F1@EN3TNTABcVae1WQttHDaA z?_q}khqgIJ0dkWt3v*jjlc^cMY9G(UM@SoLLPVM5Sk)Y_dO}mR?npgaodmMdj+0LtG{6KT@37c8(|J_@=Km|E^DvYW13b%Pa zy&#%5me#rhj;)4e#&LK04=-#~ zvsHi+=;+f%KA=}IQD*y?Ql{`c-3ZNT#6&TQB#?hTtZUru@xWJBM%lc6?G>m&?+r0c z5#Wo<78Dv04l=b4``l3g?&nvR)I>IOE^$4TnC%Qq34Si4BAK8&RaUKGI?gj2bboK~ z2ENiju*M8*%y(FG4P9PvBpPx(J2w|B5;SWTvfpTI6BNm>O3ibtVsJ{Fgyxl6qeKP~ zDf>i|eQr0yOonhYk;$S&SNaLE#zB^bq>n|6YK4%lit=J47`LzX`2bI1zWx^f!bil( zlkQ+?)9mnqIyYRjvh$QWNBH1epzOqkwwNE!DNu{s7v_7RI( z2mv^1%cPnavpp}?^$a6D8#S@{^0oLOP)7x3Yu$X$0ZpDgZma7*naL-Kg8~^9ba+l3 zgNhiuEj2;i44FA#4|a^Km&%c+-OtiJZ~*-ll6-9O<5!2GL;soFiUGb!*!muu@Ckj` z&TR7fWF-cK)-)0)I<92zFcpu}e?9Zy5*b#CIuYEc@`)z#zd%pDpJfA!OU_%(pRjGv zpHCU(kfgeLyIfg0NdGLSVdzn$nS3Mx=$MGnJrjIibL|3n+z^ysXE7~pd$>CwnR7oS zE9Gj)hZ-=XQLEflux-!V=>x=227QYHnY9ogFl(dx$jRDtmxTn>$B7Ix>W zG)b?jMcWy2G^6HVC4n=JrZEXEH;ze_)X#aBg**EuS}ItWBz$V}HYqJYzRHh5ck`QS zWI$}2roWEvz7+#O*PG_ORKo9$E@R-4P$YZd)MJ^4iHp^Xl_tF_rT;zyx-z?R}8DVy6&N~mfp-l-zQ(2va#%fm4h}P z#P6(2s`31*VmL93;NC5%e_i%_zdQx>)<+|jcN4-F>3X)$ar;LXWK&EeJ`|T;LaPri z=yZyLEXA37zF(5+`{Px-t9Ew>)=$JOwg2MjEPX}us3n8l@CI=VkpHRhlN=%I+=*|u zq)2{iL5PMS8Fw{he>n)RJ2*8rvc{#!+$wF&#J$<*0ghSF5zL+>u)1?r+Y6 z=37wZM=n>=W!!#zW-e;o!MMcyR(vzE#w>jBjWO*=uXn{tP9DbmilHW1XV92Kkz~(y zyMrT%b3xC#)wrVv%*8al8(YyM%A0LCf&6- zWxKyQ3BRUI$am}QZUfKK;F@1~`6)TQr>>ZDKJVy>xBWqkv8Tq#dlP2p?IjnDKR?hE zw)qoEvfy=Rk8UQblces=rKjNMsd08~Mv{||2BUwE6$DClCo==0FwPu%ar~EQ|xHBHzoy{B=$g+Ul(|d(1tg`seVWZIuj%B6)^YD&7&lq+Pj6s*#S<` zFZgrDo1$zsPXe6$J~j$Z)tJ`rr8;`Jae&X?(b3ALi8=f&tU>eV+&@Uw*i-r(QO&78 z+J-yiItPvO98Tc}sS1&+lw?wHME=xx`lZfPA1FMJ05^QVXSnCM^6{Z`@WFh>-|jey z5KZxfAzIC<9Id(1YBPF!*36LSh7;P*2AsO5Ktp;9(_Xo7r6Orhv>rOX{qE5W=ypaRpn1sz@$#4vo6G)SCMj})m?gZ zlW4bSub2li{D4Yi3!G>AGJyIX@J=(n^s{DapP0-OcgLMcO#8E`+vP+X! zHY1cc_`7|#_uQXzy=@(bq?Rr9!CRs3ga!CgwKwkmZ~^@qkoEZJI^mmu34I~oFnRoZ|+IV<|}RH~}>SwB|ZvtxF(moTm|G@nt7S5WU9Rv!MZP z)XW40WO@Qc|Btx&Pv(5J`FRK}Ex!1QZS9^yfQ6%BNEkVoClOL1lSnk`GM|m?bR3?U6VvY>LrE1iHd|7IoKVCBflSfV?jDUL$!CssDIW z@hpC0`RGJi9@)yDT(~*a#bM5`j$3awumO|xO~q2Q38EwA=U=tr=ZE{+D{DZ(Try8X z!A^X|VlP8u4(u31jcmZSSujZ{x**$zXMsYM^pt#HbWSf>%Cxm8u{+F1SuW#=1>^bf5=LxZI2i~U7G2L^Z zy?&UYcjOF6BAdiC5D$eb7Vdau8+Zh$Dh>9k|DPxyM}Yo!zVfWy=XG$l$@`urvPfQA mq)#_UaQi_hW1}i?Mu#Utoy-S@I0SF@t!+L#p?Ee715~Du= literal 0 HcmV?d00001 diff --git a/src/tabcontrollers/AudioTabController.cpp b/src/tabcontrollers/AudioTabController.cpp index 6d216b4..5e08656 100644 --- a/src/tabcontrollers/AudioTabController.cpp +++ b/src/tabcontrollers/AudioTabController.cpp @@ -60,46 +60,73 @@ void AudioTabController::initStage1() eventLoopTick(); } +std::optional verifyIconFilePath( std::string filename ) +{ + const auto notifIconPath = paths::binaryDirectoryFindFile( filename ); + if ( !notifIconPath.has_value() ) + { + LOG( ERROR ) << "Could not find push to talk icon \"" << filename + << "\""; + } + + return notifIconPath; +} + void AudioTabController::initStage2() { - std::string notifKey = std::string( application_strings::applicationKey ) - + ".pptnotification"; + const auto pushToTalkOverlayKey + = std::string( application_strings::applicationKey ) + + ".pptnotification"; - vr::VROverlayError overlayError = vr::VROverlay()->CreateOverlay( - notifKey.c_str(), notifKey.c_str(), &m_ulNotificationOverlayHandle ); - if ( overlayError == vr::VROverlayError_None ) - { - constexpr auto notificationIconFilename - = "/res/img/audio/microphone/ptt_notification.png"; - const auto notifIconPath - = paths::binaryDirectoryFindFile( notificationIconFilename ); - if ( notifIconPath.has_value() ) - { - vr::VROverlay()->SetOverlayFromFile( m_ulNotificationOverlayHandle, - notifIconPath->c_str() ); - vr::VROverlay()->SetOverlayWidthInMeters( - m_ulNotificationOverlayHandle, 0.02f ); - vr::HmdMatrix34_t notificationTransform - = { { { 1.0f, 0.0f, 0.0f, 0.12f }, - { 0.0f, 1.0f, 0.0f, 0.08f }, - { 0.0f, 0.0f, 1.0f, -0.3f } } }; - vr::VROverlay()->SetOverlayTransformTrackedDeviceRelative( - m_ulNotificationOverlayHandle, - vr::k_unTrackedDeviceIndex_Hmd, - ¬ificationTransform ); - } - else - { - LOG( ERROR ) << "Could not find notification icon \"" - << notificationIconFilename << "\""; - } - } - else + const auto overlayError + = vr::VROverlay()->CreateOverlay( pushToTalkOverlayKey.c_str(), + pushToTalkOverlayKey.c_str(), + &m_pushToTalkValues.overlayHandle ); + if ( overlayError != vr::VROverlayError_None ) { LOG( ERROR ) << "Could not create ptt notification overlay: " << vr::VROverlay()->GetOverlayErrorNameFromEnum( overlayError ); + + emit defaultProfileDisplay(); + + return; } + + constexpr auto pushToTalkIconFilepath + = "/res/img/audio/microphone/ptt_notification.png"; + constexpr auto pushToMuteIconFilepath + = "/res/img/audio/microphone/ptm_notification.png"; + + const auto pushToTalkIconFilePath + = verifyIconFilePath( pushToTalkIconFilepath ); + const auto pushToMuteIconFilePath + = verifyIconFilePath( pushToMuteIconFilepath ); + + if ( !pushToTalkIconFilePath.has_value() + || !pushToMuteIconFilePath.has_value() ) + { + emit defaultProfileDisplay(); + return; + } + + m_pushToTalkValues.pushToTalkPath = *pushToTalkIconFilePath; + m_pushToTalkValues.pushToMutePath = *pushToMuteIconFilePath; + + vr::VROverlay()->SetOverlayFromFile( + m_pushToTalkValues.overlayHandle, + m_pushToTalkValues.pushToTalkPath.c_str() ); + vr::VROverlay()->SetOverlayWidthInMeters( m_pushToTalkValues.overlayHandle, + 0.02f ); + vr::HmdMatrix34_t notificationTransform + = { { { 1.0f, 0.0f, 0.0f, 0.12f }, + { 0.0f, 1.0f, 0.0f, 0.08f }, + { 0.0f, 0.0f, 1.0f, -0.3f } } }; + vr::VROverlay()->SetOverlayTransformTrackedDeviceRelative( + m_pushToTalkValues.overlayHandle, + vr::k_unTrackedDeviceIndex_Hmd, + ¬ificationTransform ); + emit defaultProfileDisplay(); } @@ -336,6 +363,19 @@ void AudioTabController::setMicReversePtt( bool value, bool notify ) settings::setSetting( settings::BoolSetting::AUDIO_micReversePtt, value ); + if ( value ) + { + vr::VROverlay()->SetOverlayFromFile( + m_pushToTalkValues.overlayHandle, + m_pushToTalkValues.pushToMutePath.c_str() ); + } + else + { + vr::VROverlay()->SetOverlayFromFile( + m_pushToTalkValues.overlayHandle, + m_pushToTalkValues.pushToTalkPath.c_str() ); + } + if ( pttEnabled() ) { if ( m_pttActive ) diff --git a/src/tabcontrollers/AudioTabController.h b/src/tabcontrollers/AudioTabController.h index b505eff..4fcb4bd 100644 --- a/src/tabcontrollers/AudioTabController.h +++ b/src/tabcontrollers/AudioTabController.h @@ -111,8 +111,12 @@ class AudioTabController : public QObject setPttShowNotification NOTIFY pttShowNotificationChanged ) private: - vr::VROverlayHandle_t m_ulNotificationOverlayHandle - = vr::k_ulOverlayHandleInvalid; + struct + { + vr::VROverlayHandle_t overlayHandle = vr::k_ulOverlayHandleInvalid; + std::string pushToTalkPath; + std::string pushToMutePath; + } m_pushToTalkValues; int m_playbackDeviceIndex = -1; @@ -149,7 +153,7 @@ private: virtual vr::VROverlayHandle_t getNotificationOverlayHandle() { - return m_ulNotificationOverlayHandle; + return m_pushToTalkValues.overlayHandle; } void findPlaybackDeviceIndex( std::string id, bool notify = true );