merging latest changes

meow-7.2.2
Cho 2013-01-30 02:56:33 +00:00
commit a7e6dc088f
13 changed files with 199 additions and 14 deletions

View File

@ -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)
{

View File

@ -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;

View File

@ -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");

View File

@ -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;

View File

@ -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

View File

@ -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 ;

View File

@ -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();
}
}

View File

@ -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

View File

@ -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())
{

View File

@ -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;
}

View File

@ -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);

View File

@ -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 );

View File

@ -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);