diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llfloatersearch.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llfloatertools.cpp | 41 | ||||
-rwxr-xr-x | indra/newview/llmediadataclient.cpp | 21 | ||||
-rwxr-xr-x | indra/newview/llmediadataclient.h | 8 | ||||
-rw-r--r-- | indra/newview/lltoolpie.cpp | 46 | ||||
-rw-r--r-- | indra/newview/llviewermedia.cpp | 38 | ||||
-rw-r--r-- | indra/newview/llvovolume.cpp | 8 | ||||
-rw-r--r-- | indra/newview/llvovolume.h | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_search.xml | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_test_textbox.xml | 92 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/fonts.xml | 8 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/widgets/inspector.xml | 8 | ||||
-rw-r--r-- | indra/newview/tests/llmediadataclient_test.cpp | 35 |
13 files changed, 203 insertions, 116 deletions
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 97c573ddea..ca2cdffcf8 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -36,6 +36,7 @@ #include "llmediactrl.h" #include "lllogininstance.h" #include "lluri.h" +#include "llagent.h" LLFloaterSearch::LLFloaterSearch(const LLSD& key) : LLFloater(key), @@ -122,6 +123,12 @@ void LLFloaterSearch::search(const LLSD &key) LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token"); url += "&p=" + search_token.asString(); + // also append the user's preferred maturity (can be changed via prefs) + std::string maturity = "pg"; + if (gAgent.prefersMature()) maturity += ",mature"; + if (gAgent.prefersAdult()) maturity += ",adult"; + url += "&r=" + maturity; + // and load the URL in the web view mBrowser->navigateTo(url); } diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 3aef15a35c..3c3dfb760e 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -86,6 +86,7 @@ #include "llviewermenu.h" #include "llviewerparcelmgr.h" #include "llviewerwindow.h" +#include "llvovolume.h" #include "lluictrlfactory.h" // Globals @@ -1079,21 +1080,45 @@ void LLFloaterTools::getMediaState() } bool editable = (first_object->permModify() || selectedMediaEditable()); - + + // Check modify permissions and whether any selected objects are in + // the process of being fetched. If they are, then we're not editable + if (editable) + { + LLObjectSelection::iterator iter = selected_objects->begin(); + LLObjectSelection::iterator end = selected_objects->end(); + for ( ; iter != end; ++iter) + { + LLSelectNode* node = *iter; + LLVOVolume* object = dynamic_cast<LLVOVolume*>(node->getObject()); + if (NULL != object) + { + if (!object->permModify() || object->isMediaDataBeingFetched()) + { + editable = false; + break; + } + } + } + } + // Media settings - U8 has_media = (U8)0; - struct media_functor : public LLSelectedTEGetFunctor<U8> + bool bool_has_media = false; + struct media_functor : public LLSelectedTEGetFunctor<bool> { - U8 get(LLViewerObject* object, S32 face) + bool get(LLViewerObject* object, S32 face) { - return (object->getTE(face)->getMediaTexGen()); + LLTextureEntry *te = object->getTE(face); + if (te) + { + return te->hasMedia(); + } + return false; } } func; // check if all faces have media(or, all dont have media) - LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo = selected_objects->getSelectedTEValue( &func, has_media ); - bool bool_has_media = (has_media & LLTextureEntry::MF_HAS_MEDIA); - + LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo = selected_objects->getSelectedTEValue( &func, bool_has_media ); const LLMediaEntry default_media_data; diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index 512104a2f4..986c14acff 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -324,6 +324,22 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::PriorityQueue return s; } +// find the given object in the queue. +bool LLMediaDataClient::PriorityQueue::find(const LLMediaDataClientObject::ptr_t &obj) const +{ + std::vector<LLMediaDataClient::request_ptr_t>::const_iterator iter = c.begin(); + std::vector<LLMediaDataClient::request_ptr_t>::const_iterator end = c.end(); + while (iter < end) + { + if (obj->getID() == (*iter)->getObject()->getID()) + { + return true; + } + iter++; + } + return false; +} + ////////////////////////////////////////////////////////////////////////////////////// // // LLMediaDataClient::QueueTimer @@ -491,6 +507,11 @@ bool LLMediaDataClient::isEmpty() const return (NULL == pRequestQueue) ? true : pRequestQueue->empty(); } +bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object) const +{ + return (NULL == pRequestQueue) ? false : pRequestQueue->find(object); +} + ////////////////////////////////////////////////////////////////////////////////////// // // LLObjectMediaDataClient diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 9d0aa0981e..0d1450ffbe 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -89,7 +89,10 @@ public: F32 getRetryTimerDelay() const { return mRetryTimerDelay; } // Returns true iff the queue is empty - bool isEmpty() const; + bool isEmpty() const; + + // Returns true iff the given object is in the queue + bool isInQueue(const LLMediaDataClientObject::ptr_t &object) const; protected: // Destructor @@ -206,6 +209,9 @@ private: Comparator > { public: + // Return whether the given object is in the queue + bool find(const LLMediaDataClientObject::ptr_t &obj) const; + friend std::ostream& operator<<(std::ostream &s, const PriorityQueue &q); }; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 93da32b115..d49ea5109d 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -700,13 +700,17 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) // *HACK: We may select this object, so pretend it was clicked mPick = mHoverPick; - LLToolTipMgr::instance().show(LLToolTip::Params() - .message(avatar_name) - .image(LLUI::getUIImage("Info")) - .click_callback(boost::bind(showAvatarInspector, hover_object->getID())) - .visible_time_near(6.f) - .visible_time_far(3.f) - .wrap(false)); + LLInspector::Params p; + p.message(avatar_name); + p.image(LLUI::getUIImage("Info")); + p.click_callback(boost::bind(showAvatarInspector, hover_object->getID())); + p.visible_time_near(6.f); + p.visible_time_far(3.f); + p.wrap(false); + + p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + + LLToolTipMgr::instance().show(p); } } else @@ -787,18 +791,22 @@ BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) { // We may select this object, so pretend it was clicked mPick = mHoverPick; - LLToolTipMgr::instance().show(LLToolTip::Params() - .message(tooltip_msg) - .image(LLUI::getUIImage("Info_Off")) - .click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)) - .time_based_media(is_time_based_media) - .web_based_media(is_web_based_media) - .media_playing(is_media_playing) - .click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick)) - .click_homepage_callback(boost::bind(VisitHomePage, mHoverPick)) - .visible_time_near(6.f) - .visible_time_far(3.f) - .wrap(false)); + LLInspector::Params p; + p.message(tooltip_msg); + p.image(LLUI::getUIImage("Info_Off")); + p.click_callback(boost::bind(showObjectInspector, hover_object->getID(), mHoverPick.mObjectFace)); + p.time_based_media(is_time_based_media); + p.web_based_media(is_web_based_media); + p.media_playing(is_media_playing); + p.click_playmedia_callback(boost::bind(playCurrentMedia, mHoverPick)); + p.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick)); + p.visible_time_near(6.f); + p.visible_time_far(3.f); + p.wrap(false); + + p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + + LLToolTipMgr::instance().show(p); } } } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 66d48fadd1..605861f1cb 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1133,11 +1133,15 @@ void LLViewerMediaImpl::mouseMove(S32 x, S32 y, MASK mask) void LLViewerMediaImpl::mouseDown(const LLVector2& texture_coords, MASK mask, S32 button) { if(mMediaSource) - { - mouseDown( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask, button); + { + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseDown(x, y, mask, button); } } @@ -1145,10 +1149,14 @@ void LLViewerMediaImpl::mouseUp(const LLVector2& texture_coords, MASK mask, S32 { if(mMediaSource) { - mouseUp( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask, button); + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseUp(x, y, mask, button); } } @@ -1156,10 +1164,14 @@ void LLViewerMediaImpl::mouseMove(const LLVector2& texture_coords, MASK mask) { if(mMediaSource) { - mouseMove( - llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()), - llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()), - mask); + // scale x and y to texel units. + S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth()); + S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight()); + + // Adjust for the difference between the actual texture height and the amount of the texture in use. + y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); + + mouseMove(x, y, mask); } } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5ac6dcce5a..2def905bbb 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -109,6 +109,7 @@ public: { result = te->getMediaData()->asLLSD(); // XXX HACK: workaround bug in asLLSD() where whitelist is not set properly + // See DEV-41949 if (!result.has(LLMediaEntry::WHITELIST_KEY)) { result[LLMediaEntry::WHITELIST_KEY] = LLSD::emptyArray(); @@ -1668,6 +1669,13 @@ void LLVOVolume::requestMediaDataUpdate() sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this)); } +bool LLVOVolume::isMediaDataBeingFetched() const +{ + // I know what I'm doing by const_casting this away: this is just + // a wrapper class that is only going to do a lookup. + return sObjectMediaClient->isInQueue(new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this))); +} + void LLVOVolume::cleanUpMediaImpls() { // Iterate through our TEs and remove any Impls that are no longer used diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 784ef16ba3..10fc8865fc 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -265,7 +265,10 @@ public: bool hasMedia() const; LLVector3 getApproximateFaceNormal(U8 face_id); - + + // Returns 'true' iff the media data for this object is in flight + bool isMediaDataBeingFetched() const; + protected: S32 computeLODDetail(F32 distance, F32 radius); BOOL calcLOD(); diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index edc1fb8838..b9cf456842 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -2,7 +2,7 @@ <floater legacy_header_height="18" can_resize="true" - height="400" + height="512" layout="topleft" min_height="140" min_width="467" diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml index 8dba05f1ee..3aeb7c93e7 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -10,83 +10,64 @@ <text type="string" length="1" - height="10" - layout="topleft" - left="10" - top="30" - width="300"> - Bottom and left specified - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="200" - top_delta="0" - width="300"> - Bottom delta left delta - </text> - <text - type="string" - length="1" - height="10" + height="90" layout="topleft" left="10" - top="50" - width="300"> - Bottom delta -20 - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="0" top_pad="30" width="300"> First line of multiple lines - Second line of multiple lines +Second line of multiple lines +Third line of multiple lines +Fourth line of multiple lines +Fifth line of multiple lines </text> <text top_pad="10" left="10" - right="-10" + right="-10" + height="20" follows="top|left" font.name="SansSerifSmall" name="test_text10" tool_tip="text"> - SansSerifSmall. Русский 中文 (简体) The quick brown fox jumped over the lazy dog. + SansSerifSmall +The 华文细黑 brown fox ヒラキjumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + right="-10" + height="25" follows="top|left" - font.name="SansSerif" + font.name="SansSerifMedium" name="test_text11" tool_tip="text"> - SansSerif. Русский 中文 (简体) The quick brown fox jumped over the lazy dog. + SansSerif +The 华文细黑 brown fox ヒラキjumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + right="-10" follows="top|left" + height="26" font.name="SansSerifLarge" name="test_text12" tool_tip="text"> - SansSerifLarge. Русский 中文 (简体) The quick brown fox jumped over the lazy dog. + SansSerifLarge +The 华文细黑 brown fox ヒラキjumped over the lazy dog. </text> <text top_pad="10" left="10" - right="-10" + height="35" + right="-10" follows="top|left" font.name="SansSerifHuge" name="test_text13" tool_tip="text"> - SansSerifHuge. Русский 中文 (简体) The quick brown fox jumped over the lazy dog. + SansSerifHuge +The 华文细黑 brown fox ヒラキjumped over the lazy dog. </text> <text type="string" @@ -113,27 +94,6 @@ SansSerif BOLD UNDERLINE </text> <text - type="string" - length="1" - font="SansSerif" - height="10" - layout="topleft" - left_delta="0" - top_pad="10" - width="300"> - SansSerif UNDERLINE - </text> - <text - type="string" - length="1" - height="10" - layout="topleft" - left_delta="0" - top_pad="10" - width="300"> - Escaped greater than > - </text> - <text type="string" length="1" bottom="390" @@ -142,8 +102,7 @@ left="10" name="right_aligned_text" width="380" - halign="right" - text_color="1 1 1 0.7" + halign="right" top_pad="10"> Right aligned text </text> @@ -157,21 +116,19 @@ name="centered_text" width="380" halign="center" - text_color="1 1 1 0.7" top_pad="10"> Centered text </text> <text type="string" length="1" - height="60" + height="60" label="N" layout="topleft" left="10" name="left_aligned_text" width="380" halign="left" - text_color="1 1 1 0.7" top_pad="10"> Left aligned text </text> @@ -184,7 +141,6 @@ left="10" name="floater_map_north" right="30" - text_color="1 1 1 0.7" top="370"> N </text> diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index f3da62a896..ebbb53729d 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -144,18 +144,18 @@ /> <font_size name="Huge" comment="Size of huge font (points, or 1/72 of an inch)" - size="15.0" + size="16.0" /> <font_size name="Large" comment="Size of large font (points, or 1/72 of an inch)" - size="10.0" + size="10.6" /> <font_size name="Medium" comment="Size of medium font (points, or 1/72 of an inch)" - size="9.0" + size="8.6" /> <font_size name="Small" comment="Size of small font (points, or 1/72 of an inch)" - size="7.8" + size="7.6" /> </fonts> diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml new file mode 100644 index 0000000000..61950d7554 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/inspector.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- See also settings.xml UIFloater* settings for configuration --> +<inspector name="inspector" + bg_opaque_color="ToolTipBgColor" + background_visible="true" + bg_opaque_image="none" + bg_alpha_image="none" + /> diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp index 445ec7aa34..3ac631d96e 100644 --- a/indra/newview/tests/llmediadataclient_test.cpp +++ b/indra/newview/tests/llmediadataclient_test.cpp @@ -497,5 +497,38 @@ namespace tut ensure("REF COUNT", o->getNumRefs(), 1); } - + template<> template<> + void mediadataclient_object_t::test<7>() + { + // Test LLMediaDataClient::isInQueue() + LOG_TEST(7); + + LLMediaDataClientObject::ptr_t o1 = new LLMediaDataClientObjectTest( + _DATA(VALID_OBJECT_ID_1,"3.0","1.0")); + LLMediaDataClientObject::ptr_t o2 = new LLMediaDataClientObjectTest( + _DATA(VALID_OBJECT_ID_2,"1.0","1.0")); + int num_refs_start = o1->getNumRefs(); + { + LLPointer<LLObjectMediaDataClient> mdc = new LLObjectMediaDataClient(NO_PERIOD,NO_PERIOD); + + ensure("not in queue yet 1", ! mdc->isInQueue(o1)); + ensure("not in queue yet 2", ! mdc->isInQueue(o2)); + + mdc->fetchMedia(o1); + + ensure("is in queue", mdc->isInQueue(o1)); + ensure("is not in queue", ! mdc->isInQueue(o2)); + + ::pump_timers(); + + ensure("not in queue anymore", ! mdc->isInQueue(o1)); + ensure("still is not in queue", ! mdc->isInQueue(o2)); + + ensure("queue empty", mdc->isEmpty()); + } + + // Make sure everyone's destroyed properly + ensure("REF COUNT", o1->getNumRefs(), num_refs_start); + + } } |