diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h index 7f196c9fd3..fa390a8889 100644 --- a/indra/llcommon/llchat.h +++ b/indra/llcommon/llchat.h @@ -50,7 +50,8 @@ typedef enum e_chat_type CHAT_TYPE_STOP = 5, CHAT_TYPE_DEBUG_MSG = 6, CHAT_TYPE_REGION = 7, - CHAT_TYPE_OWNER = 8 + CHAT_TYPE_OWNER = 8, + CHAT_TYPE_IM = 9 // Ansariel: Special type for IMs in nearby chat } EChatType; typedef enum e_chat_audible_level diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index 9efd263a69..715a7d6270 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -30,7 +30,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 6; const S32 LL_VERSION_PATCH = 9; -const S32 LL_VERSION_BUILD = 16953; +const S32 LL_VERSION_BUILD = 18325; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 5bcdc51e58..0b390e41ad 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -30,7 +30,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 6; const S32 LL_VERSION_PATCH = 9; -const S32 LL_VERSION_BUILD = 16953; +const S32 LL_VERSION_BUILD = 18325; const char * const LL_CHANNEL = "Firestorm-private-Romana"; diff --git a/indra/llcommon/res/llcommon.rc b/indra/llcommon/res/llcommon.rc index 8c81a681b2..af8ecf6492 100644 --- a/indra/llcommon/res/llcommon.rc +++ b/indra/llcommon/res/llcommon.rc @@ -24,8 +24,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,6,9,16953 - PRODUCTVERSION 2,6,9,16953 + FILEVERSION 2,6,9,18325 + PRODUCTVERSION 2,6,9,18325 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -42,12 +42,12 @@ BEGIN BEGIN VALUE "CompanyName", "Phoenix Viewer" VALUE "FileDescription", "Phoenix Firestorm Viewer Common Library" - VALUE "FileVersion", "2.6.9.16953" + VALUE "FileVersion", "2.6.9.18325" VALUE "InternalName", "llcommon.dll" VALUE "LegalCopyright", "Copyright © 2010 Phoenix Viewer" VALUE "OriginalFilename", "llcommon.dll" VALUE "ProductName", "Phoenix Firestorm Viewer" - VALUE "ProductVersion", "2.6.9.16953" + VALUE "ProductVersion", "2.6.9.18325" END END BLOCK "VarFileInfo" diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 13008292f6..a3f9313e90 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -189,6 +189,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX); origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY); + // don't forget to do the depth translation, too. -Zi + gGL.translatef(0.f,0.f,sCurOrigin.mZ); S32 chars_drawn = 0; S32 i; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 8eb160f4e7..82ed8aacef 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1234,7 +1234,12 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, S32 vert_count) mColorsp[mCount] = mColorsp[mCount-1]; } - mVerticesp[mCount] = mVerticesp[mCount-1]; + // Often happens with LLFontGL::render(), especially in LLScrollListText::draw() + // Can be observed by opening the V1 style friends list for example + if (mCount == 0) + lldebugs << "Vertex count was 0, prevented crashing." << llendl; + else + mVerticesp[mCount] = mVerticesp[mCount-1]; } void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count) @@ -1254,8 +1259,15 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 v mColorsp[mCount] = mColorsp[mCount-1]; } - mVerticesp[mCount] = mVerticesp[mCount-1]; - mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + // Often happens with LLFontGL::render(), especially in LLScrollListText::draw() + // Can be observed by opening the V1 style friends list for example + if (mCount == 0) + lldebugs << "Vertex count was 0, prevented crashing." << llendl; + else + { + mVerticesp[mCount] = mVerticesp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + } } void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count) @@ -1275,9 +1287,16 @@ void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLCol mCount++; } - mVerticesp[mCount] = mVerticesp[mCount-1]; - mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; - mColorsp[mCount] = mColorsp[mCount-1]; + // Often happens with LLFontGL::render(), especially in LLScrollListText::draw() + // Can be observed by opening the V1 style friends list for example + if (mCount == 0) + lldebugs << "Vertex count was 0, prevented crashing." << llendl; + else + { + mVerticesp[mCount] = mVerticesp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + mColorsp[mCount] = mColorsp[mCount-1]; + } } void LLRender::vertex2i(const GLint& x, const GLint& y) diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index bd35e4f3fa..1d74caad4e 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -449,3 +449,15 @@ void LLConsole::update() } } +void LLConsole::removeExtraLines() +{ + mMutex.lock() ; + while ((S32)mLines.size() > llmax((S32)0, (S32)(mMaxLines - 1))) + { + mLines.pop_front(); + mAddTimes.pop_front(); + mLineLengths.pop_front(); + mLineColors.pop_front(); + } + mMutex.unlock() ; +} diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h index 5ededb9381..a1cd98a31b 100644 --- a/indra/llui/llconsole.h +++ b/indra/llui/llconsole.h @@ -102,8 +102,7 @@ public: typedef std::list lines_t; typedef std::list paragraph_color_segments_t; - typedef std::list line_colors_t; - line_colors_t mLineColors; + std::deque mLineColors; //A paragraph is a processed element containing the entire text of the //message (used for recalculating positions on screen resize) @@ -147,6 +146,9 @@ public: void addConsoleLine(const LLWString& wline, const LLColor4 &color); void clear(); +protected: + void removeExtraLines(); + private: void update(); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index d995e304e3..fe613dabd7 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2240,7 +2240,15 @@ void LLFloaterView::restoreAll() for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { LLFloater* floaterp = (LLFloater*)*child_it; - floaterp->setMinimized(FALSE); + + // Ansariel: Don't restore "closed" sidebar floaters that are hidden + // minimized to emulate closed state! + std::string pat = "side_bar_tab"; + size_t found = floaterp->getInstanceName().find(pat); + if (found == std::string::npos) + { + floaterp->setMinimized(FALSE); + } } // *FIX: make sure dependents are restored diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index fd7bb699f8..2fa039ca49 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1525,6 +1525,25 @@ LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index) index_segment->setStart(index); index_segment->setEnd(index); segment_set_t::iterator it = mSegments.upper_bound(index_segment); + + // FIXME: I tried to put this into its own function but ended up with errors, + // so this is duplicated in the const version of this function for now. -Zi + + // This goes reports one segment backwards if the cursor is inside a non-editable segment, + // but only if that segment is editable -Zi + LLTextSegment* seg=*it; + if(!seg->canEdit()) + { + if(it!=mSegments.begin()) + { + --it; + + seg=*it; + if(!seg->canEdit()) + ++it; + } + } + return it; } @@ -1540,6 +1559,25 @@ LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 i index_segment->setStart(index); index_segment->setEnd(index); LLTextBase::segment_set_t::const_iterator it = mSegments.upper_bound(index_segment); + + // FIXME: I tried to put this into its own function but ended up with errors, + // so this is duplicated in the non-const version of this function for now. -Zi + + // This goes reports one segment backwards if the cursor is inside a non-editable segment, + // but only if that segment is editable -Zi + LLTextSegment* seg=*it; + if(!seg->canEdit()) + { + if(it!=mSegments.begin()) + { + --it; + + seg=*it; + if(!seg->canEdit()) + ++it; + } + } + return it; } diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index e93b6a6cbb..189fbc14a2 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -60,7 +60,7 @@ CFBundleVersion - 2.6.9.16953 + 2.6.9.18325 CSResourcesFileMapped diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 16fd9e7aaa..e3fae2ef30 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -14,6 +14,50 @@ 1 + FSShowIMInChatHistory + + Comment + If true, IM will also be shown in the nearby chat history. + Persist + 1 + Type + Boolean + Value + 0 + + FSLogIMInChatHistory + + Comment + If true, IM will also be logged in the nearby chat history if logging nearby chat and showing IMs in nearby chat is enabled. + Persist + 1 + Type + Boolean + Value + 0 + + FSPaymentInfoInChat + + Comment + If true, L$ balance changes will be shown in nearby chat instead of toasts. + Persist + 1 + Type + Boolean + Value + 0 + + FSScriptDialogNoTransparency + + Comment + If true, script dialogs will be shown opaque and ignore the floater opacity settings. + Persist + 1 + Type + Boolean + Value + 0 + ShowStreamMetadata Comment @@ -71,17 +115,38 @@ Value 0 - + PhoenixDoubleClickAddInventoryObjects + + Comment + Whether or not to add items instead of wearing them + Persist + 1 + Type + Boolean + Value + 0 + + PhoenixKeepUnpackedCacheFiles + + Comment + If TRUE, the viewer won't delete unpacked cache files when logging out (improves overall performance and fixes sound bugs) + Persist + 1 + Type + Boolean + Value + 0 + RadarAlertChannel Comment - Positive Numbered Channel for whispering radar alerts + Channel for whispering radar alerts Persist 1 Type - U32 + S32 Value - 777777777 + -777777777 RadarLegacyChannelAlertRefreshUUID @@ -475,6 +540,28 @@ Value 0 + FSLeaveMouselookOnFocus + + Comment + Exit mouselook mode when regaining focus + Persist + 1 + Type + Boolean + Value + 1 + + FSSaveInventoryScriptsAsMono + + Comment + Saves scripts edited directly from inventory as Mono instead of LSL + Persist + 1 + Type + Boolean + Value + 0 + AutoCloseOOC Comment @@ -621,10 +708,10 @@ Value 0 - RestrainedLoveOffsetAvatarZ + AvatarZOffset Comment - Offset the avatar. + Height offset the avatar. Persist 1 Type @@ -4634,7 +4721,7 @@ Type String Value - https://marketplace.secondlife.com/products/search?search[category_id]=200 + https://marketplace.secondlife.com/products/search?search[category_id]=200&search[page]=1&search[per_page]=12 GridCrossSections @@ -6442,6 +6529,17 @@ Value 16.0 + MiniMapPrimMaxVertDistance + + Comment + Max height difference between avatar and prim to be shown on the MiniMap. Set to 0.0 to disable. + Persist + 1 + Type + F32 + Value + 256.0 + MiniMapChatRing Comment diff --git a/indra/newview/fonts/CONTRIBUTING.txt b/indra/newview/fonts/CONTRIBUTING.txt new file mode 100644 index 0000000000..15bdc0c0b0 --- /dev/null +++ b/indra/newview/fonts/CONTRIBUTING.txt @@ -0,0 +1,21 @@ +The Ubuntu Font Family is very long-term endeavour, and the first time +that a professionally-designed font has been funded specifically with +the intent of being an on-going community expanded project: + + http://font.ubuntu.com/ + +Development of the Ubuntu Font Family is undertaken on Launchpad: + + http://launchpad.net/ubuntu-font-family/ + +and this is where milestones, bug management and releases are handled. + +Contributions are welcomed. Your work will be used on millions of +computers every single day! Following the initial bootstrapping of +Latin, Cyrillic, Greek, Arabic and Hebrew expansion will be undertaken +by font designers from the font design and Ubuntu communities. + +To ensure that the Ubuntu Font Family can be re-licensed to future +widely-used libre font licences, copyright assignment is being required: + + https://launchpad.net/~uff-contributors diff --git a/indra/newview/fonts/Droid-License.txt b/indra/newview/fonts/Droid-License.txt new file mode 100644 index 0000000000..c5b1efa7aa --- /dev/null +++ b/indra/newview/fonts/Droid-License.txt @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/indra/newview/fonts/DroidSans-Bold.ttf b/indra/newview/fonts/DroidSans-Bold.ttf new file mode 100644 index 0000000000..fc60df4002 Binary files /dev/null and b/indra/newview/fonts/DroidSans-Bold.ttf differ diff --git a/indra/newview/fonts/DroidSans.ttf b/indra/newview/fonts/DroidSans.ttf new file mode 100644 index 0000000000..458ba59d8b Binary files /dev/null and b/indra/newview/fonts/DroidSans.ttf differ diff --git a/indra/newview/fonts/DroidSansMono.ttf b/indra/newview/fonts/DroidSansMono.ttf new file mode 100644 index 0000000000..d604425b26 Binary files /dev/null and b/indra/newview/fonts/DroidSansMono.ttf differ diff --git a/indra/newview/fonts/DroidSerif-Bold.ttf b/indra/newview/fonts/DroidSerif-Bold.ttf new file mode 100644 index 0000000000..108ed3922a Binary files /dev/null and b/indra/newview/fonts/DroidSerif-Bold.ttf differ diff --git a/indra/newview/fonts/DroidSerif-BoldItalic.ttf b/indra/newview/fonts/DroidSerif-BoldItalic.ttf new file mode 100644 index 0000000000..045e8a625f Binary files /dev/null and b/indra/newview/fonts/DroidSerif-BoldItalic.ttf differ diff --git a/indra/newview/fonts/DroidSerif-Italic.ttf b/indra/newview/fonts/DroidSerif-Italic.ttf new file mode 100644 index 0000000000..689a1ba2cd Binary files /dev/null and b/indra/newview/fonts/DroidSerif-Italic.ttf differ diff --git a/indra/newview/fonts/DroidSerif.ttf b/indra/newview/fonts/DroidSerif.ttf new file mode 100644 index 0000000000..90cdfffe54 Binary files /dev/null and b/indra/newview/fonts/DroidSerif.ttf differ diff --git a/indra/newview/fonts/FONTLOG.txt b/indra/newview/fonts/FONTLOG.txt new file mode 100644 index 0000000000..cf0e4c111e --- /dev/null +++ b/indra/newview/fonts/FONTLOG.txt @@ -0,0 +1,211 @@ +This is the FONTLOG file for the Ubuntu Font Family and attempts to follow +the recommendations at: http://scripts.sil.org/OFL-FAQ_web#43cecb44 + + +Overview + +The new Ubuntu Font Family was started to enable the personality of +Ubuntu to be seen and felt in every menu, button and dialog. +The typeface is sans-serif, uses OpenType features and is manually +hinted for clarity on desktop and mobile computing screens. + +The scope of the Ubuntu Font Family includes all the languages used by +the various Ubuntu users around the world in tune with Ubuntu's +philosophy which states that every user should be able to use their +software in the language of their choice. So the Ubuntu Font Family +project will be extended to cover many more written languages. + + +History + +The Ubuntu Font Family has been creating during 2010. As of December 2010 +coverage is provided for Latin, Cyrillic and Greek across Regular, Italic, +Bold and Bold-Italic. + + +ChangeLog + +2010-03-08 (Paul Sladen) Ubuntu Font Family version 0.71.2 + + * (Production) Adjust Medium WeightClass to 500 (Md, MdIt) (LP: #730912) + +2010-03-07 (Paul Sladen) Ubuntu Font Family version 0.71.1 + + * (Design) Add Capitalised version of glyphs and kern. (Lt, LtIt, + Md, MdIt) DM (LP: #677446) + * (Design) Re-space and tighen Regular and Italic by amount specified + by Mark Shuttleworth (minus 4 FUnits). (Rg, It) (LP: #677149) + * (Design) Design: Latin (U+0192) made straight more like l/c f with + tail (LP: #670768) + * (Design) (U+01B3) should have hook on right, as the lowercase + (U+01B4) (LP: #681026) + * (Design) Tail of Light Italic germandbls, longs and lowercase 'f' + to match Italic/BoldItalic (LP: #623925) + * (Production) Update feature (Lt, LtIt, Md, MdIt). DM + (LP: #676538, #676539) + * (Production) Remove Bulgarian locl feature for Italics. (LP: #708578) + * (Production) Update Description information with new string: + "The Ubuntu Font Family are libre fonts funded by Canonical Ltd + on behalf of the Ubuntu project. The font design work and + technical implementation is being undertaken by Dalton Maag. The + typeface is sans-serif, uses OpenType features and is manually + hinted for clarity on desktop and mobile computing screens. The + scope of the Ubuntu Font Family includes all the languages used + by the various Ubuntu users around the world in tune with + Ubuntu's philosophy which states that every user should be able + to use their software in the language of their choice. The + project is ongoing, and we expect the family will be extended to + cover many written languages in the coming years." + (Rg, It, Bd, BdIt, Lt, LtIt, Md, MdIt) (LP: #690590) + * (Production) Pixel per em indicator added at U+F000 (Lt, LtIt, Md, + MdIt) (LP: #615787) + * (Production) Version number indicator added at U+EFFD (Lt, LtIt, Md, + MdIt) (LP: #640623) + * (Production) fstype bit set to 0 - Editable (Lt, LtIt, Md, MdIt) + (LP: #648406) + * (Production) Localisation of name table has been removed because + of problems with Mac OS/X interpretation of localisation. DM + (LP: #730785) + * (Hinting) Regular '?' dot non-circular (has incorrect control + value). (LP: #654336) + * (Hinting) Too much space after latin capital 'G' in 13pt + regular. Now reduced. (LP: #683437) + * (Hinting) Balance Indian Rupee at 18,19pt (LP: #662177) + * (Hinting) Make Regular 'Β£' less ambiguous at 13-15 ppm (LP: #685562) + * (Hinting) Regular capital 'W' made symmetrical at 31 ppem (LP: #686168) + +2010-12-14 (Paul Sladen) Ubuntu Font Family version 0.70.1 + + Packaging, rebuilt from '2010-12-08 UbuntuFontsSourceFiles_070.zip': + * (Midstream) Fstype bit != 0 (LP: #648406) + * (Midstream) Add unit test to validate fstype bits (LP: #648406) + * (Midstream) Add unit test to validate licence + +2010-12-14 (Paul Sladen) Ubuntu Font Family version 0.70 + + Release notes 0.70: + * (Design) Add Capitalised version of glyphs and kern. (Rg, It, Bd, + BdIt) DM (LP: #676538, #677446) + * (Design) Give acute and grave a slight upright move to more match + the Hungarian double acute angle. (Rg, It, Bd, BdIt) (LP: #656647) + * (Design) Shift Bold Italic accent glyphs to be consistent with the + Italic. (BdIt only) DM (LP: #677449) + * (Design) Check spacing and kerning of dcaron, lcaron and + tcaron. (Rg, It, Bd, BdIt) (LP: #664722) + * (Design) Add positive kerning to () {} [] to open out the + combinations so they are less like a closed box. (Rg, It, Bd, + BdIt) (LP: #671228) + * (Design) Change design of acute.asc and check highest points (Bd + and BdIt only) DM + * (Production) Update feature. DM (LP: #676538, #676539) + * (Production) Remove Romanian locl feature. (Rg, It, Bd, BdIt) + (LP: #635615) + * (Production) Update Copyright information with new + strings. "Copyright 2010 Canonical Ltd. Licensed under the Ubuntu + Font Licence 1.0" Trademark string "Ubuntu and Canonical are + registered trademarks of Canonical Ltd." (Rg, It, Bd, BdIt) DM + (LP: #677450) + * (Design) Check aligning of hyphen, math signs em, en, check braces + and other brackets. 16/11 (LP: #676465) + * (Production) Pixel per em indicator added at U+F000 (Rg, It, Bd, + BdIt) (LP: #615787) + * (Production) Version number indicator added at U+EFFD (Rg, It, Bd, + BdIt) (LP: #640623) + * (Production) fstype bit set to 0 - Editable (Rg, It, Bd, BdIt) + (LP: #648406) + +2010-10-05 (Paul Sladen) Ubuntu Font Family version 0.69 + + [Dalton Maag] + * Italic, + - Hinting on lowercase Italic l amended 19ppm (LP: #632451) + - Hinting on lowercase Italic u amended 12ppm (LP: #626376) + + * Regular, Italic, Bold, BoldItalic + - New Rupee Sign added @ U+20B9 (LP: #645987) + - Ubuntu Roundel added @ U+E0FF (LP: #651606) + + [Paul Sladen] + * All + - Removed "!ubu" GSUB.calt ligature for U+E0FF (LP: #651606) + + +Acknowledgements + +If you make modifications be sure to add your name (N), email (E), +web-address (if you have one) (W) and description (D). This list is in +alphabetical order. + +N: AmΓ©lie Bonet +W: http://ameliebonet.com/ +D: Type design with Dalton Maag, particularly Ubuntu Mono + +N: Ron Carpenter +N: Vincent Connare +N: Lukas Paltram +W: http://www.daltonmaag.com/ +D: Type design and engineering with Dalton Maag + +N: Dave Crossland +E: dave@understandingfonts.com +W: http://understandingfonts.com/ +D: Documentation and libre licensing guidance + +N: Iain Farrell +W: http://www.flickr.com/photos/iain +D: Ubuntu Font Family delivery for the Ubuntu UX team + +N: Shiraaz Gabru +W: http://www.daltonmaag.com/ +D: Ubuntu Font Family project management at Dalton Maag + +N: Marcus Haslam +W: http://design.canonical.com/author/marcus-haslam/ +D: Creative inspiration + +N: Ben Laenen +D: Inspiration behind the pixels-per-em (PPEM) readout debugging glyph at U+F000 + (for this font the concept was re-implemented from scratch by Dalton-Maag) + +N: Bruno Maag +W: http://www.daltonmaag.com/ +D: Stylistic direction of the Ubuntu Font Family, as head of Dalton Maag + +N: Ivanka Majic +W: http://www.ivankamajic.com/ +D: Guiding the UX team and Cyrillic feedback + +N: David Marshall +N: Malcolm Wooden +W: http://www.daltonmaag.com/ +D: Font Engineering and technical direction + +N: Rodrigo Rivas +D: Indian Rupee Sign glyph + +N: Mark Shuttleworth +E: mark@ubuntu.com +W: http://www.markshuttleworth.com/ +D: Executive quality-control and funding + +N: Paul Sladen +E: ubuntu@paul.sladen.org +W: http://www.paul.sladen.org/ +D: Bug triaging, packaging + +N: Nicolas Spalinger +W: http://planet.open-fonts.org +D: Continuous guidance on libre/open font licensing, best practises in source + tree layout, release and packaging (pkg-fonts Debian team) + +N: Kenneth Wimer +D: Initial PPA packaging + +* Canonical Ltd is the primary commercial sponsor of the Ubuntu and + Kubuntu operating systems +* Dalton Maag are a custom type foundry headed by Bruno Maag + +For further documentation, information on contributors, source code +downloads and those involved with the Ubuntu Font Family, visit: + + http://font.ubuntu.com/ diff --git a/indra/newview/fonts/LICENCE-FAQ.txt b/indra/newview/fonts/LICENCE-FAQ.txt new file mode 100644 index 0000000000..776a25edf1 --- /dev/null +++ b/indra/newview/fonts/LICENCE-FAQ.txt @@ -0,0 +1,177 @@ + Ubuntu Font Family Licensing FAQ + + Stylistic Foundations + + The Ubuntu Font Family is the first time that a libre typeface has been + designed professionally and explicitly with the intent of developing a + public and long-term community-based development process. + + When developing an open project, it is generally necessary to have firm + foundations: a font needs to maintain harmony within itself even across + many type designers and writing systems. For the [1]Ubuntu Font Family, + the process has been guided with the type foundry Dalton Maag setting + the project up with firm stylistic foundation covering several + left-to-right scripts: Latin, Greek and Cyrillic; and right-to-left + scripts: Arabic and Hebrew (due in 2011). + + With this starting point the community will, under the supervision of + [2]Canonical and [3]Dalton Maag, be able to build on the existing font + sources to expand their character coverage. Ultimately everybody will + be able to use the Ubuntu Font Family in their own written languages + across the whole of Unicode (and this will take some time!). + + Licensing + + The licence chosen by any free software project is one of the + foundational decisions that sets out how derivatives and contributions + can occur, and in turn what kind of community will form around the + project. + + Using a licence that is compatible with other popular licences is a + powerful constraint because of the [4]network effects: the freedom to + share improvements between projects allows free software to reach + high-quality over time. Licence-proliferation leads to many + incompatible licences, undermining the network effect, the freedom to + share and ultimately making the libre movement that Ubuntu is a part of + less effective. For all kinds of software, writing a new licence is not + to be taken lightly and is a choice that needs to be thoroughly + justified if this path is taken. + + Today it is not clear to Canonical what the best licence for a font + project like the Ubuntu Font Family is: one that starts life designed + by professionals and continues with the full range of community + development, from highly commercial work in new directions to curious + beginners' experimental contributions. The fast and steady pace of the + Ubuntu release cycle means that an interim libre licence has been + necessary to enable the consideration of the font family as part of + Ubuntu 10.10 operating system release. + + Before taking any decision on licensing, Canonical as sponsor and + backer of the project has reviewed the many existing licenses used for + libre/open fonts and engaged the stewards of the most popular licenses + in detailed discussions. The current interim licence is the first step + in progressing the state-of-the-art in licensing for libre/open font + development. + + The public discussion must now involve everyone in the (comparatively + new) area of the libre/open font community; including font users, + software freedom advocates, open source supporters and existing libre + font developers. Most importantly, the minds and wishes of professional + type designers considering entering the free software business + community must be taken on board. + + Conversations and discussion has taken place, privately, with + individuals from the following groups (generally speaking personally on + behalf of themselves, rather than their affiliations): + * [5]SIL International + * [6]Open Font Library + * [7]Software Freedom Law Center + * [8]Google Font API + + Document embedding + + One issue highlighted early on in the survey of existing font licences + is that of document embedding. Almost all font licences, both free and + unfree, permit embedding a font into a document to a certain degree. + Embedding a font with other works that make up a document creates a + "combined work" and copyleft would normally require the whole document + to be distributed under the terms of the font licence. As beautiful as + the font might be, such a licence makes a font too restrictive for + useful general purpose digital publishing. + + The situation is not entirely unique to fonts and is encountered also + with tools such as GNU Bison: a vanilla GNU GPL licence would require + anything generated with Bison to be made available under the terms of + the GPL as well. To avoid this, Bison is [9]published with an + additional permission to the GPL which allows the output of Bison to be + made available under any licence. + + The conflict between licensing of fonts and licensing of documents, is + addressed in two popular libre font licences, the SIL OFL and GNU GPL: + * [10]SIL Open Font Licence: When OFL fonts are embedded in a + document, the OFL's terms do not apply to that document. (See + [11]OFL-FAQ for details. + * [12]GPL Font Exception: The situation is resolved by granting an + additional permission to allow documents to not be covered by the + GPL. (The exception is being reviewed). + + The Ubuntu Font Family must also resolve this conflict, ensuring that + if the font is embedded and then extracted it is once again clearly + under the terms of its libre licence. + + Long-term licensing + + Those individuals involved, especially from Ubuntu and Canonical, are + interested in finding a long-term libre licence that finds broad favour + across the whole libre/open font community. The deliberation during the + past months has been on how to licence the Ubuntu Font Family in the + short-term, while knowingly encouraging everyone to pursue a long-term + goal. + * [13]Copyright assignment will be required so that the Ubuntu Font + Family's licensing can be progressively expanded to one (or more) + licences, as best practice continues to evolve within the + libre/open font community. + * Canonical will support and fund legal work on libre font licensing. + It is recognised that the cost and time commitments required are + likely to be significant. We invite other capable parties to join + in supporting this activity. + + The GPL version 3 (GPLv3) will be used for Ubuntu Font Family build + scripts and the CC-BY-SA for associated documentation and non-font + content: all items which do not end up embedded in general works and + documents. + +Ubuntu Font Licence + + For the short-term only, the initial licence is the [14]Ubuntu Font + License (UFL). This is loosely inspired from the work on the SIL + OFL 1.1, and seeks to clarify the issues that arose during discussions + and legal review, from the perspective of the backers, Canonical Ltd. + Those already using established licensing models such as the GPL, OFL + or Creative Commons licensing should have no worries about continuing + to use them. The Ubuntu Font Licence (UFL) and the SIL Open Font + Licence (SIL OFL) are not identical and should not be confused with + each other. Please read the terms precisely. The UFL is only intended + as an interim license, and the overriding aim is to support the + creation of a more suitable and generic libre font licence. As soon as + such a licence is developed, the Ubuntu Font Family will migrate to + itβ€”made possible by copyright assignment in the interium. Between the + OFL 1.1, and the UFL 1.0, the following changes are made to produce the + Ubuntu Font Licence: + * Clarification: + + 1. Document embedding (see [15]embedding section above). + 2. Apply at point of distribution, instead of receipt + 3. Author vs. copyright holder disambiguation (type designers are + authors, with the copyright holder normally being the funder) + 4. Define "Propagate" (for internationalisation, similar to the GPLv3) + 5. Define "Substantially Changed" + 6. Trademarks are explicitly not transferred + 7. Refine renaming requirement + + Streamlining: + 8. Remove "not to be sold separately" clause + 9. Remove "Reserved Font Name(s)" declaration + + A visual demonstration of how these points were implemented can be + found in the accompanying coloured diff between SIL OFL 1.1 and the + Ubuntu Font Licence 1.0: [16]ofl-1.1-ufl-1.0.diff.html + +References + + 1. http://font.ubuntu.com/ + 2. http://www.canonical.com/ + 3. http://www.daltonmaag.com/ + 4. http://en.wikipedia.org/wiki/Network_effect + 5. http://scripts.sil.org/ + 6. http://openfontlibrary.org/ + 7. http://www.softwarefreedom.org/ + 8. http://code.google.com/webfonts + 9. http://www.gnu.org/licenses/gpl-faq.html#CanIUseGPLToolsForNF + 10. http://scripts.sil.org/OFL_web + 11. http://scripts.sil.org/OFL-FAQ_web + 12. http://www.gnu.org/licenses/gpl-faq.html#FontException + 13. https://launchpad.net/~uff-contributors + 14. http://font.ubuntu.com/ufl/ubuntu-font-licence-1.0.txt + 15. http://font.ubuntu.com/ufl/FAQ.html#embedding + 16. http://font.ubuntu.com/ufl/ofl-1.1-ufl-1.0.diff.html diff --git a/indra/newview/fonts/LICENCE.txt b/indra/newview/fonts/LICENCE.txt new file mode 100644 index 0000000000..ae78a8f94e --- /dev/null +++ b/indra/newview/fonts/LICENCE.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/indra/newview/fonts/README.txt b/indra/newview/fonts/README.txt new file mode 100644 index 0000000000..292d4ade69 --- /dev/null +++ b/indra/newview/fonts/README.txt @@ -0,0 +1,15 @@ + ---------------------- + Ubuntu Font Family + ====================== + +The Ubuntu Font Family are a set of matching new libre/open fonts in +development during 2010--2011. The development is being funded by +Canonical Ltd on behalf the wider Free Software community and the +Ubuntu project. The technical font design work and implementation is +being undertaken by Dalton Maag. + +Both the final font Truetype/OpenType files and the design files used +to produce the font family are distributed under an open licence and +you are expressly encouraged to experiment, modify, share and improve. + + http://font.ubuntu.com/ diff --git a/indra/newview/fonts/TRADEMARKS.txt b/indra/newview/fonts/TRADEMARKS.txt new file mode 100644 index 0000000000..d34265bc85 --- /dev/null +++ b/indra/newview/fonts/TRADEMARKS.txt @@ -0,0 +1,4 @@ +Ubuntu and Canonical are registered trademarks of Canonical Ltd. + +The licence accompanying these works does not grant any rights +under trademark law and all such rights are reserved. diff --git a/indra/newview/fonts/Ubuntu-B.ttf b/indra/newview/fonts/Ubuntu-B.ttf new file mode 100644 index 0000000000..7639344e7d Binary files /dev/null and b/indra/newview/fonts/Ubuntu-B.ttf differ diff --git a/indra/newview/fonts/Ubuntu-BI.ttf b/indra/newview/fonts/Ubuntu-BI.ttf new file mode 100644 index 0000000000..337b8a88b2 Binary files /dev/null and b/indra/newview/fonts/Ubuntu-BI.ttf differ diff --git a/indra/newview/fonts/Ubuntu-L.ttf b/indra/newview/fonts/Ubuntu-L.ttf new file mode 100644 index 0000000000..c3b0fa46df Binary files /dev/null and b/indra/newview/fonts/Ubuntu-L.ttf differ diff --git a/indra/newview/fonts/Ubuntu-LI.ttf b/indra/newview/fonts/Ubuntu-LI.ttf new file mode 100644 index 0000000000..d65e8eab3a Binary files /dev/null and b/indra/newview/fonts/Ubuntu-LI.ttf differ diff --git a/indra/newview/fonts/Ubuntu-M.ttf b/indra/newview/fonts/Ubuntu-M.ttf new file mode 100644 index 0000000000..387ef03fc2 Binary files /dev/null and b/indra/newview/fonts/Ubuntu-M.ttf differ diff --git a/indra/newview/fonts/Ubuntu-MI.ttf b/indra/newview/fonts/Ubuntu-MI.ttf new file mode 100644 index 0000000000..5b92fcb5d3 Binary files /dev/null and b/indra/newview/fonts/Ubuntu-MI.ttf differ diff --git a/indra/newview/fonts/Ubuntu-R.ttf b/indra/newview/fonts/Ubuntu-R.ttf new file mode 100644 index 0000000000..a464464406 Binary files /dev/null and b/indra/newview/fonts/Ubuntu-R.ttf differ diff --git a/indra/newview/fonts/Ubuntu-RI.ttf b/indra/newview/fonts/Ubuntu-RI.ttf new file mode 100644 index 0000000000..0e0955918b Binary files /dev/null and b/indra/newview/fonts/Ubuntu-RI.ttf differ diff --git a/indra/newview/fonts/copyright.txt b/indra/newview/fonts/copyright.txt new file mode 100644 index 0000000000..3a45d712e9 --- /dev/null +++ b/indra/newview/fonts/copyright.txt @@ -0,0 +1,5 @@ +Copyright 2010 Canonical Ltd. + +This Font Software is licensed under the Ubuntu Font Licence, Version +1.0. https://launchpad.net/ubuntu-font-licence + diff --git a/indra/newview/lggbeamcolormapfloater.cpp b/indra/newview/lggbeamcolormapfloater.cpp index 3ae9facb32..a8feccd58b 100644 --- a/indra/newview/lggbeamcolormapfloater.cpp +++ b/indra/newview/lggbeamcolormapfloater.cpp @@ -3,21 +3,15 @@ * @brief Floater for beam colors * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + #include "llviewerprecompiledheaders.h" #include "lggbeamcolormapfloater.h" diff --git a/indra/newview/lggbeamcolormapfloater.h b/indra/newview/lggbeamcolormapfloater.h index 79e74ce61f..8c17bf24a5 100644 --- a/indra/newview/lggbeamcolormapfloater.h +++ b/indra/newview/lggbeamcolormapfloater.h @@ -3,21 +3,15 @@ * @brief Floater for beam colors * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + #include "llviewerprecompiledheaders.h" #include "llagentdata.h" diff --git a/indra/newview/lggbeammapfloater.cpp b/indra/newview/lggbeammapfloater.cpp index c7e300bc34..f27150db9d 100644 --- a/indra/newview/lggbeammapfloater.cpp +++ b/indra/newview/lggbeammapfloater.cpp @@ -3,20 +3,14 @@ * @brief Floater for beam shapes * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + #include "llviewerprecompiledheaders.h" #include "lggbeammapfloater.h" diff --git a/indra/newview/lggbeammapfloater.h b/indra/newview/lggbeammapfloater.h index d3aab6b293..29320cb414 100644 --- a/indra/newview/lggbeammapfloater.h +++ b/indra/newview/lggbeammapfloater.h @@ -3,19 +3,12 @@ * @brief Floater for beam shapes * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ #include "llviewerprecompiledheaders.h" diff --git a/indra/newview/lggbeammaps.cpp b/indra/newview/lggbeammaps.cpp index 9fb81b5e6f..41aa3cb54b 100644 --- a/indra/newview/lggbeammaps.cpp +++ b/indra/newview/lggbeammaps.cpp @@ -3,21 +3,15 @@ * @brief Manager for beam shapes * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + #include "llviewerprecompiledheaders.h" #include "lggbeammaps.h" #include "lggbeamscolors.h" diff --git a/indra/newview/lggbeammaps.h b/indra/newview/lggbeammaps.h index d2b487a05c..59ef427a65 100644 --- a/indra/newview/lggbeammaps.h +++ b/indra/newview/lggbeammaps.h @@ -3,22 +3,14 @@ * @brief Manager for Beam Shapes * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ - #include "llhudeffecttrail.h" #include "llviewerprecompiledheaders.h" #include "lggbeamscolors.h" diff --git a/indra/newview/lggbeamscolors.cpp b/indra/newview/lggbeamscolors.cpp index 9a1244c2bc..5c65882d46 100644 --- a/indra/newview/lggbeamscolors.cpp +++ b/indra/newview/lggbeamscolors.cpp @@ -3,21 +3,15 @@ * @brief Manager for beams colors * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + //////////////////////////////////////////////////// //////////////DATA TYPE///////////////////////////// diff --git a/indra/newview/lggbeamscolors.h b/indra/newview/lggbeamscolors.h index 24a4581486..c01020ea5f 100644 --- a/indra/newview/lggbeamscolors.h +++ b/indra/newview/lggbeamscolors.h @@ -3,20 +3,14 @@ * @brief Manager for beams colors * @copyright Copyright (c) 2011 LordGregGreg Back * - * 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; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 + * This code is free. It comes + * WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can redistribute it + * and/or modify it under the terms of the Do What The Fuck You Want + * To Public License, Version 2, as published by Sam Hocevar. See + * http://sam.zoy.org/wtfpl/COPYING for more details. */ + #ifndef LGGBEAMCOLORDATA #define LGGBEAMCOLORDATA diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index fa10ae8835..9fc5d00599 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -343,7 +343,7 @@ LLAgent::~LLAgent() //----------------------------------------------------------------------------- void LLAgent::onAppFocusGained() { - if (CAMERA_MODE_MOUSELOOK == gAgentCamera.getCameraMode()) + if (CAMERA_MODE_MOUSELOOK == gAgentCamera.getCameraMode() && gSavedSettings.getBOOL("FSLeaveMouselookOnFocus")) { gAgentCamera.changeCameraToDefault(); LLToolMgr::getInstance()->clearSavedTool(); @@ -1079,18 +1079,11 @@ F32 LLAgent::clampPitchToLimits(F32 angle) LLVector3 skyward = getReferenceUpVector(); F32 look_down_limit; - F32 look_up_limit = 10.f * DEG_TO_RAD; + F32 look_up_limit = 1.f * DEG_TO_RAD; F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward ); - if (isAgentAvatarValid() && gAgentAvatarp->isSitting()) - { - look_down_limit = 130.f * DEG_TO_RAD; - } - else - { - look_down_limit = 170.f * DEG_TO_RAD; - } + look_down_limit = 179.f * DEG_TO_RAD; // clamp pitch to limits if ((angle >= 0.f) && (angle_from_skyward + angle > look_down_limit)) @@ -3449,7 +3442,7 @@ bool LLAgent::teleportCore(bool is_local) if(TELEPORT_NONE != mTeleportState) { llwarns << "Attempt to teleport when already teleporting." << llendl; - return false; + //return false; //LO - yea, lets not return here, we may be stuck in TP and if we are, letting this go through will get us out; } #if 0 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 342705903b..dcf44cbec7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1570,7 +1570,10 @@ bool LLAppViewer::cleanup() removeCacheFiles("*.tmp"); removeCacheFiles("*.lso"); removeCacheFiles("*.out"); - removeCacheFiles("*.dsf"); + if(!gSavedSettings.getBOOL("PhoenixKeepUnpackedCacheFiles")) + { + removeCacheFiles("*.dsf"); + } removeCacheFiles("*.bodypart"); removeCacheFiles("*.clothing"); diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index d7f8d3ef4d..17f3e0f937 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -171,7 +171,7 @@ BOOL LLAvatarListItem::postBuild() mInfoBtn = getChild("info_btn"); mProfileBtn = getChild("profile_btn"); - mInfoBtn->setVisible(false); + mInfoBtn->setVisible(true); // changed from false to have the info button always shown -WoLf mInfoBtn->setClickedCallback(boost::bind(&LLAvatarListItem::onInfoBtnClick, this)); mProfileBtn->setVisible(false); @@ -238,7 +238,7 @@ void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask) { getChildView("hovered_icon")->setVisible( false); - mInfoBtn->setVisible(false); +// mInfoBtn->setVisible(false); // commented out to have the info button always shown -WoLf mHovered = false; LLPanel::onMouseLeave(x, y, mask); updateChildren(); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index af9b92be79..ea3c21fe27 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -304,12 +304,13 @@ public: { user_name->setValue( LLSD() ); LLAvatarNameCache::get(mAvatarID, - boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2)); + boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2, chat.mChatType)); } else { // If the agent's chat was subject to @shownames=n we should display their anonimized name mFrom = chat.mFromName; + if (chat.mChatType == CHAT_TYPE_IM) mFrom = LLTrans::getString("IMPrefix") + " " + mFrom; user_name->setValue(mFrom); user_name->setToolTip(mFrom); setToolTip(mFrom); @@ -345,12 +346,13 @@ public: user_name->appendText(" - " + username, FALSE, style_params_name); } */ - LLAvatarNameCache::get(mAvatarID, boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2)); + LLAvatarNameCache::get(mAvatarID, boost::bind(&LLChatHistoryHeader::onAvatarNameCache, this, _1, _2, chat.mChatType)); } else { // If the agent's chat was subject to @shownames=n we should display their anonimized name mFrom = chat.mFromName; + if (chat.mChatType == CHAT_TYPE_IM) mFrom = LLTrans::getString("IMPrefix") + " " + mFrom; user_name->setValue(mFrom); user_name->setToolTip(mFrom); setToolTip(mFrom); @@ -470,12 +472,13 @@ public: } } - void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name) + void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name, EChatType chat_type) { mFrom = av_name.mDisplayName; + if (chat_type == CHAT_TYPE_IM) mFrom = LLTrans::getString("IMPrefix") + " " + mFrom; LLTextBox* user_name = getChild("user_name"); - user_name->setValue( LLSD(av_name.mDisplayName ) ); + user_name->setValue( LLSD(mFrom) ); user_name->setToolTip( av_name.mUsername ); if (gSavedSettings.getBOOL("NameTagShowUsernames") && LLAvatarNameCache::useDisplayNames()) @@ -955,6 +958,12 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL // reset the style parameter for the header only -AO link_params.color(header_name_color); link_params.readonly_color(header_name_color); + + if (chat.mChatType == CHAT_TYPE_IM) + { + mEditor->appendText(LLTrans::getString("IMPrefix") + " ", false, link_params); + } + if ((gSavedSettings.getBOOL("NameTagShowUsernames")) && (gSavedSettings.getBOOL("UseDisplayNames"))) { checkDisplayName(); @@ -976,7 +985,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL } else { - mEditor->appendText(chat.mFromName + delimiter, false, style_params); + if (chat.mChatType == CHAT_TYPE_IM) + { + mEditor->appendText(LLTrans::getString("IMPrefix") + " " + chat.mFromName + delimiter, false, style_params); + } + else + { + mEditor->appendText(chat.mFromName + delimiter, false, style_params); + } } } } @@ -990,7 +1006,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL LLDate new_message_time = LLDate::now(); - if (mLastFromName == chat.mFromName + std::string tmp_from_name(chat.mFromName); + if (chat.mChatType == CHAT_TYPE_IM) tmp_from_name = LLTrans::getString("IMPrefix") + " " + tmp_from_name; + + if (mLastFromName == tmp_from_name && mLastFromID == chat.mFromID && mLastMessageTime.notNull() && (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0 @@ -1031,7 +1050,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL widget_associated_text += chat.mFromName + delimiter; mEditor->appendWidget(p, widget_associated_text, false); + mLastFromName = chat.mFromName; + if (chat.mChatType == CHAT_TYPE_IM) mLastFromName = LLTrans::getString("IMPrefix") + " " + mLastFromName; mLastFromID = chat.mFromID; mLastMessageTime = new_message_time; mIsLastMessageFromLog = message_from_log; diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index f0a5cd872d..776cb28afd 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -72,6 +72,7 @@ LLFloaterMap::LLFloaterMap(const LLSD& key) mTextBoxNorthEast(NULL), mTextBoxNorthWest(NULL), mTextBoxSouthWest(NULL), + mPopupMenu(NULL), mMap(NULL) { } @@ -102,6 +103,22 @@ BOOL LLFloaterMap::postBuild() mTextBoxSouthWest = getChild ("floater_map_southwest"); mTextBoxNorthWest = getChild ("floater_map_northwest"); + // + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + + registrar.add("Minimap.Zoom", boost::bind(&LLFloaterMap::handleZoom, this, _2)); + registrar.add("Minimap.Tracker", boost::bind(&LLFloaterMap::handleStopTracking, this, _2)); + + registrar.add("Minimap.Mark", boost::bind(&LLFloaterMap::handleMark, this, _2)); + registrar.add("Minimap.ClearMarks", boost::bind(&LLFloaterMap::handleClearMarks, this)); + + mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + if (mPopupMenu && !LLTracker::isTracking(0)) + { + mPopupMenu->setItemEnabled ("Stop Tracking", false); + } + // + stretchMiniMap(getRect().getWidth() - MAP_PADDING_LEFT - MAP_PADDING_RIGHT ,getRect().getHeight() - MAP_PADDING_TOP - MAP_PADDING_BOTTOM); @@ -145,9 +162,22 @@ BOOL LLFloaterMap::handleDoubleClick( S32 x, S32 y, MASK mask ) // If DoubleClickTeleport is on, double clicking the minimap will teleport there gAgent.teleportViaLocationLookAt(pos_global); } - else if (gSavedSettings.getBOOL("DoubleClickShowWorldMap")) + else if (gSavedSettings.getBOOL("DoubleClickShowWorldMap")) + { + LLFloaterReg::showInstance("world_map"); + } + return TRUE; +} + +BOOL LLFloaterMap::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + mMap->saveClosestAgentAtLastRightClick(); + + if (mPopupMenu) { - LLFloaterReg::showInstance("world_map"); + mPopupMenu->buildDrawLabels(); + mPopupMenu->updateParent(LLMenuGL::sMenuContainer); + LLMenuGL::showPopup(this, mPopupMenu, x, y); } return TRUE; } @@ -221,6 +251,12 @@ void LLFloaterMap::draw() setMouseOpaque(TRUE); getDragHandle()->setMouseOpaque(TRUE); } + + if (LLTracker::isTracking(0)) + { + mPopupMenu->setItemEnabled ("Stop Tracking", true); + } + LLFloater::draw(); } @@ -301,3 +337,22 @@ void LLFloaterMap::setMinimized(BOOL b) setTitle(""); } } + +void LLFloaterMap::handleMark(const LLSD& userdata) +{ + mMap->setAvatarMark(userdata); +} + +void LLFloaterMap::handleClearMarks() +{ + mMap->clearAvatarMarks(); +} + +void LLFloaterMap::handleStopTracking (const LLSD& userdata) +{ + if (mPopupMenu) + { + mPopupMenu->setItemEnabled ("Stop Tracking", false); + LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL)); + } +} diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h index 5cf66a594b..8349fe685f 100644 --- a/indra/newview/llfloatermap.h +++ b/indra/newview/llfloatermap.h @@ -29,6 +29,7 @@ #include "llfloater.h" +class LLMenuGL; class LLNetMap; class LLTextBox; @@ -43,6 +44,7 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask ); + /*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask ); /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); /*virtual*/ void draw(); /*virtual*/ void onFocusLost(); @@ -52,11 +54,16 @@ public: private: void handleZoom(const LLSD& userdata); + void handleStopTracking (const LLSD& userdata); void setDirectionPos( LLTextBox* text_box, F32 rotation ); void updateMinorDirections(); + void handleMark(const LLSD& userdata); + void handleClearMarks(); void stretchMiniMap(S32 width,S32 height); + LLMenuGL* mPopupMenu; + LLTextBox* mTextBoxEast; LLTextBox* mTextBoxNorth; LLTextBox* mTextBoxWest; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 7792b3fb40..86e378d767 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -940,17 +940,25 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data) // static void LLPanelRegionDebugInfo::onClickRestart(void* data) { + // + LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data; + LLSD delay; + + if (self) delay = self->getChild("restart_delay")->getValue(); + else delay = LLSD(120); + // + LLNotificationsUtil::add("ConfirmRestart", LLSD(), LLSD(), - boost::bind(&LLPanelRegionDebugInfo::callbackRestart, (LLPanelRegionDebugInfo*)data, _1, _2)); + boost::bind(&LLPanelRegionDebugInfo::callbackRestart, (LLPanelRegionDebugInfo*)data, _1, _2, delay)); } -bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLSD& response) +bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLSD& response, const LLSD& seconds) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if (option != 0) return false; strings_t strings; - strings.push_back("120"); + strings.push_back(seconds.asString()); LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings); return false; diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index c0758fa92d..4f33e35db5 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -194,7 +194,7 @@ protected: static void onClickTopColliders(void*); static void onClickTopScripts(void*); static void onClickRestart(void* data); - bool callbackRestart(const LLSD& notification, const LLSD& response); + bool callbackRestart(const LLSD& notification, const LLSD& response, const LLSD& seconds); // Ansariel, added seconds for FIRE-1073 static void onClickCancelRestart(void* data); private: diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index 07e406f69c..bd20fdb7bd 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -383,7 +383,7 @@ void LLGroupActions::refresh_notices() //-TT - Patch : ShowGroupFloaters if (!gSavedSettings.getBOOL("ShowGroupFloaters")) { -//-TT +//-TT // AO: We don't change modals on people unless they manually request this //LLSideTray::getInstance()->showPanel("panel_group_info_sidetray", params); //-TT - Patch : ShowGroupFloaters diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp index eeb1e35f51..f0bd99c864 100644 --- a/indra/newview/llimhandler.cpp +++ b/indra/newview/llimhandler.cpp @@ -72,28 +72,29 @@ void LLIMHandler::updatePhoenixLogImToChatConsole(const LLSD &data) PhoenixLogImToChatConsole = data.asBoolean(); } +// better DN lookups +//void LLIMHandler::lookupDisplayNames(const LLUUID& agent_id) +//{ +// LLAvatarNameCache::get(agent_id, boost::bind(&LLIMHandler::onAvatarNameCache, this, _1, _2)); +//} +// +//void LLIMHandler::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name) +//{ +// mAvatarName = av_name; +//} +// +//bool LLIMHandler::checkDisplayName() +//{ +// for (int i = 0; i <=20; i++) +// { +// if (mAvatarName.mDisplayName.empty()) +// ms_sleep(50); +// else +// return true; +// } +// return false; +//} -void LLIMHandler::lookupDisplayNames(const LLUUID& agent_id) -{ - LLAvatarNameCache::get(agent_id, boost::bind(&LLIMHandler::onAvatarNameCache, this, _1, _2)); -} - -void LLIMHandler::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name) -{ - mAvatarName = av_name; -} - -bool LLIMHandler::checkDisplayName() -{ - for (int i = 0; i <=20; i++) - { - if (mAvatarName.mDisplayName.empty()) - ms_sleep(50); - else - return true; - } - return false; -} //-------------------------------------------------------------------------- @@ -118,49 +119,10 @@ bool LLIMHandler::processNotification(const LLSD& notify) // Filter notifications with empty ID and empty message if (substitutions["FROM_ID"].asString() == "" && substitutions["MESSAGE"].asString() == "") return false; - lookupDisplayNames(LLUUID(substitutions["FROM_ID"].asString())); - - std::string senderName; - std::string message(substitutions["MESSAGE"].asString()); - std::string delimiter = ": "; - std::string prefix = message.substr(0, 4); - LLStringUtil::toLower(prefix); - - // irc styled messages - if (prefix == "/me " || prefix == "/me'") - { - delimiter = LLStringUtil::null; - message = message.substr(3); - } - - if ((gSavedSettings.getBOOL("NameTagShowUsernames")) && (gSavedSettings.getBOOL("UseDisplayNames"))) - { - checkDisplayName(); - senderName = mAvatarName.getCompleteName(); - } - else if (gSavedSettings.getBOOL("UseDisplayNames")) - { - checkDisplayName(); - senderName = mAvatarName.mDisplayName; - } - else - { - checkDisplayName(); - senderName = mAvatarName.getLegacyName(); - } - - if (rlv_handler_t::isEnabled() && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - { - senderName = RlvStrings::getAnonym(senderName); - } - - gConsole->addConsoleLine("IM: " + senderName + delimiter + message, LLUIColorTable::instance().getColor("AgentChatColor")); - - LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance("nearby_chat", LLSD()); - gConsole->setVisible(!nearby_chat->getVisible()); + // Ansarial, replace long lock of local DN handling with the following call + LLAvatarNameCache::get(LLUUID(substitutions["FROM_ID"].asString()), boost::bind(&LLIMHandler::onAvatarNameLookup, this, _1, _2, substitutions["MESSAGE"].asString())); } } - else { // arrange a channel on a screen @@ -220,4 +182,42 @@ void LLIMHandler::onDeleteToast(LLToast* toast) //-------------------------------------------------------------------------- +void LLIMHandler::onAvatarNameLookup(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& message_str) +//Ansariel Hiller +{ + std::string senderName; + std::string message(message_str); + std::string delimiter = ": "; + std::string prefix = message.substr(0, 4); + LLStringUtil::toLower(prefix); + // irc styled messages + if (prefix == "/me " || prefix == "/me'") + { + delimiter = LLStringUtil::null; + message = message.substr(3); + } + + if ((gSavedSettings.getBOOL("NameTagShowUsernames")) && (gSavedSettings.getBOOL("UseDisplayNames"))) + { + senderName = av_name.getCompleteName(); + } + else if (gSavedSettings.getBOOL("UseDisplayNames")) + { + senderName = av_name.mDisplayName; + } + else + { + senderName = av_name.getLegacyName(); + } + + if (rlv_handler_t::isEnabled() && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) + { + senderName = RlvStrings::getAnonym(senderName); + } + + gConsole->addConsoleLine("IM: " + senderName + delimiter + message, LLUIColorTable::instance().getColor("AgentChatColor")); + + LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance("nearby_chat", LLSD()); + gConsole->setVisible(!nearby_chat->getVisible()); +} diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 489f87f024..0fbfea0239 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -809,8 +809,26 @@ bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from, llwarns << "session " << session_id << "does not exist " << llendl; return false; } + + // Forward IM to nearby chat if wanted + std::string timestr = LLLogChat::timestamp(false); + session->addMessage(from, from_id, utf8_text, timestr); //might want to add date separately - session->addMessage(from, from_id, utf8_text, LLLogChat::timestamp(false)); //might want to add date separately + static LLCachedControl show_im_in_chat(gSavedSettings, "FSShowIMInChatHistory"); + if (show_im_in_chat) + { + LLChat chat; + chat.mChatStyle = CHAT_STYLE_NORMAL; + chat.mChatType = CHAT_TYPE_IM; + chat.mFromID = from_id; + chat.mFromName = from; + chat.mSourceType = CHAT_SOURCE_AGENT; + chat.mText = utf8_text; + chat.mTimeStr = timestr; + LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance("nearby_chat", LLSD()); + nearby_chat->addMessage(chat, true, LLSD()); + } + // return true; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e5c5ea24b0..08548e3a62 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4386,7 +4386,7 @@ void LLObjectBridge::openItem() { // object double-click action is to wear/unwear object performAction(getInventoryModel(), - get_is_item_worn(mUUID) ? "detach" : "attach"); + get_is_item_worn(mUUID) ? "detach" : gSavedSettings.getBOOL("PhoenixDoubleClickAddInventoryObjects") ? "wear_add" : "attach"); } std::string LLObjectBridge::getLabelSuffix() const diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 3e99095ee0..1b9f0955f7 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -575,6 +575,18 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im) bool has_name = name_and_text[IDX_NAME].matched; std::string name = name_and_text[IDX_NAME]; + // Ansariel: Handle the case an IM was stored in nearby chat history + if (name == "IM:") + { + U32 divider_pos = stuff.find(NAME_TEXT_DIVIDER, 3); + if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length())) + { + im[IM_FROM] = stuff.substr(0, divider_pos); + im[IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length()); + return true; + } + } + //we don't need a name/text separator if (has_name && name.length() && name[name.length()-1] == ':') { diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 9cdc092257..5e213f8310 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -56,6 +56,7 @@ #include "llhudrender.h" #include "llworld.h" #include "v2math.h" +#include "llviewerregion.h" #include "llvoavatar.h" @@ -821,6 +822,15 @@ void LLManipScale::drag( S32 x, S32 y ) gAgentCamera.clearFocusObject(); } +// patch up for mesh, to be removed during real mesh merge -Zi +// also affects many max_prim_scale factors. Check the changeset 4e777db5f7e4 +F32 llmanipscale_max_prim_scale() +{ + if(gAgent.getRegion()->getCapability("GetMesh").empty()) + return DEFAULT_MAX_PRIM_SCALE; + return 64.f; +} + // Scale around the void LLManipScale::dragCorner( S32 x, S32 y ) { @@ -948,8 +958,8 @@ void LLManipScale::dragCorner( S32 x, S32 y ) mInSnapRegime = FALSE; } - F32 max_scale_factor = DEFAULT_MAX_PRIM_SCALE / MIN_PRIM_SCALE; - F32 min_scale_factor = MIN_PRIM_SCALE / DEFAULT_MAX_PRIM_SCALE; + F32 max_scale_factor = llmanipscale_max_prim_scale() / MIN_PRIM_SCALE; + F32 min_scale_factor = MIN_PRIM_SCALE / llmanipscale_max_prim_scale(); // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale for (LLObjectSelection::iterator iter = mObjectSelection->begin(); @@ -961,7 +971,7 @@ void LLManipScale::dragCorner( S32 x, S32 y ) { const LLVector3& scale = selectNode->mSavedScale; - F32 cur_max_scale_factor = llmin( DEFAULT_MAX_PRIM_SCALE / scale.mV[VX], DEFAULT_MAX_PRIM_SCALE / scale.mV[VY], DEFAULT_MAX_PRIM_SCALE / scale.mV[VZ] ); + F32 cur_max_scale_factor = llmin( llmanipscale_max_prim_scale() / scale.mV[VX], llmanipscale_max_prim_scale() / scale.mV[VY], llmanipscale_max_prim_scale() / scale.mV[VZ] ); max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); @@ -1258,7 +1268,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto F32 denom = axis * dir_local; F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters - F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); + F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, llmanipscale_max_prim_scale()); // propagate scale constraint back to position offset desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position @@ -1958,7 +1968,7 @@ F32 LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const max_extent = bbox_extents.mV[i]; } } - max_scale_factor = bbox_extents.magVec() * DEFAULT_MAX_PRIM_SCALE / max_extent; + max_scale_factor = bbox_extents.magVec() * llmanipscale_max_prim_scale() / max_extent; if (getUniform()) { @@ -1973,7 +1983,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const { LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); bbox_extents.abs(); - F32 min_extent = DEFAULT_MAX_PRIM_SCALE; + F32 min_extent = llmanipscale_max_prim_scale(); for (U32 i = VX; i <= VZ; i++) { if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 06088ae40a..b4154ca3d0 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -291,6 +291,16 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args) { from_name = av_name.getCompleteName(); } + + // Ansariel: Handle IMs in nearby chat + if (gSavedSettings.getBOOL("FSShowIMInChatHistory") && chat.mChatType == CHAT_TYPE_IM) + { + if (gSavedSettings.getBOOL("FSLogIMInChatHistory")) + { + from_name = "IM: " + from_name; + } + else return; + } } LLLogChat::saveHistory("chat", from_name, chat.mFromID, chat.mText); @@ -566,6 +576,7 @@ void LLNearbyChat::loadHistory() std::list::const_iterator it = history.begin(); while (it != history.end()) { + bool im_type = false; const LLSD& msg = *it; std::string from = msg[IM_FROM]; @@ -576,6 +587,17 @@ void LLNearbyChat::loadHistory() } else { + // Ansariel: Strip IM prefix so we can properly + // retrieve the UUID in case we got a + // saved IM in nearby chat history. + std::string im_prefix = "IM: "; + size_t im_prefix_found = from.find(im_prefix); + if (im_prefix_found != std::string::npos) + { + from = from.substr(im_prefix.length()); + im_type = true; + } + std::string legacy_name = gCacheName->buildLegacyName(from); gCacheName->getUUID(legacy_name, from_id); } @@ -587,6 +609,8 @@ void LLNearbyChat::loadHistory() chat.mTimeStr = msg[IM_TIME].asString(); chat.mChatStyle = CHAT_STYLE_HISTORY; + if (im_type) chat.mChatType = CHAT_TYPE_IM; + chat.mSourceType = CHAT_SOURCE_AGENT; if (from_id.isNull() && SYSTEM_FROM == from) { diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index a093170160..fd140aaa80 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -617,7 +617,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) } else if (chat_msg.mSourceType == CHAT_SOURCE_OBJECT) { - std::string senderName(chat_msg.mFromName); std::string prefix = chat_msg.mText.substr(0, 4); LLStringUtil::toLower(prefix); @@ -644,6 +643,16 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) } std::string message = irc_me ? chat_msg.mText.substr(3) : chat_msg.mText; +// console support + consoleChat = senderName + delimiter + message; + LLColor4 chatcolor; + LLViewerChat::getChatColor(chat_msg, chatcolor); + gConsole->addConsoleLine(consoleChat, chatcolor); +// + } + else + { + consoleChat = chat_msg.mText; //// Get the display name of the sender if required //if (!chat_msg.mRlvNamesFiltered) @@ -659,16 +668,8 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) // senderName = mDisplayName; // } //} - - consoleChat = senderName + delimiter + message; - LLColor4 chatcolor; - LLViewerChat::getChatColor(chat_msg, chatcolor); - gConsole->addConsoleLine(consoleChat, chatcolor); - gConsole->setVisible(!nearby_chat->getVisible()); - } - else - { - consoleChat = chat_msg.mText; + // + ///consoleChat = senderName + delimiter + message; LLColor4 chatcolor; LLViewerChat::getChatColor(chat_msg, chatcolor); @@ -804,13 +805,53 @@ void LLNearbyChatHandler::onAvatarNameLookup(const LLUUID& agent_id, const LLAva /* void LLNearbyChatHandler::lookupDisplayNames(const LLChat& chat) { - // resolve display names if necessary - if (gSavedSettings.getBOOL("UseDisplayNames")) + std::string consoleChat; + std::string senderName(chat_msg.mFromName); + std::string prefix = chat_msg.mText.substr(0, 4); + LLStringUtil::toLower(prefix); + + //IRC styled /me messages. + bool irc_me = prefix == "/me " || prefix == "/me'"; + + // Delimiter after a name in header copy/past and in plain text mode + std::string delimiter = ": "; + std::string shout = LLTrans::getString("shout"); + std::string whisper = LLTrans::getString("whisper"); + if (chat_msg.mChatType == CHAT_TYPE_SHOUT || + chat_msg.mChatType == CHAT_TYPE_WHISPER || + chat_msg.mText.compare(0, shout.length(), shout) == 0 || + chat_msg.mText.compare(0, whisper.length(), whisper) == 0) { - mDisplayName=chat.mFromName; - mDisplayName_Username=chat.mFromName; - LLAvatarNameCache::get(chat.mFromID,boost::bind(&LLNearbyChatHandler::onAvatarNameCache, this, _1, _2)); + delimiter = " "; } + + // Don't add any delimiter after name in irc styled messages + if (irc_me || chat_msg.mChatStyle == CHAT_STYLE_IRC) + { + delimiter = LLStringUtil::null; + } + + std::string message = irc_me ? chat_msg.mText.substr(3) : chat_msg.mText; + + // Get the display name of the sender if required + if (!chat_msg.mRlvNamesFiltered) + { + if ((gSavedSettings.getBOOL("NameTagShowUsernames")) && (gSavedSettings.getBOOL("UseDisplayNames"))) + { + senderName = av_name.getCompleteName(); + } + else if (gSavedSettings.getBOOL("UseDisplayNames")) + { + senderName = av_name.mDisplayName; + } + } + + consoleChat = senderName + delimiter + message; + LLColor4 chatcolor; + LLViewerChat::getChatColor(chat_msg, chatcolor); + gConsole->addConsoleLine(consoleChat, chatcolor); + LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance("nearby_chat", LLSD()); + gConsole->setVisible(!nearby_chat->getVisible()); } void LLNearbyChatHandler::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name) diff --git a/indra/newview/llnearbychathandler.h b/indra/newview/llnearbychathandler.h index 942bb070e5..6030d6934f 100644 --- a/indra/newview/llnearbychathandler.h +++ b/indra/newview/llnearbychathandler.h @@ -49,14 +49,13 @@ protected: virtual void onDeleteToast(LLToast* toast); virtual void initChannel(); - void lookupDisplayNames(const LLChat& chat); - void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name); +// replaced local DN handling with onAvatarNameLookup +// void lookupDisplayNames(const LLChat& chat); +// void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name); void onAvatarNameLookup(const LLUUID& agent_id, const LLAvatarName& av_name, const LLChat& chat_msg); - bool checkDisplayName(); +// bool checkDisplayName(); BOOL PhoenixUseNearbyChatConsole; - std::string mDisplayName; - std::string mDisplayName_Username; }; } diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 167c2a846f..8a8c976eb4 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -88,6 +88,9 @@ const S32 MOUSE_DRAG_SLOP = 2; // How far the mouse needs to move before we thi const F32 WIDTH_PIXELS = 2.f; const S32 CIRCLE_STEPS = 100; +std::map LLNetMap::sAvatarMarksMap; // Ansariel + + LLNetMap::LLNetMap (const Params & p) : LLUICtrl (p), mBackgroundColor (p.bg_color()), @@ -128,7 +131,10 @@ BOOL LLNetMap::postBuild() registrar.add("Minimap.Zoom", boost::bind(&LLNetMap::handleZoom, this, _2)); registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2)); - + // + registrar.add("Minimap.Mark", boost::bind(&LLNetMap::handleMark, this, _2)); + registrar.add("Minimap.ClearMarks", boost::bind(&LLNetMap::handleClearMarks, this)); + // mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); return TRUE; } @@ -430,6 +436,12 @@ void LLNetMap::draw() isHeightUnknown = false; } } + + // Mark Avatars with special colors - Ansariel + if (LLNetMap::sAvatarMarksMap.find(uuid) != LLNetMap::sAvatarMarksMap.end()) + { + color = LLNetMap::sAvatarMarksMap[uuid]; + } } // Ansariel: Moved down here so we can take precise @@ -1024,6 +1036,8 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask ) BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask) { + saveClosestAgentAtLastRightClick(); // Ansariel + if (mPopupMenu) { mPopupMenu->buildDrawLabels(); @@ -1161,3 +1175,36 @@ void LLNetMap::handleStopTracking (const LLSD& userdata) LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL)); } } + +// additional functions +void LLNetMap::handleMark(const LLSD& userdata) +{ + setAvatarMark(userdata); +} + +void LLNetMap::handleClearMarks() +{ + clearAvatarMarks(); +} + +void LLNetMap::setAvatarMark(const LLSD& userdata) +{ + if (mClosestAgentAtLastRightClick.notNull()) + { + // Use the name as color definition name from colors.xml + LLColor4 color = LLUIColorTable::instance().getColor(userdata.asString(), LLColor4::green); + LLNetMap::sAvatarMarksMap[mClosestAgentAtLastRightClick] = color; + llinfos << "Minimap: Marking " << mClosestAgentAtLastRightClick.asString() << " in " << userdata.asString() << llendl; + } +} + +void LLNetMap::saveClosestAgentAtLastRightClick() +{ + mClosestAgentAtLastRightClick = mClosestAgentToCursor; +} + +void LLNetMap::clearAvatarMarks() +{ + LLNetMap::sAvatarMarksMap.clear(); +} +// diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index 6b927d00ca..1d98c51022 100644 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -129,12 +129,19 @@ private: std::string mToolTipMsg; + static std::map sAvatarMarksMap; + public: void setSelected(uuid_vec_t uuids) { gmSelected=uuids; }; + void setAvatarMark(const LLSD& userdata); + void saveClosestAgentAtLastRightClick(); + void clearAvatarMarks(); private: void handleZoom(const LLSD& userdata); void handleStopTracking (const LLSD& userdata); + void handleMark(const LLSD& userdata); + void handleClearMarks(); LLMenuGL* mPopupMenu; uuid_vec_t gmSelected; diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index c42aeb37b9..43faa34a6b 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -163,12 +163,16 @@ protected: virtual void onDeleteToast(LLToast* toast); virtual void initChannel(); - void lookupDisplayNames(const LLUUID& agent_id); - void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name); - bool checkDisplayName(); +// : removed local DN processing in favor of onAvatarNameLookup +// void lookupDisplayNames(const LLUUID& agent_id); +// void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name); +// bool checkDisplayName(); +// LLAvatarName mAvatarName; +// + + void onAvatarNameLookup(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& message_str); BOOL PhoenixLogImToChatConsole; - LLAvatarName mAvatarName; }; /** diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index b7adf2a4a5..4bb4dd9520 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1042,6 +1042,10 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) const LLSD arg = "systemfolderstotop"; setSortBy(arg); } + if (command_name == "add_objects_on_double_click") + { + gSavedSettings.setBOOL("PhoenixDoubleClickAddInventoryObjects",!gSavedSettings.getBOOL("PhoenixDoubleClickAddInventoryObjects")); + } if (command_name == "show_filters") { toggleFindOptions(); @@ -1239,6 +1243,11 @@ BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata) return sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP; } + if (command_name == "add_objects_on_double_click") + { + return gSavedSettings.getBOOL("PhoenixDoubleClickAddInventoryObjects"); + } + return FALSE; } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index a7e1b2a74b..a04442b953 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -430,9 +430,9 @@ void LLPanelObject::getState( ) } // can move or rotate only linked group with move permissions, or sub-object with move and modify perms - BOOL enable_move = objectp->permMove() && !objectp->isAttachment() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); + BOOL enable_move = objectp->permMove() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); BOOL enable_scale = objectp->permMove() && objectp->permModify(); - BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); + BOOL enable_rotate = objectp->permMove() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME )) @@ -1928,18 +1928,28 @@ void LLPanelObject::sendRotation(BOOL btn_down) } } +// patch up for mesh, to be removed during real mesh merge -Zi +F32 llpanelobject_max_prim_scale() +{ + if(gAgent.getRegion()->getCapability("GetMesh").empty()) + return DEFAULT_MAX_PRIM_SCALE; + return 64.f; +} // BUG: Make work with multiple objects void LLPanelObject::sendScale(BOOL btn_down) { if (mObject.isNull()) return; - LLVector3 newscale(mCtrlScaleX->get(), mCtrlScaleY->get(), mCtrlScaleZ->get()); + // make sure not to send larger/smaller values than permitted -Zi + LLVector3 newscale(llclamp(mCtrlScaleX->get(), MIN_PRIM_SCALE, llpanelobject_max_prim_scale()), + llclamp(mCtrlScaleY->get(), MIN_PRIM_SCALE, llpanelobject_max_prim_scale()), + llclamp(mCtrlScaleZ->get(), MIN_PRIM_SCALE, llpanelobject_max_prim_scale())); LLVector3 delta = newscale - mObject->getScale(); - if (delta.magVec() >= 0.0005f) + if (delta.magVec() >= 0.00005f) { - // scale changed by more than 1/2 millimeter + // scale changed by more than 1/20 millimeter // check to see if we aren't scaling the textures // (in which case the tex coord's need to be recomputed) @@ -2007,8 +2017,8 @@ void LLPanelObject::sendPosition(BOOL btn_down) // send only if the position is changed, that is, the delta vector is not zero LLVector3d old_pos_global = mObject->getPositionGlobal(); LLVector3d delta = new_pos_global - old_pos_global; - // moved more than 1/2 millimeter - if (delta.magVec() >= 0.0005f) + // moved more than 1/20 millimeter + if (delta.magVec() >= 0.00005f) { if (mRootObject != mObject) { @@ -2381,9 +2391,9 @@ void LLPanelObject::onPasteSize(const LLSD& data) { if(mClipboardSize.isNull()) return; - mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); - mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); - mClipboardSize.mV[VZ] = llclamp(mClipboardSize.mV[VZ], MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE); + mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], MIN_PRIM_SCALE, llpanelobject_max_prim_scale()); + mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], MIN_PRIM_SCALE, llpanelobject_max_prim_scale()); + mClipboardSize.mV[VZ] = llclamp(mClipboardSize.mV[VZ], MIN_PRIM_SCALE, llpanelobject_max_prim_scale()); mCtrlScaleX->set( mClipboardSize.mV[VX] ); mCtrlScaleY->set( mClipboardSize.mV[VY] ); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index fcdb19d01c..421a4630ad 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1160,8 +1160,7 @@ void LLPanelPeople::updateNearbyList() if (mRadarEnterAlerts.size() > 0) { mRadarFrameCount++; - S32 chan = (S32)gSavedSettings.getU32("RadarAlertChannel"); - if (chan < 0) { chan = chan * -1; } // make sure chan is always positive + S32 chan = gSavedSettings.getS32("RadarAlertChannel"); std::string msg = llformat("/%d %d,%d",chan,mRadarFrameCount,(int)mRadarEnterAlerts.size()); while(mRadarEnterAlerts.size() > 0) { @@ -1171,7 +1170,17 @@ void LLPanelPeople::updateNearbyList() msg = llformat("%s,%s",msg.c_str(),mRadarEnterAlerts.back().asString().c_str()); mRadarEnterAlerts.pop_back(); } - LLNearbyChatBar::sendChatFromViewer(msg,CHAT_TYPE_WHISPER,FALSE); + LLMessageSystem* msgs = gMessageSystem; + msgs->newMessage("ScriptDialogReply"); + msgs->nextBlock("AgentData"); + msgs->addUUID("AgentID", gAgent.getID()); + msgs->addUUID("SessionID", gAgent.getSessionID()); + msgs->nextBlock("Data"); + msgs->addUUID("ObjectID", gAgent.getID()); + msgs->addS32("ChatChannel", chan); + msgs->addS32("ButtonIndex", 1); + msgs->addString("ButtonLabel", msg.c_str()); + gAgent.sendReliableMessage(); } } if (mRadarLeaveAlerts.size() > 0) @@ -1712,6 +1721,15 @@ void LLPanelPeople::onChatButtonClicked() if (group_id.notNull()) LLGroupActions::startIM(group_id); } +void LLPanelPeople::requestRadarChannelAlertSync() +{ + F32 timeNow = gFrameTimeSeconds; + if( (timeNow - RADAR_CHAT_MIN_SPACING)>mRadarLastRequestTime) + { + mRadarLastRequestTime=timeNow; + mRadarAlertRequest = true; + } +} void LLPanelPeople::teleportToAvatar(LLUUID targetAv) // Teleports user to last scanned location of nearby avatar diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index b9d775f8e9..cce839ad20 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -45,9 +45,11 @@ class LLTabContainer; class LLMenuButton; class LLMenuGL; -const U32 MAX_AVATARS_PER_ALERT = 27; // maximum number of UUIDs we can cram into a single channel radar alert message +const U32 MAX_AVATARS_PER_ALERT = 7; // maximum number of UUIDs we can cram into a single channel radar alert message const U32 COARSE_OFFSET_INTERVAL = 31; // seconds after which we query the bridge for a coarse location adjustment const U32 NAMEFORMAT_DISPLAYNAME = 0; +const U32 RADAR_CHAT_MIN_SPACING = 6; //minimum delay between radar chat messages + const U32 NAMEFORMAT_USERNAME = 1; const U32 NAMEFORMAT_DISPLAYNAME_USERNAME = 2; const U32 NAMEFORMAT_USERNAME_DISPLAYNAME = 3; @@ -65,7 +67,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); /*virtual*/ bool notifyChildren(const LLSD& info); void teleportToAvatar(LLUUID targetAv); - void requestRadarChannelAlertSync() {mRadarAlertRequest = true;} + void requestRadarChannelAlertSync(); // Implements LLVoiceClientStatusObserver::onChange() to enable call buttons // when voice is available /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); @@ -218,6 +220,7 @@ private: S32 mRadarFrameCount; bool mRadarAlertRequest; + F32 mRadarLastRequestTime; }; #endif //LL_LLPANELPEOPLE_H diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 2c9049c6eb..06683f26ee 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -536,7 +536,8 @@ void LLPanelPermissions::refresh() } // The edit fields are only enabled if you can sell this object // and the sale price is not mixed. - BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE; + //BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE; + BOOL enable_edit = can_transfer ? !is_for_sale_mixed : FALSE; getChildView("Cost")->setEnabled(enable_edit); // Dont update and clear the price if change is pending @@ -1100,7 +1101,8 @@ void LLPanelPermissions::setAllSaleInfo() S32 price = -1; LLSpinCtrl *edit_price = getChild("Edit Cost"); - price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger(); + //price = (edit_price->getTentative()) ? DEFAULT_PRICE : edit_price->getValue().asInteger(); + price = edit_price->getValue().asInteger(); // If somehow an invalid price, turn the sale off. if (price < 0) diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index bbdfe8c239..a4193e1789 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -340,7 +340,7 @@ void LLPanelWearing::copyToClipboard() iter++; if (item != NULL) { - // Append a CR to all but the last line + // Append a newline to all but the last line text += iter != data.end() ? item->getName() + "\n" : item->getName(); } } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 1d94747858..7140c0e5ec 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1381,7 +1381,14 @@ void LLPreviewLSL::uploadAssetViaCaps(const std::string& url, llinfos << "Update Agent Inventory via capability" << llendl; LLSD body; body["item_id"] = item_id; - body["target"] = "lsl2"; + if (gSavedSettings.getBOOL("FSSaveInventoryScriptsAsMono")) + { + body["target"] = "mono"; + } + else + { + body["target"] = "lsl2"; + } LLHTTPClient::post(url, body, new LLUpdateAgentInventoryResponder(body, filename, LLAssetType::AT_LSL_TEXT)); } diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 8cdea96d0a..18c75d894a 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -576,7 +576,7 @@ void LLStatusBar::onMouseEnterVolume() LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect(); volume_pulldown_rect.setLeftTopAndSize( (vol_btn_rect.mLeft + media_panel_rect.mLeft) - - (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth())/2, + (volume_pulldown_rect.getWidth() - vol_btn_rect.getWidth()), vol_btn_rect.mBottom, volume_pulldown_rect.getWidth(), volume_pulldown_rect.getHeight()); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 38216157bf..5d7588291c 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -472,6 +472,14 @@ bool handleSettingF32Change(const LLSD& sdValue, F32* pValue) } // [/SL:KB] +// ## Zi: Moved Avatar Z offset from RLVa to here +bool handleAvatarZOffsetChanged(const LLSD& sdValue) +{ + gAgent.sendAgentSetAppearance(); + return true; +} +// ## Zi: Moved Avatar Z offset from RLVa to here + bool handleForceShowGrid(const LLSD& newvalue) { LLPanelLogin::updateServer( ); @@ -718,6 +726,7 @@ void settings_setup_listeners() gSavedSettings.getControl("DragAndDropCommitDelay")->getSignal()->connect(boost::bind(&handleSettingF32Change, _2, &DELAY_DRAG_HOVER_COMMIT)); // [/SL:KB] gSavedSettings.getControl("ImagePipelineHTTPMaxFailCountFallback")->getSignal()->connect(boost::bind(&handleImagePipelineHTTPMaxFailCountFallback, _2)); + gSavedSettings.getControl("AvatarZOffset")->getSignal()->connect(boost::bind(&handleAvatarZOffsetChanged, _2)); // ## Zi: Moved Avatar Z offset from RLVa to here } #if TEST_CACHED_CONTROL diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 7946b5403f..3ec64f2c8a 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5645,10 +5645,24 @@ static void money_balance_group_notify(const LLUUID& group_id, LLSD args, LLSD payload) { - // Message uses name SLURLs, don't actually have to substitute in - // the name. We're just making sure it's available. - // Notification is either PaymentReceived or PaymentSent - LLNotificationsUtil::add(notification, args, payload); + static LLCachedControl balance_change_in_chat(gSavedSettings, "FSPaymentInfoInChat"); + + if (balance_change_in_chat) + { + LLChat chat; + chat.mText = llformat(args["MESSAGE"].asString().c_str(), name.c_str()); + chat.mSourceType = CHAT_SOURCE_SYSTEM; + LLSD chat_args; + chat_args["type"] = LLNotificationsUI::NT_NEARBYCHAT; + LLNotificationsUI::LLNotificationManager::instance().onChat(chat, chat_args); + } + else + { + // Message uses name SLURLs, don't actually have to substitute in + // the name. We're just making sure it's available. + // Notification is either PaymentReceived or PaymentSent + LLNotificationsUtil::add(notification, args, payload); + } } static void money_balance_avatar_notify(const LLUUID& agent_id, @@ -5657,10 +5671,24 @@ static void money_balance_avatar_notify(const LLUUID& agent_id, LLSD args, LLSD payload) { - // Message uses name SLURLs, don't actually have to substitute in - // the name. We're just making sure it's available. - // Notification is either PaymentReceived or PaymentSent - LLNotificationsUtil::add(notification, args, payload); + static LLCachedControl balance_change_in_chat(gSavedSettings, "FSPaymentInfoInChat"); + + if (balance_change_in_chat) + { + LLChat chat; + chat.mText = llformat(args["MESSAGE"].asString().c_str(), av_name.getCompleteName().c_str()); + chat.mSourceType = CHAT_SOURCE_SYSTEM; + LLSD chat_args; + chat_args["type"] = LLNotificationsUI::NT_NEARBYCHAT; + LLNotificationsUI::LLNotificationManager::instance().onChat(chat, chat_args); + } + else + { + // Message uses name SLURLs, don't actually have to substitute in + // the name. We're just making sure it's available. + // Notification is either PaymentReceived or PaymentSent + LLNotificationsUtil::add(notification, args, payload); + } } static void process_money_balance_reply_extended(LLMessageSystem* msg) @@ -5675,6 +5703,11 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg) S32 amount = 0; std::string item_description; + // Ansariel: If we output to chat history and probably console, + // don't create an SLURL for the name or we will end + // up with a SLURL in the console + static LLCachedControl balance_change_in_chat(gSavedSettings, "FSPaymentInfoInChat"); + msg->getS32("TransactionInfo", "TransactionType", transaction_type); msg->getUUID("TransactionInfo", "SourceID", source_id); msg->getBOOL("TransactionInfo", "IsSourceGroup", is_source_group); @@ -5736,7 +5769,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg) bool you_paid_someone = (source_id == gAgentID); if (you_paid_someone) { - args["NAME"] = dest_slurl; + args["NAME"] = balance_change_in_chat ? "%s" : dest_slurl; is_name_group = is_dest_group; name_id = dest_id; if (!reason.empty()) @@ -5768,7 +5801,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg) } else { // ...someone paid you - args["NAME"] = source_slurl; + args["NAME"] = balance_change_in_chat ? "%s" : source_slurl; is_name_group = is_source_group; name_id = source_id; if (!reason.empty()) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 7bf272b57a..3cd25f0d75 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1195,32 +1195,37 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) LLColor4 group_own_below_water_color = LLUIColorTable::instance().getColor( "NetMapGroupOwnBelowWater" ); - F32 max_radius = gSavedSettings.getF32("MiniMapPrimMaxRadius"); + static LLCachedControl max_radius(gSavedSettings, "MiniMapPrimMaxRadius"); + static LLCachedControl max_zdistance_from_avatar(gSavedSettings, "MiniMapPrimMaxVertDistance"); for (vobj_list_t::iterator iter = mMapObjects.begin(); iter != mMapObjects.end(); ++iter) { LLViewerObject* objectp = *iter; - if(objectp->isDead())//some dead objects somehow not cleaned. - { - continue ; - } - - if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) + if (!objectp || objectp->isDead() || !objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) { continue; } const LLVector3& scale = objectp->getScale(); const LLVector3d pos = objectp->getPositionGlobal(); const F64 water_height = F64( objectp->getRegion()->getWaterHeight() ); - // LLWorld::getInstance()->getWaterHeight(); - F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.5f * 0.5f * 1.3f; // 1.3 is a fudge + // Skip all objects that are more than MiniMapPrimMaxVertDistance above or below the avatar + if (max_zdistance_from_avatar > 0.0) + { + F64 zdistance = pos.mdV[VZ] - gAgent.getPositionGlobal().mdV[VZ]; + if (zdistance < (-max_zdistance_from_avatar) || zdistance > max_zdistance_from_avatar) + { + continue; + } + } + + F32 approx_radius = (scale.mV[VX] + scale.mV[VY]) * 0.325; // <- 0.5f * 0.5f * 1.3f; // 1.3 is a fudge // Limit the size of megaprims so they don't blot out everything on the minimap. // Attempting to draw very large megaprims also causes client lag. // See DEV-17370 and DEV-29869/SNOW-79 for details. - approx_radius = llmin(approx_radius, max_radius); + approx_radius = llmin(approx_radius, F32(max_radius)); LLColor4U color = above_water_color; if( objectp->permYouOwner() ) @@ -1239,8 +1244,8 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) } else { - color = you_own_above_water_color; - } + color = you_own_above_water_color; + } } else { @@ -1248,14 +1253,13 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) { color = group_own_below_water_color; } - else - { - color = you_own_below_water_color; + else + { + color = you_own_below_water_color; + } } } - } - else - if( pos.mdV[VZ] < water_height ) + else if( pos.mdV[VZ] < water_height ) { color = below_water_color; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 5959d09191..dd470dbc23 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1505,6 +1505,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("GetDisplayNames"); capabilityNames.append("GetTexture"); + capabilityNames.append("GetMesh"); // detect mesh capabilityNames.append("GroupProposalBallot"); capabilityNames.append("HomeLocation"); capabilityNames.append("LandResources"); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 5d272524ab..41aac6fb4e 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1419,13 +1419,21 @@ void LLVOAvatar::updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax) } } +// patch up for mesh, to be removed during real mesh merge -Zi +F32 llvoavatar_max_prim_scale() +{ + if(gAgent.getRegion()->getCapability("GetMesh").empty()) + return DEFAULT_MAX_PRIM_SCALE; + return 64.f; +} + void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) { LLVector3 buffer(0.25f, 0.25f, 0.25f); LLVector3 pos = getRenderPosition(); newMin = pos - buffer; newMax = pos + buffer; - float max_attachment_span = DEFAULT_MAX_PRIM_SCALE * 5.0f; + float max_attachment_span = llvoavatar_max_prim_scale() * 5.0f; //stretch bounding box by joint positions for (polymesh_map_t::iterator i = mMeshes.begin(); i != mMeshes.end(); ++i) diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 66f2f14006..82e5ad13fa 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -98,9 +98,6 @@ void RlvSettings::initClass() gSavedPerAccountSettings.getControl(RLV_SETTING_LOGINLASTLOCATION)->setHiddenFromSettingsEditor(true); #endif // RLV_EXTENSION_STARTLOCATION - if (gSavedSettings.controlExists(RLV_SETTING_AVATAROFFSET_Z)) - gSavedSettings.getControl(RLV_SETTING_AVATAROFFSET_Z)->getSignal()->connect(boost::bind(&onChangedAvatarOffset, _2)); - fInitialized = true; } } @@ -121,13 +118,6 @@ void RlvSettings::initClass() } #endif // RLV_EXTENSION_STARTLOCATION -// Checked: 2010-10-11 (RLVa-1.2.0e) | Added: RLVa-1.2.0e -bool RlvSettings::onChangedAvatarOffset(const LLSD& sdValue) -{ - gAgent.sendAgentSetAppearance(); - return true; -} - // Checked: 2010-02-27 (RLVa-1.2.0a) | Added: RLVa-1.1.0i bool RlvSettings::onChangedSettingBOOL(const LLSD& sdValue, bool* pfSetting) { diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 1b762971c4..242d135406 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -104,7 +104,6 @@ public: static void initClass(); protected: - static bool onChangedAvatarOffset(const LLSD& sdValue); static bool onChangedSettingBOOL(const LLSD& sdValue, bool* pfSetting); #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 03a9d9b0c1..14206d67b6 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -101,7 +101,7 @@ const S32 RLVa_VERSION_BUILD = 1; #define RLV_ROOT_FOLDER "#RLV" #define RLV_CMD_PREFIX '@' #define RLV_PUTINV_PREFIX "#RLV/~" -#define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90° with the rest of SL +#define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90 degrees with the rest of SL #define RLV_FOLDER_FLAG_NOSTRIP "nostrip" #define RLV_FOLDER_PREFIX_HIDDEN '.' @@ -292,7 +292,7 @@ enum ERlvAttachGroupType #define RLV_SETTING_MAIN "RestrainedLove" #define RLV_SETTING_DEBUG "RestrainedLoveDebug" -#define RLV_SETTING_AVATAROFFSET_Z "RestrainedLoveOffsetAvatarZ" +#define RLV_SETTING_AVATAROFFSET_Z "AvatarZOffset" #define RLV_SETTING_FORBIDGIVETORLV "RestrainedLoveForbidGiveToRLV" #define RLV_SETTING_NOSETENV "RestrainedLoveNoSetEnv" #define RLV_SETTING_WEARADDPREFIX "RestrainedLoveStackWhenFolderBeginsWith" diff --git a/indra/newview/skins/default/xui/de/floater_quickprefs.xml b/indra/newview/skins/default/xui/de/floater_quickprefs.xml index b74f284d68..709bc00d45 100644 --- a/indra/newview/skins/default/xui/de/floater_quickprefs.xml +++ b/indra/newview/skins/default/xui/de/floater_quickprefs.xml @@ -28,7 +28,7 @@ HΓΆhenabstand: - + WL-Himmel: diff --git a/indra/newview/skins/default/xui/de/inspect_group.xml b/indra/newview/skins/default/xui/de/inspect_group.xml index d85ca7ce4d..60fa8ff0d8 100644 --- a/indra/newview/skins/default/xui/de/inspect_group.xml +++ b/indra/newview/skins/default/xui/de/inspect_group.xml @@ -26,7 +26,7 @@ Hoch solln sie leben! Elche forever! Und auch Mungos! Mitgliedschaft: 123 L$ - + + + + + + + + +