Mini-merge up to FS-tip. Note: Reverted OSX Lion build sdk changes, due to failure to produce a viable build on snowleopard.

master
Arrehn 2011-08-05 11:35:59 -04:00
commit 61cb88c510
110 changed files with 3286 additions and 438 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -102,8 +102,7 @@ public:
typedef std::list<Line> lines_t;
typedef std::list<ParagraphColorSegment> paragraph_color_segments_t;
typedef std::list<LLColor4> line_colors_t;
line_colors_t mLineColors;
std::deque<LLColor4> 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();

View File

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

View File

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

View File

@ -60,7 +60,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>2.6.9.16953</string>
<string>2.6.9.18325</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>

View File

@ -14,6 +14,50 @@
<integer>1</integer>
</map>
<key>FSShowIMInChatHistory</key>
<map>
<key>Comment</key>
<string>If true, IM will also be shown in the nearby chat history.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSLogIMInChatHistory</key>
<map>
<key>Comment</key>
<string>If true, IM will also be logged in the nearby chat history if logging nearby chat and showing IMs in nearby chat is enabled.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSPaymentInfoInChat</key>
<map>
<key>Comment</key>
<string>If true, L$ balance changes will be shown in nearby chat instead of toasts.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSScriptDialogNoTransparency</key>
<map>
<key>Comment</key>
<string>If true, script dialogs will be shown opaque and ignore the floater opacity settings.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowStreamMetadata</key>
<map>
<key>Comment</key>
@ -71,17 +115,38 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>PhoenixDoubleClickAddInventoryObjects</key>
<map>
<key>Comment</key>
<string>Whether or not to add items instead of wearing them</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>PhoenixKeepUnpackedCacheFiles</key>
<map>
<key>Comment</key>
<string>If TRUE, the viewer won't delete unpacked cache files when logging out (improves overall performance and fixes sound bugs)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>RadarAlertChannel</key>
<map>
<key>Comment</key>
<string>Positive Numbered Channel for whispering radar alerts</string>
<string>Channel for whispering radar alerts</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<string>S32</string>
<key>Value</key>
<integer>777777777</integer>
<integer>-777777777</integer>
</map>
<key>RadarLegacyChannelAlertRefreshUUID</key>
@ -475,6 +540,28 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>FSLeaveMouselookOnFocus</key>
<map>
<key>Comment</key>
<string>Exit mouselook mode when regaining focus</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSSaveInventoryScriptsAsMono</key>
<map>
<key>Comment</key>
<string>Saves scripts edited directly from inventory as Mono instead of LSL</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AutoCloseOOC</key>
<map>
<key>Comment</key>
@ -621,10 +708,10 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>RestrainedLoveOffsetAvatarZ</key>
<key>AvatarZOffset</key>
<map>
<key>Comment</key>
<string>Offset the avatar.</string>
<string>Height offset the avatar.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@ -4634,7 +4721,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>https://marketplace.secondlife.com/products/search?search[category_id]=200</string>
<string>https://marketplace.secondlife.com/products/search?search[category_id]=200&amp;search[page]=1&amp;search[per_page]=12</string>
</map>
<key>GridCrossSections</key>
<map>
@ -6442,6 +6529,17 @@
<key>Value</key>
<real>16.0</real>
</map>
<key>MiniMapPrimMaxVertDistance</key>
<map>
<key>Comment</key>
<string>Max height difference between avatar and prim to be shown on the MiniMap. Set to 0.0 to disable.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>256.0</real>
</map>
<key>MiniMapChatRing</key>
<map>
<key>Comment</key>

View File

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

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -171,7 +171,7 @@ BOOL LLAvatarListItem::postBuild()
mInfoBtn = getChild<LLButton>("info_btn");
mProfileBtn = getChild<LLButton>("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();

View File

@ -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<LLTextBox>("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;

View File

@ -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<LLTextBox> ("floater_map_southwest");
mTextBoxNorthWest = getChild<LLTextBox> ("floater_map_northwest");
// <Firestorm Minimap changes>
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<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
if (mPopupMenu && !LLTracker::isTracking(0))
{
mPopupMenu->setItemEnabled ("Stop Tracking", false);
}
// </Firestorm minimap changes>
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));
}
}

View File

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

View File

@ -940,17 +940,25 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
// static
void LLPanelRegionDebugInfo::onClickRestart(void* data)
{
// <Ansariel FIRE-1073>
LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
LLSD delay;
if (self) delay = self->getChild<LLSpinCtrl>("restart_delay")->getValue();
else delay = LLSD(120);
// </Ansariel FIRE-1073>
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;

View File

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

View File

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

View File

@ -72,28 +72,29 @@ void LLIMHandler::updatePhoenixLogImToChatConsole(const LLSD &data)
PhoenixLogImToChatConsole = data.asBoolean();
}
//<Ansariel> 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<LLNearbyChat>("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<LLNearbyChat>("nearby_chat", LLSD());
gConsole->setVisible(!nearby_chat->getVisible());
}

View File

@ -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;
}
// <Ansariel> 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<bool> 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<LLNearbyChat>("nearby_chat", LLSD());
nearby_chat->addMessage(chat, true, LLSD());
}
// </Ansariel>
return true;
}

View File

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

View File

@ -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] == ':')
{

View File

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

View File

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

View File

@ -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;
// <Ansariel> console support
consoleChat = senderName + delimiter + message;
LLColor4 chatcolor;
LLViewerChat::getChatColor(chat_msg, chatcolor);
gConsole->addConsoleLine(consoleChat, chatcolor);
// </Ansariel>
}
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<LLNearbyChat>("nearby_chat", LLSD());
gConsole->setVisible(!nearby_chat->getVisible());
}
void LLNearbyChatHandler::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)

View File

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

View File

@ -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<LLUUID, LLColor4> 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));
// <Ansariel>
registrar.add("Minimap.Mark", boost::bind(&LLNetMap::handleMark, this, _2));
registrar.add("Minimap.ClearMarks", boost::bind(&LLNetMap::handleClearMarks, this));
// </Ansariel>
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("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));
}
}
// <Ansariel> 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();
}
//</Ansariel>

View File

@ -129,12 +129,19 @@ private:
std::string mToolTipMsg;
static std::map<LLUUID, LLColor4> 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;

View File

@ -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();
// <Ansariel>: 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;
// </Ansariel>
void onAvatarNameLookup(const LLUUID& agent_id, const LLAvatarName& av_name, const std::string& message_str);
BOOL PhoenixLogImToChatConsole;
LLAvatarName mAvatarName;
};
/**

View File

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

View File

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

View File

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

View File

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

View File

@ -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<LLSpinCtrl>("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)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<F32> max_radius(gSavedSettings, "MiniMapPrimMaxRadius");
static LLCachedControl<F32> 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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -28,7 +28,7 @@
<text name="Height Offset" width="105">
Höhenabstand:
</text>
<slider left_delta="87" name="RestrainedLoveOffsetAvatarZ"/>
<slider left_delta="87" name="AvatarZOffset"/>
<text name="WL Sky" width="67">
WL-Himmel:
</text>

View File

@ -26,7 +26,7 @@ Hoch solln sie leben! Elche forever! Und auch Mungos!
<text name="group_cost">
Mitgliedschaft: 123 L$
</text>
<button label="Zusammen" name="join_btn"/>
<button label="Beitreten" name="join_btn"/>
<button label="Verlassen" name="leave_btn"/>
<button label="Profil anzeigen" name="view_profile_btn"/>
</floater>

View File

@ -6,6 +6,14 @@
<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
<menu_item_check label="Karte drehen" name="Rotate Map"/>
<menu_item_check label="Automatisch zentrieren" name="Auto Center"/>
<menu_item_check label="Chatdistanz-Markierung" name="Chat Distance Ring"/>
<menu name="MarkAvatar" label="Markieren...">
<menu_item_call label="Rot" name="MarkRed"/>
<menu_item_call label="Lila" name="MarkPurple"/>
<menu_item_call label="Grün" name="MarkGreen"/>
<menu_item_call label="Gelb" name="MarkYellow"/>
<menu_item_call label="Markierungen löschen" name="Clear Marks"/>
</menu>
<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
<menu_item_call label="Weltkarte" name="World Map"/>
</menu>

View File

@ -19,12 +19,11 @@
<menu_item_check label="Fliegen" name="Fly"/>
<menu_item_check label="Immer rennen" name="Always Run"/>
<menu_item_check label="Sitzen erzwingen" name="Force Toggle Sitting"/>
<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
<menu_item_check label="Phantom-Modus" name="Avatar Phantom"/>
</menu>
<menu_item_check label="Kamerasteuerung" name="Camera Controls"/>
<menu label="Avatar-Befinden" name="avhealth">
<menu_item_call label="Avatar-Animatonen stoppen" name="Stop Animating My Avatar"/>
<menu_item_call label="Avatar-Animationen stoppen" name="Stop Animating My Avatar"/>
<menu_item_call label="Aktualisiere Aussehen (Rebake)" name="Rebake Texture"/>
<menu_item_call label="Auf männlichen Standard-Avatar zurücksetzen" name="ResetDefaultAvM"/>
<menu_item_call label="Auf weiblichen Standard-Avatar zurücksetzen" name="ResetDefaultAvF"/>

View File

@ -34,7 +34,11 @@
<button label="?" name="top_colliders_help"/>
<button label="Top-Skripts..." name="top_scripts_btn" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um Skripts auszuführen."/>
<button label="?" name="top_scripts_help"/>
<button label="Region neu starten" name="restart_btn" tool_tip="2-Minuten-Countdown und Region neu starten"/>
<button label="Region neu starten" name="restart_btn" tool_tip="Countdown von ausgewählter Anzahl an Sekunden und Region neu starten"/>
<button label="?" name="restart_help"/>
<text name="label_restart_delay" width="60">
Sekunden:
</text>
<spinner name="restart_delay" left_delta="65"/>
<button label="Neustart verzögern" name="cancel_restart_btn" tool_tip="Regionsneustart um eine Stunde verschieben"/>
</panel>

View File

@ -70,7 +70,7 @@ Right Click Changes End Position.
follows="left|top"
height="18"
increment="1"
initial_val="100"
initial_value="100"
label="Rotation Speed:"
label_width="85"
max_val="300"

View File

@ -22,34 +22,6 @@
height="200"
follows="all"
layout="topleft">
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left="5"
name="Maximum bandwidth"
mouse_opaque="false"
top="10"
width="90">
Max Bandwidth:
</text>
<slider
can_edit_text="true"
control_name="ThrottleBandwidthKBPS"
decimal_digits="0"
follows="left|top"
height="15"
increment="100"
initial_value="500"
layout="topleft"
left_delta="100"
max_val="10000"
min_val="100"
name="max_bandwidth"
top_delta="-2"
width="150" />
<text
type="string"
length="1"
@ -59,7 +31,7 @@
left="5"
name="Draw Distance"
mouse_opaque="false"
top_delta="20"
top="10"
width="90">
Draw Distance:
</text>
@ -79,6 +51,34 @@
top_delta="-2"
width="150"
label_width="3"/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left="5"
name="Maximum bandwidth"
mouse_opaque="false"
top_delta="20"
width="90">
Max Bandwidth:
</text>
<slider
can_edit_text="true"
control_name="ThrottleBandwidthKBPS"
decimal_digits="0"
follows="left|top"
height="15"
increment="100"
initial_value="500"
layout="topleft"
left_delta="100"
max_val="10000"
min_val="100"
name="max_bandwidth"
top_delta="-2"
width="150" />
<text
type="string"
length="1"
@ -210,7 +210,7 @@
</text>
<slider
can_edit_text="true"
control_name="RestrainedLoveOffsetAvatarZ"
control_name="AvatarZOffset"
decimal_digits="2"
follows="left|top"
height="15"
@ -220,7 +220,7 @@
left_delta="79"
max_val="2"
min_val="-2"
name="RestrainedLoveOffsetAvatarZ"
name="AvatarZOffset"
top_delta="-2"
width="164"
label_width="17"/>

View File

@ -1517,7 +1517,7 @@ even though the user gets a free copy.
label_width="10"
layout="topleft"
left_delta="0"
max_val="10"
max_val="64"
min_val="0.01"
name="Scale X"
text_enabled_color="White"
@ -1542,7 +1542,7 @@ even though the user gets a free copy.
label_width="10"
layout="topleft"
left="10"
max_val="10"
max_val="64"
min_val="0.01"
name="Scale Y"
text_enabled_color="White"
@ -1567,7 +1567,7 @@ even though the user gets a free copy.
label_width="10"
layout="topleft"
left="10"
max_val="10"
max_val="64"
min_val="0.01"
name="Scale Z"
text_enabled_color="White"

View File

@ -135,7 +135,7 @@
width="280">
<avatar_list
follows="all"
height="132"
height="120"
ignore_online_status="true"
layout="topleft"
multi_select="true"
@ -152,4 +152,33 @@
width="276" />
</layout_panel>
</layout_stack>
</floater>
<slider
enabled="false"
follows="left|bottom|right"
height="23"
increment="0.01"
left="1"
max_val="0.95"
min_val="0.05"
name="volume_slider"
show_text="false"
tool_tip="Voice volume"
bottom_delta="12"
value="0.5"
width="150"/>
<button
enabled="false"
follows="bottom|left"
height="16"
image_disabled="Audio_Off"
image_disabled_selected="AudioMute_Off"
image_hover_selected="AudioMute_Over"
image_selected="AudioMute_Off"
image_unselected="Audio_Off"
is_toggle="true"
left_pad="5"
top_delta="4"
name="mute_btn"
width="16"
scale_image="false"/>
</floater>

View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<fonts>
<font name="default" comment="default font files (global fallbacks)">
<file>Ubuntu-R.ttf</file>
<os name="Windows">
<file>MSGOTHIC.TTC</file>
<file>gulim.ttc</file>
<file>simhei.ttf</file>
<file>ArialUni.ttf</file>
</os>
<os name="Mac">
<file>ヒラギノ角ゴ Pro W3.otf</file>
<file>ヒラギノ角ゴ ProN W3.otf</file>
<file>AppleGothic.dfont</file>
<file>AppleGothic.ttf</file>
<file>华文细黑.ttf</file>
</os>
</font>
<font name="SansSerifBold"
comment="Name of bold sans-serif font">
<file>Ubuntu-B.ttf</file>
<os name="Windows">
<file>arialbd.ttf</file>
</os>
<os name="Mac">
<file>Helvetica.dfont</file>
</os>
</font>
<font name="SansSerif" comment="Name of san-serif font (Truetype file name)">
<file>Ubuntu-R.ttf</file>
<os name="Windows">
<file>arial.ttf</file>
</os>
<os name="Mac">
<file>Helvetica.dfont</file>
</os>
</font>
<font name="SansSerif"
comment="Name of bold sans-serif font"
font_style="BOLD">
<file>Ubuntu-B.ttf</file>
</font>
<font name="SansSerif"
comment="Name of italic sans-serif font"
font_style="ITALIC">
<file>Ubuntu-RI.ttf</file>
</font>
<font name="SansSerif"
comment="Name of bold italic sans-serif font"
font_style="BOLD|ITALIC">
<file>Ubuntu-BI.ttf</file>
</font>
<font name="Monospace"
comment="Name of monospace font">
<file>DejaVuSansMono.ttf</file>
</font>
<font name="DejaVu"
comment="Name of DejaVu font">
<file>DejaVuSans.ttf</file>
</font>
<font name="DejaVu"
comment="Name of DejaVu font (bold)"
font_style="BOLD">
<file>DejaVuSans-Bold.ttf</file>
</font>
<font name="DejaVu"
comment="Name of DejaVu font (italic)"
font_style="ITALIC">
<file>DejaVuSans-Oblique.ttf</file>
</font>
<font name="DejaVu"
comment="Name of DejaVu font (bold italic)"
font_style="BOLD|ITALIC">
<file>DejaVuSans-BoldOblique.ttf</file>
</font>
<font name="Helvetica"
comment="Name of Helvetica font">
<file>DejaVuSans.ttf</file>
<os name="Windows">
<file>arial.ttf</file>
</os>
<os name="Mac">
<file>arial.ttf</file>
</os>
</font>
<font name="Helvetica"
comment="Name of Helvetica font (bold)"
font_style="BOLD">
<file>DejaVuSans-Bold.ttf</file>
<os name="Windows">
<file>arialbd.ttf</file>
</os>
<os name="Mac">
<file>arialbd.ttf</file>
</os>
</font>
<font name="Helvetica"
comment="Name of Helvetica font (italic)"
font_style="ITALIC">
<file>DejaVuSans-Oblique.ttf</file>
<os name="Windows">
<file>ariali.ttf</file>
</os>
<os name="Mac">
<file>ariali.ttf</file>
</os>
</font>
<font name="Helvetica"
comment="Name of Helvetica font (bold italic)"
font_style="BOLD|ITALIC">
<file>DejaVuSans-BoldOblique.ttf</file>
<os name="Windows">
<file>arialbi.ttf</file>
</os>
<os name="Mac">
<file>arialbi.ttf</file>
</os>
</font>
<font name="OverrideTest"
comment="Name of font to test overriding">
<file>times.ttf</file>
<file>DejaVuSans.ttf</file>
</font>
<font_size name="Monospace"
comment="Size for monospaced font (points, or 1/72 of an inch)"
size="8.0"
/>
<font_size name="Huge"
comment="Size of huge font (points, or 1/72 of an inch)"
size="16.0"
/>
<font_size name="Large"
comment="Size of large font (points, or 1/72 of an inch)"
size="11.0"
/>
<font_size name="Medium"
comment="Size of medium font (points, or 1/72 of an inch)"
size="9.0"
/>
<font_size name="Small"
comment="Size of small font (points, or 1/72 of an inch)"
size="8.0"
/>
<font_size name="Pie"
comment="Size of pie menu font (points, or 1/72 of an inch)"
size="8.0"
/>
</fonts>

View File

@ -60,6 +60,19 @@
function="Inventory.GearDefault.Check"
parameter="sort_system_folders_to_top" />
</menu_item_check>
<menu_item_separator
layout="topleft" />
<menu_item_check
label="Add objects on double click"
layout="topleft"
name="add_inv_toggle">
<on_click
function="Inventory.GearDefault.Custom.Action"
parameter="add_objects_on_double_click" />
<on_check
function="Inventory.GearDefault.Check"
parameter="add_objects_on_double_click" />
</menu_item_check>
<menu_item_separator
layout="topleft" />
<menu_item_call

View File

@ -65,6 +65,43 @@
parameter="MiniMapChatRing" />
</menu_item_check>
<menu_item_separator />
<menu name="MarkAvatar" label="Mark...">
<menu_item_call
label="Red"
name="MarkRed">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Red" />
</menu_item_call>
<menu_item_call
label="Purple"
name="MarkPurple">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Purple" />
</menu_item_call>
<menu_item_call
label="Green"
name="MarkGreen">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="Green" />
</menu_item_call>
<menu_item_call
label="Yellow"
name="MarkYellow">
<menu_item_call.on_click
function="Minimap.Mark"
parameter="LtYellow" />
</menu_item_call>
<menu_item_separator />
<menu_item_call
label="Clear Marks"
name="Clear Marks">
<menu_item_call.on_click
function="Minimap.ClearMarks"/>
</menu_item_call>
</menu>
<menu_item_call
label="Stop Tracking"
name="Stop Tracking">

View File

@ -62,7 +62,7 @@
name="Freeze...">
<pie_slice.on_click
function="Avatar.Freeze" />
<pie_slice.on_visible
<pie_slice.on_enable
function="Avatar.EnableFreezeEject"/>
</pie_slice>
<pie_slice
@ -86,7 +86,7 @@
name="Eject...">
<pie_slice.on_click
function="Avatar.Eject" />
<pie_slice.on_visible
<pie_slice.on_enable
function="Avatar.EnableFreezeEject"/>
</pie_slice>

View File

@ -62,7 +62,7 @@
name="Freeze...">
<pie_slice.on_click
function="Avatar.Freeze" />
<pie_slice.on_visible
<pie_slice.on_enable
function="Avatar.EnableFreezeEject"/>
</pie_slice>
<pie_slice
@ -86,7 +86,7 @@
name="Eject...">
<pie_slice.on_click
function="Avatar.Eject" />
<pie_slice.on_visible
<pie_slice.on_enable
function="Avatar.EnableFreezeEject"/>
</pie_slice>

View File

@ -173,7 +173,7 @@
name="avhealth"
tear_off="true">
<menu_item_call
label="Stop Avatar Animatons"
label="Stop Avatar Animations"
name="Stop Animating My Avatar">
<menu_item_call.on_click
function="Tools.StopAllAnimations" />
@ -1978,7 +1978,7 @@
tear_off="true"
visible="false">
<menu_item_call
label="Image (L$[COST])..."
label="Upload Image (L$[COST])..."
name="Upload Image"
shortcut="control|U">
<menu_item_call.on_click

View File

@ -63,7 +63,7 @@
layout="topleft"
left_pad="5"
name="user_name"
text_color="White"
text_color="SL-White"
top="8"
translate="false"
use_ellipses="true"

View File

@ -75,21 +75,6 @@ background_opaque="false"
<!-- Replaces LLs button panel as they had not put buttons in -->
<button
follows="bottom|left"
enabled="false"
tool_tip="Show additional options"
height="25"
image_hover_unselected="Toolbar_Left_Over"
image_overlay="OptionsMenu_Off"
image_selected="Toolbar_Left_Selected"
image_unselected="Toolbar_Left_Off"
layout="topleft"
left="0"
name="gear_menu_btn"
top="0"
width="31" />
<button
follows="bottom|left"
height="25"
@ -98,7 +83,7 @@ background_opaque="false"
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
left_pad="2"
left="0"
name="new_btn"
tool_tip="Create a new pick or classified at the current location"
top="0"
@ -113,7 +98,7 @@ background_opaque="false"
left_pad="2"
top="0"
name="dummy_icon"
width="211" />
width="237" />
<dnd_button
follows="bottom|right"
@ -122,7 +107,7 @@ background_opaque="false"
image_overlay="TrashItem_Off"
image_selected="Toolbar_Right_Selected"
image_unselected="Toolbar_Right_Off"
right="-1"
right="-10"
layout="topleft"
name="trash_btn"
top="0"

View File

@ -390,7 +390,7 @@
label_width="155"
layout="topleft"
left="210"
max_val="30"
max_val="60"
name="NearbyToastLifetime"
top_pad="7"
width="266" />

View File

@ -82,6 +82,80 @@
left="30"
name="show_develop_menu_check"
top_pad="5"
width="237"/>
</panel>
width="237"/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left="15"
name="Media Rolloff"
mouse_opaque="false"
top_delta="40"
width="155">
Media audio rolloff distance:
</text>
<slider
can_edit_text="true"
control_name="MediaRollOffMin"
decimal_digits="0"
label="Min"
follows="left|top"
height="15"
increment="1"
initial_value="5"
layout="topleft"
left="15"
max_val="512"
min_val="1"
name="MediaRollOffMin"
top_delta="20"
width="200"
label_width="25"
tool_tip="Minimum distance from the source for rolloff to begin taking effect."/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left_delta="205"
name="Meters"
mouse_opaque="false"
top_delta="2"
width="90">
meters
</text>
<slider
can_edit_text="true"
control_name="MediaRollOffMax"
decimal_digits="0"
label="Max"
follows="left|top"
height="15"
increment="1"
initial_value="30"
layout="topleft"
left="15"
max_val="512"
min_val="1"
name="MediaRollOffMax"
top_delta="15"
width="200"
label_width="25"
tool_tip="Maximum distance from the source for rolloff to completely mute the sound."/>
<text
type="string"
length="1"
follows="left|top"
height="10"
layout="topleft"
left_delta="205"
name="Meters"
mouse_opaque="false"
top_delta="2"
width="90">
meters
</text>
</panel>

View File

@ -163,8 +163,16 @@
width="270"
control_name="TurnAroundWhenWalkingBackwards"
tool_tip="Turns your avatar around to face the camera when you are walking backwards."/>
<text
<check_box top_pad="5"
follows="left|top"
height="16"
label="Show look at target"
left="15"
name="showlookat"
width="270"
control_name="DebugLookAt"
tool_tip="Enable crosshairs marking where people are looking."/>
<text
type="string"
length="1"
follows="left|top"
@ -697,7 +705,7 @@
right="-1"
follows="all"
label="Chat"
name="tab1-2" >
name="firestorm_chat" >
<tab_container
label="Firestorm Prefs"
@ -713,7 +721,7 @@
<!--Chat: General-->
<panel
border="true"
top_pad="5"
top_pad="1"
bottom="-1"
left="1"
right="-1"
@ -725,7 +733,7 @@
name="chat_and_in_enhancements"
follows="left|top"
layout="topleft"
top_pad="15"
top_pad="5"
left="24"
height="10"
width="180">
@ -746,7 +754,7 @@
label="Emotes use italic font"
layout="topleft"
top_pad="0"
height="20"
height="18"
width="400" />
<check_box
control_name="AutoCloseOOC"
@ -754,7 +762,7 @@
label="Auto-close ((OOC)) parentheses"
layout="topleft"
top_pad="0"
height="20"
height="18"
width="400" />
<check_box
control_name="OnlineOfflinetoNearbyChat"
@ -762,7 +770,7 @@
label="Friend on/off-line notices to Nearby Chat"
layout="topleft"
top_pad="0"
height="20"
height="18"
width="400" />
<check_box
control_name="ShowStreamMetadata"
@ -770,7 +778,7 @@
label="Show stream title in local chat"
layout="topleft"
top_pad="0"
height="20"
height="18"
width="400" />
<check_box
control_name="StreamMetadataAnnounceToChat"
@ -778,7 +786,7 @@
label="Announce stream title to chat channel:"
layout="topleft"
top_pad="0"
height="20"
height="18"
width="240" />
<spinner
top_delta="-2"
@ -786,7 +794,7 @@
decimal_digits="0"
layout="topleft"
follows="left|top"
height="20"
height="18"
left_pad="5"
increment="1"
initial_val="362394"
@ -809,7 +817,7 @@
follows="left|top"
layout="topleft"
left_pad="0"
height="20"
height="18"
width="130"
text_color="White_25">
(requires restart)
@ -820,7 +828,39 @@
top_pad="0"
left="20"
width="400"
height="20"
height="18"
name="FSShowIMInChatHistory"
control_name="FSShowIMInChatHistory"
label="Show IMs in nearby chat window"/>
<check_box
layout="topleft"
follows="left|top"
top_pad="0"
left="30"
width="155"
height="18"
name="FSLogIMInChatHistory"
control_name="FSLogIMInChatHistory"
label="Save IMs in nearby chat"/>
<text
top_delta="2"
name="requires_save_chat_logs"
follows="left|top"
layout="topleft"
left_pad="0"
height="18"
width="200"
text_color="White_25">
(requires saving nearby chat logs)
</text>
<check_box
layout="topleft"
follows="left|top"
top_pad="0"
left="20"
width="400"
height="18"
name="PhoenixUseNearbyChatConsole"
control_name="PhoenixUseNearbyChatConsole"
label="Use console for chat popups instead of floating toasts (Viewer 1.x style)"/>
<check_box
@ -828,7 +868,8 @@
follows="left|top"
top_pad="0"
width="50"
height="20"
height="18"
name="PhoenixLogImToChatConsole"
control_name="PhoenixLogImToChatConsole"
label="Show IMs and group chat in chat console"/>
<check_box
@ -836,7 +877,8 @@
follows="left|top"
top_pad="0"
width="200"
height="20"
height="18"
name="ChatFullWidth"
control_name="ChatFullWidth"
label="Use full screen width for console"/>
<text
@ -862,7 +904,7 @@
label="Fade chat after"
label_width="90"
left="35"
max_val="30"
max_val="60"
min_val="2"
name="fade_chat_time"
width="130" />
@ -902,27 +944,40 @@
width="50"
height="20"
control_name="PhoenixBoldGroupMods"
name="PhoenixBoldGroupMods"
label="Show group moderator messages in bold"/>
<check_box
layout="topleft"
follows="left|top"
top_pad="0"
left="20"
width="50"
height="20"
height="18"
control_name="FSPaymentInfoInChat"
name="FSPaymentInfoInChat"
label="Show L$ transactions in local chat instead of toasts"/>
<check_box
layout="topleft"
follows="left|top"
top_pad="0"
width="50"
height="18"
control_name="PhoenixMuteAllGroups"
name="PhoenixMuteAllGroups"
label="Disable ALL group chats"/>
<check_box
layout="topleft"
follows="left|top"
top_pad="0"
width="50"
height="20"
height="18"
control_name="PhoenixMuteGroupWhenNoticesDisabled"
name="PhoenixMuteGroupWhenNoticesDisabled"
label="When 'Receive group notices' is disabled, disable group chat as well"/>
<button
layout="topleft"
follows="left|top"
top_pad="10"
top_pad="5"
width="250"
height="22"
mouse_opaque="true"
@ -1704,6 +1759,14 @@
name="PhoenixCommitForSaleOnChange_toggle"
control_name="PhoenixCommitForSaleOnChange"/>
<check_box
follows="left|top"
height="16"
label="Save scripts edited from inventory as Mono"
tool_tip="When checked, editing a script directly from inventory and then saving it saves as Mono instead of LSL."
name="FSSaveInventoryScriptsAsMono_toggle"
control_name="FSSaveInventoryScriptsAsMono"/>
</panel>
</tab_container>
</panel>

View File

@ -1067,7 +1067,7 @@
</text>
<check_box
control_name="RenderUnloadedAvatars"
control_name="RenderUnloadedAvatar"
height="16"
initial_value="false"
label="Show avatars that haven't finished loading"

Some files were not shown because too many files have changed in this diff Show More