mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 15:59:49 +02:00
Merge branch 'master' of github.com:highfidelity/hifi into iconChanges
This commit is contained in:
commit
a954ef6068
28 changed files with 213 additions and 114 deletions
1
BUILD.md
1
BUILD.md
|
@ -106,3 +106,4 @@ The following build options can be used when running CMake
|
||||||
#### Devices
|
#### Devices
|
||||||
|
|
||||||
You can support external input/output devices such as Leap Motion, MIDI, and more by adding each individual SDK in the visible building path. Refer to the readme file available in each device folder in [interface/external/](interface/external) for the detailed explanation of the requirements to use the device.
|
You can support external input/output devices such as Leap Motion, MIDI, and more by adding each individual SDK in the visible building path. Refer to the readme file available in each device folder in [interface/external/](interface/external) for the detailed explanation of the requirements to use the device.
|
||||||
|
|
|
@ -1735,7 +1735,12 @@ void DomainServer::nodePingMonitor() {
|
||||||
nodeList->eachNode([now](const SharedNodePointer& node) {
|
nodeList->eachNode([now](const SharedNodePointer& node) {
|
||||||
quint64 lastHeard = now - node->getLastHeardMicrostamp();
|
quint64 lastHeard = now - node->getLastHeardMicrostamp();
|
||||||
if (lastHeard > 2 * USECS_PER_SECOND) {
|
if (lastHeard > 2 * USECS_PER_SECOND) {
|
||||||
qCDebug(domain_server) << "Haven't heard from " << node->getPublicSocket() << " in " << lastHeard / USECS_PER_MSEC << " msec";
|
QString username;
|
||||||
|
DomainServerNodeData* nodeData = static_cast<DomainServerNodeData*>(node->getLinkedData());
|
||||||
|
if (nodeData) {
|
||||||
|
username = nodeData->getUsername();
|
||||||
|
}
|
||||||
|
qCDebug(domain_server) << "Haven't heard from " << node->getPublicSocket() << username << " in " << lastHeard / USECS_PER_MSEC << " msec";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,14 @@ import QtQuick 2.4
|
||||||
import controlsUit 1.0 as HifiControlsUit
|
import controlsUit 1.0 as HifiControlsUit
|
||||||
import stylesUit 1.0 as HifiStylesUit
|
import stylesUit 1.0 as HifiStylesUit
|
||||||
|
|
||||||
import "LoginDialog"
|
|
||||||
|
|
||||||
FocusScope {
|
FocusScope {
|
||||||
id: root
|
id: root
|
||||||
HifiStylesUit.HifiConstants { id: hifi }
|
|
||||||
objectName: "LoginDialog"
|
objectName: "LoginDialog"
|
||||||
property bool shown: true
|
property bool shown: true
|
||||||
visible: shown
|
visible: shown
|
||||||
|
|
||||||
|
HifiStylesUit.HifiConstants { id: hifi }
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
readonly property bool isTablet: false
|
readonly property bool isTablet: false
|
||||||
|
@ -33,12 +32,17 @@ FocusScope {
|
||||||
property bool keyboardRaised: false
|
property bool keyboardRaised: false
|
||||||
property bool punctuationMode: false
|
property bool punctuationMode: false
|
||||||
property bool isPassword: false
|
property bool isPassword: false
|
||||||
property string title: ""
|
|
||||||
property string text: ""
|
|
||||||
property int titleWidth: 0
|
|
||||||
property alias bannerWidth: banner.width
|
property alias bannerWidth: banner.width
|
||||||
property alias bannerHeight: banner.height
|
property alias bannerHeight: banner.height
|
||||||
|
|
||||||
|
property string title: ""
|
||||||
|
property string text: ""
|
||||||
|
|
||||||
|
property int titleWidth: 0
|
||||||
|
|
||||||
|
property bool isHMD: HMD.active
|
||||||
|
|
||||||
function tryDestroy() {
|
function tryDestroy() {
|
||||||
root.destroy()
|
root.destroy()
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,43 +23,36 @@ FocusScope {
|
||||||
objectName: "LoginDialog"
|
objectName: "LoginDialog"
|
||||||
visible: true
|
visible: true
|
||||||
|
|
||||||
|
HifiStylesUit.HifiConstants { id: hifi }
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
property var tabletProxy: Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
readonly property bool isTablet: true
|
||||||
|
readonly property bool isOverlay: false
|
||||||
property bool isHMD: HMD.active
|
|
||||||
property bool gotoPreviousApp: false;
|
|
||||||
|
|
||||||
|
property string iconText: hifi.glyphs.avatar
|
||||||
|
property int iconSize: 35
|
||||||
property bool keyboardEnabled: false
|
property bool keyboardEnabled: false
|
||||||
property bool keyboardRaised: false
|
property bool keyboardRaised: false
|
||||||
property bool punctuationMode: false
|
property bool punctuationMode: false
|
||||||
property bool isPassword: false
|
property bool isPassword: false
|
||||||
|
|
||||||
readonly property bool isTablet: true
|
|
||||||
readonly property bool isOverlay: false
|
|
||||||
property alias text: loginKeyboard.mirroredText
|
|
||||||
|
|
||||||
property int titleWidth: 0
|
|
||||||
property alias bannerWidth: banner.width
|
property alias bannerWidth: banner.width
|
||||||
property alias bannerHeight: banner.height
|
property alias bannerHeight: banner.height
|
||||||
property string iconText: hifi.glyphs.avatar
|
|
||||||
property int iconSize: 35
|
|
||||||
|
|
||||||
property var pane: QtObject {
|
property int titleWidth: 0
|
||||||
property real width: root.width
|
|
||||||
property real height: root.height
|
|
||||||
}
|
|
||||||
|
|
||||||
function tryDestroy() {
|
property bool isHMD: HMD.active
|
||||||
tabletProxy.gotoHomeScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
// TABLET SPECIFIC PROPERTIES START //
|
||||||
width: root.width
|
property alias text: loginKeyboard.mirroredText
|
||||||
height: root.height
|
|
||||||
}
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
|
||||||
|
property var tabletProxy: Tablet.getTablet("com.highfidelity.interface.tablet.system")
|
||||||
|
|
||||||
|
property bool gotoPreviousApp: false
|
||||||
|
|
||||||
property bool keyboardOverride: true
|
property bool keyboardOverride: true
|
||||||
|
|
||||||
|
@ -70,7 +63,20 @@ FocusScope {
|
||||||
property alias loginDialog: loginDialog
|
property alias loginDialog: loginDialog
|
||||||
property alias hifi: hifi
|
property alias hifi: hifi
|
||||||
|
|
||||||
HifiStylesUit.HifiConstants { id: hifi }
|
property var pane: QtObject {
|
||||||
|
property real width: root.width
|
||||||
|
property real height: root.height
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
width: root.width
|
||||||
|
height: root.height
|
||||||
|
}
|
||||||
|
// TABLET SPECIFIC PROPERTIES END //
|
||||||
|
|
||||||
|
function tryDestroy() {
|
||||||
|
tabletProxy.gotoHomeScreen();
|
||||||
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: keyboardTimer
|
id: keyboardTimer
|
||||||
|
@ -102,6 +108,15 @@ FocusScope {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
z: -6
|
||||||
|
id: opaqueRect
|
||||||
|
height: parent.height
|
||||||
|
width: parent.width
|
||||||
|
opacity: 0.65
|
||||||
|
color: "black"
|
||||||
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
z: -5
|
z: -5
|
||||||
id: bannerContainer
|
id: bannerContainer
|
||||||
|
@ -119,15 +134,6 @@ FocusScope {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
z: -6
|
|
||||||
id: opaqueRect
|
|
||||||
height: parent.height
|
|
||||||
width: parent.width
|
|
||||||
opacity: 0.65
|
|
||||||
color: "black"
|
|
||||||
}
|
|
||||||
|
|
||||||
HifiControlsUit.Keyboard {
|
HifiControlsUit.Keyboard {
|
||||||
id: loginKeyboard
|
id: loginKeyboard
|
||||||
raised: root.keyboardEnabled && root.keyboardRaised
|
raised: root.keyboardEnabled && root.keyboardRaised
|
||||||
|
|
|
@ -122,7 +122,7 @@ Rectangle {
|
||||||
Tablet.playSound(TabletEnums.ButtonClick);
|
Tablet.playSound(TabletEnums.ButtonClick);
|
||||||
// Can't use `Window.location` in QML, so just use what setting `Window.location` actually calls under the hood:
|
// Can't use `Window.location` in QML, so just use what setting `Window.location` actually calls under the hood:
|
||||||
// AddressManager.handleLookupString().
|
// AddressManager.handleLookupString().
|
||||||
AddressManager.handleLookupString(LocationBookmarks.getHomeLocationAddress());
|
AddressManager.handleLookupString(LocationBookmarks.getAddress("hqhome"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,12 @@ Rectangle {
|
||||||
|
|
||||||
onSkeletonModelURLChanged: {
|
onSkeletonModelURLChanged: {
|
||||||
root.updatePreviewUrl();
|
root.updatePreviewUrl();
|
||||||
|
|
||||||
|
if ((MyAvatar.skeletonModelURL.indexOf("defaultAvatar") > -1 || MyAvatar.skeletonModelURL.indexOf("fst") === -1) &&
|
||||||
|
topBarInventoryModel.count > 0) {
|
||||||
|
Settings.setValue("simplifiedUI/alreadyAutoSelectedAvatar", true);
|
||||||
|
MyAvatar.skeletonModelURL = topBarInventoryModel.get(0).download_url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +101,8 @@ Rectangle {
|
||||||
inventoryFullyReceived = true;
|
inventoryFullyReceived = true;
|
||||||
|
|
||||||
// If we have an avatar in our inventory AND we haven't already auto-selected an avatar...
|
// If we have an avatar in our inventory AND we haven't already auto-selected an avatar...
|
||||||
if (!Settings.getValue("simplifiedUI/alreadyAutoSelectedAvatar", false) && topBarInventoryModel.count > 0) {
|
if ((!Settings.getValue("simplifiedUI/alreadyAutoSelectedAvatar", false) ||
|
||||||
|
MyAvatar.skeletonModelURL.indexOf("defaultAvatar") > -1 || MyAvatar.skeletonModelURL.indexOf("fst") === -1) && topBarInventoryModel.count > 0) {
|
||||||
Settings.setValue("simplifiedUI/alreadyAutoSelectedAvatar", true);
|
Settings.setValue("simplifiedUI/alreadyAutoSelectedAvatar", true);
|
||||||
MyAvatar.skeletonModelURL = topBarInventoryModel.get(0).download_url;
|
MyAvatar.skeletonModelURL = topBarInventoryModel.get(0).download_url;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2708,6 +2708,7 @@ void Application::cleanupBeforeQuit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
getEntities()->shutdown(); // tell the entities system we're shutting down, so it will stop running scripts
|
getEntities()->shutdown(); // tell the entities system we're shutting down, so it will stop running scripts
|
||||||
|
getEntities()->clear();
|
||||||
|
|
||||||
// Clear any queued processing (I/O, FBX/OBJ/Texture parsing)
|
// Clear any queued processing (I/O, FBX/OBJ/Texture parsing)
|
||||||
QThreadPool::globalInstance()->clear();
|
QThreadPool::globalInstance()->clear();
|
||||||
|
|
|
@ -63,9 +63,15 @@ PerformanceManager::PerformancePreset PerformanceManager::getPerformancePreset()
|
||||||
|
|
||||||
void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformancePreset preset) {
|
void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformancePreset preset) {
|
||||||
|
|
||||||
|
// Ugly case that prevent us to run deferred everywhere...
|
||||||
|
bool isDeferredCapable = platform::Profiler::isRenderMethodDeferredCapable();
|
||||||
|
|
||||||
switch (preset) {
|
switch (preset) {
|
||||||
case PerformancePreset::HIGH:
|
case PerformancePreset::HIGH:
|
||||||
RenderScriptingInterface::getInstance()->setRenderMethod(RenderScriptingInterface::RenderMethod::DEFERRED);
|
RenderScriptingInterface::getInstance()->setRenderMethod( ( isDeferredCapable ?
|
||||||
|
RenderScriptingInterface::RenderMethod::DEFERRED :
|
||||||
|
RenderScriptingInterface::RenderMethod::FORWARD ) );
|
||||||
|
|
||||||
RenderScriptingInterface::getInstance()->setShadowsEnabled(true);
|
RenderScriptingInterface::getInstance()->setShadowsEnabled(true);
|
||||||
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::REALTIME);
|
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::REALTIME);
|
||||||
|
|
||||||
|
@ -73,7 +79,10 @@ void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformanceP
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case PerformancePreset::MID:
|
case PerformancePreset::MID:
|
||||||
RenderScriptingInterface::getInstance()->setRenderMethod(RenderScriptingInterface::RenderMethod::DEFERRED);
|
RenderScriptingInterface::getInstance()->setRenderMethod((isDeferredCapable ?
|
||||||
|
RenderScriptingInterface::RenderMethod::DEFERRED :
|
||||||
|
RenderScriptingInterface::RenderMethod::FORWARD));
|
||||||
|
|
||||||
RenderScriptingInterface::getInstance()->setShadowsEnabled(false);
|
RenderScriptingInterface::getInstance()->setShadowsEnabled(false);
|
||||||
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::INTERACTIVE);
|
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::INTERACTIVE);
|
||||||
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.5f);
|
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.5f);
|
||||||
|
|
|
@ -490,7 +490,7 @@ void AvatarManager::buildPhysicsTransaction(PhysicsEngine::Transaction& transact
|
||||||
_myAvatar->getCharacterController()->buildPhysicsTransaction(transaction);
|
_myAvatar->getCharacterController()->buildPhysicsTransaction(transaction);
|
||||||
for (auto avatar : _otherAvatarsToChangeInPhysics) {
|
for (auto avatar : _otherAvatarsToChangeInPhysics) {
|
||||||
bool isInPhysics = avatar->isInPhysicsSimulation();
|
bool isInPhysics = avatar->isInPhysicsSimulation();
|
||||||
if (isInPhysics != avatar->shouldBeInPhysicsSimulation()) {
|
if (isInPhysics != avatar->shouldBeInPhysicsSimulation() || avatar->_needsReinsertion) {
|
||||||
if (isInPhysics) {
|
if (isInPhysics) {
|
||||||
transaction.objectsToRemove.push_back(avatar->_motionState);
|
transaction.objectsToRemove.push_back(avatar->_motionState);
|
||||||
avatar->_motionState = nullptr;
|
avatar->_motionState = nullptr;
|
||||||
|
|
|
@ -262,7 +262,7 @@ class Stats : public QQuickItem {
|
||||||
STATS_PROPERTY(int, processing, 0)
|
STATS_PROPERTY(int, processing, 0)
|
||||||
STATS_PROPERTY(int, processingPending, 0)
|
STATS_PROPERTY(int, processingPending, 0)
|
||||||
STATS_PROPERTY(int, triangles, 0)
|
STATS_PROPERTY(int, triangles, 0)
|
||||||
STATS_PROPERTY(uint32_t, drawcalls, 0)
|
STATS_PROPERTY(quint32 , drawcalls, 0)
|
||||||
STATS_PROPERTY(int, materialSwitches, 0)
|
STATS_PROPERTY(int, materialSwitches, 0)
|
||||||
STATS_PROPERTY(int, itemConsidered, 0)
|
STATS_PROPERTY(int, itemConsidered, 0)
|
||||||
STATS_PROPERTY(int, itemOutOfView, 0)
|
STATS_PROPERTY(int, itemOutOfView, 0)
|
||||||
|
|
Binary file not shown.
|
@ -46,6 +46,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)awakeFromNib {
|
-(void)awakeFromNib {
|
||||||
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
|
||||||
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
|
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
|
||||||
selector:@selector(didTerminateApp:)
|
selector:@selector(didTerminateApp:)
|
||||||
name:NSWorkspaceDidTerminateApplicationNotification
|
name:NSWorkspaceDidTerminateApplicationNotification
|
||||||
|
@ -114,6 +115,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
userInfo:nil
|
userInfo:nil
|
||||||
repeats:NO];
|
repeats:NO];
|
||||||
}
|
}
|
||||||
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setDownloadContextFilename:(NSString *)aFilename
|
- (void) setDownloadContextFilename:(NSString *)aFilename
|
||||||
|
@ -277,6 +279,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
|
|
||||||
-(void)onSplashScreenTimerFinished:(NSTimer *)timer
|
-(void)onSplashScreenTimerFinished:(NSTimer *)timer
|
||||||
{
|
{
|
||||||
|
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
|
||||||
[self showLoginScreen];
|
[self showLoginScreen];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,6 +339,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
NSString* scriptsPath = [[self getAppPath] stringByAppendingString:@"interface.app/Contents/Resources/scripts/simplifiedUI/"];
|
NSString* scriptsPath = [[self getAppPath] stringByAppendingString:@"interface.app/Contents/Resources/scripts/simplifiedUI/"];
|
||||||
NSString* domainUrl = [[Settings sharedSettings] getDomainUrl];
|
NSString* domainUrl = [[Settings sharedSettings] getDomainUrl];
|
||||||
NSString* userToken = [[Launcher sharedLauncher] getTokenString];
|
NSString* userToken = [[Launcher sharedLauncher] getTokenString];
|
||||||
|
NSString* homeBookmark = [[NSString stringWithFormat:@"hqhome="] stringByAppendingString:domainUrl];
|
||||||
NSArray* arguments;
|
NSArray* arguments;
|
||||||
if (userToken != nil) {
|
if (userToken != nil) {
|
||||||
arguments = [NSArray arrayWithObjects:
|
arguments = [NSArray arrayWithObjects:
|
||||||
|
@ -344,6 +348,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
@"--cache", contentPath,
|
@"--cache", contentPath,
|
||||||
@"--displayName", displayName,
|
@"--displayName", displayName,
|
||||||
@"--scripts", scriptsPath,
|
@"--scripts", scriptsPath,
|
||||||
|
@"--setBookmark", homeBookmark,
|
||||||
@"--no-updater",
|
@"--no-updater",
|
||||||
@"--no-launcher", nil];
|
@"--no-launcher", nil];
|
||||||
} else {
|
} else {
|
||||||
|
@ -351,6 +356,7 @@ static BOOL const DELETE_ZIP_FILES = TRUE;
|
||||||
@"--url" , domainUrl,
|
@"--url" , domainUrl,
|
||||||
@"--cache", contentPath,
|
@"--cache", contentPath,
|
||||||
@"--scripts", scriptsPath,
|
@"--scripts", scriptsPath,
|
||||||
|
@"--setBookmark", homeBookmark,
|
||||||
@"--no-updater",
|
@"--no-updater",
|
||||||
@"--no-launcher", nil];
|
@"--no-launcher", nil];
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,9 +234,10 @@ HWND LauncherManager::launchApplication() {
|
||||||
CString parsedTokens = _tokensJSON;
|
CString parsedTokens = _tokensJSON;
|
||||||
parsedTokens.Replace(_T("\""), _T("\\\""));
|
parsedTokens.Replace(_T("\""), _T("\\\""));
|
||||||
tokensParam = _T("--tokens \"");
|
tokensParam = _T("--tokens \"");
|
||||||
tokensParam += parsedTokens + _T("\"");
|
tokensParam += parsedTokens + _T("\" ");
|
||||||
}
|
}
|
||||||
CString params = urlParam + scriptsParam + cacheParam + nameParam + tokensParam + EXTRA_PARAMETERS;
|
CString bookmarkParam = _T("--setBookmark hqhome=\"") + _domainURL + ("\" ");
|
||||||
|
CString params = urlParam + scriptsParam + cacheParam + nameParam + tokensParam + bookmarkParam + EXTRA_PARAMETERS;
|
||||||
_shouldLaunch = FALSE;
|
_shouldLaunch = FALSE;
|
||||||
return LauncherUtils::executeOnForeground(interfaceExe, params);
|
return LauncherUtils::executeOnForeground(interfaceExe, params);
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 26 KiB |
|
@ -343,4 +343,4 @@ PulsePropertyGroup WebEntityItem::getPulseProperties() const {
|
||||||
return resultWithReadLock<PulsePropertyGroup>([&] {
|
return resultWithReadLock<PulsePropertyGroup>([&] {
|
||||||
return _pulseProperties;
|
return _pulseProperties;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -559,6 +559,8 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer<Rec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const int SILENT_DOMAIN_TRAFFIC_DROP_MIN = 2;
|
||||||
|
|
||||||
bool DomainHandler::checkInPacketTimeout() {
|
bool DomainHandler::checkInPacketTimeout() {
|
||||||
++_checkInPacketsSinceLastReply;
|
++_checkInPacketsSinceLastReply;
|
||||||
|
|
||||||
|
@ -566,9 +568,14 @@ bool DomainHandler::checkInPacketTimeout() {
|
||||||
qCDebug(networking_ice) << "Silent domain checkins:" << _checkInPacketsSinceLastReply;
|
qCDebug(networking_ice) << "Silent domain checkins:" << _checkInPacketsSinceLastReply;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_checkInPacketsSinceLastReply > MAX_SILENT_DOMAIN_SERVER_CHECK_INS) {
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
if (_checkInPacketsSinceLastReply > SILENT_DOMAIN_TRAFFIC_DROP_MIN) {
|
||||||
|
qCDebug(networking_ice) << _checkInPacketsSinceLastReply << "seconds since last domain list request, squelching traffic";
|
||||||
|
nodeList->setDropOutgoingNodeTraffic(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_checkInPacketsSinceLastReply > MAX_SILENT_DOMAIN_SERVER_CHECK_INS) {
|
||||||
|
|
||||||
// we haven't heard back from DS in MAX_SILENT_DOMAIN_SERVER_CHECK_INS
|
// we haven't heard back from DS in MAX_SILENT_DOMAIN_SERVER_CHECK_INS
|
||||||
// so emit our signal that says that
|
// so emit our signal that says that
|
||||||
|
|
|
@ -409,6 +409,16 @@ qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const HifiS
|
||||||
Q_ASSERT_X(!packet.isReliable(), "LimitedNodeList::sendUnreliablePacket",
|
Q_ASSERT_X(!packet.isReliable(), "LimitedNodeList::sendUnreliablePacket",
|
||||||
"Trying to send a reliable packet unreliably.");
|
"Trying to send a reliable packet unreliably.");
|
||||||
|
|
||||||
|
if (_dropOutgoingNodeTraffic) {
|
||||||
|
auto destinationNode = findNodeWithAddr(sockAddr);
|
||||||
|
|
||||||
|
// findNodeWithAddr returns null for the address of the domain server
|
||||||
|
if (!destinationNode.isNull()) {
|
||||||
|
// This only suppresses individual unreliable packets, not unreliable packet lists
|
||||||
|
return ERROR_SENDING_PACKET_BYTES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fillPacketHeader(packet, hmacAuth);
|
fillPacketHeader(packet, hmacAuth);
|
||||||
|
|
||||||
return _nodeSocket.writePacket(packet, sockAddr);
|
return _nodeSocket.writePacket(packet, sockAddr);
|
||||||
|
|
|
@ -335,6 +335,8 @@ public:
|
||||||
float getInboundKbps() const { return _inboundKbps; }
|
float getInboundKbps() const { return _inboundKbps; }
|
||||||
float getOutboundKbps() const { return _outboundKbps; }
|
float getOutboundKbps() const { return _outboundKbps; }
|
||||||
|
|
||||||
|
void setDropOutgoingNodeTraffic(bool squelchOutgoingNodeTraffic) { _dropOutgoingNodeTraffic = squelchOutgoingNodeTraffic; }
|
||||||
|
|
||||||
const std::set<NodeType_t> SOLO_NODE_TYPES = {
|
const std::set<NodeType_t> SOLO_NODE_TYPES = {
|
||||||
NodeType::AvatarMixer,
|
NodeType::AvatarMixer,
|
||||||
NodeType::AudioMixer,
|
NodeType::AudioMixer,
|
||||||
|
@ -493,6 +495,8 @@ private:
|
||||||
int _outboundPPS { 0 };
|
int _outboundPPS { 0 };
|
||||||
float _inboundKbps { 0.0f };
|
float _inboundKbps { 0.0f };
|
||||||
float _outboundKbps { 0.0f };
|
float _outboundKbps { 0.0f };
|
||||||
|
|
||||||
|
bool _dropOutgoingNodeTraffic { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_LimitedNodeList_h
|
#endif // hifi_LimitedNodeList_h
|
||||||
|
|
|
@ -306,7 +306,8 @@ void NodeList::sendDomainServerCheckIn() {
|
||||||
// may be called by multiple threads.
|
// may be called by multiple threads.
|
||||||
|
|
||||||
if (!_sendDomainServerCheckInEnabled) {
|
if (!_sendDomainServerCheckInEnabled) {
|
||||||
qCDebug(networking_ice) << "Refusing to send a domain-server check in while it is disabled.";
|
static const QString DISABLED_CHECKIN_DEBUG{ "Refusing to send a domain-server check in while it is disabled." };
|
||||||
|
HIFI_FCDEBUG(networking_ice(), DISABLED_CHECKIN_DEBUG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,13 +451,8 @@ void NodeList::sendDomainServerCheckIn() {
|
||||||
|
|
||||||
// Send duplicate check-ins in the exponentially increasing sequence 1, 1, 2, 4, ...
|
// Send duplicate check-ins in the exponentially increasing sequence 1, 1, 2, 4, ...
|
||||||
static const int MAX_CHECKINS_TOGETHER = 20;
|
static const int MAX_CHECKINS_TOGETHER = 20;
|
||||||
static const int REBIND_CHECKIN_COUNT = 2;
|
|
||||||
int outstandingCheckins = _domainHandler.getCheckInPacketsSinceLastReply();
|
int outstandingCheckins = _domainHandler.getCheckInPacketsSinceLastReply();
|
||||||
|
|
||||||
if (outstandingCheckins > REBIND_CHECKIN_COUNT) {
|
|
||||||
_nodeSocket.rebind();
|
|
||||||
}
|
|
||||||
|
|
||||||
int checkinCount = outstandingCheckins > 1 ? std::pow(2, outstandingCheckins - 2) : 1;
|
int checkinCount = outstandingCheckins > 1 ? std::pow(2, outstandingCheckins - 2) : 1;
|
||||||
checkinCount = std::min(checkinCount, MAX_CHECKINS_TOGETHER);
|
checkinCount = std::min(checkinCount, MAX_CHECKINS_TOGETHER);
|
||||||
for (int i = 1; i < checkinCount; ++i) {
|
for (int i = 1; i < checkinCount; ++i) {
|
||||||
|
@ -710,6 +706,7 @@ void NodeList::processDomainServerList(QSharedPointer<ReceivedMessage> message)
|
||||||
|
|
||||||
// this is a packet from the domain server, reset the count of un-replied check-ins
|
// this is a packet from the domain server, reset the count of un-replied check-ins
|
||||||
_domainHandler.clearPendingCheckins();
|
_domainHandler.clearPendingCheckins();
|
||||||
|
setDropOutgoingNodeTraffic(false);
|
||||||
|
|
||||||
// emit our signal so listeners know we just heard from the DS
|
// emit our signal so listeners know we just heard from the DS
|
||||||
emit receivedDomainServerList();
|
emit receivedDomainServerList();
|
||||||
|
|
|
@ -230,7 +230,7 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc
|
||||||
// _udpSocket.writeDatagram will return an error anyway, but there are
|
// _udpSocket.writeDatagram will return an error anyway, but there are
|
||||||
// potential crashes in Qt when that happens.
|
// potential crashes in Qt when that happens.
|
||||||
if (_udpSocket.state() != QAbstractSocket::BoundState) {
|
if (_udpSocket.state() != QAbstractSocket::BoundState) {
|
||||||
qCDebug(networking) << "Attempt to writeDatagram when in unbound state";
|
qCDebug(networking) << "Attempt to writeDatagram when in unbound state to" << sockAddr;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
qint64 bytesWritten = _udpSocket.writeDatagram(datagram, sockAddr.getAddress(), sockAddr.getPort());
|
qint64 bytesWritten = _udpSocket.writeDatagram(datagram, sockAddr.getAddress(), sockAddr.getPort());
|
||||||
|
@ -240,11 +240,11 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
wsaError = WSAGetLastError();
|
wsaError = WSAGetLastError();
|
||||||
#endif
|
#endif
|
||||||
qCDebug(networking) << "udt::writeDatagram (" << _udpSocket.state() << ") error - " << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")"
|
qCDebug(networking) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")"
|
||||||
<< (pending ? "pending bytes:" : "pending:") << pending;
|
<< (pending ? "pending bytes:" : "pending:") << pending;
|
||||||
#ifdef DEBUG_EVENT_QUEUE
|
#ifdef DEBUG_EVENT_QUEUE
|
||||||
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
||||||
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize;
|
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr;
|
||||||
#endif // DEBUG_EVENT_QUEUE
|
#endif // DEBUG_EVENT_QUEUE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "Platform.h"
|
#include "Platform.h"
|
||||||
#include "PlatformKeys.h"
|
#include "PlatformKeys.h"
|
||||||
|
#include <qglobal.h>
|
||||||
|
|
||||||
using namespace platform;
|
using namespace platform;
|
||||||
|
|
||||||
|
@ -124,4 +125,40 @@ bool filterOnProcessors(const platform::json& computer, const platform::json& cp
|
||||||
|
|
||||||
// Not able to profile
|
// Not able to profile
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ugly very adhoc capability check to know if a particular hw can REnder with Deferred method or not
|
||||||
|
// YES for PC windows and linux
|
||||||
|
// NO for android
|
||||||
|
// YES on macos EXCEPT for macbookair with gpu intel iris or intel HD 6000
|
||||||
|
bool Profiler::isRenderMethodDeferredCapable() {
|
||||||
|
#if defined(Q_OS_MAC)
|
||||||
|
auto computer = platform::getComputer();
|
||||||
|
const auto computerModel = (computer.count(keys::computer::model) ? computer[keys::computer::model].get<std::string>() : "");
|
||||||
|
|
||||||
|
auto gpuInfo = platform::getGPU(0);
|
||||||
|
const auto gpuModel = (gpuInfo.count(keys::gpu::model) ? gpuInfo[keys::gpu::model].get<std::string>() : "");
|
||||||
|
|
||||||
|
|
||||||
|
// Macbook air 2018 are a problem
|
||||||
|
if ((computerModel.find("MacBookAir7,2") != std::string::npos) && (gpuModel.find("Intel HD Graphics 6000") != std::string::npos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We know for fact that the Mac BOok Pro 13 from Mid 2014 INtel Iris is problematic,
|
||||||
|
if ((computerModel.find("MacBookPro11,1") != std::string::npos) && (gpuModel.find("Intel Iris") != std::string::npos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TO avoid issues for the next few days, we are excluding all of intel chipset...
|
||||||
|
if ((gpuModel.find("Intel ") != std::string::npos)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#elif defined(Q_OS_ANDROID)
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,9 @@ public:
|
||||||
static const std::array<const char*, Tier::NumTiers> TierNames;
|
static const std::array<const char*, Tier::NumTiers> TierNames;
|
||||||
|
|
||||||
static Tier profilePlatform();
|
static Tier profilePlatform();
|
||||||
|
|
||||||
|
// Ugly very adhoc capability check to know if a particular hw can REnder with Deferred method or not
|
||||||
|
static bool isRenderMethodDeferredCapable();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer)
|
||||||
GLint rendererInfoCount;
|
GLint rendererInfoCount;
|
||||||
CGLError err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &rendererInfoCount);
|
CGLError err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &rendererInfoCount);
|
||||||
GLint j, numRenderers = 0, deviceVRAM, bestVRAM = 0;
|
GLint j, numRenderers = 0, deviceVRAM, bestVRAM = 0;
|
||||||
|
int bestGPUid = 0;
|
||||||
err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &numRenderers);
|
err = CGLQueryRendererInfo(cglDisplayMask, &rendererInfo, &numRenderers);
|
||||||
if (0 == err) {
|
if (0 == err) {
|
||||||
// Iterate over all of them and use the figure for the one with the most VRAM,
|
// Iterate over all of them and use the figure for the one with the most VRAM,
|
||||||
|
@ -55,6 +56,7 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer)
|
||||||
for (j = 0; j < numRenderers; j++) {
|
for (j = 0; j < numRenderers; j++) {
|
||||||
CGLDescribeRenderer(rendererInfo, j, kCGLRPVideoMemoryMegabytes, &deviceVRAM);
|
CGLDescribeRenderer(rendererInfo, j, kCGLRPVideoMemoryMegabytes, &deviceVRAM);
|
||||||
if (deviceVRAM > bestVRAM) {
|
if (deviceVRAM > bestVRAM) {
|
||||||
|
bestGPUid = j;
|
||||||
bestVRAM = deviceVRAM;
|
bestVRAM = deviceVRAM;
|
||||||
_isValid = true;
|
_isValid = true;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +80,8 @@ GPUIdent* GPUIdent::ensureQuery(const QString& vendor, const QString& renderer)
|
||||||
for (int i = 0; i < parts.size(); ++i) {
|
for (int i = 0; i < parts.size(); ++i) {
|
||||||
if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) {
|
if (parts[i].toLower().contains("radeon") || parts[i].toLower().contains("nvidia")) {
|
||||||
_name=parts[i];
|
_name=parts[i];
|
||||||
|
} else if (i == bestGPUid) {
|
||||||
|
_name=parts[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -686,43 +686,52 @@ void OffscreenQmlSurface::setKeyboardRaised(QObject* object, bool raised, bool n
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(Q_OS_ANDROID)
|
bool android = false;
|
||||||
// if HMD is being worn, allow keyboard to open. allow it to close, HMD or not.
|
#if defined(Q_OS_ANDROID)
|
||||||
if (!raised || qApp->property(hifi::properties::HMD).toBool()) {
|
android = true;
|
||||||
QQuickItem* item = dynamic_cast<QQuickItem*>(object);
|
#endif
|
||||||
if (!item) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// for future probably makes sense to consider one of the following:
|
bool hmd = qApp->property(hifi::properties::HMD).toBool();
|
||||||
// 1. make keyboard a singleton, which will be dynamically re-parented before showing
|
|
||||||
// 2. track currently visible keyboard somewhere, allow to subscribe for this signal
|
|
||||||
// any of above should also eliminate need in duplicated properties and code below
|
|
||||||
|
|
||||||
while (item) {
|
if (!android || hmd) {
|
||||||
// Numeric value may be set in parameter from HTML UI; for QML UI, detect numeric fields here.
|
// if HMD is being worn, allow keyboard to open. allow it to close, HMD or not.
|
||||||
numeric = numeric || QString(item->metaObject()->className()).left(7) == "SpinBox";
|
if (!raised || hmd) {
|
||||||
|
QQuickItem* item = dynamic_cast<QQuickItem*>(object);
|
||||||
if (item->property("keyboardRaised").isValid()) {
|
if (!item) {
|
||||||
// FIXME - HMD only: Possibly set value of "keyboardEnabled" per isHMDMode() for use in WebView.qml.
|
|
||||||
if (item->property("punctuationMode").isValid()) {
|
|
||||||
item->setProperty("punctuationMode", QVariant(numeric));
|
|
||||||
}
|
|
||||||
if (item->property("passwordField").isValid()) {
|
|
||||||
item->setProperty("passwordField", QVariant(passwordField));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (raised) {
|
|
||||||
item->setProperty("keyboardRaised", QVariant(!raised));
|
|
||||||
}
|
|
||||||
|
|
||||||
item->setProperty("keyboardRaised", QVariant(raised));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
item = dynamic_cast<QQuickItem*>(item->parentItem());
|
|
||||||
|
// for future probably makes sense to consider one of the following:
|
||||||
|
// 1. make keyboard a singleton, which will be dynamically re-parented before showing
|
||||||
|
// 2. track currently visible keyboard somewhere, allow to subscribe for this signal
|
||||||
|
// any of above should also eliminate need in duplicated properties and code below
|
||||||
|
|
||||||
|
while (item) {
|
||||||
|
// Numeric value may be set in parameter from HTML UI; for QML UI, detect numeric fields here.
|
||||||
|
numeric = numeric || QString(item->metaObject()->className()).left(7) == "SpinBox";
|
||||||
|
|
||||||
|
if (item->property("keyboardRaised").isValid()) {
|
||||||
|
|
||||||
|
if (item->property("punctuationMode").isValid()) {
|
||||||
|
item->setProperty("punctuationMode", QVariant(numeric));
|
||||||
|
}
|
||||||
|
if (item->property("passwordField").isValid()) {
|
||||||
|
item->setProperty("passwordField", QVariant(passwordField));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hmd && item->property("keyboardEnabled").isValid()) {
|
||||||
|
item->setProperty("keyboardEnabled", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
item->setProperty("keyboardRaised", QVariant(raised));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
item = dynamic_cast<QQuickItem*>(item->parentItem());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OffscreenQmlSurface::emitScriptEvent(const QVariant& message) {
|
void OffscreenQmlSurface::emitScriptEvent(const QVariant& message) {
|
||||||
|
|
|
@ -26,8 +26,9 @@ Rectangle {
|
||||||
color: global.color
|
color: global.color
|
||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
id: control
|
id: scrollView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
contentWidth: parent.width
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
|
|
@ -24,9 +24,12 @@ Rectangle {
|
||||||
color: global.colorBack
|
color: global.colorBack
|
||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
|
id: scrollView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
contentWidth: parent.width
|
||||||
clip: true
|
clip: true
|
||||||
Column {
|
|
||||||
|
Column {
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
@ -35,8 +38,6 @@ Rectangle {
|
||||||
isUnfold: true
|
isUnfold: true
|
||||||
panelFrameData: Component {
|
panelFrameData: Component {
|
||||||
PerformanceSettings {
|
PerformanceSettings {
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,8 +46,6 @@ Rectangle {
|
||||||
isUnfold: true
|
isUnfold: true
|
||||||
panelFrameData: Component {
|
panelFrameData: Component {
|
||||||
RenderSettings {
|
RenderSettings {
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,8 +53,6 @@ Rectangle {
|
||||||
label: "Platform"
|
label: "Platform"
|
||||||
panelFrameData: Component {
|
panelFrameData: Component {
|
||||||
Platform {
|
Platform {
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,9 +83,7 @@
|
||||||
// The initial delay cooldown keeps us from tracking progress before the allotted time
|
// The initial delay cooldown keeps us from tracking progress before the allotted time
|
||||||
// has passed.
|
// has passed.
|
||||||
INITIAL_DELAY_COOLDOWN_TIME = 1000,
|
INITIAL_DELAY_COOLDOWN_TIME = 1000,
|
||||||
initialDelayCooldown = 0,
|
initialDelayCooldown = 0;
|
||||||
|
|
||||||
isInInterstitialMode = false;
|
|
||||||
|
|
||||||
function fade() {
|
function fade() {
|
||||||
|
|
||||||
|
@ -267,7 +265,7 @@
|
||||||
|
|
||||||
// Update state
|
// Update state
|
||||||
if (!visible) { // Not visible because no recent downloads
|
if (!visible) { // Not visible because no recent downloads
|
||||||
if ((displayProgress < 100 || gpuTextures > 0) && !isInInterstitialMode && !isInterstitialOverlaysVisible) { // Have started downloading so fade in
|
if (displayProgress < 100 || gpuTextures > 0) { // Have started downloading so fade in
|
||||||
visible = true;
|
visible = true;
|
||||||
alphaDelta = ALPHA_DELTA_IN;
|
alphaDelta = ALPHA_DELTA_IN;
|
||||||
fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
|
fadeTimer = Script.setInterval(fade, FADE_INTERVAL);
|
||||||
|
@ -307,9 +305,6 @@
|
||||||
} else {
|
} else {
|
||||||
x = x * BAR_HMD_REPEAT;
|
x = x * BAR_HMD_REPEAT;
|
||||||
}
|
}
|
||||||
if (isInInterstitialMode || isInterstitialOverlaysVisible) {
|
|
||||||
visible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update progress bar
|
// Update progress bar
|
||||||
Overlays.editOverlay(barDesktop.overlay, {
|
Overlays.editOverlay(barDesktop.overlay, {
|
||||||
|
@ -349,10 +344,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function interstitialModeChanged(inMode) {
|
|
||||||
isInInterstitialMode = inMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setUp() {
|
function setUp() {
|
||||||
var is4k = Window.innerWidth > 3000;
|
var is4k = Window.innerWidth > 3000;
|
||||||
|
|
||||||
|
@ -378,7 +369,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
setUp();
|
setUp();
|
||||||
Window.interstitialModeChanged.connect(interstitialModeChanged);
|
|
||||||
GlobalServices.downloadInfoChanged.connect(onDownloadInfoChanged);
|
GlobalServices.downloadInfoChanged.connect(onDownloadInfoChanged);
|
||||||
GlobalServices.updateDownloadInfo();
|
GlobalServices.updateDownloadInfo();
|
||||||
Script.setInterval(update, 1000 / 60);
|
Script.setInterval(update, 1000 / 60);
|
||||||
|
|
|
@ -415,7 +415,7 @@ function getInputDeviceMutedOverlayTopY() {
|
||||||
var inputDeviceMutedOverlay = false;
|
var inputDeviceMutedOverlay = false;
|
||||||
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_X_PX = 353;
|
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_X_PX = 353;
|
||||||
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_Y_PX = 95;
|
var INPUT_DEVICE_MUTED_OVERLAY_DEFAULT_Y_PX = 95;
|
||||||
var INPUT_DEVICE_MUTED_MARGIN_BOTTOM_PX = 20;
|
var INPUT_DEVICE_MUTED_MARGIN_BOTTOM_PX = 20 + TOP_BAR_HEIGHT_PX;
|
||||||
function updateInputDeviceMutedOverlay(isMuted) {
|
function updateInputDeviceMutedOverlay(isMuted) {
|
||||||
if (isMuted) {
|
if (isMuted) {
|
||||||
var props = {
|
var props = {
|
||||||
|
|
Loading…
Reference in a new issue