#include "VideoTabController.h" #include #include #include "../overlaycontroller.h" #include namespace advsettings { void VideoTabController::initStage1() {} void VideoTabController::initStage2( OverlayController* var_parent, QQuickWindow* var_widget ) { this->parent = var_parent; this->widget = var_widget; std::string notifKey = std::string( application_strings::applicationKey ) + ".dimnotification"; vr::VROverlayError overlayError = vr::VROverlay()->CreateOverlay( notifKey.c_str(), notifKey.c_str(), &m_brightnessOverlayHandle ); if ( overlayError == vr::VROverlayError_None ) { const auto notifIconPath = paths::binaryDirectoryFindFile( video_keys::k_brightnessOverlayFilename ); if ( notifIconPath.has_value() ) { vr::VROverlay()->SetOverlayFromFile( m_brightnessOverlayHandle, notifIconPath->c_str() ); vr::VROverlay()->SetOverlayWidthInMeters( m_brightnessOverlayHandle, k_overlayWidth ); vr::HmdMatrix34_t notificationTransform = { { { 1.0f, 0.0f, 0.0f, 0.00f }, { 0.0f, 1.0f, 0.0f, 0.00f }, { 0.0f, 0.0f, 1.0f, k_hmdDistance } } }; vr::VROverlay()->SetOverlayTransformTrackedDeviceRelative( m_brightnessOverlayHandle, vr::k_unTrackedDeviceIndex_Hmd, ¬ificationTransform ); } else { LOG( ERROR ) << "Could not find notification icon \"" << video_keys::k_brightnessOverlayFilename << "\""; } } else { LOG( ERROR ) << "Could not create dimmer notification overlay: " << vr::VROverlay()->GetOverlayErrorNameFromEnum( overlayError ); } reloadVideoConfig(); } void VideoTabController::eventLoopTick() {} void VideoTabController::reloadVideoConfig() { auto settings = OverlayController::appSettings(); settings->beginGroup( getSettingsName() ); setBrightnessEnabled( settings->value( "brightnessEnabled", false ).toBool(), true ); m_opacityValue = settings->value( "opacityValue", 0.0f ).toFloat(); m_brightnessValue = settings->value( "brightnessValue", 1.0f ).toFloat(); settings->endGroup(); setOpacityValue(); } void VideoTabController::saveVideoConfig() { auto settings = OverlayController::appSettings(); settings->beginGroup( getSettingsName() ); settings->setValue( "brightnessEnabled", brightnessEnabled() ); settings->setValue( "opacityValue", opacityValue() ); settings->setValue( "brightnessValue", brightnessValue() ); settings->endGroup(); } float VideoTabController::opacityValue() const { return m_opacityValue; } float VideoTabController::brightnessValue() const { return m_brightnessValue; } bool VideoTabController::brightnessEnabled() const { return m_brightnessEnabled; } void VideoTabController::setBrightnessEnabled( bool value, bool notify ) { if ( value != m_brightnessEnabled ) { m_brightnessEnabled = value; auto overlayHandle = getBrightnessOverlayHandle(); if ( value ) { if ( overlayHandle != vr::k_ulOverlayHandleInvalid ) { vr::VROverlay()->ShowOverlay( getBrightnessOverlayHandle() ); LOG( INFO ) << "Brightness Overlay toggled on"; } } else { if ( overlayHandle != vr::k_ulOverlayHandleInvalid ) { vr::VROverlay()->HideOverlay( getBrightnessOverlayHandle() ); LOG( INFO ) << "Brightness Overlay toggled off"; } } saveVideoConfig(); if ( notify ) { emit brightnessEnabledChanged( value ); } } } void VideoTabController::setBrightnessValue( float percvalue, bool notify ) { // This takes the Perceived value, and converts it to allow more accurate // linear positioning. (human perception logarithmic) float realvalue = static_cast( std::pow( static_cast( 1.0f - percvalue ), 1 / 3. ) ); if ( realvalue != m_opacityValue ) { m_brightnessValue = percvalue; if ( realvalue <= 1.0f && realvalue >= 0.0f ) { m_opacityValue = realvalue; vr::VROverlayError overlayError = vr::VROverlay()->SetOverlayAlpha( m_brightnessOverlayHandle, realvalue ); if ( overlayError != vr::VROverlayError_None ) { LOG( ERROR ) << "Could not set alpha: " << vr::VROverlay()->GetOverlayErrorNameFromEnum( overlayError ); } // only saves if opacity Value is valid. [1-0] saveVideoConfig(); } else { LOG( WARNING ) << "alpha value is invalid setting to 1.0"; m_opacityValue = 0.0f; } if ( notify ) { emit brightnessValueChanged( percvalue ); } } } void VideoTabController::setOpacityValue() { vr::VROverlayError overlayError = vr::VROverlay()->SetOverlayAlpha( m_brightnessOverlayHandle, m_opacityValue ); if ( overlayError != vr::VROverlayError_None ) { LOG( ERROR ) << "Could not set alpha: " << vr::VROverlay()->GetOverlayErrorNameFromEnum( overlayError ); } emit brightnessValueChanged( m_brightnessValue ); } } // namespace advsettings