From 8b3f4b56f93bfae8251e79c9210836437d2e945b Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 26 Apr 2021 23:55:45 +0300 Subject: SL-14664 Increase range of supported cursors on prim's media --- indra/newview/llviewermedia.cpp | 63 +++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 12 deletions(-) (limited to 'indra/newview/llviewermedia.cpp') diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 9ed2df2759..8cf9f4a85c 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -3194,18 +3194,57 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla std::string cursor = plugin->getCursorName(); - if(cursor == "arrow") - mLastSetCursor = UI_CURSOR_ARROW; - else if(cursor == "ibeam") - mLastSetCursor = UI_CURSOR_IBEAM; - else if(cursor == "splith") - mLastSetCursor = UI_CURSOR_SIZEWE; - else if(cursor == "splitv") - mLastSetCursor = UI_CURSOR_SIZENS; - else if(cursor == "hand") - mLastSetCursor = UI_CURSOR_HAND; - else // for anything else, default to the arrow - mLastSetCursor = UI_CURSOR_ARROW; + static const std::map cursor_name_to_enum + { + {std::string("arrow"), UI_CURSOR_ARROW}, + {std::string("wait"), UI_CURSOR_WAIT}, + {std::string("hand"), UI_CURSOR_HAND}, + {std::string("ibeam"), UI_CURSOR_IBEAM}, + {std::string("cross"), UI_CURSOR_CROSS}, + {std::string("split_nwse"), UI_CURSOR_SIZENWSE}, + {std::string("split_nesw"), UI_CURSOR_SIZENESW}, + {std::string("split_we"), UI_CURSOR_SIZEWE}, + {std::string("split_ns"), UI_CURSOR_SIZENS}, + {std::string("cursor_no"), UI_CURSOR_NO}, + {std::string("working"), UI_CURSOR_WORKING}, + {std::string("tool_grab"), UI_CURSOR_TOOLGRAB}, + {std::string("tool_land"), UI_CURSOR_TOOLLAND}, + {std::string("tool_focus"), UI_CURSOR_TOOLFOCUS}, + {std::string("tool_create"), UI_CURSOR_TOOLCREATE}, + {std::string("arrow_drag"), UI_CURSOR_ARROWDRAG}, + {std::string("arrow_copy"), UI_CURSOR_ARROWCOPY}, + {std::string("arrow_drag_multi"), UI_CURSOR_ARROWDRAGMULTI}, + {std::string("arrow_copy_multi"), UI_CURSOR_ARROWCOPYMULTI}, + {std::string("cursor_no_locked"), UI_CURSOR_NOLOCKED}, + {std::string("arrow_locked"), UI_CURSOR_ARROWLOCKED}, + {std::string("grab_locked"), UI_CURSOR_GRABLOCKED}, + {std::string("tool_translate"), UI_CURSOR_TOOLTRANSLATE}, + {std::string("tool_rotate"), UI_CURSOR_TOOLROTATE}, + {std::string("tool_scale"), UI_CURSOR_TOOLSCALE}, + {std::string("tool_camera"), UI_CURSOR_TOOLCAMERA}, + {std::string("tool_pan"), UI_CURSOR_TOOLPAN}, + {std::string("tool_zoomin"), UI_CURSOR_TOOLZOOMIN}, + {std::string("tool_pick_object3"), UI_CURSOR_TOOLPICKOBJECT3}, + {std::string("tool_play"), UI_CURSOR_TOOLPLAY}, + {std::string("tool_pause"), UI_CURSOR_TOOLPAUSE}, + {std::string("tool_media_open"), UI_CURSOR_TOOLMEDIAOPEN}, + {std::string("tool_pipette"), UI_CURSOR_PIPETTE}, + {std::string("tool_sit"), UI_CURSOR_TOOLSIT}, + {std::string("tool_buy"), UI_CURSOR_TOOLBUY}, + {std::string("tool_open"), UI_CURSOR_TOOLOPEN}, + {std::string("tool_pathfinding"), UI_CURSOR_TOOLPATHFINDING}, + }; + + std::map::const_iterator iter = cursor_name_to_enum.find(cursor); + if (iter != cursor_name_to_enum.end()) + { + mLastSetCursor = iter->second; + } + else + { + // for anything else, default to the arrow + mLastSetCursor = UI_CURSOR_ARROW; + } } break; -- cgit v1.3 From 5cde118ec848cc9053a3a502daeecb417c8cfc18 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 27 Apr 2021 22:52:00 +0300 Subject: SL-14664 Added zoomout and sizeall Remade code to use getCursorFromString --- indra/llwindow/llcursortypes.cpp | 2 + indra/llwindow/llcursortypes.h | 2 + indra/llwindow/llwindowmacosx.cpp | 2 + indra/llwindow/llwindowsdl.cpp | 2 + indra/llwindow/llwindowwin32.cpp | 6 ++- indra/media_plugins/cef/media_plugin_cef.cpp | 42 ++++++++-------- indra/newview/cursors_mac/UI_CURSOR_SIZEALL.tif | Bin 0 -> 624 bytes .../newview/cursors_mac/UI_CURSOR_TOOLZOOMOUT.tif | Bin 0 -> 576 bytes indra/newview/llviewermedia.cpp | 53 +-------------------- indra/newview/res-sdl/lltoolzoomout.BMP | Bin 2102 -> 630 bytes indra/newview/res-sdl/sizeall.BMP | Bin 0 -> 630 bytes indra/newview/res/lltoolzoomout.cur | Bin 326 -> 326 bytes 12 files changed, 36 insertions(+), 73 deletions(-) create mode 100644 indra/newview/cursors_mac/UI_CURSOR_SIZEALL.tif create mode 100644 indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMOUT.tif create mode 100644 indra/newview/res-sdl/sizeall.BMP (limited to 'indra/newview/llviewermedia.cpp') diff --git a/indra/llwindow/llcursortypes.cpp b/indra/llwindow/llcursortypes.cpp index ec60097195..3079cc2419 100644 --- a/indra/llwindow/llcursortypes.cpp +++ b/indra/llwindow/llcursortypes.cpp @@ -42,6 +42,7 @@ ECursorType getCursorFromString(const std::string& cursor_string) cursor_string_table["UI_CURSOR_SIZENESW"] = UI_CURSOR_SIZENESW; cursor_string_table["UI_CURSOR_SIZEWE"] = UI_CURSOR_SIZEWE; cursor_string_table["UI_CURSOR_SIZENS"] = UI_CURSOR_SIZENS; + cursor_string_table["UI_CURSOR_SIZEALL"] = UI_CURSOR_SIZEALL; cursor_string_table["UI_CURSOR_NO"] = UI_CURSOR_NO; cursor_string_table["UI_CURSOR_WORKING"] = UI_CURSOR_WORKING; cursor_string_table["UI_CURSOR_TOOLGRAB"] = UI_CURSOR_TOOLGRAB; @@ -61,6 +62,7 @@ ECursorType getCursorFromString(const std::string& cursor_string) cursor_string_table["UI_CURSOR_TOOLCAMERA"] = UI_CURSOR_TOOLCAMERA; cursor_string_table["UI_CURSOR_TOOLPAN"] = UI_CURSOR_TOOLPAN; cursor_string_table["UI_CURSOR_TOOLZOOMIN"] = UI_CURSOR_TOOLZOOMIN; + cursor_string_table["UI_CURSOR_TOOLZOOMOUT"] = UI_CURSOR_TOOLZOOMOUT; cursor_string_table["UI_CURSOR_TOOLPICKOBJECT3"] = UI_CURSOR_TOOLPICKOBJECT3; cursor_string_table["UI_CURSOR_TOOLPLAY"] = UI_CURSOR_TOOLPLAY; cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE; diff --git a/indra/llwindow/llcursortypes.h b/indra/llwindow/llcursortypes.h index cb6d6636a0..d03b18e275 100644 --- a/indra/llwindow/llcursortypes.h +++ b/indra/llwindow/llcursortypes.h @@ -38,6 +38,7 @@ enum ECursorType { UI_CURSOR_SIZENESW, UI_CURSOR_SIZEWE, UI_CURSOR_SIZENS, + UI_CURSOR_SIZEALL, UI_CURSOR_NO, UI_CURSOR_WORKING, UI_CURSOR_TOOLGRAB, @@ -57,6 +58,7 @@ enum ECursorType { UI_CURSOR_TOOLCAMERA, UI_CURSOR_TOOLPAN, UI_CURSOR_TOOLZOOMIN, + UI_CURSOR_TOOLZOOMOUT, UI_CURSOR_TOOLPICKOBJECT3, UI_CURSOR_TOOLPLAY, UI_CURSOR_TOOLPAUSE, diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 2604a23c85..e288ccb842 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -1422,6 +1422,7 @@ const char* cursorIDToName(int id) case UI_CURSOR_SIZENESW: return "UI_CURSOR_SIZENESW"; case UI_CURSOR_SIZEWE: return "UI_CURSOR_SIZEWE"; case UI_CURSOR_SIZENS: return "UI_CURSOR_SIZENS"; + case UI_CURSOR_SIZEALL: return "UI_CURSOR_SIZEALL"; case UI_CURSOR_NO: return "UI_CURSOR_NO"; case UI_CURSOR_WORKING: return "UI_CURSOR_WORKING"; case UI_CURSOR_TOOLGRAB: return "UI_CURSOR_TOOLGRAB"; @@ -1441,6 +1442,7 @@ const char* cursorIDToName(int id) case UI_CURSOR_TOOLCAMERA: return "UI_CURSOR_TOOLCAMERA"; case UI_CURSOR_TOOLPAN: return "UI_CURSOR_TOOLPAN"; case UI_CURSOR_TOOLZOOMIN: return "UI_CURSOR_TOOLZOOMIN"; + case UI_CURSOR_TOOLZOOMOUT: return "UI_CURSOR_TOOLZOOMOUT"; case UI_CURSOR_TOOLPICKOBJECT3: return "UI_CURSOR_TOOLPICKOBJECT3"; case UI_CURSOR_TOOLPLAY: return "UI_CURSOR_TOOLPLAY"; case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE"; diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index c20e639fc7..ef81c82685 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -2114,6 +2114,7 @@ void LLWindowSDL::initCursors() mSDLCursors[UI_CURSOR_SIZENESW] = makeSDLCursorFromBMP("sizenesw.BMP",17,17); mSDLCursors[UI_CURSOR_SIZEWE] = makeSDLCursorFromBMP("sizewe.BMP",16,14); mSDLCursors[UI_CURSOR_SIZENS] = makeSDLCursorFromBMP("sizens.BMP",17,16); + mSDLCursors[UI_CURSOR_SIZEALL] = makeSDLCursorFromBMP("sizeall.BMP", 17, 17); mSDLCursors[UI_CURSOR_NO] = makeSDLCursorFromBMP("llno.BMP",8,8); mSDLCursors[UI_CURSOR_WORKING] = makeSDLCursorFromBMP("working.BMP",12,15); mSDLCursors[UI_CURSOR_TOOLGRAB] = makeSDLCursorFromBMP("lltoolgrab.BMP",2,13); @@ -2133,6 +2134,7 @@ void LLWindowSDL::initCursors() mSDLCursors[UI_CURSOR_TOOLCAMERA] = makeSDLCursorFromBMP("lltoolcamera.BMP",7,5); mSDLCursors[UI_CURSOR_TOOLPAN] = makeSDLCursorFromBMP("lltoolpan.BMP",7,5); mSDLCursors[UI_CURSOR_TOOLZOOMIN] = makeSDLCursorFromBMP("lltoolzoomin.BMP",7,5); + mSDLCursors[UI_CURSOR_TOOLZOOMOUT] = makeSDLCursorFromBMP("lltoolzoomout.BMP", 7, 5); mSDLCursors[UI_CURSOR_TOOLPICKOBJECT3] = makeSDLCursorFromBMP("toolpickobject3.BMP",0,0); mSDLCursors[UI_CURSOR_TOOLPLAY] = makeSDLCursorFromBMP("toolplay.BMP",0,0); mSDLCursors[UI_CURSOR_TOOLPAUSE] = makeSDLCursorFromBMP("toolpause.BMP",0,0); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index e8abb9f31a..38f537b251 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1814,8 +1814,9 @@ void LLWindowWin32::initCursors() mCursor[ UI_CURSOR_CROSS ] = LoadCursor(NULL, IDC_CROSS); mCursor[ UI_CURSOR_SIZENWSE ] = LoadCursor(NULL, IDC_SIZENWSE); mCursor[ UI_CURSOR_SIZENESW ] = LoadCursor(NULL, IDC_SIZENESW); - mCursor[ UI_CURSOR_SIZEWE ] = LoadCursor(NULL, IDC_SIZEWE); - mCursor[ UI_CURSOR_SIZENS ] = LoadCursor(NULL, IDC_SIZENS); + mCursor[ UI_CURSOR_SIZEWE ] = LoadCursor(NULL, IDC_SIZEWE); + mCursor[ UI_CURSOR_SIZENS ] = LoadCursor(NULL, IDC_SIZENS); + mCursor[ UI_CURSOR_SIZEALL ] = LoadCursor(NULL, IDC_SIZEALL); mCursor[ UI_CURSOR_NO ] = LoadCursor(NULL, IDC_NO); mCursor[ UI_CURSOR_WORKING ] = LoadCursor(NULL, IDC_APPSTARTING); @@ -1837,6 +1838,7 @@ void LLWindowWin32::initCursors() mCursor[ UI_CURSOR_TOOLCAMERA ] = LoadCursor(module, TEXT("TOOLCAMERA")); mCursor[ UI_CURSOR_TOOLPAN ] = LoadCursor(module, TEXT("TOOLPAN")); mCursor[ UI_CURSOR_TOOLZOOMIN ] = LoadCursor(module, TEXT("TOOLZOOMIN")); + mCursor[ UI_CURSOR_TOOLZOOMOUT ] = LoadCursor(module, TEXT("TOOLZOOMOUT")); mCursor[ UI_CURSOR_TOOLPICKOBJECT3 ] = LoadCursor(module, TEXT("TOOLPICKOBJECT3")); mCursor[ UI_CURSOR_PIPETTE ] = LoadCursor(module, TEXT("TOOLPIPETTE")); mCursor[ UI_CURSOR_TOOLSIT ] = LoadCursor(module, TEXT("TOOLSIT")); diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 7f3c159caa..d5bfd7eda0 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -383,43 +383,46 @@ void MediaPluginCEF::onCursorChangedCallback(dullahan::ECursorType type) switch (type) { - case dullahan::CT_POINTER: - name = "arrow"; - break; + case dullahan::CT_POINTER: + name = "UI_CURSOR_ARROW"; + break; case dullahan::CT_CROSS: - name = "cross"; + name = "UI_CURSOR_CROSS"; break; case dullahan::CT_HAND: - name = "hand"; + name = "UI_CURSOR_HAND"; break; case dullahan::CT_IBEAM: - name = "ibeam"; + name = "UI_CURSOR_IBEAM"; break; case dullahan::CT_WAIT: - name = "wait"; + name = "UI_CURSOR_WAIT"; break; //case dullahan::CT_HELP: case dullahan::CT_ROWRESIZE: case dullahan::CT_NORTHRESIZE: case dullahan::CT_SOUTHRESIZE: case dullahan::CT_NORTHSOUTHRESIZE: - name = "split_ns"; + name = "UI_CURSOR_SIZENS"; break; case dullahan::CT_COLUMNRESIZE: case dullahan::CT_EASTRESIZE: case dullahan::CT_WESTRESIZE: case dullahan::CT_EASTWESTRESIZE: - name = "split_we"; + name = "UI_CURSOR_SIZEWE"; break; case dullahan::CT_NORTHEASTRESIZE: case dullahan::CT_SOUTHWESTRESIZE: case dullahan::CT_NORTHEASTSOUTHWESTRESIZE: - name = "split_nesw"; + name = "UI_CURSOR_SIZENESW"; break; case dullahan::CT_SOUTHEASTRESIZE: case dullahan::CT_NORTHWESTRESIZE: case dullahan::CT_NORTHWESTSOUTHEASTRESIZE: - name = "split_nwse"; + name = "UI_CURSOR_SIZENWSE"; + break; + case dullahan::CT_MOVE: + name = "UI_CURSOR_SIZEALL"; break; //case dullahan::CT_MIDDLEPANNING: //case dullahan::CT_EASTPANNING: @@ -430,32 +433,33 @@ void MediaPluginCEF::onCursorChangedCallback(dullahan::ECursorType type) //case dullahan::CT_SOUTHEASTPANNING: //case dullahan::CT_SOUTHWESTPANNING: //case dullahan::CT_WESTPANNING: - //case dullahan::CT_MOVE: //case dullahan::CT_VERTICALTEXT: //case dullahan::CT_CELL: //case dullahan::CT_CONTEXTMENU: case dullahan::CT_ALIAS: - name = "tool_media_open"; + name = "UI_CURSOR_TOOLMEDIAOPEN"; break; case dullahan::CT_PROGRESS: - name = "working"; + name = "UI_CURSOR_WORKING"; break; case dullahan::CT_COPY: - name = "arrow_copy"; + name = "UI_CURSOR_ARROWCOPY"; break; case dullahan::CT_NONE: - name = "cursor_no"; + name = "UI_CURSOR_NO"; break; case dullahan::CT_NODROP: case dullahan::CT_NOTALLOWED: - name = "cursor_no_locked"; + name = "UI_CURSOR_NOLOCKED"; break; case dullahan::CT_ZOOMIN: + name = "UI_CURSOR_TOOLZOOMIN"; + break; case dullahan::CT_ZOOMOUT: - name = "tool_zoomin"; + name = "UI_CURSOR_TOOLZOOMOUT"; break; case dullahan::CT_GRAB: - name = "tool_grab"; + name = "UI_CURSOR_TOOLGRAB"; break; //case dullahan::CT_GRABING: //case dullahan::CT_CUSTOM: diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZEALL.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZEALL.tif new file mode 100644 index 0000000000..85fec76fca Binary files /dev/null and b/indra/newview/cursors_mac/UI_CURSOR_SIZEALL.tif differ diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMOUT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMOUT.tif new file mode 100644 index 0000000000..d64a7f2b68 Binary files /dev/null and b/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMOUT.tif differ diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 8cf9f4a85c..661a520394 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -3193,58 +3193,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CURSOR_CHANGED, new cursor is " << plugin->getCursorName() << LL_ENDL; std::string cursor = plugin->getCursorName(); - - static const std::map cursor_name_to_enum - { - {std::string("arrow"), UI_CURSOR_ARROW}, - {std::string("wait"), UI_CURSOR_WAIT}, - {std::string("hand"), UI_CURSOR_HAND}, - {std::string("ibeam"), UI_CURSOR_IBEAM}, - {std::string("cross"), UI_CURSOR_CROSS}, - {std::string("split_nwse"), UI_CURSOR_SIZENWSE}, - {std::string("split_nesw"), UI_CURSOR_SIZENESW}, - {std::string("split_we"), UI_CURSOR_SIZEWE}, - {std::string("split_ns"), UI_CURSOR_SIZENS}, - {std::string("cursor_no"), UI_CURSOR_NO}, - {std::string("working"), UI_CURSOR_WORKING}, - {std::string("tool_grab"), UI_CURSOR_TOOLGRAB}, - {std::string("tool_land"), UI_CURSOR_TOOLLAND}, - {std::string("tool_focus"), UI_CURSOR_TOOLFOCUS}, - {std::string("tool_create"), UI_CURSOR_TOOLCREATE}, - {std::string("arrow_drag"), UI_CURSOR_ARROWDRAG}, - {std::string("arrow_copy"), UI_CURSOR_ARROWCOPY}, - {std::string("arrow_drag_multi"), UI_CURSOR_ARROWDRAGMULTI}, - {std::string("arrow_copy_multi"), UI_CURSOR_ARROWCOPYMULTI}, - {std::string("cursor_no_locked"), UI_CURSOR_NOLOCKED}, - {std::string("arrow_locked"), UI_CURSOR_ARROWLOCKED}, - {std::string("grab_locked"), UI_CURSOR_GRABLOCKED}, - {std::string("tool_translate"), UI_CURSOR_TOOLTRANSLATE}, - {std::string("tool_rotate"), UI_CURSOR_TOOLROTATE}, - {std::string("tool_scale"), UI_CURSOR_TOOLSCALE}, - {std::string("tool_camera"), UI_CURSOR_TOOLCAMERA}, - {std::string("tool_pan"), UI_CURSOR_TOOLPAN}, - {std::string("tool_zoomin"), UI_CURSOR_TOOLZOOMIN}, - {std::string("tool_pick_object3"), UI_CURSOR_TOOLPICKOBJECT3}, - {std::string("tool_play"), UI_CURSOR_TOOLPLAY}, - {std::string("tool_pause"), UI_CURSOR_TOOLPAUSE}, - {std::string("tool_media_open"), UI_CURSOR_TOOLMEDIAOPEN}, - {std::string("tool_pipette"), UI_CURSOR_PIPETTE}, - {std::string("tool_sit"), UI_CURSOR_TOOLSIT}, - {std::string("tool_buy"), UI_CURSOR_TOOLBUY}, - {std::string("tool_open"), UI_CURSOR_TOOLOPEN}, - {std::string("tool_pathfinding"), UI_CURSOR_TOOLPATHFINDING}, - }; - - std::map::const_iterator iter = cursor_name_to_enum.find(cursor); - if (iter != cursor_name_to_enum.end()) - { - mLastSetCursor = iter->second; - } - else - { - // for anything else, default to the arrow - mLastSetCursor = UI_CURSOR_ARROW; - } + mLastSetCursor = getCursorFromString(cursor); } break; diff --git a/indra/newview/res-sdl/lltoolzoomout.BMP b/indra/newview/res-sdl/lltoolzoomout.BMP index 7f958383ab..5bdf96f80d 100644 Binary files a/indra/newview/res-sdl/lltoolzoomout.BMP and b/indra/newview/res-sdl/lltoolzoomout.BMP differ diff --git a/indra/newview/res-sdl/sizeall.BMP b/indra/newview/res-sdl/sizeall.BMP new file mode 100644 index 0000000000..03d9bf4654 Binary files /dev/null and b/indra/newview/res-sdl/sizeall.BMP differ diff --git a/indra/newview/res/lltoolzoomout.cur b/indra/newview/res/lltoolzoomout.cur index b33e68d1a6..21e0ee9702 100644 Binary files a/indra/newview/res/lltoolzoomout.cur and b/indra/newview/res/lltoolzoomout.cur differ -- cgit v1.3 From 454c7f4543688126b2fa5c0560710f5a1733702e Mon Sep 17 00:00:00 2001 From: Callum Linden Date: Tue, 5 Oct 2021 14:37:48 -0700 Subject: Fix: SL-12320 The Viewer functionality is broken with an in-viewer enabled proxy --- autobuild.xml | 14 +-- indra/media_plugins/cef/media_plugin_cef.cpp | 104 ++++++++++++--------- indra/newview/llviewermedia.cpp | 6 +- .../default/xui/en/panel_preferences_setup.xml | 32 ++++--- 4 files changed, 90 insertions(+), 66 deletions(-) (limited to 'indra/newview/llviewermedia.cpp') diff --git a/autobuild.xml b/autobuild.xml index 4768bd25c6..efa04d0f63 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -580,9 +580,9 @@ archive hash - 49fff41e17e06cdf9eb0c737d20df52f + 6b5210f0f529b294e13e1a5ea4271363 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83411/779825/dullahan-1.12.2.202106220202_91.1.21_g9dd45fe_chromium-91.0.4472.114-darwin64-560751.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/88757/812363/dullahan-1.12.3.202110051826_91.1.21_g9dd45fe_chromium-91.0.4472.114-darwin64-564501.tar.bz2 name darwin64 @@ -592,9 +592,9 @@ archive hash - f51f324d50a2461cda273e84fa65e0ad + eb9b46761122a1746aff98de1115cc39 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83413/779836/dullahan-1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows-560751.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/88756/812368/dullahan-1.12.3.202110051827_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows-564501.tar.bz2 name windows @@ -604,16 +604,16 @@ archive hash - d3df46f6592715c75df2bf520c1ad68b + 0c8102b5375402704ea8302827e8182b url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/83412/779840/dullahan-1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows64-560751.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/88754/812351/dullahan-1.12.3.202110051815_91.1.21_g9dd45fe_chromium-91.0.4472.114-windows64-564501.tar.bz2 name windows64 version - 1.12.2.202106220213_91.1.21_g9dd45fe_chromium-91.0.4472.114 + 1.12.3.202110051815_91.1.21_g9dd45fe_chromium-91.0.4472.114 elfio diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 8465285d2b..567bab2acf 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -89,6 +89,9 @@ private: bool mCookiesEnabled; bool mPluginsEnabled; bool mJavascriptEnabled; + bool mProxyEnabled; + std::string mProxyHost; + int mProxyPort; bool mDisableGPU; bool mDisableNetworkService; bool mUseMockKeyChain; @@ -124,6 +127,9 @@ MediaPluginBase(host_send_func, host_user_data) mCookiesEnabled = true; mPluginsEnabled = false; mJavascriptEnabled = true; + mProxyEnabled = false; + mProxyHost = ""; + mProxyPort = 0; mDisableGPU = false; mDisableNetworkService = true; mUseMockKeyChain = true; @@ -513,50 +519,58 @@ void MediaPluginCEF::receiveMessage(const char* message_string) } else if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) { - if (message_name == "init") - { - // event callbacks from Dullahan - mCEFLib->setOnPageChangedCallback(std::bind(&MediaPluginCEF::onPageChangedCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); - mCEFLib->setOnCustomSchemeURLCallback(std::bind(&MediaPluginCEF::onCustomSchemeURLCallback, this, std::placeholders::_1)); - mCEFLib->setOnConsoleMessageCallback(std::bind(&MediaPluginCEF::onConsoleMessageCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - mCEFLib->setOnStatusMessageCallback(std::bind(&MediaPluginCEF::onStatusMessageCallback, this, std::placeholders::_1)); - mCEFLib->setOnTitleChangeCallback(std::bind(&MediaPluginCEF::onTitleChangeCallback, this, std::placeholders::_1)); - mCEFLib->setOnTooltipCallback(std::bind(&MediaPluginCEF::onTooltipCallback, this, std::placeholders::_1)); - mCEFLib->setOnLoadStartCallback(std::bind(&MediaPluginCEF::onLoadStartCallback, this)); - mCEFLib->setOnLoadEndCallback(std::bind(&MediaPluginCEF::onLoadEndCallback, this, std::placeholders::_1)); - mCEFLib->setOnLoadErrorCallback(std::bind(&MediaPluginCEF::onLoadError, this, std::placeholders::_1, std::placeholders::_2)); - mCEFLib->setOnAddressChangeCallback(std::bind(&MediaPluginCEF::onAddressChangeCallback, this, std::placeholders::_1)); - mCEFLib->setOnOpenPopupCallback(std::bind(&MediaPluginCEF::onOpenPopupCallback, this, std::placeholders::_1, std::placeholders::_2)); - mCEFLib->setOnHTTPAuthCallback(std::bind(&MediaPluginCEF::onHTTPAuthCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); - mCEFLib->setOnFileDialogCallback(std::bind(&MediaPluginCEF::onFileDialog, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); - mCEFLib->setOnCursorChangedCallback(std::bind(&MediaPluginCEF::onCursorChangedCallback, this, std::placeholders::_1)); - mCEFLib->setOnRequestExitCallback(std::bind(&MediaPluginCEF::onRequestExitCallback, this)); - mCEFLib->setOnJSDialogCallback(std::bind(&MediaPluginCEF::onJSDialogCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - mCEFLib->setOnJSBeforeUnloadCallback(std::bind(&MediaPluginCEF::onJSBeforeUnloadCallback, this)); - - dullahan::dullahan_settings settings; + if (message_name == "init") + { + // event callbacks from Dullahan + mCEFLib->setOnPageChangedCallback(std::bind(&MediaPluginCEF::onPageChangedCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); + mCEFLib->setOnCustomSchemeURLCallback(std::bind(&MediaPluginCEF::onCustomSchemeURLCallback, this, std::placeholders::_1)); + mCEFLib->setOnConsoleMessageCallback(std::bind(&MediaPluginCEF::onConsoleMessageCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + mCEFLib->setOnStatusMessageCallback(std::bind(&MediaPluginCEF::onStatusMessageCallback, this, std::placeholders::_1)); + mCEFLib->setOnTitleChangeCallback(std::bind(&MediaPluginCEF::onTitleChangeCallback, this, std::placeholders::_1)); + mCEFLib->setOnTooltipCallback(std::bind(&MediaPluginCEF::onTooltipCallback, this, std::placeholders::_1)); + mCEFLib->setOnLoadStartCallback(std::bind(&MediaPluginCEF::onLoadStartCallback, this)); + mCEFLib->setOnLoadEndCallback(std::bind(&MediaPluginCEF::onLoadEndCallback, this, std::placeholders::_1)); + mCEFLib->setOnLoadErrorCallback(std::bind(&MediaPluginCEF::onLoadError, this, std::placeholders::_1, std::placeholders::_2)); + mCEFLib->setOnAddressChangeCallback(std::bind(&MediaPluginCEF::onAddressChangeCallback, this, std::placeholders::_1)); + mCEFLib->setOnOpenPopupCallback(std::bind(&MediaPluginCEF::onOpenPopupCallback, this, std::placeholders::_1, std::placeholders::_2)); + mCEFLib->setOnHTTPAuthCallback(std::bind(&MediaPluginCEF::onHTTPAuthCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); + mCEFLib->setOnFileDialogCallback(std::bind(&MediaPluginCEF::onFileDialog, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); + mCEFLib->setOnCursorChangedCallback(std::bind(&MediaPluginCEF::onCursorChangedCallback, this, std::placeholders::_1)); + mCEFLib->setOnRequestExitCallback(std::bind(&MediaPluginCEF::onRequestExitCallback, this)); + mCEFLib->setOnJSDialogCallback(std::bind(&MediaPluginCEF::onJSDialogCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + mCEFLib->setOnJSBeforeUnloadCallback(std::bind(&MediaPluginCEF::onJSBeforeUnloadCallback, this)); + + dullahan::dullahan_settings settings; #if LL_WINDOWS - // As of CEF version 83+, for Windows versions, we need to tell CEF - // where the host helper process is since this DLL is not in the same - // dir as the executable that loaded it (SLPlugin.exe). The code in - // Dullahan that tried to figure out the location automatically uses - // the location of the exe which isn't helpful so we tell it explicitly. - char cur_dir_str[MAX_PATH]; - GetCurrentDirectoryA(MAX_PATH, cur_dir_str); - settings.host_process_path = std::string(cur_dir_str); + // As of CEF version 83+, for Windows versions, we need to tell CEF + // where the host helper process is since this DLL is not in the same + // dir as the executable that loaded it (SLPlugin.exe). The code in + // Dullahan that tried to figure out the location automatically uses + // the location of the exe which isn't helpful so we tell it explicitly. + char cur_dir_str[MAX_PATH]; + GetCurrentDirectoryA(MAX_PATH, cur_dir_str); + settings.host_process_path = std::string(cur_dir_str); #endif - settings.accept_language_list = mHostLanguage; - - // SL-15560: Product team overruled my change to set the default - // embedded background color to match the floater background - // and set it to white - settings.background_color = 0xffffffff; // white - - settings.cache_enabled = true; - settings.root_cache_path = mRootCachePath; - settings.cache_path = mCachePath; - settings.context_cache_path = mContextCachePath; - settings.cookies_enabled = mCookiesEnabled; + settings.accept_language_list = mHostLanguage; + + // SL-15560: Product team overruled my change to set the default + // embedded background color to match the floater background + // and set it to white + settings.background_color = 0xffffffff; // white + + settings.cache_enabled = true; + settings.root_cache_path = mRootCachePath; + settings.cache_path = mCachePath; + settings.context_cache_path = mContextCachePath; + settings.cookies_enabled = mCookiesEnabled; + + // configure proxy argument if enabled and valid + if (mProxyEnabled && mProxyHost.length()) + { + std::ostringstream proxy_url; + proxy_url << mProxyHost << ":" << mProxyPort; + settings.proxy_host_port = proxy_url.str(); + } settings.disable_gpu = mDisableGPU; #if LL_DARWIN settings.disable_network_service = mDisableNetworkService; @@ -883,6 +897,12 @@ void MediaPluginCEF::receiveMessage(const char* message_string) { mDisableGPU = message_in.getValueBoolean("disable"); } + else if (message_name == "proxy_setup") + { + mProxyEnabled = message_in.getValueBoolean("enable"); + mProxyHost = message_in.getValue("host"); + mProxyPort = message_in.getValueS32("port"); + } } else if (message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) { diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index d35dbda907..5de7744972 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1759,6 +1759,10 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_ // need to set agent string here before instance created media_source->setBrowserUserAgent(LLViewerMedia::getInstance()->getCurrentUserAgent()); + // configure and pass proxy setup based on debug settings that are + // configured by UI in prefs -> setup + media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort")); + media_source->setTarget(target); const std::string plugin_dir = gDirUtilp->getLLPluginDir(); @@ -1842,8 +1846,6 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) std::string ca_path = gDirUtilp->getCAFile(); media_source->addCertificateFilePath( ca_path ); - media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort")); - if(mClearCache) { mClearCache = false; diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index dff6f6e600..5e41ba4ae1 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -227,23 +227,25 @@ height="10" layout="topleft" left="30" - name="Proxy Settings 1" - mouse_opaque="false" - top_pad="10" - width="300"> - Proxy Settings: - - - Your system's existing proxy settings will be used + Proxy Settings: + + -- cgit v1.3 From a4431fe12f84d1c2a90d82603d670a0a4bb756e3 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 14 Jan 2022 15:36:00 +0200 Subject: SL-16638 don't allow downloading files from the built-in browser --- indra/newview/llfloater360capture.cpp | 1 + indra/newview/llmediactrl.cpp | 23 +++++++++++++++--- indra/newview/llmediactrl.h | 5 +++- indra/newview/llviewermedia.cpp | 45 ++++------------------------------- indra/newview/llviewermenufile.cpp | 20 ++++++++++++++++ indra/newview/llviewermenufile.h | 14 +++++++++++ 6 files changed, 63 insertions(+), 45 deletions(-) (limited to 'indra/newview/llviewermedia.cpp') diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 745f154535..ffbb0bbee9 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -102,6 +102,7 @@ BOOL LLFloater360Capture::postBuild() mWebBrowser = getChild("360capture_contents"); mWebBrowser->addObserver(this); + mWebBrowser->setAllowFileDownload(true); // There is a group of radio buttons that define the quality // by each having a 'value' that is returns equal to the pixel diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 0affe8efb4..5393d0b0b7 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -46,6 +46,7 @@ #include "lluictrlfactory.h" // LLDefaultChildRegistry #include "llkeyboard.h" #include "llviewermenu.h" +#include "llviewermenufile.h" // LLFilePickerThread // linden library includes #include "llfocusmgr.h" @@ -105,7 +106,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) : mTrusted(p.trusted_content), mWindowShade(NULL), mHoverTextChanged(false), - mContextMenu(NULL) + mContextMenu(NULL), + mAllowFileDownload(false) { { LLColor4 color = p.caret_color().get(); @@ -1129,8 +1131,23 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) case MEDIA_EVENT_FILE_DOWNLOAD: { - //llinfos << "Media event - file download requested - filename is " << self->getFileDownloadFilename() << llendl; - //LLNotificationsUtil::add("MediaFileDownloadUnsupported"); + if (mAllowFileDownload) + { + // pick a file from SAVE FILE dialog + // for now the only thing that should be allowed to save is 360s + std::string suggested_filename = self->getFileDownloadFilename(); + LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL; + if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos) + filter = LLFilePicker::FFSAVE_JPEG; + if (suggested_filename.find(".png") != std::string::npos) + filter = LLFilePicker::FFSAVE_PNG; + + (new LLMediaFilePicker(self, filter, suggested_filename))->getFile(); + } + else + { + LLNotificationsUtil::add("MediaFileDownloadUnsupported"); + } }; break; diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index bd24c47a4f..bc4cbaae68 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -151,6 +151,8 @@ public: void setTrustedContent(bool trusted); + void setAllowFileDownload(bool allow) { mAllowFileDownload = allow; } + // over-rides virtual BOOL handleKeyHere( KEY key, MASK mask); virtual BOOL handleKeyUpHere(KEY key, MASK mask); @@ -205,7 +207,8 @@ public: mClearCache, mHoverTextChanged, mDecoupleTextureSize, - mUpdateScrolls; + mUpdateScrolls, + mAllowFileDownload; std::string mHomePageUrl, mHomePageMimeType, diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 55a8489f25..07190d0538 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -78,41 +78,12 @@ #include // for SkinFolder listener #include -class LLMediaFilePicker : public LLFilePickerThread // deletes itself when done -{ -public: - LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) - : LLFilePickerThread(filter, get_multiple), - mPlugin(plugin->getSharedPrt()) - { - } - - LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) - : LLFilePickerThread(filter, proposed_name), - mPlugin(plugin->getSharedPrt()) - { - } - - virtual void notify(const std::vector& filenames) - { - mPlugin->sendPickFileResponse(mResponses); - mPlugin = NULL; - } - -private: - boost::shared_ptr mPlugin; -}; void init_threaded_picker_load_dialog(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) { (new LLMediaFilePicker(plugin, filter, get_multiple))->getFile(); // will delete itself } -void init_threaded_picker_save_dialog(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, std::string &proposed_name) -{ - (new LLMediaFilePicker(plugin, filter, proposed_name))->getFile(); // will delete itself -} - /////////////////////////////////////////////////////////////////////////////// // Move this to its own file. @@ -3227,18 +3198,10 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla case LLViewerMediaObserver::MEDIA_EVENT_FILE_DOWNLOAD: { LL_DEBUGS("Media") << "Media event - file download requested - filename is " << plugin->getFileDownloadFilename() << LL_ENDL; - // pick a file from SAVE FILE dialog - - // need a better algorithm that this or else, pass in type of save type - // from event that initiated it - this is okay for now - only thing - // that saves is 360s - std::string suggested_filename = plugin->getFileDownloadFilename(); - LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL; - if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos) - filter = LLFilePicker::FFSAVE_JPEG; - if (suggested_filename.find(".png") != std::string::npos) - filter = LLFilePicker::FFSAVE_PNG; - init_threaded_picker_save_dialog(plugin, filter, suggested_filename); + + //unblock media plugin + const std::vector empty_response; + plugin->sendPickFileResponse(empty_response); } break; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 27f66b7a55..28ff69eaf5 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -46,6 +46,7 @@ #include "llimagejpeg.h" #include "llimagetga.h" #include "llinventorymodel.h" // gInventory +#include "llpluginclassmedia.h" #include "llresourcedata.h" #include "lltoast.h" #include "llfloaterperms.h" @@ -251,6 +252,25 @@ void LLFilePickerReplyThread::notify(const std::vector& filenames) } } + +LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple) + : LLFilePickerThread(filter, get_multiple), + mPlugin(plugin->getSharedPrt()) +{ +} + +LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) + : LLFilePickerThread(filter, proposed_name), + mPlugin(plugin->getSharedPrt()) +{ +} + +void LLMediaFilePicker::notify(const std::vector& filenames) +{ + mPlugin->sendPickFileResponse(mResponses); + mPlugin = NULL; +} + //============================================================================ #if LL_WINDOWS diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 4e6250d9b4..beeac418d9 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -37,6 +37,7 @@ #include "llviewerassetupload.h" class LLTransactionID; +class LLPluginClassMedia; void init_menu_file(); @@ -71,6 +72,7 @@ void assign_defaults_and_show_upload_message( const std::string& display_name, std::string& description); +//consider moving all file pickers below to more suitable place class LLFilePickerThread : public LLThread { //multi-threaded file picker (runs system specific file picker in background and calls "notify" from main thread) public: @@ -127,5 +129,17 @@ private: file_picked_signal_t* mFailureSignal; }; +class LLMediaFilePicker : public LLFilePickerThread +{ +public: + LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple); + LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name); + + virtual void notify(const std::vector& filenames); + +private: + boost::shared_ptr mPlugin; +}; + #endif -- cgit v1.3