Automated merge with ssh://rick@hg.lindenlab.com/viewer/viewer-2-0/
commit
8671bfb930
|
|
@ -1,11 +1,11 @@
|
|||
/**
|
||||
/**
|
||||
* @file slplugin.cpp
|
||||
* @brief Loader shell for plugins, intended to be launched by the plugin host application, which directly loads a plugin dynamic library.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2008&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2008, Linden Research, Inc.
|
||||
*
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
|
|
@ -13,16 +13,16 @@
|
|||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlife.com/developers/opensource/gplv2
|
||||
*
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at http://secondlife.com/developers/opensource/flossexception
|
||||
*
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
|
|
@ -48,15 +48,15 @@
|
|||
|
||||
/*
|
||||
On Mac OS, since we call WaitNextEvent, this process will show up in the dock unless we set the LSBackgroundOnly flag in the Info.plist.
|
||||
|
||||
|
||||
Normally non-bundled binaries don't have an info.plist file, but it's possible to embed one in the binary by adding this to the linker flags:
|
||||
|
||||
|
||||
-sectcreate __TEXT __info_plist /path/to/slplugin_info.plist
|
||||
|
||||
|
||||
which means adding this to the gcc flags:
|
||||
|
||||
|
||||
-Wl,-sectcreate,__TEXT,__info_plist,/path/to/slplugin_info.plist
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#if LL_DARWIN || LL_LINUX
|
||||
|
|
@ -67,7 +67,7 @@ static void crash_handler(int sig)
|
|||
// TODO: add our own crash reporting
|
||||
_exit(1);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if LL_WINDOWS
|
||||
#include <windows.h>
|
||||
|
|
@ -80,7 +80,48 @@ LONG WINAPI myWin32ExceptionHandler( struct _EXCEPTION_POINTERS* exception_infop
|
|||
//std::cerr << "intercepted an unhandled exception and will exit immediately." << std::endl;
|
||||
|
||||
// TODO: replace exception handler before we exit?
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
// Taken from : http://blog.kalmbachnet.de/?postid=75
|
||||
// The MSVC 2005 CRT forces the call of the default-debugger (normally Dr.Watson)
|
||||
// even with the other exception handling code. This (terrifying) piece of code
|
||||
// patches things so that doesn't happen.
|
||||
LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(
|
||||
LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BOOL PreventSetUnhandledExceptionFilter()
|
||||
{
|
||||
// WARNING: This won't work on 64-bit Windows systems so we turn it off it.
|
||||
// It should work for any flavor of 32-bit Windows we care about.
|
||||
// If it's off, sometimes you will see an OS message when a plugin crashes
|
||||
#ifndef _WIN64
|
||||
HMODULE hKernel32 = LoadLibraryA( "kernel32.dll" );
|
||||
if ( NULL == hKernel32 )
|
||||
return FALSE;
|
||||
|
||||
void *pOrgEntry = GetProcAddress( hKernel32, "SetUnhandledExceptionFilter" );
|
||||
if( NULL == pOrgEntry )
|
||||
return FALSE;
|
||||
|
||||
unsigned char newJump[ 100 ];
|
||||
DWORD dwOrgEntryAddr = (DWORD)pOrgEntry;
|
||||
dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far
|
||||
void *pNewFunc = &MyDummySetUnhandledExceptionFilter;
|
||||
DWORD dwNewEntryAddr = (DWORD) pNewFunc;
|
||||
DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr;
|
||||
|
||||
newJump[ 0 ] = 0xE9; // JMP absolute
|
||||
memcpy( &newJump[ 1 ], &dwRelativeAddr, sizeof( pNewFunc ) );
|
||||
SIZE_T bytesWritten;
|
||||
BOOL bRet = WriteProcessMemory( GetCurrentProcess(), pOrgEntry, newJump, sizeof( pNewFunc ) + 1, &bytesWritten );
|
||||
return bRet;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -91,6 +132,7 @@ void initExceptionHandler()
|
|||
|
||||
// save old exception handler in case we need to restore it at the end
|
||||
prev_filter = SetUnhandledExceptionFilter( myWin32ExceptionHandler );
|
||||
PreventSetUnhandledExceptionFilter();
|
||||
}
|
||||
|
||||
bool checkExceptionHandler()
|
||||
|
|
@ -99,6 +141,8 @@ bool checkExceptionHandler()
|
|||
LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
|
||||
prev_filter = SetUnhandledExceptionFilter(myWin32ExceptionHandler);
|
||||
|
||||
PreventSetUnhandledExceptionFilter();
|
||||
|
||||
if (prev_filter != myWin32ExceptionHandler)
|
||||
{
|
||||
LL_WARNS("AppInit") << "Our exception handler (" << (void *)myWin32ExceptionHandler << ") replaced with " << prev_filter << "!" << LL_ENDL;
|
||||
|
|
@ -122,7 +166,7 @@ bool checkExceptionHandler()
|
|||
}
|
||||
#endif
|
||||
|
||||
// If this application on Windows platform is a console application, a console is always
|
||||
// If this application on Windows platform is a console application, a console is always
|
||||
// created which is bad. Making it a Windows "application" via CMake settings but not
|
||||
// adding any code to explicitly create windows does the right thing.
|
||||
#if LL_WINDOWS
|
||||
|
|
@ -133,7 +177,7 @@ int main(int argc, char **argv)
|
|||
{
|
||||
ll_init_apr();
|
||||
|
||||
// Set up llerror logging
|
||||
// Set up llerror logging
|
||||
{
|
||||
LLError::initForApplication(".");
|
||||
LLError::setDefaultLevel(LLError::LEVEL_INFO);
|
||||
|
|
@ -146,14 +190,14 @@ int main(int argc, char **argv)
|
|||
{
|
||||
LL_ERRS("slplugin") << "usage: " << "SLPlugin" << " launcher_port" << LL_ENDL;
|
||||
};
|
||||
|
||||
|
||||
U32 port = 0;
|
||||
if(!LLStringUtil::convertToU32(lpCmdLine, port))
|
||||
{
|
||||
LL_ERRS("slplugin") << "port number must be numeric" << LL_ENDL;
|
||||
};
|
||||
|
||||
// Insert our exception handler into the system so this plugin doesn't
|
||||
// Insert our exception handler into the system so this plugin doesn't
|
||||
// display a crash message if something bad happens. The host app will
|
||||
// see the missing heartbeat and log appropriately.
|
||||
initExceptionHandler();
|
||||
|
|
@ -162,7 +206,7 @@ int main(int argc, char **argv)
|
|||
{
|
||||
LL_ERRS("slplugin") << "usage: " << argv[0] << " launcher_port" << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
U32 port = 0;
|
||||
if(!LLStringUtil::convertToU32(argv[1], port))
|
||||
{
|
||||
|
|
@ -183,17 +227,17 @@ int main(int argc, char **argv)
|
|||
LLPluginProcessChild *plugin = new LLPluginProcessChild();
|
||||
|
||||
plugin->init(port);
|
||||
|
||||
|
||||
LLTimer timer;
|
||||
timer.start();
|
||||
|
||||
#if LL_WINDOWS
|
||||
checkExceptionHandler();
|
||||
#endif
|
||||
|
||||
|
||||
while(!plugin->isDone())
|
||||
{
|
||||
timer.reset();
|
||||
timer.reset();
|
||||
plugin->idle();
|
||||
#if LL_DARWIN
|
||||
{
|
||||
|
|
@ -204,7 +248,7 @@ int main(int argc, char **argv)
|
|||
#endif
|
||||
F64 elapsed = timer.getElapsedTimeF64();
|
||||
F64 remaining = plugin->getSleepTime() - elapsed;
|
||||
|
||||
|
||||
if(remaining <= 0.0f)
|
||||
{
|
||||
// We've already used our full allotment.
|
||||
|
|
@ -217,26 +261,26 @@ int main(int argc, char **argv)
|
|||
{
|
||||
|
||||
// LL_INFOS("slplugin") << "elapsed = " << elapsed * 1000.0f << " ms, remaining = " << remaining * 1000.0f << " ms, sleeping for " << remaining * 1000.0f << " ms" << LL_ENDL;
|
||||
// timer.reset();
|
||||
|
||||
// timer.reset();
|
||||
|
||||
// This also services the network as needed.
|
||||
plugin->sleep(remaining);
|
||||
|
||||
|
||||
// LL_INFOS("slplugin") << "slept for "<< timer.getElapsedTimeF64() * 1000.0f << " ms" << LL_ENDL;
|
||||
}
|
||||
|
||||
#if LL_WINDOWS
|
||||
// More agressive checking of interfering exception handlers.
|
||||
// Doesn't appear to be required so far - even for plugins
|
||||
// that do crash with a single call to the intercept
|
||||
// Doesn't appear to be required so far - even for plugins
|
||||
// that do crash with a single call to the intercept
|
||||
// exception handler such as QuickTime.
|
||||
//checkExceptionHandler();
|
||||
#endif
|
||||
}
|
||||
|
||||
delete plugin;
|
||||
|
||||
ll_cleanup_apr();
|
||||
|
||||
ll_cleanup_apr();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,12 +72,13 @@ LLProgressBar::~LLProgressBar()
|
|||
void LLProgressBar::draw()
|
||||
{
|
||||
static LLTimer timer;
|
||||
|
||||
LLUIImagePtr bar_fg_imagep = LLUI::getUIImage("progressbar_fill.tga");
|
||||
F32 alpha = getDrawContext().mAlpha;
|
||||
|
||||
mImageBar->draw(getLocalRect(), mColorBackground.get());
|
||||
LLColor4 image_bar_color = mColorBackground.get();
|
||||
image_bar_color.setAlpha(alpha);
|
||||
mImageBar->draw(getLocalRect(), image_bar_color);
|
||||
|
||||
F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
|
||||
alpha *= 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
|
||||
LLColor4 bar_color = mColorBar.get();
|
||||
bar_color.mV[VALPHA] *= alpha; // modulate alpha
|
||||
LLRect progress_rect = getLocalRect();
|
||||
|
|
|
|||
|
|
@ -66,10 +66,6 @@
|
|||
glh::matrix4f glh_get_current_modelview();
|
||||
glh::matrix4f glh_get_current_projection();
|
||||
|
||||
const F32 ZOOM_NEAR_PADDING = 1.0f;
|
||||
const F32 ZOOM_MEDIUM_PADDING = 1.15f;
|
||||
const F32 ZOOM_FAR_PADDING = 1.5f;
|
||||
|
||||
// Warning: make sure these two match!
|
||||
const LLPanelPrimMediaControls::EZoomLevel LLPanelPrimMediaControls::kZoomLevels[] = { ZOOM_NONE, ZOOM_MEDIUM };
|
||||
const int LLPanelPrimMediaControls::kNumZoomLevels = 2;
|
||||
|
|
@ -86,7 +82,13 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
|
|||
mUpdateSlider(true),
|
||||
mClearFaceOnFade(false),
|
||||
mCurrentRate(0.0),
|
||||
mMovieDuration(0.0)
|
||||
mMovieDuration(0.0),
|
||||
mTargetObjectID(LLUUID::null),
|
||||
mTargetObjectFace(0),
|
||||
mTargetImplID(LLUUID::null),
|
||||
mTargetObjectNormal(LLVector3::zero),
|
||||
mZoomObjectID(LLUUID::null),
|
||||
mZoomObjectFace(0)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("MediaCtrl.Close", boost::bind(&LLPanelPrimMediaControls::onClickClose, this));
|
||||
mCommitCallbackRegistrar.add("MediaCtrl.Back", boost::bind(&LLPanelPrimMediaControls::onClickBack, this));
|
||||
|
|
@ -152,6 +154,11 @@ BOOL LLPanelPrimMediaControls::postBuild()
|
|||
mRightBookend = getChild<LLUICtrl>("right_bookend");
|
||||
mBackgroundImage = LLUI::getUIImage(getString("control_background_image_name"));
|
||||
LLStringUtil::convertToF32(getString("skip_step"), mSkipStep);
|
||||
LLStringUtil::convertToS32(getString("min_width"), mMinWidth);
|
||||
LLStringUtil::convertToS32(getString("min_height"), mMinHeight);
|
||||
LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding);
|
||||
LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding);
|
||||
LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding);
|
||||
|
||||
// These are currently removed...but getChild creates a "dummy" widget.
|
||||
// This class handles them missing.
|
||||
|
|
@ -257,9 +264,6 @@ LLPluginClassMedia* LLPanelPrimMediaControls::getTargetMediaPlugin()
|
|||
|
||||
void LLPanelPrimMediaControls::updateShape()
|
||||
{
|
||||
const S32 MIN_HUD_WIDTH=400;
|
||||
const S32 MIN_HUD_HEIGHT=120;
|
||||
|
||||
LLViewerMediaImpl* media_impl = getTargetMediaImpl();
|
||||
LLViewerObject* objectp = getTargetObject();
|
||||
|
||||
|
|
@ -279,7 +283,7 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
|
||||
bool can_navigate = parcel->getMediaAllowNavigate();
|
||||
bool enabled = false;
|
||||
bool is_zoomed = (mCurrentZoom != ZOOM_NONE);
|
||||
bool is_zoomed = (mCurrentZoom != ZOOM_NONE) && (mTargetObjectID == mZoomObjectID) && (mTargetObjectFace == mZoomObjectFace);
|
||||
// There is no such thing as "has_focus" being different from normal controls set
|
||||
// anymore (as of user feedback from bri 10/09). So we cheat here and force 'has_focus'
|
||||
// to 'true' (or, actually, we use a setting)
|
||||
|
|
@ -309,7 +313,7 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
mStopCtrl->setVisible(false);
|
||||
mHomeCtrl->setVisible(has_focus);
|
||||
mZoomCtrl->setVisible(!is_zoomed);
|
||||
mUnzoomCtrl->setVisible(has_focus && is_zoomed);
|
||||
mUnzoomCtrl->setVisible(is_zoomed);
|
||||
mOpenCtrl->setVisible(true);
|
||||
mMediaAddressCtrl->setVisible(has_focus && !mini_controls);
|
||||
mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls);
|
||||
|
|
@ -332,13 +336,12 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
|
||||
if(media_plugin && media_plugin->pluginSupportsMediaTime())
|
||||
{
|
||||
mReloadCtrl->setEnabled(FALSE);
|
||||
mReloadCtrl->setVisible(FALSE);
|
||||
mReloadCtrl->setEnabled(false);
|
||||
mReloadCtrl->setVisible(false);
|
||||
mMediaStopCtrl->setVisible(has_focus);
|
||||
mHomeCtrl->setVisible(FALSE);
|
||||
// No nav controls
|
||||
mBackCtrl->setVisible(FALSE);
|
||||
mFwdCtrl->setEnabled(FALSE);
|
||||
mHomeCtrl->setVisible(has_focus);
|
||||
mBackCtrl->setVisible(false);
|
||||
mFwdCtrl->setVisible(false);
|
||||
mMediaAddressCtrl->setVisible(false);
|
||||
mMediaAddressCtrl->setEnabled(false);
|
||||
mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls);
|
||||
|
|
@ -416,7 +419,6 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
mPlayCtrl->setVisible(FALSE);
|
||||
mPauseCtrl->setEnabled(TRUE);
|
||||
mPauseCtrl->setVisible(has_focus);
|
||||
mMediaStopCtrl->setEnabled(TRUE);
|
||||
|
||||
break;
|
||||
case LLPluginClassMediaOwner::MEDIA_PAUSED:
|
||||
|
|
@ -425,7 +427,6 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
mPauseCtrl->setVisible(FALSE);
|
||||
mPlayCtrl->setEnabled(TRUE);
|
||||
mPlayCtrl->setVisible(has_focus);
|
||||
mMediaStopCtrl->setEnabled(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -508,12 +509,10 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
{
|
||||
mMediaProgressPanel->setVisible(true);
|
||||
mMediaProgressBar->setPercent(media_plugin->getProgressPercent());
|
||||
gFocusMgr.setTopCtrl(mMediaProgressPanel);
|
||||
}
|
||||
else if (mMediaProgressPanel->getVisible())
|
||||
else
|
||||
{
|
||||
mMediaProgressPanel->setVisible(false);
|
||||
gFocusMgr.setTopCtrl(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -599,12 +598,12 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
}
|
||||
|
||||
LLCoordGL screen_min;
|
||||
screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (min.mV[VX] + 1.f) * 0.5f);
|
||||
screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (min.mV[VY] + 1.f) * 0.5f);
|
||||
screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f);
|
||||
screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f);
|
||||
|
||||
LLCoordGL screen_max;
|
||||
screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (max.mV[VX] + 1.f) * 0.5f);
|
||||
screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (max.mV[VY] + 1.f) * 0.5f);
|
||||
screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (max.mV[VX] + 1.f) * 0.5f);
|
||||
screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (max.mV[VY] + 1.f) * 0.5f);
|
||||
|
||||
// grow panel so that screenspace bounding box fits inside "media_region" element of HUD
|
||||
LLRect media_controls_rect;
|
||||
|
|
@ -613,14 +612,15 @@ void LLPanelPrimMediaControls::updateShape()
|
|||
media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom;
|
||||
media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;
|
||||
media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
|
||||
|
||||
LLRect old_hud_rect = media_controls_rect;
|
||||
|
||||
// keep all parts of HUD on-screen
|
||||
media_controls_rect.intersectWith(getParent()->getLocalRect());
|
||||
if (mCurrentZoom != ZOOM_NONE)
|
||||
media_controls_rect.mBottom -= mMediaControlsStack->getRect().getHeight() + mMediaProgressPanel->getRect().getHeight();
|
||||
|
||||
// clamp to minimum size, keeping centered
|
||||
media_controls_rect.setCenterAndSize(media_controls_rect.getCenterX(), media_controls_rect.getCenterY(),
|
||||
llmax(MIN_HUD_WIDTH, media_controls_rect.getWidth()), llmax(MIN_HUD_HEIGHT, media_controls_rect.getHeight()));
|
||||
llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight()));
|
||||
|
||||
setShape(media_controls_rect, true);
|
||||
|
||||
|
|
@ -968,17 +968,17 @@ void LLPanelPrimMediaControls::updateZoom()
|
|||
}
|
||||
case ZOOM_FAR:
|
||||
{
|
||||
zoom_padding = ZOOM_FAR_PADDING;
|
||||
zoom_padding = mZoomFarPadding;
|
||||
break;
|
||||
}
|
||||
case ZOOM_MEDIUM:
|
||||
{
|
||||
zoom_padding = ZOOM_MEDIUM_PADDING;
|
||||
zoom_padding = mZoomMediumPadding;
|
||||
break;
|
||||
}
|
||||
case ZOOM_NEAR:
|
||||
{
|
||||
zoom_padding = ZOOM_NEAR_PADDING;
|
||||
zoom_padding = mZoomNearPadding;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -988,9 +988,16 @@ void LLPanelPrimMediaControls::updateZoom()
|
|||
}
|
||||
}
|
||||
|
||||
if (zoom_padding > 0.0f)
|
||||
if (zoom_padding > 0.0f)
|
||||
{
|
||||
LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding);
|
||||
}
|
||||
|
||||
// Remember the object ID/face we zoomed into, so we can update the zoom icon appropriately
|
||||
mZoomObjectID = mTargetObjectID;
|
||||
mZoomObjectFace = mTargetObjectFace;
|
||||
}
|
||||
|
||||
void LLPanelPrimMediaControls::onScrollUp(void* user_data)
|
||||
{
|
||||
LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data);
|
||||
|
|
|
|||
|
|
@ -160,6 +160,11 @@ private:
|
|||
LLUICtrl *mRightBookend;
|
||||
LLUIImage* mBackgroundImage;
|
||||
F32 mSkipStep;
|
||||
S32 mMinWidth;
|
||||
S32 mMinHeight;
|
||||
F32 mZoomNearPadding;
|
||||
F32 mZoomMediumPadding;
|
||||
F32 mZoomFarPadding;
|
||||
|
||||
LLUICtrl *mMediaPanelScroll;
|
||||
LLButton *mScrollUpCtrl;
|
||||
|
|
@ -190,6 +195,9 @@ private:
|
|||
S32 mTargetObjectFace;
|
||||
LLUUID mTargetImplID;
|
||||
LLVector3 mTargetObjectNormal;
|
||||
|
||||
LLUUID mZoomObjectID;
|
||||
S32 mZoomObjectFace;
|
||||
};
|
||||
|
||||
#endif // LL_PANELPRIMMEDIACONTROLS_H
|
||||
|
|
|
|||
|
|
@ -138,15 +138,6 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
|
|||
}
|
||||
else
|
||||
{
|
||||
if(mFocusedImplID.notNull())
|
||||
{
|
||||
if(mMediaControls.get())
|
||||
{
|
||||
// Don't reset camera zoom by default, just tell the controls they're no longer controlling zoom.
|
||||
mMediaControls.get()->resetZoomLevel(false);
|
||||
}
|
||||
}
|
||||
|
||||
if(hasFocus())
|
||||
{
|
||||
gFocusMgr.setKeyboardFocus(NULL);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,11 @@
|
|||
width="800">
|
||||
<string name="control_background_image_name">Inspector_Background</string>
|
||||
<string name="skip_step">0.2</string>
|
||||
<string name="min_width">400</string>
|
||||
<string name="min_height">120</string>
|
||||
<string name="zoom_near_padding">1.0</string>
|
||||
<string name="zoom_medium_padding">1.25</string>
|
||||
<string name="zoom_far_padding">1.5</string>
|
||||
<panel
|
||||
name="media_region"
|
||||
bottom="125"
|
||||
|
|
@ -20,7 +25,7 @@
|
|||
name="media_controls"
|
||||
follows="left|right"
|
||||
animate="false"
|
||||
height="32"
|
||||
height="26"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
orientation="horizontal"
|
||||
|
|
@ -235,18 +240,17 @@
|
|||
width="190"
|
||||
min_width="90">
|
||||
<!--
|
||||
RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN
|
||||
|
||||
<combo_box
|
||||
name="media_address_url"
|
||||
allow_text_entry="true"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
max_chars="1024"
|
||||
tool_tip = "Media URL"
|
||||
<combo_box.commit_callback
|
||||
function="MediaCtrl.CommitURL" />
|
||||
</combo_box>
|
||||
RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN
|
||||
<combo_box
|
||||
name="media_address_url"
|
||||
allow_text_entry="true"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
max_chars="1024"
|
||||
tool_tip = "Media URL">
|
||||
<combo_box.commit_callback
|
||||
function="MediaCtrl.CommitURL" />
|
||||
</combo_box>
|
||||
-->
|
||||
<line_editor
|
||||
name="media_address_url"
|
||||
|
|
@ -304,17 +308,17 @@ function="MediaCtrl.CommitURL" />
|
|||
user_resize="false"
|
||||
follows="left|right|top|bottom"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
min_width="100"
|
||||
width="200">
|
||||
<slider_bar
|
||||
name="media_play_slider"
|
||||
follows="left|right|top"
|
||||
height="22"
|
||||
height="16"
|
||||
increment="0.05"
|
||||
initial_value="0.5"
|
||||
layout="topleft"
|
||||
tool_tip="Movie play progress"
|
||||
top="8"
|
||||
min_width="100"
|
||||
width="200">
|
||||
<slider_bar.commit_callback
|
||||
|
|
@ -619,7 +623,7 @@ function="MediaCtrl.CommitURL" />
|
|||
</layout_stack>
|
||||
<layout_stack
|
||||
follows="left|right|bottom"
|
||||
height="32"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
animate="false"
|
||||
left="0"
|
||||
|
|
@ -632,7 +636,7 @@ function="MediaCtrl.CommitURL" />
|
|||
user_resize="false" />
|
||||
<panel
|
||||
name="media_progress_indicator"
|
||||
height="22"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
top="0"
|
||||
|
|
@ -644,6 +648,7 @@ function="MediaCtrl.CommitURL" />
|
|||
name="media_progress_bar"
|
||||
color_bar="1 1 1 0.96"
|
||||
follows="left|right|top"
|
||||
top="5"
|
||||
height="8"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
|
|
|
|||
Loading…
Reference in New Issue