merging latest changes
commit
a7e6dc088f
|
|
@ -839,6 +839,10 @@ void LLAudioEngine::triggerSound(const LLUUID &audio_uuid, const LLUUID& owner_i
|
|||
asp->play(audio_uuid);
|
||||
}
|
||||
|
||||
void LLAudioEngine::triggerSound(SoundData& soundData)
|
||||
{
|
||||
triggerSound(soundData.audio_uuid, soundData.owner_id, soundData.gain, soundData.type, soundData.pos_global);
|
||||
}
|
||||
|
||||
void LLAudioEngine::setListenerPos(LLVector3 aVec)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ class LLAudioChannel;
|
|||
class LLAudioChannelOpenAL;
|
||||
class LLAudioBuffer;
|
||||
class LLStreamingAudioInterface;
|
||||
struct SoundData;
|
||||
|
||||
|
||||
//
|
||||
|
|
@ -144,6 +145,8 @@ public:
|
|||
void triggerSound(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain,
|
||||
const S32 type = LLAudioEngine::AUDIO_TYPE_NONE,
|
||||
const LLVector3d &pos_global = LLVector3d::zero);
|
||||
void triggerSound(SoundData& soundData);
|
||||
|
||||
bool preloadSound(const LLUUID &id);
|
||||
|
||||
void addAudioSource(LLAudioSource *asp);
|
||||
|
|
@ -456,6 +459,27 @@ protected:
|
|||
LLFrameTimer mLastUseTimer;
|
||||
};
|
||||
|
||||
struct SoundData
|
||||
{
|
||||
LLUUID audio_uuid;
|
||||
LLUUID owner_id;
|
||||
F32 gain;
|
||||
S32 type;
|
||||
LLVector3d pos_global;
|
||||
|
||||
SoundData(const LLUUID &audio_uuid,
|
||||
const LLUUID& owner_id,
|
||||
const F32 gain,
|
||||
const S32 type = LLAudioEngine::AUDIO_TYPE_NONE,
|
||||
const LLVector3d &pos_global = LLVector3d::zero)
|
||||
{
|
||||
this->audio_uuid = audio_uuid;
|
||||
this->owner_id = owner_id;
|
||||
this->gain = gain;
|
||||
this->type = type;
|
||||
this->pos_global = pos_global;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
extern LLAudioEngine* gAudiop;
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ std::list<std::string> gUntranslated;
|
|||
/*static*/ LLUI::settings_map_t LLUI::sSettingGroups;
|
||||
/*static*/ LLImageProviderInterface* LLUI::sImageProvider = NULL;
|
||||
/*static*/ LLUIAudioCallback LLUI::sAudioCallback = NULL;
|
||||
/*static*/ LLUIAudioCallback LLUI::sDeferredAudioCallback = NULL;
|
||||
/*static*/ LLVector2 LLUI::sGLScaleFactor(1.f, 1.f);
|
||||
/*static*/ LLWindow* LLUI::sWindow = NULL;
|
||||
/*static*/ LLView* LLUI::sRootView = NULL;
|
||||
|
|
@ -101,16 +102,18 @@ static LLDefaultChildRegistry::Register<LLToolBar> register_toolbar("toolbar");
|
|||
//
|
||||
// Functions
|
||||
//
|
||||
void make_ui_sound(const char* namep)
|
||||
|
||||
LLUUID find_ui_sound(const char * namep)
|
||||
{
|
||||
std::string name = ll_safe_string(namep);
|
||||
LLUUID uuid = LLUUID(NULL);
|
||||
if (!LLUI::sSettingGroups["config"]->controlExists(name))
|
||||
{
|
||||
llwarns << "tried to make UI sound for unknown sound name: " << name << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUUID uuid(LLUI::sSettingGroups["config"]->getString(name));
|
||||
uuid = LLUUID(LLUI::sSettingGroups["config"]->getString(name));
|
||||
if (uuid.isNull())
|
||||
{
|
||||
if (LLUI::sSettingGroups["config"]->getString(name) == LLUUID::null.asString())
|
||||
|
|
@ -124,7 +127,6 @@ void make_ui_sound(const char* namep)
|
|||
{
|
||||
llwarns << "UI sound named: " << name << " does not translate to a valid uuid" << llendl;
|
||||
}
|
||||
|
||||
}
|
||||
else if (LLUI::sAudioCallback != NULL)
|
||||
{
|
||||
|
|
@ -132,9 +134,28 @@ void make_ui_sound(const char* namep)
|
|||
{
|
||||
llinfos << "UI sound name: " << name << llendl;
|
||||
}
|
||||
LLUI::sAudioCallback(uuid);
|
||||
}
|
||||
}
|
||||
|
||||
return uuid;
|
||||
}
|
||||
|
||||
void make_ui_sound(const char* namep)
|
||||
{
|
||||
LLUUID soundUUID = find_ui_sound(namep);
|
||||
if(soundUUID.notNull())
|
||||
{
|
||||
LLUI::sAudioCallback(soundUUID);
|
||||
}
|
||||
}
|
||||
|
||||
void make_ui_sound_deferred(const char* namep)
|
||||
{
|
||||
LLUUID soundUUID = find_ui_sound(namep);
|
||||
if(soundUUID.notNull())
|
||||
{
|
||||
LLUI::sDeferredAudioCallback(soundUUID);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL ui_point_in_rect(S32 x, S32 y, S32 left, S32 top, S32 right, S32 bottom)
|
||||
|
|
@ -1608,6 +1629,7 @@ void gl_segmented_rect_3d_tex(const LLRectf& clip_rect, const LLRectf& center_uv
|
|||
void LLUI::initClass(const settings_map_t& settings,
|
||||
LLImageProviderInterface* image_provider,
|
||||
LLUIAudioCallback audio_callback,
|
||||
LLUIAudioCallback deferred_audio_callback,
|
||||
const LLVector2* scale_factor,
|
||||
const std::string& language)
|
||||
{
|
||||
|
|
@ -1622,6 +1644,7 @@ void LLUI::initClass(const settings_map_t& settings,
|
|||
|
||||
sImageProvider = image_provider;
|
||||
sAudioCallback = audio_callback;
|
||||
sDeferredAudioCallback = deferred_audio_callback;
|
||||
sGLScaleFactor = (scale_factor == NULL) ? LLVector2(1.f, 1.f) : *scale_factor;
|
||||
sWindow = NULL; // set later in startup
|
||||
LLFontGL::sShadowColor = LLUIColorTable::instance().getColor("ColorDropShadow");
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ class LLHelp;
|
|||
// UI colors
|
||||
extern const LLColor4 UI_VERTEX_COLOR;
|
||||
void make_ui_sound(const char* name);
|
||||
void make_ui_sound_deferred(const char * name);
|
||||
|
||||
BOOL ui_point_in_rect(S32 x, S32 y, S32 left, S32 top, S32 right, S32 bottom);
|
||||
void gl_state_for_2d(S32 width, S32 height);
|
||||
|
|
@ -274,6 +275,7 @@ public:
|
|||
static void initClass(const settings_map_t& settings,
|
||||
LLImageProviderInterface* image_provider,
|
||||
LLUIAudioCallback audio_callback = NULL,
|
||||
LLUIAudioCallback deferred_audio_callback = NULL,
|
||||
const LLVector2 *scale_factor = NULL,
|
||||
const std::string& language = LLStringUtil::null);
|
||||
static void cleanupClass();
|
||||
|
|
@ -359,6 +361,7 @@ public:
|
|||
//
|
||||
static settings_map_t sSettingGroups;
|
||||
static LLUIAudioCallback sAudioCallback;
|
||||
static LLUIAudioCallback sDeferredAudioCallback;
|
||||
static LLVector2 sGLScaleFactor;
|
||||
static LLWindow* sWindow;
|
||||
static LLView* sRootView;
|
||||
|
|
|
|||
|
|
@ -151,6 +151,7 @@ set(viewer_SOURCE_FILES
|
|||
lldaycyclemanager.cpp
|
||||
lldebugmessagebox.cpp
|
||||
lldebugview.cpp
|
||||
lldeferredsounds.cpp
|
||||
lldelayedgestureerror.cpp
|
||||
lldirpicker.cpp
|
||||
lldonotdisturbnotificationstorage.cpp
|
||||
|
|
@ -739,6 +740,7 @@ set(viewer_HEADER_FILES
|
|||
lldaycyclemanager.h
|
||||
lldebugmessagebox.h
|
||||
lldebugview.h
|
||||
lldeferredsounds.h
|
||||
lldelayedgestureerror.h
|
||||
lldirpicker.h
|
||||
lldonotdisturbnotificationstorage.h
|
||||
|
|
|
|||
|
|
@ -201,6 +201,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "lleventnotifier.h"
|
||||
#include "llcallbacklist.h"
|
||||
#include "lldeferredsounds.h"
|
||||
#include "pipeline.h"
|
||||
#include "llgesturemgr.h"
|
||||
#include "llsky.h"
|
||||
|
|
@ -220,7 +221,6 @@
|
|||
#include "llmachineid.h"
|
||||
#include "llmainlooprepeater.h"
|
||||
|
||||
|
||||
// *FIX: These extern globals should be cleaned up.
|
||||
// The globals either represent state/config/resource-storage of either
|
||||
// this app, or another 'component' of the viewer. App globals should be
|
||||
|
|
@ -460,7 +460,18 @@ static void ui_audio_callback(const LLUUID& uuid)
|
|||
{
|
||||
if (gAudiop)
|
||||
{
|
||||
gAudiop->triggerSound(uuid, gAgent.getID(), 1.0f, LLAudioEngine::AUDIO_TYPE_UI);
|
||||
SoundData soundData(uuid, gAgent.getID(), 1.0f, LLAudioEngine::AUDIO_TYPE_UI);
|
||||
gAudiop->triggerSound(soundData);
|
||||
}
|
||||
}
|
||||
|
||||
// A callback set in LLAppViewer::init()
|
||||
static void deferred_ui_audio_callback(const LLUUID& uuid)
|
||||
{
|
||||
if (gAudiop)
|
||||
{
|
||||
SoundData soundData(uuid, gAgent.getID(), 1.0f, LLAudioEngine::AUDIO_TYPE_UI);
|
||||
LLDeferredSounds::instance().deferSound(soundData);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -778,6 +789,7 @@ bool LLAppViewer::init()
|
|||
LLUI::initClass(settings_map,
|
||||
LLUIImageList::getInstance(),
|
||||
ui_audio_callback,
|
||||
deferred_ui_audio_callback,
|
||||
&LLUI::sGLScaleFactor);
|
||||
LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* @file lldeferredsounds.cpp
|
||||
* @brief Implementation of lldeferredsounds
|
||||
* @author Gilbert@lindenlab.com
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, 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 "lldeferredsounds.h"
|
||||
|
||||
#include "llaudioengine.h"
|
||||
|
||||
void LLDeferredSounds::deferSound(SoundData& sound)
|
||||
{
|
||||
soundVector.push_back(sound);
|
||||
}
|
||||
void LLDeferredSounds::playdeferredSounds()
|
||||
{
|
||||
while(soundVector.size())
|
||||
{
|
||||
gAudiop->triggerSound(soundVector.back());
|
||||
soundVector.pop_back();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* @file lldeferredsounds.h
|
||||
* @brief Header file for lldeferredsounds
|
||||
* @author Gilbert@lindenlab.com
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, 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$
|
||||
*/
|
||||
#ifndef LL_LLDEFERREDSOUNDS_H
|
||||
#define LL_LLDEFERREDSOUNDS_H
|
||||
|
||||
#include "llsingleton.h"
|
||||
|
||||
struct SoundData;
|
||||
|
||||
class LLDeferredSounds : public LLSingleton<LLDeferredSounds>
|
||||
{
|
||||
private:
|
||||
std::vector<SoundData> soundVector;
|
||||
public:
|
||||
//Add sounds to be played once progress bar is hidden (such as after teleport or loading screen)
|
||||
void deferSound(SoundData& sound);
|
||||
|
||||
void playdeferredSounds();
|
||||
};
|
||||
|
||||
#endif // LL_LLDEFERREDSOUNDS_H
|
||||
|
||||
|
|
@ -146,6 +146,7 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()
|
|||
|
||||
LLNotifications& instance = LLNotifications::instance();
|
||||
bool imToastExists = false;
|
||||
bool offerExists = false;
|
||||
|
||||
for (LLSD::array_const_iterator notification_it = data.beginArray();
|
||||
notification_it != data.endArray();
|
||||
|
|
@ -160,6 +161,10 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()
|
|||
{
|
||||
imToastExists = true;
|
||||
}
|
||||
else if(notificationName == offerName)
|
||||
{
|
||||
offerExists = true;
|
||||
}
|
||||
|
||||
//New notification needs to be added
|
||||
notification = (LLNotificationPtr) new LLNotification(notification_params.with("is_dnd", true));
|
||||
|
|
@ -183,6 +188,11 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()
|
|||
LLFloaterReg::showInstance("im_container");
|
||||
}
|
||||
|
||||
if(imToastExists || offerExists)
|
||||
{
|
||||
make_ui_sound_deferred("UISndNewIncomingIMSession");
|
||||
}
|
||||
|
||||
//writes out empty .xml file (since LLCommunicationChannel::mHistory is empty)
|
||||
saveNotifications();
|
||||
}
|
||||
|
|
@ -196,6 +206,7 @@ void LLDoNotDisturbNotificationStorage::updateNotifications()
|
|||
|
||||
LLNotifications& instance = LLNotifications::instance();
|
||||
bool imToastExists = false;
|
||||
bool offerExists = false;
|
||||
|
||||
for (LLCommunicationChannel::history_list_t::const_iterator it = commChannel->beginHistory();
|
||||
it != commChannel->endHistory();
|
||||
|
|
@ -208,6 +219,10 @@ void LLDoNotDisturbNotificationStorage::updateNotifications()
|
|||
{
|
||||
imToastExists = true;
|
||||
}
|
||||
else if(notificationName == offerName)
|
||||
{
|
||||
offerExists = true;
|
||||
}
|
||||
|
||||
//Notification already exists in notification pipeline (same instance of app running)
|
||||
if (notification)
|
||||
|
|
@ -222,6 +237,11 @@ void LLDoNotDisturbNotificationStorage::updateNotifications()
|
|||
LLFloaterReg::showInstance("im_container");
|
||||
}
|
||||
|
||||
if(imToastExists || offerExists)
|
||||
{
|
||||
make_ui_sound("UISndNewIncomingIMSession");
|
||||
}
|
||||
|
||||
//When exit DND mode, write empty notifications file
|
||||
if(commChannel->getHistorySize())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3454,12 +3454,10 @@ public:
|
|||
(time_t) message_params["timestamp"].asInteger();
|
||||
|
||||
BOOL is_do_not_disturb = gAgent.isDoNotDisturb();
|
||||
BOOL is_muted = LLMuteList::getInstance()->isMuted(
|
||||
from_id,
|
||||
name,
|
||||
LLMute::flagTextChat);
|
||||
|
||||
if (is_do_not_disturb || is_muted)
|
||||
//don't return if user is muted b/c proper way to ignore a muted user who
|
||||
//initiated an adhoc/group conference is to create then leave the session (see STORM-1731)
|
||||
if (is_do_not_disturb)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,7 +120,8 @@ bool LLOfferHandler::processNotification(const LLNotificationPtr& notification)
|
|||
channel->addToast(p);
|
||||
|
||||
//Will not play a notification sound for inventory and teleport offer based upon chat preference
|
||||
bool playSound = !((notification->getName() == "UserGiveItem"
|
||||
bool playSound = !((notification->isDND())
|
||||
&& (notification->getName() == "UserGiveItem"
|
||||
&& gSavedSettings.getBOOL("PlaySoundInventoryOffer") == FALSE)
|
||||
|| notification->getName() == "TeleportOffered"
|
||||
&& gSavedSettings.getBOOL("PlaySoundTeleportOffer") == FALSE);
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ BOOL LLProgressView::postBuild()
|
|||
getChild<LLTextBox>("message_text")->setClickedCallback(onClickMessage, this);
|
||||
|
||||
// hidden initially, until we need it
|
||||
LLPanel::setVisible(FALSE);
|
||||
setVisible(FALSE);
|
||||
|
||||
LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLProgressView::onAlertModal, this, _1));
|
||||
|
||||
|
|
@ -265,7 +265,7 @@ void LLProgressView::draw()
|
|||
gFocusMgr.releaseFocusIfNeeded( this );
|
||||
|
||||
// turn off panel that hosts intro so we see the world
|
||||
LLPanel::setVisible(FALSE);
|
||||
setVisible(FALSE);
|
||||
|
||||
// stop observing events since we no longer care
|
||||
mMediaCtrl->remObserver( this );
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include "llagent.h"
|
||||
#include "llagentcamera.h"
|
||||
#include "llappviewer.h"
|
||||
#include "lldeferredsounds.h"
|
||||
#include "llvieweraudio.h"
|
||||
#include "llviewercamera.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
|
@ -388,6 +389,12 @@ void audio_update_volume(bool force_update)
|
|||
gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
|
||||
gAudiop->setMuted(mute_audio || progress_view_visible);
|
||||
|
||||
//Play any deferred sounds when unmuted
|
||||
if(!gAudiop->getMuted())
|
||||
{
|
||||
LLDeferredSounds::instance().playdeferredSounds();
|
||||
}
|
||||
|
||||
if (force_update)
|
||||
{
|
||||
audio_update_wind(true);
|
||||
|
|
|
|||
Loading…
Reference in New Issue