From c285f59ce2a05703e3a1232fcaf3ee3aea714b3f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 18 Feb 2024 12:52:19 +0100 Subject: Replace BOOL with bool in llwindow and dependent classes --- indra/newview/lloutputmonitorctrl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview/lloutputmonitorctrl.cpp') diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index 7129641c20..3133022921 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -243,7 +243,7 @@ void LLOutputMonitorCtrl::draw() } // virtual -BOOL LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask) { if (mSpeakerId != gAgentID) { @@ -254,7 +254,7 @@ BOOL LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask) LLFloaterReg::showInstance("chat_voice", LLSD()); } - return TRUE; + return true; } void LLOutputMonitorCtrl::setIsActiveChannel(bool val) -- cgit v1.2.3 From 60d3dd98a44230c21803c1606552ee098ed9fa7c Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 21 Feb 2024 21:05:14 +0100 Subject: Convert remaining BOOL to bool --- indra/newview/lloutputmonitorctrl.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'indra/newview/lloutputmonitorctrl.cpp') diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index 3133022921..f171b48ba2 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -231,7 +231,7 @@ void LLOutputMonitorCtrl::draw() // } // // Draw rectangle filled with the color. - // gl_rect_2d(xpos, recttop, xpos+rectw, rectbtm, rect_color, TRUE); + // gl_rect_2d(xpos, recttop, xpos+rectw, rectbtm, rect_color, true); // xpos += period; //} @@ -239,7 +239,7 @@ void LLOutputMonitorCtrl::draw() // Draw bounding box. // if(mBorder) - gl_rect_2d(0, monh, monw, 0, sColorBound, FALSE); + gl_rect_2d(0, monh, monw, 0, sColorBound, false); } // virtual @@ -267,8 +267,8 @@ void LLOutputMonitorCtrl::setChannelState(EChannelState state) mChannelState = state; if (state == INACTIVE_CHANNEL) { - // switchIndicator will set it to TRUE when channel becomes active - setVisible(FALSE); + // switchIndicator will set it to true when channel becomes active + setVisible(false); } } @@ -325,7 +325,7 @@ void LLOutputMonitorCtrl::onChangeDetailed(const LLMute& mute) // virtual void LLOutputMonitorCtrl::switchIndicator(bool switch_on) { - if ((mChannelState != INACTIVE_CHANNEL) && (getVisible() != (BOOL)switch_on)) + if ((mChannelState != INACTIVE_CHANNEL) && (getVisible() != (bool)switch_on)) { setVisible(switch_on); -- cgit v1.2.3 From e2e37cced861b98de8c1a7c9c0d3a50d2d90e433 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 22 May 2024 21:25:21 +0200 Subject: Fix line endlings --- indra/newview/lloutputmonitorctrl.cpp | 726 +++++++++++++++++----------------- 1 file changed, 363 insertions(+), 363 deletions(-) (limited to 'indra/newview/lloutputmonitorctrl.cpp') diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index c8b6fd5871..e6421d8a41 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -1,363 +1,363 @@ -/** - * @file lloutputmonitorctrl.cpp - * @brief LLOutputMonitorCtrl base class - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" -#include "lloutputmonitorctrl.h" - -// library includes -#include "llfloaterreg.h" -#include "llui.h" - -// viewer includes -#include "llvoiceclient.h" -#include "llmutelist.h" -#include "llagent.h" - -// default options set in output_monitor.xml -static LLDefaultChildRegistry::Register r("output_monitor"); - -// The defaults will be initialized in the constructor. -//LLColor4 LLOutputMonitorCtrl::sColorMuted; -//LLColor4 LLOutputMonitorCtrl::sColorOverdriven; -//LLColor4 LLOutputMonitorCtrl::sColorNormal; -LLColor4 LLOutputMonitorCtrl::sColorBound; -//S32 LLOutputMonitorCtrl::sRectsNumber = 0; -//F32 LLOutputMonitorCtrl::sRectWidthRatio = 0.f; -//F32 LLOutputMonitorCtrl::sRectHeightRatio = 0.f; - -LLOutputMonitorCtrl::Params::Params() -: draw_border("draw_border"), - image_mute("image_mute"), - image_off("image_off"), - image_on("image_on"), - image_level_1("image_level_1"), - image_level_2("image_level_2"), - image_level_3("image_level_3"), - auto_update("auto_update"), - speaker_id("speaker_id") -{ -}; - -LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p) -: LLView(p), - mPower(0), - mImageMute(p.image_mute), - mImageOff(p.image_off), - mImageOn(p.image_on), - mImageLevel1(p.image_level_1), - mImageLevel2(p.image_level_2), - mImageLevel3(p.image_level_3), - mAutoUpdate(p.auto_update), - mSpeakerId(p.speaker_id), - mIsModeratorMuted(false), - mIsAgentControl(false), - mIndicatorToggled(false), - mShowParticipantsSpeaking(false), - mChannelState(INACTIVE_CHANNEL) -{ - //static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange); - //static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red); - //static LLUIColor output_monitor_normal_color = LLUIColorTable::instance().getColor("OutputMonitorNotmalColor", LLColor4::green); - static LLUIColor output_monitor_bound_color = LLUIColorTable::instance().getColor("OutputMonitorBoundColor", LLColor4::white); - //static LLUICachedControl output_monitor_rects_number("OutputMonitorRectanglesNumber", 20); - //static LLUICachedControl output_monitor_rect_width_ratio("OutputMonitorRectangleWidthRatio", 0.5f); - //static LLUICachedControl output_monitor_rect_height_ratio("OutputMonitorRectangleHeightRatio", 0.8f); - - // IAN BUG compare to existing pattern where these are members - some will change per-widget and need to be anyway - // sent feedback to PE - - // *TODO: it looks suboptimal to load the defaults every time an output monitor is constructed. - //sColorMuted = output_monitor_muted_color; - //sColorOverdriven = output_monitor_overdriven_color; - //sColorNormal = output_monitor_normal_color; - sColorBound = output_monitor_bound_color; - //sRectsNumber = output_monitor_rects_number; - //sRectWidthRatio = output_monitor_rect_width_ratio; - //sRectHeightRatio = output_monitor_rect_height_ratio; - - mBorder = p.draw_border; - - //with checking mute state - setSpeakerId(mSpeakerId); -} - -LLOutputMonitorCtrl::~LLOutputMonitorCtrl() -{ - LLMuteList::getInstance()->removeObserver(this); - LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); -} - -void LLOutputMonitorCtrl::setPower(F32 val) -{ - mPower = llmax(0.f, llmin(1.f, val)); -} - -void LLOutputMonitorCtrl::draw() -{ - // Copied from llmediaremotectrl.cpp - // *TODO: Give the LLOutputMonitorCtrl an agent-id to monitor, then - // call directly into LLVoiceClient::getInstance() to ask if that agent-id is muted, is - // speaking, and what power. This avoids duplicating data, which can get - // out of sync. - const F32 LEVEL_0 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL / 3.f; - const F32 LEVEL_1 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL * 2.f / 3.f; - const F32 LEVEL_2 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL; - - if (getVisible() && mAutoUpdate && !getIsMuted() && mSpeakerId.notNull()) - { - setPower(LLVoiceClient::getInstance()->getCurrentPower(mSpeakerId)); - if(mIsAgentControl) - { - setIsTalking(LLVoiceClient::getInstance()->getUserPTTState()); - } - else - { - setIsTalking(LLVoiceClient::getInstance()->getIsSpeaking(mSpeakerId)); - } - } - - if ((mPower == 0.f && !mIsTalking) && mShowParticipantsSpeaking) - { - std::set participant_uuids; - LLVoiceClient::instance().getParticipantList(participant_uuids); - std::set::const_iterator part_it = participant_uuids.begin(); - - F32 power = 0; - for (; part_it != participant_uuids.end(); ++part_it) - { - power = LLVoiceClient::instance().getCurrentPower(*part_it); - if (power) - { - mPower = power; - break; - } - } - } - - LLPointer icon; - if (getIsMuted()) - { - icon = mImageMute; - } - else if (mPower == 0.f && !mIsTalking) - { - // only show off if PTT is not engaged - icon = mImageOff; - } - else if (mPower < LEVEL_0) - { - // PTT is on, possibly with quiet background noise - icon = mImageOn; - } - else if (mPower < LEVEL_1) - { - icon = mImageLevel1; - } - else if (mPower < LEVEL_2) - { - icon = mImageLevel2; - } - else - { - // overdriven - icon = mImageLevel3; - } - - if (icon) - { - icon->draw(0, 0); - } - - // - // Fill the monitor with a bunch of small rectangles. - // The rectangles will be filled with gradient color, - // beginning with sColorNormal and ending with sColorOverdriven. - // - // *TODO: would using a (partially drawn) pixmap instead be faster? - // - const int monh = getRect().getHeight(); - const int monw = getRect().getWidth(); - //int maxrects = sRectsNumber; - //const int period = llmax(1, monw / maxrects, 0, 0); // "1" - min value for the period - //const int rectw = llmax(1, llfloor(period * sRectWidthRatio), 0, 0); // "1" - min value for the rect's width - //const int recth = llfloor(monh * sRectHeightRatio); - - //if(period == 1 && rectw == 1) //if we have so small control, then "maxrects = monitor's_width - 2*monitor_border's_width - // maxrects = monw-2; - - //const int nrects = mIsMuted ? maxrects : llfloor(mPower * maxrects); // how many rects to draw? - //const int rectbtm = (monh - recth) / 2; - //const int recttop = rectbtm + recth; - // - //LLColor4 rect_color; - // - //for (int i=1, xpos = 0; i <= nrects; i++) - //{ - // // Calculate color to use for the current rectangle. - // if (mIsMuted) - // { - // rect_color = sColorMuted; - // } - // else - // { - // F32 frac = (mPower * i/nrects) / LLVoiceClient::OVERDRIVEN_POWER_LEVEL; - // // Use overdriven color if the power exceeds overdriven level. - // if (frac > 1.0f) - // frac = 1.0f; - // rect_color = lerp(sColorNormal, sColorOverdriven, frac); - // } - - // // Draw rectangle filled with the color. - // gl_rect_2d(xpos, recttop, xpos+rectw, rectbtm, rect_color, true); - // xpos += period; - //} - - // - // Draw bounding box. - // - if(mBorder) - gl_rect_2d(0, monh, monw, 0, sColorBound, false); -} - -// virtual -bool LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask) -{ - if (mSpeakerId != gAgentID) - { - LLFloaterReg::showInstance("floater_voice_volume", LLSD().with("avatar_id", mSpeakerId)); - } - else if (mShowParticipantsSpeaking) - { - LLFloaterReg::showInstance("chat_voice", LLSD()); - } - - return true; -} - -void LLOutputMonitorCtrl::setIsActiveChannel(bool val) -{ - setChannelState(val ? ACTIVE_CHANNEL : INACTIVE_CHANNEL); -} - -void LLOutputMonitorCtrl::setChannelState(EChannelState state) -{ - mChannelState = state; - if (state == INACTIVE_CHANNEL) - { - // switchIndicator will set it to true when channel becomes active - setVisible(false); - } -} - -void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id, const LLUUID& session_id/* = LLUUID::null*/, bool show_other_participants_speaking /* = false */) -{ - if (speaker_id.isNull() && mSpeakerId.notNull()) - { - LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); - switchIndicator(false); - mSpeakerId = speaker_id; - } - - if (speaker_id.isNull() || (speaker_id == mSpeakerId)) - { - return; - } - - if (mSpeakerId.notNull()) - { - // Unregister previous registration to avoid crash. EXT-4782. - LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); - } - - mShowParticipantsSpeaking = show_other_participants_speaking; - mSpeakerId = speaker_id; - LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this, session_id); - - //mute management - if (mAutoUpdate) - { - if (speaker_id == gAgentID) - { - mIsMuted = false; - } - else - { - // check only blocking on voice. EXT-3542 - mIsMuted = LLMuteList::getInstance()->isMuted(mSpeakerId, LLMute::flagVoiceChat); - LLMuteList::getInstance()->addObserver(this); - } - } -} - -void LLOutputMonitorCtrl::onChangeDetailed(const LLMute& mute) -{ - if (mute.mID == mSpeakerId) - { - // Check only blocking on voice. - // Logic goes in reverse, if flag is set, action is allowed - mIsMuted = !(LLMute::flagVoiceChat & mute.mFlags); - } -} - -// virtual -void LLOutputMonitorCtrl::switchIndicator(bool switch_on) -{ - if ((mChannelState != INACTIVE_CHANNEL) && (getVisible() != (bool)switch_on)) - { - setVisible(switch_on); - - //Let parent adjust positioning of icons adjacent to speaker indicator - //(when speaker indicator hidden, adjacent icons move to right and when speaker - //indicator visible, adjacent icons move to the left) - if (getParent() && getParent()->isInVisibleChain()) - { - notifyParentVisibilityChanged(); - //Ignore toggled state in case it was set when parent visibility was hidden - mIndicatorToggled = false; - } - else - { - //Makes sure to only adjust adjacent icons when parent becomes visible - //(!mIndicatorToggled ensures that changes of TFT and FTF are discarded, real state changes are TF or FT) - mIndicatorToggled = !mIndicatorToggled; - } - - } -} - -////////////////////////////////////////////////////////////////////////// -// PRIVATE SECTION -////////////////////////////////////////////////////////////////////////// -void LLOutputMonitorCtrl::notifyParentVisibilityChanged() -{ - LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << ", new_visibility: " << getVisible() << LL_ENDL; - - LLSD params = LLSD().with("visibility_changed", getVisible()); - - notifyParent(params); -} - -// EOF +/** + * @file lloutputmonitorctrl.cpp + * @brief LLOutputMonitorCtrl base class + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "lloutputmonitorctrl.h" + +// library includes +#include "llfloaterreg.h" +#include "llui.h" + +// viewer includes +#include "llvoiceclient.h" +#include "llmutelist.h" +#include "llagent.h" + +// default options set in output_monitor.xml +static LLDefaultChildRegistry::Register r("output_monitor"); + +// The defaults will be initialized in the constructor. +//LLColor4 LLOutputMonitorCtrl::sColorMuted; +//LLColor4 LLOutputMonitorCtrl::sColorOverdriven; +//LLColor4 LLOutputMonitorCtrl::sColorNormal; +LLColor4 LLOutputMonitorCtrl::sColorBound; +//S32 LLOutputMonitorCtrl::sRectsNumber = 0; +//F32 LLOutputMonitorCtrl::sRectWidthRatio = 0.f; +//F32 LLOutputMonitorCtrl::sRectHeightRatio = 0.f; + +LLOutputMonitorCtrl::Params::Params() +: draw_border("draw_border"), + image_mute("image_mute"), + image_off("image_off"), + image_on("image_on"), + image_level_1("image_level_1"), + image_level_2("image_level_2"), + image_level_3("image_level_3"), + auto_update("auto_update"), + speaker_id("speaker_id") +{ +}; + +LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p) +: LLView(p), + mPower(0), + mImageMute(p.image_mute), + mImageOff(p.image_off), + mImageOn(p.image_on), + mImageLevel1(p.image_level_1), + mImageLevel2(p.image_level_2), + mImageLevel3(p.image_level_3), + mAutoUpdate(p.auto_update), + mSpeakerId(p.speaker_id), + mIsModeratorMuted(false), + mIsAgentControl(false), + mIndicatorToggled(false), + mShowParticipantsSpeaking(false), + mChannelState(INACTIVE_CHANNEL) +{ + //static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange); + //static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red); + //static LLUIColor output_monitor_normal_color = LLUIColorTable::instance().getColor("OutputMonitorNotmalColor", LLColor4::green); + static LLUIColor output_monitor_bound_color = LLUIColorTable::instance().getColor("OutputMonitorBoundColor", LLColor4::white); + //static LLUICachedControl output_monitor_rects_number("OutputMonitorRectanglesNumber", 20); + //static LLUICachedControl output_monitor_rect_width_ratio("OutputMonitorRectangleWidthRatio", 0.5f); + //static LLUICachedControl output_monitor_rect_height_ratio("OutputMonitorRectangleHeightRatio", 0.8f); + + // IAN BUG compare to existing pattern where these are members - some will change per-widget and need to be anyway + // sent feedback to PE + + // *TODO: it looks suboptimal to load the defaults every time an output monitor is constructed. + //sColorMuted = output_monitor_muted_color; + //sColorOverdriven = output_monitor_overdriven_color; + //sColorNormal = output_monitor_normal_color; + sColorBound = output_monitor_bound_color; + //sRectsNumber = output_monitor_rects_number; + //sRectWidthRatio = output_monitor_rect_width_ratio; + //sRectHeightRatio = output_monitor_rect_height_ratio; + + mBorder = p.draw_border; + + //with checking mute state + setSpeakerId(mSpeakerId); +} + +LLOutputMonitorCtrl::~LLOutputMonitorCtrl() +{ + LLMuteList::getInstance()->removeObserver(this); + LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); +} + +void LLOutputMonitorCtrl::setPower(F32 val) +{ + mPower = llmax(0.f, llmin(1.f, val)); +} + +void LLOutputMonitorCtrl::draw() +{ + // Copied from llmediaremotectrl.cpp + // *TODO: Give the LLOutputMonitorCtrl an agent-id to monitor, then + // call directly into LLVoiceClient::getInstance() to ask if that agent-id is muted, is + // speaking, and what power. This avoids duplicating data, which can get + // out of sync. + const F32 LEVEL_0 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL / 3.f; + const F32 LEVEL_1 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL * 2.f / 3.f; + const F32 LEVEL_2 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL; + + if (getVisible() && mAutoUpdate && !getIsMuted() && mSpeakerId.notNull()) + { + setPower(LLVoiceClient::getInstance()->getCurrentPower(mSpeakerId)); + if(mIsAgentControl) + { + setIsTalking(LLVoiceClient::getInstance()->getUserPTTState()); + } + else + { + setIsTalking(LLVoiceClient::getInstance()->getIsSpeaking(mSpeakerId)); + } + } + + if ((mPower == 0.f && !mIsTalking) && mShowParticipantsSpeaking) + { + std::set participant_uuids; + LLVoiceClient::instance().getParticipantList(participant_uuids); + std::set::const_iterator part_it = participant_uuids.begin(); + + F32 power = 0; + for (; part_it != participant_uuids.end(); ++part_it) + { + power = LLVoiceClient::instance().getCurrentPower(*part_it); + if (power) + { + mPower = power; + break; + } + } + } + + LLPointer icon; + if (getIsMuted()) + { + icon = mImageMute; + } + else if (mPower == 0.f && !mIsTalking) + { + // only show off if PTT is not engaged + icon = mImageOff; + } + else if (mPower < LEVEL_0) + { + // PTT is on, possibly with quiet background noise + icon = mImageOn; + } + else if (mPower < LEVEL_1) + { + icon = mImageLevel1; + } + else if (mPower < LEVEL_2) + { + icon = mImageLevel2; + } + else + { + // overdriven + icon = mImageLevel3; + } + + if (icon) + { + icon->draw(0, 0); + } + + // + // Fill the monitor with a bunch of small rectangles. + // The rectangles will be filled with gradient color, + // beginning with sColorNormal and ending with sColorOverdriven. + // + // *TODO: would using a (partially drawn) pixmap instead be faster? + // + const int monh = getRect().getHeight(); + const int monw = getRect().getWidth(); + //int maxrects = sRectsNumber; + //const int period = llmax(1, monw / maxrects, 0, 0); // "1" - min value for the period + //const int rectw = llmax(1, llfloor(period * sRectWidthRatio), 0, 0); // "1" - min value for the rect's width + //const int recth = llfloor(monh * sRectHeightRatio); + + //if(period == 1 && rectw == 1) //if we have so small control, then "maxrects = monitor's_width - 2*monitor_border's_width + // maxrects = monw-2; + + //const int nrects = mIsMuted ? maxrects : llfloor(mPower * maxrects); // how many rects to draw? + //const int rectbtm = (monh - recth) / 2; + //const int recttop = rectbtm + recth; + // + //LLColor4 rect_color; + // + //for (int i=1, xpos = 0; i <= nrects; i++) + //{ + // // Calculate color to use for the current rectangle. + // if (mIsMuted) + // { + // rect_color = sColorMuted; + // } + // else + // { + // F32 frac = (mPower * i/nrects) / LLVoiceClient::OVERDRIVEN_POWER_LEVEL; + // // Use overdriven color if the power exceeds overdriven level. + // if (frac > 1.0f) + // frac = 1.0f; + // rect_color = lerp(sColorNormal, sColorOverdriven, frac); + // } + + // // Draw rectangle filled with the color. + // gl_rect_2d(xpos, recttop, xpos+rectw, rectbtm, rect_color, true); + // xpos += period; + //} + + // + // Draw bounding box. + // + if(mBorder) + gl_rect_2d(0, monh, monw, 0, sColorBound, false); +} + +// virtual +bool LLOutputMonitorCtrl::handleMouseUp(S32 x, S32 y, MASK mask) +{ + if (mSpeakerId != gAgentID) + { + LLFloaterReg::showInstance("floater_voice_volume", LLSD().with("avatar_id", mSpeakerId)); + } + else if (mShowParticipantsSpeaking) + { + LLFloaterReg::showInstance("chat_voice", LLSD()); + } + + return true; +} + +void LLOutputMonitorCtrl::setIsActiveChannel(bool val) +{ + setChannelState(val ? ACTIVE_CHANNEL : INACTIVE_CHANNEL); +} + +void LLOutputMonitorCtrl::setChannelState(EChannelState state) +{ + mChannelState = state; + if (state == INACTIVE_CHANNEL) + { + // switchIndicator will set it to true when channel becomes active + setVisible(false); + } +} + +void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id, const LLUUID& session_id/* = LLUUID::null*/, bool show_other_participants_speaking /* = false */) +{ + if (speaker_id.isNull() && mSpeakerId.notNull()) + { + LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); + switchIndicator(false); + mSpeakerId = speaker_id; + } + + if (speaker_id.isNull() || (speaker_id == mSpeakerId)) + { + return; + } + + if (mSpeakerId.notNull()) + { + // Unregister previous registration to avoid crash. EXT-4782. + LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this); + } + + mShowParticipantsSpeaking = show_other_participants_speaking; + mSpeakerId = speaker_id; + LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this, session_id); + + //mute management + if (mAutoUpdate) + { + if (speaker_id == gAgentID) + { + mIsMuted = false; + } + else + { + // check only blocking on voice. EXT-3542 + mIsMuted = LLMuteList::getInstance()->isMuted(mSpeakerId, LLMute::flagVoiceChat); + LLMuteList::getInstance()->addObserver(this); + } + } +} + +void LLOutputMonitorCtrl::onChangeDetailed(const LLMute& mute) +{ + if (mute.mID == mSpeakerId) + { + // Check only blocking on voice. + // Logic goes in reverse, if flag is set, action is allowed + mIsMuted = !(LLMute::flagVoiceChat & mute.mFlags); + } +} + +// virtual +void LLOutputMonitorCtrl::switchIndicator(bool switch_on) +{ + if ((mChannelState != INACTIVE_CHANNEL) && (getVisible() != (bool)switch_on)) + { + setVisible(switch_on); + + //Let parent adjust positioning of icons adjacent to speaker indicator + //(when speaker indicator hidden, adjacent icons move to right and when speaker + //indicator visible, adjacent icons move to the left) + if (getParent() && getParent()->isInVisibleChain()) + { + notifyParentVisibilityChanged(); + //Ignore toggled state in case it was set when parent visibility was hidden + mIndicatorToggled = false; + } + else + { + //Makes sure to only adjust adjacent icons when parent becomes visible + //(!mIndicatorToggled ensures that changes of TFT and FTF are discarded, real state changes are TF or FT) + mIndicatorToggled = !mIndicatorToggled; + } + + } +} + +////////////////////////////////////////////////////////////////////////// +// PRIVATE SECTION +////////////////////////////////////////////////////////////////////////// +void LLOutputMonitorCtrl::notifyParentVisibilityChanged() +{ + LL_DEBUGS("SpeakingIndicator") << "Notify parent that visibility was changed: " << mSpeakerId << ", new_visibility: " << getVisible() << LL_ENDL; + + LLSD params = LLSD().with("visibility_changed", getVisible()); + + notifyParent(params); +} + +// EOF -- cgit v1.2.3 From 9094d0281d362bd2caab5a34f42222aa1e24d9c2 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 7 Aug 2024 09:54:31 +0300 Subject: Adjust some LLVoiceClient functions Feels like I should have made isParticipant and getParticipantList static to minimize singleton dependency/calls --- indra/newview/lloutputmonitorctrl.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'indra/newview/lloutputmonitorctrl.cpp') diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index db43c57139..28433b36f4 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -126,29 +126,31 @@ void LLOutputMonitorCtrl::draw() const F32 LEVEL_1 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL * 2.f / 3.f; const F32 LEVEL_2 = LLVoiceClient::OVERDRIVEN_POWER_LEVEL; + LLVoiceClient* vocie_client = LLVoiceClient::getInstance(); + if (getVisible() && mAutoUpdate && !getIsMuted() && mSpeakerId.notNull()) { - setPower(LLVoiceClient::getInstance()->getCurrentPower(mSpeakerId)); + setPower(vocie_client->getCurrentPower(mSpeakerId)); if(mIsAgentControl) { - setIsTalking(LLVoiceClient::getInstance()->getUserPTTState()); + setIsTalking(vocie_client->getUserPTTState()); } else { - setIsTalking(LLVoiceClient::getInstance()->getIsSpeaking(mSpeakerId)); + setIsTalking(vocie_client->getIsSpeaking(mSpeakerId)); } } if ((mPower == 0.f && !mIsTalking) && mShowParticipantsSpeaking) { std::set participant_uuids; - LLVoiceClient::instance().getParticipantList(participant_uuids); + vocie_client->getParticipantList(participant_uuids); std::set::const_iterator part_it = participant_uuids.begin(); F32 power = 0; for (; part_it != participant_uuids.end(); ++part_it) { - power = LLVoiceClient::instance().getCurrentPower(*part_it); + power = vocie_client->getCurrentPower(*part_it); if (power) { mPower = power; -- cgit v1.2.3