aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
authorArmin Weatherwax2010-09-13 20:47:57 +0200
committerMcCabe Maxsted2010-09-13 14:35:56 -0700
commitd4cbeb3505f7aa315a226e464d556ef64ae2079f (patch)
tree45ca0938d951d42f37a2eb2545eeecabdb670b3c /linden/indra
parentstay away from find_library! (diff)
downloadmeta-impy-d4cbeb3505f7aa315a226e464d556ef64ae2079f.zip
meta-impy-d4cbeb3505f7aa315a226e464d556ef64ae2079f.tar.gz
meta-impy-d4cbeb3505f7aa315a226e464d556ef64ae2079f.tar.bz2
meta-impy-d4cbeb3505f7aa315a226e464d556ef64ae2079f.tar.xz
Henri Beauchamp: use http map if possible. Fixes broken map in SL + http map possible for OS
Diffstat (limited to 'linden/indra')
-rw-r--r--linden/indra/newview/app_settings/settings.xml22
-rw-r--r--linden/indra/newview/llfloaterworldmap.cpp4
-rw-r--r--linden/indra/newview/llfloaterworldmap.h9
-rw-r--r--linden/indra/newview/llmapresponders.cpp29
-rw-r--r--linden/indra/newview/llmapresponders.h2
-rw-r--r--linden/indra/newview/llstartup.cpp11
-rw-r--r--linden/indra/newview/llviewermenu.cpp3
-rw-r--r--linden/indra/newview/llworldmap.cpp60
-rw-r--r--linden/indra/newview/llworldmap.h8
-rw-r--r--linden/indra/newview/llworldmapview.cpp70
-rw-r--r--linden/indra/newview/llworldmapview.h7
11 files changed, 169 insertions, 56 deletions
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 11220ed..9550a11 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -7404,6 +7404,28 @@
7404 <key>Value</key> 7404 <key>Value</key>
7405 <real>20.0</real> 7405 <real>20.0</real>
7406 </map> 7406 </map>
7407 <key>MapServerURL</key>
7408 <map>
7409 <key>Comment</key>
7410 <string>World map URL template for locating map tiles</string>
7411 <key>Persist</key>
7412 <integer>0</integer>
7413 <key>Type</key>
7414 <string>String</string>
7415 <key>Value</key>
7416 <string>http://map.secondlife.com.s3.amazonaws.com/</string>
7417 </map>
7418 <key>UseWebMapTiles</key>
7419 <map>
7420 <key>Comment</key>
7421 <string>Use web map tiles whenever possible</string>
7422 <key>Persist</key>
7423 <integer>1</integer>
7424 <key>Type</key>
7425 <string>Boolean</string>
7426 <key>Value</key>
7427 <integer>1</integer>
7428 </map>
7407 <key>MapOverlayIndex</key> 7429 <key>MapOverlayIndex</key>
7408 <map> 7430 <map>
7409 <key>Comment</key> 7431 <key>Comment</key>
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp
index 4f678c5..781cf4d 100644
--- a/linden/indra/newview/llfloaterworldmap.cpp
+++ b/linden/indra/newview/llfloaterworldmap.cpp
@@ -247,8 +247,8 @@ BOOL LLFloaterWorldMap::postBuild()
247 childSetAction("Clear", onClearBtn, this); 247 childSetAction("Clear", onClearBtn, this);
248 childSetAction("copy_slurl", onCopySLURL, this); 248 childSetAction("copy_slurl", onCopySLURL, this);
249 249
250 mCurZoomVal = log(gMapScale)/log(2.f); 250 mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
251 childSetValue("zoom slider", gMapScale); 251 childSetValue("zoom slider", LLWorldMapView::sMapScale);
252 252
253 setDefaultBtn(NULL); 253 setDefaultBtn(NULL);
254 254
diff --git a/linden/indra/newview/llfloaterworldmap.h b/linden/indra/newview/llfloaterworldmap.h
index 2153921..83345ed 100644
--- a/linden/indra/newview/llfloaterworldmap.h
+++ b/linden/indra/newview/llfloaterworldmap.h
@@ -68,8 +68,6 @@ public:
68 static void toggle(void*); 68 static void toggle(void*);
69 static void hide(void*); 69 static void hide(void*);
70 70
71 static void addServer(const std::string& server);
72
73 /*virtual*/ void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE ); 71 /*virtual*/ void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE );
74 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); 72 /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
75 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); 73 /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
@@ -103,7 +101,6 @@ public:
103 void clearLocationSelection(BOOL clear_ui = FALSE); 101 void clearLocationSelection(BOOL clear_ui = FALSE);
104 void clearAvatarSelection(BOOL clear_ui = FALSE); 102 void clearAvatarSelection(BOOL clear_ui = FALSE);
105 void clearLandmarkSelection(BOOL clear_ui = FALSE); 103 void clearLandmarkSelection(BOOL clear_ui = FALSE);
106 void clearGridSelection(BOOL clear_ui = FALSE);
107 104
108 // Adjust the maximally zoomed out limit of the zoom slider so you can 105 // Adjust the maximally zoomed out limit of the zoom slider so you can
109 // see the whole world, plus a little. 106 // see the whole world, plus a little.
@@ -118,9 +115,8 @@ public:
118protected: 115protected:
119 static void onPanBtn( void* userdata ); 116 static void onPanBtn( void* userdata );
120 117
121 static void onGridManager(void* data);
122
123 static void onGoHome(void* data); 118 static void onGoHome(void* data);
119
124 static void onLandmarkComboPrearrange( LLUICtrl* ctrl, void* data ); 120 static void onLandmarkComboPrearrange( LLUICtrl* ctrl, void* data );
125 static void onLandmarkComboCommit( LLUICtrl* ctrl, void* data ); 121 static void onLandmarkComboCommit( LLUICtrl* ctrl, void* data );
126 122
@@ -162,14 +158,13 @@ protected:
162 static void onLocationCommit( void* userdata ); 158 static void onLocationCommit( void* userdata );
163 static void onCommitLocation( LLUICtrl* ctrl, void* userdata ); 159 static void onCommitLocation( LLUICtrl* ctrl, void* userdata );
164 static void onCommitSearchResult( LLUICtrl* ctrl, void* userdata ); 160 static void onCommitSearchResult( LLUICtrl* ctrl, void* userdata );
165 static void onSelectServer(LLUICtrl*, void* userdata);
166 161
167 void cacheLandmarkPosition(); 162 void cacheLandmarkPosition();
168 163
169protected: 164protected:
170 LLTabContainer* mTabs; 165 LLTabContainer* mTabs;
171 166
172 // Sets gMapScale, in pixels per region 167 // Sets sMapScale, in pixels per region
173 F32 mCurZoomVal; 168 F32 mCurZoomVal;
174 LLFrameTimer mZoomTimer; 169 LLFrameTimer mZoomTimer;
175 170
diff --git a/linden/indra/newview/llmapresponders.cpp b/linden/indra/newview/llmapresponders.cpp
index 140f390..9d974f2 100644
--- a/linden/indra/newview/llmapresponders.cpp
+++ b/linden/indra/newview/llmapresponders.cpp
@@ -4,7 +4,7 @@
4 * 4 *
5 * $LicenseInfo:firstyear=2006&license=viewergpl$ 5 * $LicenseInfo:firstyear=2006&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2006-2009, Linden Research, Inc. 7 * Copyright (c) 2006-2010, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -57,6 +57,8 @@ void LLMapLayerResponder::result(const LLSD& result)
57 57
58 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear(); 58 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
59 59
60 bool use_web_map_tiles = LLWorldMap::useWebMapTiles();
61
60 LLSD::array_const_iterator iter; 62 LLSD::array_const_iterator iter;
61 BOOL adjust = FALSE; 63 BOOL adjust = FALSE;
62 for(iter = result["LayerData"].beginArray(); iter != result["LayerData"].endArray(); ++iter) 64 for(iter = result["LayerData"].beginArray(); iter != result["LayerData"].endArray(); ++iter)
@@ -65,16 +67,24 @@ void LLMapLayerResponder::result(const LLSD& result)
65 67
66 LLWorldMapLayer new_layer; 68 LLWorldMapLayer new_layer;
67 new_layer.LayerDefined = TRUE; 69 new_layer.LayerDefined = TRUE;
68 new_layer.LayerImageID = layer_data["ImageID"];
69 new_layer.LayerImage = gImageList.getImage(new_layer.LayerImageID, MIPMAP_TRUE, FALSE);
70 gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
71 new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
72 70
73 new_layer.LayerExtents.mLeft = layer_data["Left"]; 71 new_layer.LayerExtents.mLeft = layer_data["Left"];
74 new_layer.LayerExtents.mRight = layer_data["Right"]; 72 new_layer.LayerExtents.mRight = layer_data["Right"];
75 new_layer.LayerExtents.mBottom = layer_data["Bottom"]; 73 new_layer.LayerExtents.mBottom = layer_data["Bottom"];
76 new_layer.LayerExtents.mTop = layer_data["Top"]; 74 new_layer.LayerExtents.mTop = layer_data["Top"];
77 75
76 new_layer.LayerImageID = layer_data["ImageID"];
77// if (use_web_map_tiles)
78// {
79// new_layer.LayerImage = LLWorldMap::loadObjectsTile((U32)new_layer.LayerExtents.mLeft, (U32)new_layer.LayerExtents.mBottom); // no good... Maybe using of level 2 and higher web maps ?
80// }
81// else
82// {
83 new_layer.LayerImage = gImageList.getImage(new_layer.LayerImageID, MIPMAP_TRUE, FALSE);
84// }
85 gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
86 new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
87
78 F32 x_meters = F32(new_layer.LayerExtents.mLeft*REGION_WIDTH_UNITS); 88 F32 x_meters = F32(new_layer.LayerExtents.mLeft*REGION_WIDTH_UNITS);
79 F32 y_meters = F32(new_layer.LayerExtents.mBottom*REGION_WIDTH_UNITS); 89 F32 y_meters = F32(new_layer.LayerExtents.mBottom*REGION_WIDTH_UNITS);
80 adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters), 90 adjust = LLWorldMap::getInstance()->extendAABB(U32(x_meters), U32(y_meters),
@@ -163,7 +173,14 @@ void LLMapLayerResponder::result(const LLSD& result)
163 siminfo->mRegionFlags = region_flags; 173 siminfo->mRegionFlags = region_flags;
164 siminfo->mWaterHeight = (F32) water_height; 174 siminfo->mWaterHeight = (F32) water_height;
165 siminfo->mMapImageID[agent_flags] = image_id; 175 siminfo->mMapImageID[agent_flags] = image_id;
166 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE); 176 if (use_web_map_tiles)
177 {
178 siminfo->mCurrentImage = LLWorldMap::loadObjectsTile((U32)x_regions, (U32)y_regions);
179 }
180 else
181 {
182 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
183 }
167 siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); 184 siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
168 gGL.getTexUnit(0)->bind(siminfo->mCurrentImage.get()); 185 gGL.getTexUnit(0)->bind(siminfo->mCurrentImage.get());
169 186
diff --git a/linden/indra/newview/llmapresponders.h b/linden/indra/newview/llmapresponders.h
index 8fb1fb0..b6fb8e5 100644
--- a/linden/indra/newview/llmapresponders.h
+++ b/linden/indra/newview/llmapresponders.h
@@ -4,7 +4,7 @@
4 * 4 *
5 * $LicenseInfo:firstyear=2006&license=viewergpl$ 5 * $LicenseInfo:firstyear=2006&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2006-2009, Linden Research, Inc. 7 * Copyright (c) 2006-2010, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 606262f..4fd4daa 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -1127,6 +1127,7 @@ bool idle_startup()
1127 requested_options.push_back("buddy-list"); 1127 requested_options.push_back("buddy-list");
1128 requested_options.push_back("ui-config"); 1128 requested_options.push_back("ui-config");
1129#endif 1129#endif
1130 requested_options.push_back("map-server-url");
1130 requested_options.push_back("tutorial_setting"); 1131 requested_options.push_back("tutorial_setting");
1131 requested_options.push_back("login-flags"); 1132 requested_options.push_back("login-flags");
1132 requested_options.push_back("global-textures"); 1133 requested_options.push_back("global-textures");
@@ -1769,7 +1770,15 @@ bool idle_startup()
1769 LLStartUp::setShouldAutoLogin(false); 1770 LLStartUp::setShouldAutoLogin(false);
1770 show_connect_box = true; 1771 show_connect_box = true;
1771 } 1772 }
1772 1773
1774 std::string map_server_url = LLUserAuth::getInstance()->getResponse("map-server-url");
1775 if(!map_server_url.empty())
1776 {
1777 gSavedSettings.setString("MapServerURL", map_server_url);
1778 //llwarns << "MapServerURL" << map_server_url << llendl;
1779 }
1780 // else llwarns << "MapServerURL empty"<< llendl;
1781
1773 // Pass the user information to the voice chat server interface. 1782 // Pass the user information to the voice chat server interface.
1774 gVoiceClient->userAuthorized(firstname, lastname, gAgentID); 1783 gVoiceClient->userAuthorized(firstname, lastname, gAgentID);
1775 } 1784 }
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index e37f33e..fd6e842 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -844,6 +844,9 @@ void init_client_menu(LLMenuGL* menu)
844 844
845 menu->append(new LLMenuItemCallGL("Clear Group Cache", 845 menu->append(new LLMenuItemCallGL("Clear Group Cache",
846 LLGroupMgr::debugClearAllGroups)); 846 LLGroupMgr::debugClearAllGroups));
847
848 menu->append(new LLMenuItemCheckGL("Use Web Map Tiles", menu_toggle_control, NULL, menu_check_control, (void*)"UseWebMapTiles"));
849
847 menu->appendSeparator(); 850 menu->appendSeparator();
848 851
849 sub_menu = new LLMenuGL("Rendering"); 852 sub_menu = new LLMenuGL("Rendering");
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 908cd87..c6242f6 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -37,6 +37,7 @@
37#include "llregionhandle.h" 37#include "llregionhandle.h"
38#include "message.h" 38#include "message.h"
39 39
40
40#include "llappviewer.h" // for gPacificDaylightTime 41#include "llappviewer.h" // for gPacificDaylightTime
41#include "llagent.h" 42#include "llagent.h"
42#include "llmapresponders.h" 43#include "llmapresponders.h"
@@ -46,9 +47,8 @@
46#include "llviewerimagelist.h" 47#include "llviewerimagelist.h"
47#include "llviewerregion.h" 48#include "llviewerregion.h"
48#include "llregionflags.h" 49#include "llregionflags.h"
49 50 #include "hippoGridManager.h"
50#include "hippoGridManager.h" 51bool LLWorldMap::sGotMapURL = false;
51
52const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes 52const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // 10 minutes
53 53
54// For DEV-17507, do lazy image loading in llworldmapview.cpp instead, 54// For DEV-17507, do lazy image loading in llworldmapview.cpp instead,
@@ -86,6 +86,11 @@ LLSimInfo::LLSimInfo()
86} 86}
87 87
88 88
89LLVector3d LLSimInfo::getGlobalOrigin() const
90{
91 return from_region_handle(mHandle);
92}
93
89LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const 94LLVector3d LLSimInfo::getGlobalPos(LLVector3 local_pos) const
90{ 95{
91 LLVector3d pos = from_region_handle(mHandle); 96 LLVector3d pos = from_region_handle(mHandle);
@@ -514,16 +519,13 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
514 519
515 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear(); 520 LLWorldMap::getInstance()->mMapLayers[agent_flags].clear();
516 521
522// bool use_web_map_tiles = useWebMapTiles();
517 BOOL adjust = FALSE; 523 BOOL adjust = FALSE;
518 for (S32 block=0; block<num_blocks; ++block) 524 for (S32 block=0; block<num_blocks; ++block)
519 { 525 {
520 LLWorldMapLayer new_layer; 526 LLWorldMapLayer new_layer;
521 new_layer.LayerDefined = TRUE; 527 new_layer.LayerDefined = TRUE;
522 msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block); 528 msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block);
523 new_layer.LayerImage = gImageList.getImage(new_layer.LayerImageID, MIPMAP_TRUE, FALSE);
524
525 gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
526 new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
527 529
528 U32 left, right, top, bottom; 530 U32 left, right, top, bottom;
529 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Left, left, block); 531 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Left, left, block);
@@ -531,6 +533,18 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
531 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block); 533 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block);
532 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block); 534 msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block);
533 535
536// if (use_web_map_tiles)
537// {
538// new_layer.LayerImage = loadObjectsTile(left, bottom); // no good... Maybe using of level 2 and higher web maps ?
539// }
540// else
541// {
542 new_layer.LayerImage = gImageList.getImage(new_layer.LayerImageID, MIPMAP_TRUE, FALSE);
543// }
544
545 gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
546 new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
547
534 new_layer.LayerExtents.mLeft = left; 548 new_layer.LayerExtents.mLeft = left;
535 new_layer.LayerExtents.mRight = right; 549 new_layer.LayerExtents.mRight = right;
536 new_layer.LayerExtents.mBottom = bottom; 550 new_layer.LayerExtents.mBottom = bottom;
@@ -550,6 +564,26 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
550} 564}
551 565
552// public static 566// public static
567bool LLWorldMap::useWebMapTiles()
568{
569 return gSavedSettings.getBOOL("UseWebMapTiles") &&
570 (( gHippoGridManager->getConnectedGrid()->isSecondLife() || sGotMapURL) && LLWorldMap::getInstance()->mCurrentMap == 0);
571}
572
573// public static
574LLPointer<LLViewerImage> LLWorldMap::loadObjectsTile(U32 grid_x, U32 grid_y)
575{
576 // Get the grid coordinates
577 std::string imageurl = gSavedSettings.getString("MapServerURL") + llformat("map-%d-%d-%d-objects.jpg", 1, grid_x, grid_y);
578
579 LLPointer<LLViewerImage> img = gImageList.getImageFromUrl(imageurl);
580 img->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP);
581
582 // Return the smart pointer
583 return img;
584}
585
586// public static
553void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) 587void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
554{ 588{
555 U32 agent_flags; 589 U32 agent_flags;
@@ -565,6 +599,9 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
565 599
566 bool found_null_sim = false; 600 bool found_null_sim = false;
567 601
602#ifdef IMMEDIATE_IMAGE_LOAD
603 bool use_web_map_tiles = useWebMapTiles();
604#endif
568 BOOL adjust = FALSE; 605 BOOL adjust = FALSE;
569 for (S32 block=0; block<num_blocks; ++block) 606 for (S32 block=0; block<num_blocks; ++block)
570 { 607 {
@@ -635,7 +672,14 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
635 siminfo->mMapImageID[agent_flags] = image_id; 672 siminfo->mMapImageID[agent_flags] = image_id;
636 673
637#ifdef IMMEDIATE_IMAGE_LOAD 674#ifdef IMMEDIATE_IMAGE_LOAD
638 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE); 675 if (use_web_map_tiles)
676 {
677 siminfo->mCurrentImage = loadObjectsTile((U32)x_regions, (U32)y_regions);
678 }
679 else
680 {
681 siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
682 }
639 gGL.getTexUnit(0)->bind(siminfo->mCurrentImage.get()); 683 gGL.getTexUnit(0)->bind(siminfo->mCurrentImage.get());
640 siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); 684 siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
641#endif 685#endif
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index 6ce66ff..b7089f3 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -76,6 +76,8 @@ public:
76 LLSimInfo(); 76 LLSimInfo();
77 77
78 LLVector3d getGlobalPos(LLVector3 local_pos) const; 78 LLVector3d getGlobalPos(LLVector3 local_pos) const;
79 // Get the world coordinates of the SW corner of that region
80 LLVector3d getGlobalOrigin() const;
79 81
80public: 82public:
81 U64 mHandle; 83 U64 mHandle;
@@ -164,6 +166,10 @@ public:
164 static void processMapBlockReply(LLMessageSystem*, void**); 166 static void processMapBlockReply(LLMessageSystem*, void**);
165 static void processMapItemReply(LLMessageSystem*, void**); 167 static void processMapItemReply(LLMessageSystem*, void**);
166 168
169 static void gotMapServerURL(bool flag) { sGotMapURL = flag; }
170 static bool useWebMapTiles();
171 static LLPointer<LLViewerImage> loadObjectsTile(U32 grid_x, U32 grid_y);
172
167 void dump(); 173 void dump();
168 174
169 // Extend the bounding box of the list of simulators. Returns true 175 // Extend the bounding box of the list of simulators. Returns true
@@ -226,6 +232,8 @@ private:
226 std::string mSLURL; 232 std::string mSLURL;
227 url_callback_t mSLURLCallback; 233 url_callback_t mSLURLCallback;
228 bool mSLURLTeleport; 234 bool mSLURLTeleport;
235
236 static bool sGotMapURL;
229}; 237};
230 238
231#endif 239#endif
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index d8e5b3d..e12bd08 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -50,7 +50,6 @@
50#include "llfloatermap.h" 50#include "llfloatermap.h"
51#include "llfloaterworldmap.h" 51#include "llfloaterworldmap.h"
52#include "llfocusmgr.h" 52#include "llfocusmgr.h"
53//#include "llmutelist.h" info not being sent
54#include "lltextbox.h" 53#include "lltextbox.h"
55#include "lltextureview.h" 54#include "lltextureview.h"
56#include "lltracker.h" 55#include "lltracker.h"
@@ -103,6 +102,7 @@ F32 LLWorldMapView::sTargetPanY = 0.f;
103S32 LLWorldMapView::sTrackingArrowX = 0; 102S32 LLWorldMapView::sTrackingArrowX = 0;
104S32 LLWorldMapView::sTrackingArrowY = 0; 103S32 LLWorldMapView::sTrackingArrowY = 0;
105F32 LLWorldMapView::sPixelsPerMeter = 1.f; 104F32 LLWorldMapView::sPixelsPerMeter = 1.f;
105F32 LLWorldMapView::sMapScale = 128.f;
106F32 CONE_SIZE = 0.6f; 106F32 CONE_SIZE = 0.6f;
107 107
108std::map<std::string,std::string> LLWorldMapView::sStringsMap; 108std::map<std::string,std::string> LLWorldMapView::sStringsMap;
@@ -179,7 +179,7 @@ LLWorldMapView::LLWorldMapView(const std::string& name, const LLRect& rect )
179 mMouseDownY( 0 ), 179 mMouseDownY( 0 ),
180 mSelectIDStart(0) 180 mSelectIDStart(0)
181{ 181{
182 sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS; 182 sPixelsPerMeter = sMapScale / REGION_WIDTH_METERS;
183 clearLastClick(); 183 clearLastClick();
184 184
185 const S32 DIR_WIDTH = 10; 185 const S32 DIR_WIDTH = 10;
@@ -240,14 +240,14 @@ void LLWorldMapView::cleanupTextures()
240// static 240// static
241void LLWorldMapView::setScale( F32 scale ) 241void LLWorldMapView::setScale( F32 scale )
242{ 242{
243 if (scale != gMapScale) 243 if (scale != sMapScale)
244 { 244 {
245 F32 old_scale = gMapScale; 245 F32 old_scale = sMapScale;
246 246
247 gMapScale = scale; 247 sMapScale = scale;
248 if (gMapScale == 0.f) 248 if (sMapScale == 0.f)
249 { 249 {
250 gMapScale = 0.1f; 250 sMapScale = 0.1f;
251 } 251 }
252 252
253 F32 ratio = (scale / old_scale); 253 F32 ratio = (scale / old_scale);
@@ -256,7 +256,7 @@ void LLWorldMapView::setScale( F32 scale )
256 sTargetPanX = sPanX; 256 sTargetPanX = sPanX;
257 sTargetPanY = sPanY; 257 sTargetPanY = sPanY;
258 258
259 sPixelsPerMeter = gMapScale / REGION_WIDTH_METERS; 259 sPixelsPerMeter = sMapScale / REGION_WIDTH_METERS;
260 } 260 }
261} 261}
262 262
@@ -354,11 +354,11 @@ void LLWorldMapView::draw()
354 354
355 // Find x and y position relative to camera's center. 355 // Find x and y position relative to camera's center.
356 LLVector3d rel_region_pos = origin_global - camera_global; 356 LLVector3d rel_region_pos = origin_global - camera_global;
357 F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; 357 F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale;
358 F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; 358 F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale;
359 359
360 F32 pix_width = gMapScale*(layer->LayerExtents.getWidth() + 1); 360 F32 pix_width = sMapScale*(layer->LayerExtents.getWidth() + 1);
361 F32 pix_height = gMapScale*(layer->LayerExtents.getHeight() + 1); 361 F32 pix_height = sMapScale*(layer->LayerExtents.getHeight() + 1);
362 362
363 // When the view isn't panned, 0,0 = center of rectangle 363 // When the view isn't panned, 0,0 = center of rectangle
364 F32 bottom = sPanY + half_height + relative_y; 364 F32 bottom = sPanY + half_height + relative_y;
@@ -439,6 +439,8 @@ void LLWorldMapView::draw()
439 const S32 MIN_REQUEST_PER_TICK = 1; 439 const S32 MIN_REQUEST_PER_TICK = 1;
440 S32 textures_requested_this_tick = 0; 440 S32 textures_requested_this_tick = 0;
441 441
442 bool use_web_map_tiles = LLWorldMap::useWebMapTiles();
443
442 for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin(); 444 for (LLWorldMap::sim_info_map_t::iterator it = LLWorldMap::getInstance()->mSimInfoMap.begin();
443 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it) 445 it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
444 { 446 {
@@ -448,7 +450,7 @@ void LLWorldMapView::draw()
448 LLViewerImage* simimage = info->mCurrentImage; 450 LLViewerImage* simimage = info->mCurrentImage;
449 LLViewerImage* overlayimage = info->mOverlayImage; 451 LLViewerImage* overlayimage = info->mOverlayImage;
450 452
451 if (gMapScale < SIM_MAP_SCALE) 453 if (sMapScale < SIM_MAP_SCALE)
452 { 454 {
453 if (simimage != NULL) simimage->setBoostLevel(0); 455 if (simimage != NULL) simimage->setBoostLevel(0);
454 if (overlayimage != NULL) overlayimage->setBoostLevel(0); 456 if (overlayimage != NULL) overlayimage->setBoostLevel(0);
@@ -460,14 +462,14 @@ void LLWorldMapView::draw()
460 462
461 // Find x and y position relative to camera's center. 463 // Find x and y position relative to camera's center.
462 LLVector3d rel_region_pos = origin_global - camera_global; 464 LLVector3d rel_region_pos = origin_global - camera_global;
463 F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; 465 F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * sMapScale;
464 F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; 466 F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * sMapScale;
465 467
466 // When the view isn't panned, 0,0 = center of rectangle 468 // When the view isn't panned, 0,0 = center of rectangle
467 F32 bottom = sPanY + half_height + relative_y; 469 F32 bottom = sPanY + half_height + relative_y;
468 F32 left = sPanX + half_width + relative_x; 470 F32 left = sPanX + half_width + relative_x;
469 F32 top = bottom + gMapScale ; 471 F32 top = bottom + sMapScale ;
470 F32 right = left + gMapScale ; 472 F32 right = left + sMapScale ;
471 473
472 // Switch to world map texture (if available for this region) if either: 474 // Switch to world map texture (if available for this region) if either:
473 // 1. Tiles are zoomed out small enough, or 475 // 1. Tiles are zoomed out small enough, or
@@ -478,10 +480,10 @@ void LLWorldMapView::draw()
478 map_scale_cutoff = SIM_NULL_MAP_SCALE; 480 map_scale_cutoff = SIM_NULL_MAP_SCALE;
479 } 481 }
480 482
481 info->mShowAgentLocations = (gMapScale >= SIM_MAP_AGENT_SCALE); 483 info->mShowAgentLocations = (sMapScale >= SIM_MAP_AGENT_SCALE);
482 484
483 bool sim_visible = 485 bool sim_visible =
484 (gMapScale >= map_scale_cutoff) && 486 (sMapScale >= map_scale_cutoff) &&
485 (simimage != NULL) && 487 (simimage != NULL) &&
486 (simimage->getHasGLTexture()); 488 (simimage->getHasGLTexture());
487 489
@@ -521,7 +523,15 @@ void LLWorldMapView::draw()
521 (textures_requested_this_tick < MAX_REQUEST_PER_TICK))) 523 (textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
522 { 524 {
523 textures_requested_this_tick++; 525 textures_requested_this_tick++;
524 info->mCurrentImage = gImageList.getImage(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE); 526 if (use_web_map_tiles)
527 {
528 LLVector3d region_pos = info->getGlobalOrigin();
529 info->mCurrentImage = LLWorldMap::loadObjectsTile((U32)(region_pos.mdV[VX] / REGION_WIDTH_UNITS), (U32)(region_pos.mdV[VY] / REGION_WIDTH_UNITS));
530 }
531 else
532 {
533 info->mCurrentImage = gImageList.getImage(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
534 }
525 info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); 535 info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP);
526 simimage = info->mCurrentImage; 536 simimage = info->mCurrentImage;
527 gGL.getTexUnit(0)->bind(simimage); 537 gGL.getTexUnit(0)->bind(simimage);
@@ -554,7 +564,7 @@ void LLWorldMapView::draw()
554 center_global.mdV[VX] += 128.0; 564 center_global.mdV[VX] += 128.0;
555 center_global.mdV[VY] += 128.0; 565 center_global.mdV[VY] += 128.0;
556 566
557 S32 draw_size = llround(gMapScale); 567 S32 draw_size = llround(sMapScale);
558 if (simimage != NULL) 568 if (simimage != NULL)
559 { 569 {
560 simimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP); 570 simimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP);
@@ -670,10 +680,10 @@ void LLWorldMapView::draw()
670 LLFontGL* font = LLFontGL::getFontSansSerifSmall(); 680 LLFontGL* font = LLFontGL::getFontSansSerifSmall();
671 681
672 std::string mesg; 682 std::string mesg;
673 if (gMapScale < sThresholdA) 683 if (sMapScale < sThresholdA)
674 { 684 {
675 } 685 }
676 else if (gMapScale < sThresholdB) 686 else if (sMapScale < sThresholdB)
677 { 687 {
678 // mesg = llformat( info->mAgents); 688 // mesg = llformat( info->mAgents);
679 } 689 }
@@ -794,13 +804,13 @@ void LLWorldMapView::draw()
794 gGL.setSceneBlendType(LLRender::BT_ALPHA); 804 gGL.setSceneBlendType(LLRender::BT_ALPHA);
795 805
796 // Infohubs 806 // Infohubs
797 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) 807 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(sMapScale >= sThresholdB)
798 { 808 {
799 drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage); 809 drawGenericItems(LLWorldMap::getInstance()->mInfohubs, sInfohubImage);
800 } 810 }
801 811
802 // Telehubs 812 // Telehubs
803 if (gSavedSettings.getBOOL("MapShowTelehubs")) //(gMapScale >= sThresholdB) 813 if (gSavedSettings.getBOOL("MapShowTelehubs")) //(sMapScale >= sThresholdB)
804 { 814 {
805 drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage); 815 drawGenericItems(LLWorldMap::getInstance()->mTelehubs, sTelehubImage);
806 } 816 }
@@ -972,7 +982,7 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i
972 982
973void LLWorldMapView::drawAgents() 983void LLWorldMapView::drawAgents()
974{ 984{
975 F32 agents_scale = (gMapScale * 0.9f) / 256.f; 985 F32 agents_scale = (sMapScale * 0.9f) / 256.f;
976 986
977 LLColor4 avatar_color = gColors.getColor( "MapAvatar" ); 987 LLColor4 avatar_color = gColors.getColor( "MapAvatar" );
978 /*LLColor4 friend_color = gColors.getColor( "MapFriend" ); 988 /*LLColor4 friend_color = gColors.getColor( "MapFriend" );
@@ -1112,7 +1122,7 @@ void LLWorldMapView::drawEvents()
1112void LLWorldMapView::drawFrustum() 1122void LLWorldMapView::drawFrustum()
1113{ 1123{
1114 // Draw frustum 1124 // Draw frustum
1115 F32 meters_to_pixels = gMapScale/ REGION_WIDTH_METERS; 1125 F32 meters_to_pixels = sMapScale/ REGION_WIDTH_METERS;
1116 1126
1117 F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); 1127 F32 horiz_fov = LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect();
1118 F32 far_clip_meters = LLViewerCamera::getInstance()->getFar(); 1128 F32 far_clip_meters = LLViewerCamera::getInstance()->getFar();
@@ -1241,7 +1251,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y )
1241 1251
1242 LLVector3 pos_local( (F32)x, (F32)y, 0.f ); 1252 LLVector3 pos_local( (F32)x, (F32)y, 0.f );
1243 1253
1244 pos_local *= ( REGION_WIDTH_METERS / gMapScale ); 1254 pos_local *= ( REGION_WIDTH_METERS / sMapScale );
1245 1255
1246 LLVector3d pos_global; 1256 LLVector3d pos_global;
1247 pos_global.setVec( pos_local ); 1257 pos_global.setVec( pos_local );
@@ -1875,7 +1885,7 @@ U32 LLWorldMapView::updateBlock(S32 block_x, S32 block_y)
1875 1885
1876U32 LLWorldMapView::updateVisibleBlocks() 1886U32 LLWorldMapView::updateVisibleBlocks()
1877{ 1887{
1878 if (gMapScale < SIM_MAP_SCALE) 1888 if (sMapScale < SIM_MAP_SCALE)
1879 { 1889 {
1880 // We don't care what is loaded if we're zoomed out 1890 // We don't care what is loaded if we're zoomed out
1881 return 0; 1891 return 0;
@@ -1883,7 +1893,7 @@ U32 LLWorldMapView::updateVisibleBlocks()
1883 1893
1884 LLVector3d camera_global = gAgent.getCameraPositionGlobal(); 1894 LLVector3d camera_global = gAgent.getCameraPositionGlobal();
1885 1895
1886 F32 pixels_per_region = gMapScale; 1896 F32 pixels_per_region = sMapScale;
1887 const S32 width = getRect().getWidth(); 1897 const S32 width = getRect().getWidth();
1888 const S32 height = getRect().getHeight(); 1898 const S32 height = getRect().getHeight();
1889 // Convert pan to sim coordinates 1899 // Convert pan to sim coordinates
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index 3245838..4814767 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -30,7 +30,10 @@
30 * $/LicenseInfo$ 30 * $/LicenseInfo$
31 */ 31 */
32 32
33// Global map of the world. 33// View of the global map of the world
34
35// The data (model) for the global map (a singleton, unique to the application instance) is
36// in LLWorldMap and is typically accessed using LLWorldMap::getInstance()
34 37
35#ifndef LL_LLWORLDMAPVIEW_H 38#ifndef LL_LLWORLDMAPVIEW_H
36#define LL_LLWORLDMAPVIEW_H 39#define LL_LLWORLDMAPVIEW_H
@@ -161,6 +164,8 @@ public:
161 static F32 sThresholdB; 164 static F32 sThresholdB;
162 static F32 sPixelsPerMeter; // world meters to map pixels 165 static F32 sPixelsPerMeter; // world meters to map pixels
163 166
167 static F32 sMapScale; // scale = size of a region in pixels
168
164 BOOL mItemPicked; 169 BOOL mItemPicked;
165 170
166 static F32 sPanX; // in pixels 171 static F32 sPanX; // in pixels