Merge branch 'yellow' of github.com:samcake/hifi into yellow

This commit is contained in:
Sam Gateau 2019-08-14 10:37:30 -07:00
commit 44a3deacb1
73 changed files with 1896 additions and 1472 deletions

View file

@ -31,7 +31,7 @@ If you do not wish to use the Python installation bundled with Visual Studio, yo
### Step 2. Installing CMake
Download and install the latest version of CMake 3.9.
Download and install the latest version of CMake 3.14.
Download the file named win64-x64 Installer from the [CMake Website](https://cmake.org/download/). You can access the installer on this [3.14 Version page](https://cmake.org/files/v3.14/). During installation, make sure to check "Add CMake to system PATH for all users" when prompted.

View file

@ -33,6 +33,7 @@ Rectangle {
readonly property string unmutedIcon: "images/mic-unmute-i.svg"
readonly property string mutedIcon: "images/mic-mute-i.svg"
readonly property string pushToTalkIcon: "images/mic-ptt-i.svg"
readonly property string pushToTalkMutedIcon: "images/mic-ptt-mute-i.svg"
readonly property string clippingIcon: "images/mic-clip-i.svg"
readonly property string gatedIcon: "images/mic-gate-i.svg"
@ -48,18 +49,6 @@ Rectangle {
}
}
opacity: 0.7
onLevelChanged: {
var rectOpacity = (muted && (level >= userSpeakingLevel)) ? 1.0 : 0.7;
if (pushToTalk && !pushingToTalk) {
rectOpacity = (mouseArea.containsMouse) ? 1.0 : 0.7;
} else if (mouseArea.containsMouse && rectOpacity != 1.0) {
rectOpacity = 1.0;
}
micBar.opacity = rectOpacity;
}
color: "#00000000"
MouseArea {
@ -116,82 +105,84 @@ Rectangle {
Item {
id: icon
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.horizontalCenter
anchors.horizontalCenter: parent.horizontalCenter
anchors.rightMargin: 2
width: 13
height: 21
width: pushToTalk ? 16 : (muted ? 20 : 16)
height: 22
Item {
anchors.fill: parent
opacity: mouseArea.containsMouse ? 1.0 : 0.7
Image {
id: image
visible: false
source: (pushToTalk) ? pushToTalkIcon : muted ? mutedIcon :
clipping ? clippingIcon : gated ? gatedIcon : unmutedIcon
anchors.fill: parent
fillMode: Image.PreserveAspectFit
}
ColorOverlay {
opacity: mouseArea.containsMouse ? 1.0 : 0.7
visible: level === 0 || micBar.muted || micBar.clipping
id: imageOverlay
anchors { fill: image }
source: image
color: pushToTalk ? (pushingToTalk ? colors.unmutedColor : colors.mutedColor) : colors.icon
color: pushToTalk ? (pushingToTalk ? colors.icon : colors.mutedColor) : colors.icon
}
OpacityMask {
id: bar
visible: level > 0 && !micBar.muted && !micBar.clipping
anchors.fill: meterGradient
source: meterGradient
maskSource: image
}
LinearGradient {
id: meterGradient
anchors { fill: parent }
visible: false
start: Qt.point(0, 0)
end: Qt.point(0, parent.height)
rotation: 180
gradient: Gradient {
GradientStop {
position: 1.0
color: colors.greenStart
}
GradientStop {
position: 0.5
color: colors.greenEnd
}
GradientStop {
position: 0.0
color: colors.yellow
}
}
}
}
}
Item {
id: bar
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.horizontalCenter
anchors.leftMargin: 2
width: 4
height: 21
Rectangle { // base
id: baseBar
radius: 4
anchors { fill: parent }
color: colors.gutter
}
Rectangle { // mask
id: mask
height: micBar.muted ? parent.height : parent.height * level
color: micBar.muted ? colors.mutedColor : "white"
Item {
width: parent.width
radius: 5
anchors {
bottom: parent.bottom
bottomMargin: 0
left: parent.left
leftMargin: 0
height: parent.height - parent.height * level
anchors.top: parent.top
anchors.left: parent.left
clip:true
Image {
id: maskImage
visible: false
source: (pushToTalk) ? pushToTalkIcon : muted ? mutedIcon :
clipping ? clippingIcon : gated ? gatedIcon : unmutedIcon
anchors.top: parent.top
anchors.left: parent.left
width: parent.width
height: parent.parent.height
}
}
LinearGradient {
anchors { fill: mask }
visible: mask.visible && !micBar.muted
source: mask
start: Qt.point(0, 0)
end: Qt.point(0, bar.height)
rotation: 180
gradient: Gradient {
GradientStop {
position: 0.0
color: colors.greenStart
}
GradientStop {
position: 0.5
color: colors.greenEnd
}
GradientStop {
position: 1.0
color: colors.yellow
}
ColorOverlay {
visible: level > 0 && !micBar.muted && !micBar.clipping
anchors { fill: maskImage }
source: maskImage
color: "#b2b2b2"
}
}
}

View file

@ -1,20 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18.338" height="32" fill="none" version="1.1" viewBox="0 0 18.338 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(-7)" clip-path="url(#clip0)">
<path d="m25.338 4.1345-1.467 1.4671c-1.9339-2.1339-4.668-3.5343-7.8022-3.5343-3.0008 0-5.6682 1.3337-7.602 3.3342l-1.4671-1.4671c2.2673-2.4006 5.5348-3.9344 9.0691-3.9344 3.6677 0 7.0019 1.6004 9.2692 4.1345zm-3.4007 3.4014-1.4671 1.4671c-1.0002-1.3337-2.6007-2.1339-4.4012-2.1339-1.6671 0-3.1342 0.80022-4.2011 1.9339l-1.4671-1.4671c1.4004-1.5338 3.4009-2.534 5.6682-2.534 2.334 0 4.4679 1.067 5.8683 2.7341zm-3.9801 22.621c0 1.0199-0.8268 1.8467-1.8467 1.8467s-1.8466-0.8268-1.8466-1.8467 0.8267-1.8467 1.8466-1.8467 1.8467 0.8268 1.8467 1.8467zm0.4057-19.077h-4.2035l0.8519 14.774h2.4751z" clip-rule="evenodd" fill="#ea4c5f" fill-rule="evenodd"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="32" height="32" fill="#fff"/>
</clipPath>
</defs>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 22" style="enable-background:new 0 0 16 22;" xml:space="preserve">
<g>
<g>
<path d="M8,10.07c0.98,0,1.79-0.8,1.79-1.77V1.77C9.79,0.8,8.98,0,8,0C7.02,0,6.21,0.8,6.21,1.77v6.52
C6.21,9.27,7.02,10.07,8,10.07z M8,14.55c0.99,0,1.79-0.79,1.79-1.77S8.99,11,8,11s-1.79,0.79-1.79,1.77S7.01,14.55,8,14.55z
M14.8,7.8c-0.66,0-1.2,0.53-1.2,1.19v1.05c0,3.32-2.51,6.03-5.6,6.03s-5.6-2.7-5.6-6.03V8.99c0-0.66-0.54-1.19-1.2-1.19
S0,8.33,0,8.99v1.05c0,4.21,2.96,7.71,6.8,8.31v1.27H4.15c-0.66,0-1.2,0.53-1.2,1.19c0,0.66,0.54,1.19,1.2,1.19h7.69
c0.66,0,1.2-0.53,1.2-1.19c0-0.66-0.54-1.19-1.2-1.19H9.2v-1.27c3.84-0.61,6.8-4.11,6.8-8.31V8.99C16,8.33,15.46,7.8,14.8,7.8z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 977 B

View file

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14.666" height="32" fill="none" version="1.1" viewBox="0 0 14.666 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m7.1999 4.7259c1.305 0 2.3629-1.0579 2.3629-2.3629 0-1.305-1.0579-2.3629-2.3629-2.3629-1.3051 0-2.363 1.0579-2.363 2.3629 0 1.305 1.0579 2.3629 2.363 2.3629zm2.4668 7.0745v2.9333h-4.9333v-2.9333c0-1.3334 1.1333-2.4 2.4666-2.4 1.4 0 2.4667 1.0666 2.4667 2.4zm-4.9333 8.3328v-2.8666h4.9333v2.8666c0 1.3333-1.1334 2.4-2.4667 2.4s-2.4666-1.0667-2.4666-2.4zm9.9331 0.4668v-3.5333c0-0.6667-0.6-1.1333-1.2-1.1333-0.6667 0-1.1333 0.5333-1.1333 1.1999v3.4667c0 2.4666-2.2667 4.4666-5 4.4666s-4.9999-2-4.9999-4.4666v-3.5333c0-0.6667-0.4667-1.2-1.0667-1.2-0.66661-0.0667-1.2666 0.4-1.2666 1.0666v3.6667c0 3.3999 2.6666 6.1999 6.1333 6.7332v2.2666h-2.8667c-0.6666 0-1.2 0.5334-1.2 1.2 0 0.6667 0.5334 1.2 1.2 1.2h8.1999c0.6667 0 1.2-0.5333 1.2-1.2 0-0.6666-0.5333-1.2-1.2-1.2h-2.9333v-2.2666c3.4666-0.6 6.1333-3.3333 6.1333-6.7332z" clip-rule="evenodd" fill="#00b4ef" fill-opacity=".7" fill-rule="evenodd"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 22" style="enable-background:new 0 0 16 22;" xml:space="preserve">
<path d="M14.8,7.8c-0.66,0-1.2,0.53-1.2,1.19v1.05c0,3.32-2.51,6.03-5.6,6.03s-5.6-2.7-5.6-6.03V8.99c0-0.66-0.54-1.19-1.2-1.19
S0,8.33,0,8.99v1.05c0,4.21,2.96,7.71,6.8,8.31v1.27H4.15c-0.66,0-1.2,0.53-1.2,1.19c0,0.66,0.54,1.19,1.2,1.19h7.69
c0.66,0,1.2-0.53,1.2-1.19c0-0.66-0.54-1.19-1.2-1.19H9.2v-1.27c3.84-0.61,6.8-4.11,6.8-8.31V8.99C16,8.33,15.46,7.8,14.8,7.8z
M8,9.05c0.99,0,1.79-0.79,1.79-1.77S8.99,5.5,8,5.5S6.21,6.3,6.21,7.28S7.01,9.05,8,9.05z M8,3.55c0.99,0,1.79-0.79,1.79-1.77
S8.99,0,8,0S6.21,0.79,6.21,1.77S7.01,3.55,8,3.55z M8,14.55c0.99,0,1.79-0.79,1.79-1.77S8.99,11,8,11s-1.79,0.79-1.79,1.77
S7.01,14.55,8,14.55z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 996 B

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18.831" height="31.718" fill="none" version="1.1" viewBox="0 0 18.831 31.718" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m18.644 4.1333-1.4666 1.4666c-1.9333-2.1333-4.6666-3.5333-7.7999-3.5333-3 0-5.6666 1.3333-7.5999 3.3333l-1.4666-1.4666c2.2666-2.4 5.5333-3.9333 9.0666-3.9333 3.6666 0 6.9999 1.6 9.2665 4.1333zm-4.8664 4.8674 1.4667-1.4666c-1.4-1.6666-3.5333-2.7333-5.8666-2.7333-2.2667 0-4.2666 0.99999-5.6666 2.5333l1.4666 1.4666c1.0667-1.1333 2.5333-1.9333 4.2-1.9333 1.7999 0 3.3999 0.79999 4.3999 2.1333zm-1.8974 3.0751v-0.3262c0-1.3051-1.104-2.3492-2.4028-2.3492-1.2988 0-2.4028 1.0441-2.4028 2.3492v4.5025zm-4.3373 9.4371-1.9317 1.6974c0.8846 1.0496 2.3028 1.7208 3.8661 1.7208 2.6626 0 4.8706-1.9576 4.8706-4.3721v-3.3932c0-0.6526 0.4546-1.1746 1.104-1.1746 0.5844 0 1.1689 0.4568 1.1689 1.1093v3.4585c0 3.328-2.5976 6.0687-5.9745 6.5908v2.2186h2.8574c0.6494 0 1.1689 0.5221 1.1689 1.1746 0 0.6526-0.5195 1.1746-1.1689 1.1746h-7.9877c-0.6494 0-1.169-0.522-1.169-1.1746 0-0.6525 0.5196-1.1746 1.169-1.1746h2.7924v-2.2186c-1.7757-0.2348-3.3496-1.1453-4.4314-2.4155l-1.9328 1.6984c-0.45458 0.3915-1.1689 0.3263-1.5586-0.1305l-0.12988-0.1305c-0.38965-0.4568-0.32471-1.1746 0.12988-1.5661l16.495-14.617c0.4546-0.39153 1.1689-0.32627 1.5586 0.13047l0.1299 0.1305c0.3896 0.5221 0.3247 1.1746-0.065 1.6314l-6.6238 5.8206v2.4002c0 1.3051-1.104 2.3492-2.4028 2.3492-0.8086 0-1.5031-0.3671-1.9345-0.938zm-3.9751-5.521c0.5844 0 1.039 0.522 1.039 1.1745v1.3051l-2.2729 2.0229v-3.4585c0.06494-0.5873 0.58447-1.1093 1.2339-1.044z" clip-rule="evenodd" fill="#ea4c5f" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18.831" height="31.718" fill="none" version="1.1" viewBox="0 0 18.831 31.718" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m18.644 4.1333-1.4666 1.4666c-1.9333-2.1333-4.6666-3.5333-7.7999-3.5333-3 0-5.6666 1.3333-7.5999 3.3333l-1.4666-1.4666c2.2666-2.4 5.5333-3.9333 9.0666-3.9333 3.6666 0 6.9999 1.6 9.2665 4.1333zm-4.8664 4.8674 1.4667-1.4666c-1.4-1.6666-3.5333-2.7333-5.8666-2.7333-2.2667 0-4.2666 0.99999-5.6666 2.5333l1.4666 1.4666c1.0667-1.1333 2.5333-1.9333 4.2-1.9333 1.7999 0 3.3999 0.79999 4.3999 2.1333zm-1.8974 3.0751v-0.3262c0-1.3051-1.104-2.3492-2.4028-2.3492-1.2988 0-2.4028 1.0441-2.4028 2.3492v4.5025zm-4.3373 9.4371-1.9317 1.6974c0.8846 1.0496 2.3028 1.7208 3.8661 1.7208 2.6626 0 4.8706-1.9576 4.8706-4.3721v-3.3932c0-0.6526 0.4546-1.1746 1.104-1.1746 0.5844 0 1.1689 0.4568 1.1689 1.1093v3.4585c0 3.328-2.5976 6.0687-5.9745 6.5908v2.2186h2.8574c0.6494 0 1.1689 0.5221 1.1689 1.1746 0 0.6526-0.5195 1.1746-1.1689 1.1746h-7.9877c-0.6494 0-1.169-0.522-1.169-1.1746 0-0.6525 0.5196-1.1746 1.169-1.1746h2.7924v-2.2186c-1.7757-0.2348-3.3496-1.1453-4.4314-2.4155l-1.9328 1.6984c-0.45458 0.3915-1.1689 0.3263-1.5586-0.1305l-0.12988-0.1305c-0.38965-0.4568-0.32471-1.1746 0.12988-1.5661l16.495-14.617c0.4546-0.39153 1.1689-0.32627 1.5586 0.13047l0.1299 0.1305c0.3896 0.5221 0.3247 1.1746-0.065 1.6314l-6.6238 5.8206v2.4002c0 1.3051-1.104 2.3492-2.4028 2.3492-0.8086 0-1.5031-0.3671-1.9345-0.938zm-3.9751-5.521c0.5844 0 1.039 0.522 1.039 1.1745v1.3051l-2.2729 2.0229v-3.4585c0.06495-0.5873 0.58447-1.1093 1.2339-1.044z" clip-rule="evenodd" fill="#ea4c5f" fill-rule="evenodd"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 22" style="enable-background:new 0 0 20 22;" xml:space="preserve">
<path d="M14.11,10.55V7.49l5.54-5.44c0.47-0.46,0.47-1.22,0-1.68c-0.47-0.46-1.24-0.46-1.71,0L0.35,17.64
c-0.47,0.46-0.47,1.22,0,1.68c0.24,0.23,0.55,0.35,0.86,0.35s0.62-0.12,0.86-0.35l2.84-2.79c1.1,0.94,2.44,1.59,3.92,1.82v1.27H6.14
c-0.67,0-1.21,0.53-1.21,1.19c0,0.66,0.54,1.19,1.21,1.19h7.77c0.67,0,1.21-0.53,1.21-1.19c0-0.66-0.54-1.19-1.21-1.19h-2.66v-1.27
c3.88-0.61,6.87-4.11,6.87-8.31V8.99c0-0.66-0.54-1.19-1.21-1.19c-0.67,0-1.21,0.53-1.21,1.19v1.05c0,0.02,0,0.05,0,0.07
c-0.03,2.85-1.93,5.23-4.44,5.81v-1.55C12.9,13.86,14.11,12.34,14.11,10.55z M8.82,15.92c-0.81-0.19-1.56-0.57-2.2-1.08l1.05-1.03
c0.35,0.24,0.73,0.43,1.15,0.56V15.92z M10.04,0L10.04,0C7.8,0,5.97,1.8,5.97,4v5.82l7.72-7.58C13.02,0.92,11.63,0,10.04,0z
M4.5,11.26c-0.08-0.4-0.12-0.81-0.12-1.23V8.99c0-0.66-0.54-1.19-1.21-1.19S1.96,8.33,1.96,8.99v1.05c0,1.11,0.21,2.17,0.59,3.15
L4.5,11.26z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Art" width="27.121" height="40.121" version="1.1" viewBox="0 0 27.121 40.121" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title>mic-ptt-a</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<style>.cls-1{fill-rule:evenodd;}</style>
</defs>
<title>mic-ptt-a</title>
<path class="cls-1" d="m23.1 5.2112-1.85 1.85a13.19 13.19 0 0 0-9.82-4.46 13.35 13.35 0 0 0-9.58 4.2l-1.85-1.84a15.66 15.66 0 0 1 23.1 0.25zm-6.13 6.13 1.85-1.85a9.62 9.62 0 0 0-14.53-0.25l1.84 1.88a7.34 7.34 0 0 1 5.3-2.44 6.85 6.85 0 0 1 5.54 2.66zm-5.39-0.22a3.58 3.58 0 0 1 1.51 0.3 3.68 3.68 0 0 1 1.26 0.88 3.88 3.88 0 0 1 0.84 1.3 3.94 3.94 0 0 1 0.29 1.52v5.07a1.91 1.91 0 0 1 0.48-0.05 3.93 3.93 0 0 1 2.62 1.05 3.38 3.38 0 0 1 1.5-0.32 3.27 3.27 0 0 1 2.77 1.36 2.75 2.75 0 0 1 0.85-0.1 3.35 3.35 0 0 1 1.33 0.25 3.18 3.18 0 0 1 1.12 0.76 3.23 3.23 0 0 1 0.73 1.13 3.32 3.32 0 0 1 0.24 1.32v3.31a12.27 12.27 0 0 1-0.43 3.41l-1.36 5.65a2.67 2.67 0 0 1-1 1.55 2.89 2.89 0 0 1-1.75 0.61h-11a4.47 4.47 0 0 1-1.76-0.43 3.88 3.88 0 0 1-1.36-1.12l-5.78-7.75a3.72 3.72 0 0 1-0.8-2.35 3.64 3.64 0 0 1 0.28-1.5 3.75 3.75 0 0 1 0.84-1.27 3.9 3.9 0 0 1 2.77-1.18 4.5 4.5 0 0 1 2 0.54v-10.06a4.06 4.06 0 0 1 1.13-2.78 3.74 3.74 0 0 1 1.25-0.83 3.85 3.85 0 0 1 1.43-0.27zm0 2a1.89 1.89 0 0 0-0.74 0.12 2 2 0 0 0-1.06 1 1.92 1.92 0 0 0-0.15 0.74v15.35l-2.32-3.06a2 2 0 0 0-0.7-0.59 1.88 1.88 0 0 0-0.9-0.2 1.85 1.85 0 0 0-0.74 0.15 2 2 0 0 0-0.63 0.43 2 2 0 0 0-0.4 0.63 1.9 1.9 0 0 0-0.13 0.74 2 2 0 0 0 0.38 1.17l5.86 7.79a1.79 1.79 0 0 0 0.68 0.57 1.74 1.74 0 0 0 0.85 0.16h11a1.23 1.23 0 0 0 0.59-0.15 0.88 0.88 0 0 0 0.24-0.23 0.71 0.71 0 0 0 0.13-0.31l1.37-5.6a12 12 0 0 0 0.37-3v-3.28a1.7 1.7 0 0 0-0.43-1.07 1.31 1.31 0 0 0-0.47-0.37 1.35 1.35 0 0 0-0.59-0.11 1.46 1.46 0 0 0-0.55 0.11 1.23 1.23 0 0 0-0.46 0.32 1.64 1.64 0 0 0-0.43 1.07h-0.48v-1a1.52 1.52 0 0 0-0.12-0.66 1.61 1.61 0 0 0-0.37-0.56 1.63 1.63 0 0 0-1.22-0.54 2 2 0 0 0-1.23 0.54 1.77 1.77 0 0 0-0.36 0.53 1.57 1.57 0 0 0-0.11 0.64v1h-0.49v-1.33a2.22 2.22 0 0 0-0.58-1.44 1.71 1.71 0 0 0-0.62-0.44 1.88 1.88 0 0 0-0.79-0.12 2 2 0 0 0-0.74 0.13 1.85 1.85 0 0 0-0.63 0.41 2 2 0 0 0-0.53 1.36v1.5h-0.57v-10.4a2 2 0 0 0-0.54-1.44 1.75 1.75 0 0 0-0.63-0.44 1.73 1.73 0 0 0-0.76-0.12z" fill-rule="evenodd"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -1,8 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg id="Art" width="27.2" height="40.433" version="1.1" viewBox="0 0 27.2 40.433" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata>
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="m5.2 8.4327c-0.3 0.3-0.7 0.6-1 0.9l1.8 1.9c1.4-1.5 3.3-2.4 5.3-2.4 2.2 0 4.2 0.9 5.5 2.7l1.8-1.8c-3.3-4.2-9.3-4.7-13.4-1.3zm16-1.3 1.9-1.9c-0.3-0.3-0.6-0.7-1-1-6.3-5.9-16.2-5.6-22.1 0.7l1.9 1.8c2.5-2.6 5.9-4.2 9.6-4.2 3.6 0.2 7.2 1.8 9.7 4.6zm5.6 17.2c-0.2-0.4-0.4-0.8-0.7-1.1s-0.7-0.6-1.1-0.8c-0.5-0.1-0.9-0.2-1.4-0.2-0.3 0-0.6 0-0.8 0.1-0.6-0.9-1.7-1.4-2.8-1.4-0.5 0-1 0.1-1.5 0.3-0.7-0.7-1.6-1-2.6-1.1-0.2 0-0.3 0-0.5 0.1v-5c0-0.5-0.1-1-0.3-1.5s-0.5-0.9-0.8-1.3c-0.4-0.4-0.8-0.7-1.3-0.9s-1-0.3-1.5-0.3-1 0.1-1.4 0.3c-0.5 0.2-0.9 0.5-1.3 0.8-0.7 0.7-1.1 1.7-1.1 2.8v10.1c-0.6-0.3-1.3-0.5-2-0.5-1 0-2 0.4-2.8 1.2-0.4 0.4-0.6 0.8-0.8 1.3s-0.3 1-0.3 1.5c0 0.9 0.3 1.7 0.8 2.4l5.8 7.8c0.4 0.5 0.8 0.9 1.4 1.1 0.6 0.3 1.2 0.4 1.8 0.4h11c0.6 0 1.2-0.2 1.8-0.6 0.5-0.4 0.9-0.9 1-1.6l1.4-5.6c0.3-1.1 0.4-2.3 0.4-3.4v-3.3c-0.1-0.7-0.2-1.1-0.4-1.6zm-1.6 4.6c0 1-0.1 2-0.4 3l-1.3 5.6c0 0.1-0.1 0.2-0.1 0.3-0.1 0.1-0.1 0.2-0.2 0.2-0.3 0.1-0.5 0.2-0.7 0.2h-11c-0.3 0-0.6 0-0.8-0.2-0.3-0.1-0.5-0.3-0.7-0.6l-5.9-7.8c-0.2-0.3-0.4-0.7-0.4-1.2 0-0.3 0-0.5 0.1-0.7s0.2-0.4 0.4-0.6 0.4-0.3 0.6-0.4 0.5-0.2 0.7-0.2c0.3 0 0.6 0.1 0.9 0.2s0.5 0.3 0.7 0.6l2.3 3.1v-15.3c0-0.3 0.1-0.5 0.2-0.7 0.2-0.5 0.6-0.8 1.1-1 0.3-0.2 0.5-0.2 0.8-0.2s0.5 0 0.8 0.1c0.2 0.1 0.5 0.2 0.6 0.4 0.4 0.4 0.6 0.9 0.5 1.4v10.4h0.6v-1.5c0-0.5 0.2-1 0.5-1.4 0.2-0.2 0.4-0.3 0.6-0.4s0.5-0.1 0.7-0.1c0.3 0 0.5 0 0.8 0.1 0.2 0.1 0.4 0.2 0.6 0.4 0.4 0.4 0.6 0.9 0.6 1.4v1.3h0.5v-1c0-0.2 0-0.4 0.1-0.6s0.2-0.4 0.4-0.5c0.3-0.3 0.8-0.5 1.2-0.5 0.5 0 0.9 0.2 1.2 0.5 0.2 0.2 0.3 0.3 0.4 0.6 0.1 0.2 0.1 0.4 0.1 0.7v1h0.5c0-0.4 0.2-0.8 0.4-1.1 0.1-0.1 0.3-0.3 0.5-0.3 0.2-0.1 0.4-0.1 0.6-0.1s0.4 0 0.6 0.1 0.3 0.2 0.5 0.4c0.3 0.3 0.4 0.7 0.4 1.1z" fill="#fff"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 14 22" style="enable-background:new 0 0 14 22;" xml:space="preserve">
<path d="M0.69,3.64c0.32,0.19,0.74,0.08,0.93-0.25C2.34,2.14,3.67,1.37,5.1,1.37s2.77,0.77,3.48,2.02c0.13,0.22,0.35,0.34,0.59,0.34
c0.12,0,0.23-0.03,0.34-0.09C9.84,3.45,9.95,3.03,9.76,2.7C8.8,1.04,7.02,0,5.11,0s-3.7,1.04-4.66,2.7
C0.26,3.03,0.37,3.45,0.69,3.64z M12.87,12.23c-0.42,0-0.8,0.23-1,0.61c-0.01,0.01-0.08,0.14-0.23,0.14c-0.19,0-0.24-0.24-0.26-0.29
c-0.05-0.59-0.54-1.05-1.13-1.05c-0.42,0-0.81,0.24-1.01,0.64c0,0-0.06,0.11-0.22,0.11c-0.2,0-0.24-0.17-0.25-0.27
c-0.03-0.6-0.53-1.07-1.13-1.07c-0.42,0-0.81,0.24-1.01,0.63c0,0-0.07,0.13-0.22,0.13c-0.14,0-0.25-0.11-0.25-0.25v-5.2
c0-0.56-0.42-1.04-0.95-1.09c-0.3-0.03-0.59,0.07-0.81,0.27c-0.22,0.2-0.35,0.49-0.35,0.79v8.8c0,0.12-0.06,0.21-0.17,0.26
c-0.11,0.04-0.22,0.02-0.3-0.06l-1.76-1.77c-0.4-0.4-1.03-0.44-1.44-0.1c-0.23,0.2-0.37,0.47-0.38,0.77
c-0.01,0.29,0.09,0.58,0.29,0.79l3.1,4.12c0.37,0.6,1.99,2,2.42,2.21C6.62,21.77,7.53,22,8.45,22c1.13,0,2.22-0.34,3.13-0.98
c1.49-0.92,2.42-2.6,2.42-4.38v-3.27C14.01,12.75,13.5,12.23,12.87,12.23z M5.1,2.34c-1.04,0-2.02,0.56-2.54,1.47
C2.37,4.14,2.49,4.56,2.81,4.75C3.13,4.93,3.55,4.82,3.74,4.5C4.02,4.01,4.54,3.7,5.1,3.7s1.08,0.3,1.37,0.79
c0.13,0.22,0.35,0.34,0.59,0.34c0.12,0,0.23-0.03,0.34-0.09c0.32-0.19,0.43-0.61,0.25-0.93C7.12,2.9,6.15,2.34,5.1,2.34z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 22" style="enable-background:new 0 0 16 22;" xml:space="preserve">
<path d="M7.95,10.03c-0.38,0-0.73,0.21-0.91,0.56c-0.01,0.02-0.07,0.12-0.2,0.12c-0.13,0-0.23-0.1-0.23-0.23V5.77
c0-0.51-0.38-0.95-0.87-0.99C5.47,4.75,5.2,4.83,5,5.02C4.8,5.2,4.69,5.46,4.69,5.73v7.99c0,0.01,0,0.02-0.01,0.04l3.64-3.65
C8.21,10.06,8.08,10.03,7.95,10.03z M1.62,3.3c0.29,0.17,0.67,0.07,0.84-0.22c0.65-1.13,1.87-1.84,3.17-1.84s2.52,0.7,3.17,1.84
c0.11,0.2,0.32,0.31,0.53,0.31c0.11,0,0.21-0.03,0.31-0.08c0.29-0.17,0.4-0.55,0.23-0.85C9,0.94,7.37,0,5.63,0
C3.89,0,2.27,0.94,1.39,2.45C1.22,2.75,1.32,3.13,1.62,3.3z M15.69,6.26c-0.41-0.41-1.08-0.41-1.5,0L0.31,20.19
c-0.41,0.41-0.41,1.09,0,1.5C0.52,21.9,0.79,22,1.06,22s0.54-0.1,0.75-0.31l3.26-3.27c0.49,0.44,1,0.85,1.21,0.95
c0.73,0.4,1.56,0.61,2.4,0.61c1.03,0,2.02-0.31,2.85-0.89c1.36-0.84,2.2-2.36,2.2-3.97v-2.97c0-0.57-0.46-1.04-1.03-1.04
c-0.16,0-0.32,0.04-0.46,0.12l3.45-3.47C16.1,7.34,16.1,6.67,15.69,6.26z M11.72,11.74l0.06-0.06
C11.77,11.7,11.75,11.72,11.72,11.74z M2.79,15.65l1.68-1.68c-0.08,0.01-0.15-0.01-0.21-0.07l-1.6-1.61
c-0.36-0.36-0.94-0.4-1.31-0.09C1.13,12.38,1,12.63,0.99,12.9c-0.01,0.26,0.08,0.52,0.27,0.71L2.79,15.65z M6.87,4.08
c0.11,0.2,0.32,0.31,0.53,0.31c0.11,0,0.21-0.03,0.31-0.08c0.29-0.17,0.4-0.55,0.23-0.85C7.47,2.64,6.58,2.12,5.63,2.12
S3.79,2.64,3.32,3.46c-0.17,0.3-0.07,0.67,0.23,0.85c0.29,0.17,0.67,0.07,0.84-0.23c0.26-0.44,0.73-0.72,1.24-0.72
S6.62,3.64,6.87,4.08z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18.333099"
height="31.9998"
viewBox="0 0 18.333099 31.9998"
version="1.1"
id="svg4"
sodipodi:docname="mic-unmute-a.svg"
style="fill:none"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1377"
id="namedview6"
showgrid="false"
inkscape:zoom="7.375"
inkscape:cx="9"
inkscape:cy="15.9998"
inkscape:window-x="2552"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
d="M 16.8664,5.59992 18.3331,4.13328 C 16.0664,1.59998 12.7332,0 9.0665,0 5.5333,0 2.26664,1.53331 0,3.93328 L 1.46665,5.39993 C 3.4,3.39995 6.0666,2.06664 9.0665,2.06664 c 3.1333,0 5.8666,1.39998 7.7999,3.53328 z m -3.4,3.39983 1.4667,-1.46665 c -1.4,-1.66664 -3.5333,-2.7333 -5.8666,-2.7333 -2.2666,0 -4.2666,0.99999 -5.6666,2.5333 l 1.4666,1.46665 c 1.0667,-1.13332 2.5333,-1.93331 4.2,-1.93331 1.8,0 3.3999,0.79999 4.3999,2.13331 z m -1.933,2.80065 v 2.9333 H 6.6001 v -2.9333 c 0,-1.3334 1.1333,-2.40001 2.4666,-2.40001 1.4,0 2.4667,1.06661 2.4667,2.40001 z m -4.9333,5.4662 v 2.8666 c 0,1.3333 1.1333,2.4 2.4666,2.4 1.3333,0 2.4667,-1.0667 2.4667,-2.4 v -2.8666 z m 9.9331,-0.1999 V 20.6 c 0,3.3999 -2.6667,6.1332 -6.1333,6.7332 v 2.2666 h 2.9333 c 0.6667,0 1.2,0.5334 1.2,1.2 0,0.6667 -0.5333,1.2 -1.2,1.2 H 5.1333 c -0.6666,0 -1.2,-0.5333 -1.2,-1.2 0,-0.6666 0.5334,-1.2 1.2,-1.2 H 7.9999 V 27.3332 C 4.5333,26.7999 1.8667,23.9999 1.8667,20.6 v -3.6667 c 0,-0.6666 0.59999,-1.1333 1.2666,-1.0666 0.6,0 1.0667,0.5333 1.0667,1.2 V 20.6 c 0,2.4666 2.2666,4.4666 4.9999,4.4666 2.7333,0 5,-2 5,-4.4666 v -3.4667 c 0,-0.6666 0.4666,-1.1999 1.1333,-1.1999 0.6,0 1.2,0.4666 1.2,1.1333 z"
id="path2"
inkscape:connector-curvature="0"
style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" />
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1,13 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18.333" height="32" fill="none" version="1.1" viewBox="0 0 18.333 32" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m16.866 5.5999 1.4667-1.4666c-2.2667-2.5333-5.5999-4.1333-9.2666-4.1333-3.5332 0-6.7999 1.5333-9.0665 3.9333l1.4666 1.4666c1.9334-2 4.6-3.3333 7.5998-3.3333 3.1333 0 5.8666 1.4 7.7999 3.5333zm-3.4 3.3998 1.4667-1.4666c-1.4-1.6666-3.5333-2.7333-5.8666-2.7333-2.2666 0-4.2666 0.99999-5.6666 2.5333l1.4666 1.4666c1.0667-1.1333 2.5333-1.9333 4.2-1.9333 1.8 0 3.3999 0.79999 4.3999 2.1333zm-1.933 2.8006v2.9333h-4.9333v-2.9333c0-1.3334 1.1333-2.4 2.4666-2.4 1.4 0 2.4667 1.0666 2.4667 2.4zm-4.9333 5.4662v2.8666c0 1.3333 1.1333 2.4 2.4666 2.4s2.4667-1.0667 2.4667-2.4v-2.8666zm9.9331-0.1999v3.5333c0 3.3999-2.6667 6.1332-6.1333 6.7332v2.2666h2.9333c0.6667 0 1.2 0.5334 1.2 1.2 0 0.6667-0.5333 1.2-1.2 1.2h-8.1999c-0.6666 0-1.2-0.5333-1.2-1.2 0-0.6666 0.5334-1.2 1.2-1.2h2.8666v-2.2666c-3.4666-0.5333-6.1332-3.3333-6.1332-6.7332v-3.6667c0-0.6666 0.59999-1.1333 1.2666-1.0666 0.6 0 1.0667 0.5333 1.0667 1.2v3.5333c0 2.4666 2.2666 4.4666 4.9999 4.4666s5-2 5-4.4666v-3.4667c0-0.6666 0.4666-1.1999 1.1333-1.1999 0.6 0 1.2 0.4666 1.2 1.1333z" clip-rule="evenodd" fill="#fff" fill-rule="evenodd"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 22" style="enable-background:new 0 0 16 22;" xml:space="preserve">
<path d="M14.8,7.8c-0.66,0-1.2,0.53-1.2,1.19v1.05c0,2.88-1.89,5.29-4.4,5.89v-1.55c1.64-0.51,2.83-2.03,2.83-3.82V4
c0-2.2-1.81-4-4.03-4S3.97,1.8,3.97,4v6.55c0,1.79,1.2,3.31,2.83,3.82v1.55c-2.51-0.59-4.4-3.01-4.4-5.89V8.99
c0-0.66-0.54-1.19-1.2-1.19S0,8.33,0,8.99v1.05c0,4.21,2.96,7.71,6.8,8.32v1.27H4.15c-0.66,0-1.2,0.53-1.2,1.19S3.48,22,4.15,22
h7.69c0.66,0,1.2-0.53,1.2-1.19s-0.54-1.19-1.2-1.19H9.2v-1.27c3.84-0.61,6.8-4.11,6.8-8.32V8.99C16,8.33,15.46,7.8,14.8,7.8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 834 B

View file

@ -141,7 +141,7 @@ Rectangle {
id: avatarButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 16
anchors.leftMargin: 2
width: 48
height: width
@ -210,7 +210,7 @@ Rectangle {
id: inputDeviceButton
anchors.verticalCenter: parent.verticalCenter
anchors.left: avatarButtonContainer.right
anchors.leftMargin: 6
anchors.leftMargin: 2
width: 32
height: width
}
@ -220,7 +220,7 @@ Rectangle {
id: outputDeviceButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.left: inputDeviceButton.right
anchors.leftMargin: 2
anchors.leftMargin: 7
width: 32
height: width
@ -232,9 +232,8 @@ Rectangle {
AudioScriptingInterface.systemInjectorGain === simplifiedUI.numericConstants.mutedValue
source: outputDeviceButton.outputMuted ? "./images/outputDeviceMuted.svg" : "./images/outputDeviceLoud.svg"
anchors.centerIn: parent
width: 20
height: 20
fillMode: Image.PreserveAspectFit
width: outputDeviceButton.outputMuted ? 25 : 26
height: 22
visible: false
}
@ -283,7 +282,7 @@ Rectangle {
id: statusButton
property string currentStatus
anchors.centerIn: parent
width: 15
width: 22
height: width
radius: width/2
visible: false
@ -304,6 +303,21 @@ Rectangle {
}
}
Image {
id: statusIcon
source: statusButton.currentStatus === "available" ? "images/statusPresent.svg" : "images/statusAway.svg"
anchors.centerIn: parent
width: statusButton.currentStatus === "busy" ? 13 : 14
height: statusButton.currentStatus === "busy" ? 2 : 10
}
ColorOverlay {
anchors.fill: statusIcon
opacity: statusButton.currentStatus ? (statusButtonMouseArea.containsMouse ? 1.0 : 0.7) : 0.7
source: statusIcon
color: "#ffffff"
}
MouseArea {
id: statusButtonMouseArea
anchors.fill: parent
@ -329,8 +343,8 @@ Rectangle {
id: hmdButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.right: settingsButtonContainer.left
anchors.rightMargin: 14
width: 32
anchors.rightMargin: 8
width: 48
height: width
visible: false
@ -338,9 +352,8 @@ Rectangle {
id: displayModeImage
source: HMD.active ? "./images/desktopMode.svg" : "./images/vrMode.svg"
anchors.centerIn: parent
width: 29
height: 16
fillMode: Image.PreserveAspectFit
width: HMD.active ? 25 : 43
height: 22
visible: false
}
@ -399,17 +412,16 @@ Rectangle {
id: settingsButtonContainer
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 16
width: 32
anchors.rightMargin: 3
width: 36
height: width
Image {
id: settingsButtonImage
source: "./images/settings.svg"
anchors.centerIn: parent
width: 20
height: 20
fillMode: Image.PreserveAspectFit
width: 22
height: 22
visible: false
}

View file

@ -1,13 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30.941" height="22.781" fill="none" version="1.1" viewBox="0 0 30.941 22.781" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m29.57 1.4006c0.441 0.44032 0.7894 0.96444 1.0247 1.5415 0.2353 0.57705 0.3527 1.1954 0.3453 1.8185v9.06c0.0066 0.629-0.111 1.2531-0.3461 1.8366-0.2351 0.5834-0.583 1.1147-1.0239 1.5634-0.4179 0.4646-0.9304 0.8343-1.503 1.0844-0.5727 0.2501-1.1922 0.3747-1.817 0.3656h-9.69v2.11h6.33c0.2652 0 0.5196 0.1054 0.7071 0.2929 0.1876 0.1876 0.2929 0.4419 0.2929 0.7071s-0.1053 0.5196-0.2929 0.7071c-0.1875 0.1876-0.4419 0.2929-0.7071 0.2929h-14.53c-0.73 0-1.09-0.34-1.09-1s0.36001-1 1.09-1h6.25v-2.11h-9.92c-0.62489 0.0098-1.2446-0.1146-1.8173-0.3647-0.57272-0.2502-1.0851-0.6202-1.5027-1.0853-0.44084-0.4487-0.78878-0.98-1.0239-1.5634-0.23509-0.5835-0.35272-1.2076-0.34613-1.8366v-9.06c-0.007379-0.62314 0.11003-1.2414 0.34532-1.8185 0.23529-0.57706 0.58369-1.1012 1.0247-1.5415 0.42558-0.45144 0.94066-0.80913 1.5123-1.0502 0.57167-0.24106 1.1873-0.36021 1.8077-0.34981h21.56c0.6202-0.0091691 1.2355 0.11053 1.807 0.35152 0.5715 0.24099 1.0867 0.59802 1.513 1.0485zm-0.82 3.36c0.0079-0.33937-0.0536-0.67677-0.1809-0.99147-0.1272-0.3147-0.3175-0.60005-0.5591-0.83853-0.2262-0.23901-0.4992-0.42893-0.802-0.55795-0.3028-0.12903-0.6289-0.1944-0.958-0.19205h-21.56c-0.32929-0.00355-0.65573 0.06127-0.95868 0.19037-0.30295 0.12909-0.57581 0.31965-0.80132 0.55963-0.24352 0.23703-0.43506 0.52212-0.56246 0.83717-0.12739 0.31505-0.18785 0.65315-0.17754 0.99283v9.06c-0.01049 0.3412 0.04985 0.6809 0.17722 0.9976 0.12736 0.3167 0.31899 0.6035 0.56278 0.8424 0.22601 0.2387 0.49919 0.4277 0.80218 0.5551 0.303 0.1274 0.62918 0.1904 0.95782 0.1849h21.56c0.3285 0.0043 0.6543-0.0593 0.9571-0.1866s0.5762-0.3157 0.8029-0.5534c0.2419-0.2403 0.4322-0.5274 0.5595-0.8438 0.1272-0.3163 0.1886-0.6553 0.1805-0.9962z" fill="#000"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 25 22" style="enable-background:new 0 0 25 22;" xml:space="preserve">
<path d="M23.24,0H1.77C0.79,0,0,0.8,0,1.78v12.2c0,0.98,0.79,1.78,1.77,1.78h9.22v3.17H7.85c-0.83,0-1.52,0.69-1.52,1.53
S7.02,22,7.85,22h9.29c0.83,0,1.52-0.69,1.52-1.53s-0.68-1.53-1.52-1.53h-3.13v-3.17h9.22c0.97,0,1.77-0.8,1.77-1.78V1.78
C25.02,0.8,24.22,0,23.24,0z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 629 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="23.56" height="26.476" fill="none" version="1.1" viewBox="0 0 23.56 26.476" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m23.207 10.353c-0.0809-0.1096-0.1864-0.1987-0.3079-0.2601-0.1216-0.0613-0.2559-0.0933-0.3921-0.0933s-0.2705 0.032-0.3921 0.0933c-0.1216 0.0614-0.227 0.1505-0.3079 0.2601l-4.46 4.45c-0.1079 0.0831-0.1953 0.1899-0.2554 0.3121-0.0601 0.1223-0.0914 0.2567-0.0914 0.3929s0.0313 0.2706 0.0914 0.3928 0.1475 0.229 0.2554 0.3122c0.0819 0.1096 0.1883 0.1987 0.3107 0.26 0.1224 0.0614 0.2574 0.0933 0.3943 0.0933s0.2719-0.0319 0.3943-0.0933c0.1224-0.0613 0.2288-0.1504 0.3107-0.26l4.45-4.45c0.1097-0.082 0.1987-0.1883 0.2601-0.3107 0.0613-0.1224 0.0932-0.2574 0.0932-0.3943s-0.0319-0.2719-0.0932-0.3943c-0.0614-0.1224-0.1504-0.2288-0.2601-0.3107zm0 5.86c0.1097-0.082 0.1987-0.1883 0.2601-0.3107 0.0613-0.1224 0.0932-0.2574 0.0932-0.3943s-0.0319-0.2719-0.0932-0.3943c-0.0614-0.1224-0.1504-0.2288-0.2601-0.3107l-4.45-4.45c-0.0819-0.1097-0.1883-0.1987-0.3107-0.2601-0.1224-0.0613-0.2574-0.0933-0.3943-0.0933s-0.2719 0.032-0.3943 0.0933c-0.1224 0.0614-0.2288 0.1504-0.3107 0.2601-0.1079 0.0831-0.1953 0.1899-0.2554 0.3121-0.0601 0.1223-0.0914 0.2567-0.0914 0.3929s0.0313 0.2706 0.0914 0.3928 0.1475 0.229 0.2554 0.3122l4.46 4.45c0.0809 0.1096 0.1863 0.1986 0.3079 0.26s0.2559 0.0934 0.3921 0.0934 0.2705-0.032 0.3921-0.0934c0.1215-0.0614 0.227-0.1504 0.3079-0.26z" fill="#000"/>
<path d="m10.341 1.0357c0.3782-0.48138 0.9083-0.82052 1.5039-0.96216 0.5956-0.14164 1.2216-0.07743 1.7761 0.18216 0.6142 0.17933 1.1481 0.56434 1.5122 1.0905 0.3641 0.52616 0.5363 1.1615 0.4878 1.7995v0.55001 1.41c0 0.58-0.05 1.18-0.08 1.83s0 1.3 0 2v14.34c0.0746 0.634-0.0599 1.2749-0.383 1.8255-0.3231 0.5505-0.8172 0.9805-1.407 1.2245-0.3071 0.0833-0.6223 0.1336-0.94 0.15-0.4473 0.0083-0.8906-0.0856-1.2961-0.2745-0.4055-0.1888-0.7625-0.4678-1.0439-0.8155-2-2.19-3.39-3.7-4.22-4.53-0.07888-0.0913-0.17528-0.1657-0.28351-0.219-0.10822-0.0532-0.22607-0.0842-0.34649-0.091h-1.33c-0.5977 0.0074-1.1954-0.0194-1.79-0.08-0.33315-0.0238-0.6578-0.116-0.95373-0.2708-0.29594-0.1549-0.55679-0.3691-0.76624-0.6292-0.45471-0.5112-0.72881-1.1577-0.78003-1.84v-8.82c-0.010075-0.39268 0.068268-0.7826 0.22925-1.1409 0.16098-0.35831 0.40047-0.67584 0.70074-0.92909 0.627-0.54844 1.4373-0.84114 2.27-0.82001h2.42c0.12092-0.00919 0.23886-0.04218 0.34698-0.09709 0.10812-0.05492 0.20428-0.13068 0.28302-0.2229 0.97334-1.12 2.3367-2.6733 4.09-4.66zm-1.1 5.86c-0.36 0.37-0.91001 1-1.64 1.8-0.21506 0.26203-0.52331 0.4305-0.85999 0.47h-3.83v8.28h3.91c0.11347-5e-3 0.22682 0.0127 0.33331 0.0522s0.20395 0.1 0.28668 0.1778l2.11 2.35c0.21717 0.2771 0.45449 0.5378 0.70999 0.78l1 1.09c0.1508 0.1381 0.2821 0.2962 0.39 0.47l0.47 0.47 0.31 0.55v-20.24l-1.17 1.41c-0.92 1.04-1.55 1.78-2.02 2.34z" fill="#000"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 25 22" style="enable-background:new 0 0 25 22;" xml:space="preserve">
<path d="M1.23,15.44h0.95l9.04-8.98V3.22c0-1.03-1.32-1.55-2.1-0.82L5.15,6.22C4.92,6.43,4.61,6.55,4.28,6.55H1.23
C0.55,6.55,0,7.07,0,7.71v6.57C0,14.92,0.55,15.44,1.23,15.44z M21.53,2.57l0.3-0.3c0.52-0.52,0.52-1.36,0-1.88s-1.37-0.52-1.9,0
L0.47,19.72c-0.52,0.52-0.52,1.36,0,1.88C0.73,21.87,1.07,22,1.41,22c0.34,0,0.69-0.13,0.95-0.39l4.35-4.32l2.41,2.31
c0.77,0.73,2.1,0.21,2.1-0.82v-5.97l3.79-3.76c0.47,0.53,0.75,1.22,0.75,1.94c0,1.04-0.56,2.01-1.47,2.53
c-0.37,0.22-0.5,0.69-0.29,1.06c0.15,0.25,0.41,0.39,0.68,0.39c0.13,0,0.27-0.03,0.39-0.1c1.39-0.8,2.25-2.28,2.25-3.88
c0-1.14-0.45-2.23-1.21-3.04l1.65-1.64C18.94,7.58,19.6,9.23,19.6,11c0,2.46-1.34,4.76-3.49,6c-0.37,0.22-0.5,0.69-0.29,1.06
c0.15,0.25,0.41,0.39,0.68,0.39c0.13,0,0.27-0.03,0.39-0.1c2.63-1.51,4.27-4.33,4.27-7.35c0-2.18-0.82-4.22-2.29-5.78l1.55-1.54
c1.92,1.95,3.01,4.57,3.01,7.32c0,3.73-2.02,7.2-5.27,9.07c-0.37,0.22-0.5,0.69-0.29,1.06c0.15,0.25,0.41,0.39,0.68,0.39
c0.13,0,0.27-0.03,0.39-0.1C22.68,19.27,25,15.28,25,11C25,7.83,23.75,4.82,21.53,2.57z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,13 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26.34" height="26.48" fill="none" version="1.1" viewBox="0 0 26.34 26.48" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m25.675 11.57c0.4076 0.4141 0.6449 0.966 0.6651 1.5466v0.1238c0.0042 0.3038-0.0527 0.6053-0.167 0.8868s-0.2839 0.5372-0.4987 0.752c-0.2149 0.2149-0.4706 0.3844-0.752 0.4988-0.2815 0.1143-0.5831 0.1711-0.8869 0.1669-0.3355 8e-4 -0.6656-0.0844-0.9589-0.2474-0.3766-0.0257-0.747-0.1092-1.0982-0.2475-0.2256 1.0915-0.6334 2.1373-1.2063 3.0934 0.3383 0.1098 0.6351 0.3202 0.8506 0.6032h0.1237c0.2959 0.1271 0.5763 0.2879 0.8353 0.4794 0.2297 0.2182 0.4127 0.4809 0.5378 0.7721 0.125 0.2911 0.1894 0.6047 0.1894 0.9216 0 0.3168-0.0644 0.6304-0.1894 0.9216-0.1251 0.2911-0.3081 0.5538-0.5378 0.772-0.4755 0.3895-1.0713 0.6024-1.686 0.6024s-1.2103-0.2129-1.6858-0.6024c-0.1975-0.2634-0.3636-0.5489-0.495-0.8507 0 0 0-0.1237-0.1082-0.1237-0.1366-0.0967-0.2512-0.221-0.3365-0.3649s-0.1393-0.3042-0.1585-0.4703c-0.9266 0.5763-1.9476 0.9847-3.016 1.2064 0.1319 0.3478 0.2153 0.7121 0.2475 1.0827 0.1498 0.3031 0.229 0.6362 0.2319 0.9744 0.0075 0.6273-0.2313 1.2326-0.665 1.6859-0.1939 0.2211-0.4312 0.3999-0.6974 0.525-0.2661 0.1251-0.5553 0.1938-0.8493 0.2019-0.3179-7e-4 -0.6324-0.0654-0.9247-0.1903s-0.5564-0.3074-0.7766-0.5366c-0.2267-0.2181-0.4068-0.4801-0.5291-0.7699s-0.1843-0.6015-0.1824-0.916c0.0028-0.3382 0.0822-0.6713 0.232-0.9744 0.0245-0.3718 0.108-0.7372 0.2474-1.0827-1.0935-0.2189-2.1404-0.6272-3.0934-1.2064-0.13354 0.2927-0.29406 0.5723-0.47946 0.8352l-0.12377 0.1237c-0.04312 0.3351-0.2151 0.6403-0.47946 0.8507-0.22555 0.2094-0.4912 0.3709-0.78099 0.4745-0.28979 0.1037-0.59764 0.1475-0.90485 0.1287-0.30958 0.0191-0.61986-0.0244-0.91221-0.1281-0.29234-0.1036-0.5608-0.2652-0.7892-0.4751-0.22782-0.2193-0.40902-0.4824-0.5328-0.7734-0.12379-0.291-0.18758-0.604-0.18758-0.9202 0-0.3163 0.06379-0.6293 0.18758-0.9203 0.12378-0.291 0.30498-0.554 0.5328-0.7734 0.2904-0.2218 0.62143-0.3847 0.97442-0.4794 0-0.1702 0.35581-0.3712 0.85075-0.6032-0.58522-0.9517-0.99885-1.9987-1.2219-3.0934-0.30719 0.2451-0.68976 0.3762-1.0827 0.3712v-0.1237c-0.27587 0.2028-0.61935 0.2915-0.95893 0.2474-0.63061 3e-4 -1.2381-0.2371-1.7013-0.665-0.23125-0.2055-0.41581-0.4582-0.54121-0.741-0.1254-0.2828-0.18876-0.5892-0.18578-0.8985 9.9624e-4 -0.3156 0.06594-0.6276 0.19088-0.9174 0.12494-0.2897 0.30734-0.5512 0.53611-0.7685 0.22023-0.2292 0.48434-0.4117 0.77665-0.5366s0.60679-0.1897 0.92467-0.1904c0.33503 0.0032 0.66421 0.0882 0.95893 0.2475 0.37013 0.0252 0.73475 0.1034 1.0827 0.232 0.21231-1.0978 0.62669-2.1467 1.2219-3.0933-0.33511-0.04313-0.64032-0.21512-0.85075-0.47948h-0.12367c-0.30979-0.16124-0.59609-0.3642-0.85075-0.60321-0.43277-0.44917-0.6693-1.0519-0.6577-1.6755 0.01161-0.62362 0.27045-1.2171 0.71963-1.6499 0.44918-0.43277 1.0518-0.66938 1.6754-0.65777 0.62363 0.0116 1.2171 0.27046 1.6499 0.71964 0.23692 0.22641 0.40342 0.51644 0.47946 0.83521 0.30048 0.25161 0.512 0.59327 0.60323 0.97442 0.92503-0.65792 1.9796-1.1114 3.0934-1.3302-0.1612-0.29958-0.2461-0.63423-0.2474-0.97442v-0.10827c-0.2062-0.42346-0.2768-0.90022-0.202-1.3652 0.0747-0.46502 0.2911-0.89566 0.6195-1.2332 0.2128-0.21772 0.4683-0.38917 0.7504-0.50361 0.2821-0.11444 0.5848-0.16941 0.8891-0.16146 0.3109-0.0053511 0.6199 0.050637 0.9092 0.16476 0.2893 0.11412 0.5532 0.28413 0.7767 0.50032 0.2242 0.1913 0.405 0.42822 0.5304 0.69493s0.1923 0.55708 0.1965 0.85175c-0.0028 0.33814-0.0821 0.67126-0.2319 0.97442v0.10827c-0.0087 0.3392-0.0934 0.67214-0.2475 0.97441 1.056 0.3181 2.069 0.76483 3.016 1.3302 0.0142-0.18703 0.0653-0.36939 0.1502-0.53662 0.085-0.16723 0.2021-0.31601 0.3448-0.43779 0.1377-0.31908 0.3436-0.60415 0.6032-0.83521 0.1944-0.24043 0.4428-0.43159 0.725-0.55791 0.2822-0.12631 0.5902-0.18423 0.899-0.16904 0.2997-0.01337 0.599 0.03308 0.8805 0.13665s0.5395 0.26217 0.759 0.46656c0.2598 0.1993 0.4703 0.45571 0.6152 0.74939s0.2203 0.61676 0.2203 0.94423-0.0754 0.65054-0.2203 0.94422c-0.1449 0.29369-0.3554 0.55011-0.6152 0.7494-0.2362 0.26068-0.5265 0.46656-0.8507 0.60321-0.2883 0.22513-0.6201 0.38835-0.9744 0.47947 0.5779 0.96792 1.0252 2.0081 1.3301 3.0934 0.3032-0.1498 0.6363-0.2291 0.9745-0.232h0.1237c0.2933-0.1631 0.6234-0.2482 0.959-0.2475 0.3033 0.0194 0.5991 0.1024 0.8683 0.2436 0.2691 0.1412 0.5056 0.3375 0.6938 0.5762zm-9.0017 5.1968c0.5809-0.5759 1.0105-1.2864 1.2506-2.0684 0.2402-0.782 0.2833-1.6112 0.1257-2.4139-0.1576-0.8026-0.511-1.5539-1.029-2.1871-0.5179-0.63313-1.1843-1.1285-1.9399-1.442-0.7555-0.31354-1.5767-0.43555-2.3908-0.35517-0.814 0.08038-1.5956 0.36066-2.2753 0.81591-0.67959 0.45525-1.2362 1.0714-1.6203 1.7936-0.38412 0.7222-0.58387 1.5281-0.58143 2.3461 0.04947 1.2984 0.58636 2.5304 1.5036 3.4505 0.91727 0.9202 2.1476 1.4609 3.4458 1.5144 0.6529 0.0061 1.3004-0.1195 1.9036-0.3693 0.6033-0.2498 1.15-0.6187 1.6074-1.0846z" fill="#000"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 22 22" style="enable-background:new 0 0 22 22;" xml:space="preserve">
<path id="settings_filled_1_" d="M22,11L22,11c0-0.76-0.57-1.39-1.32-1.48l-2.54-0.3c0,0,0,0-0.01,0c-0.17-0.69-0.45-1.36-0.83-1.99
c0,0,0,0,0-0.01l1.59-2.01c0.47-0.59,0.42-1.44-0.12-1.98l0,0c-0.54-0.54-1.39-0.58-1.98-0.12l-2.01,1.59c0,0,0,0-0.01,0
c-0.63-0.38-1.3-0.65-1.99-0.82c0,0,0,0,0-0.01l-0.3-2.54C12.39,0.57,11.75,0,11,0l0,0c-0.76,0-1.39,0.57-1.48,1.32l-0.3,2.54
c0,0,0,0,0,0.01C8.52,4.04,7.85,4.32,7.22,4.69c0,0,0,0-0.01,0L5.2,3.11C4.61,2.64,3.76,2.69,3.22,3.22l0,0
C2.69,3.76,2.64,4.61,3.11,5.2l1.59,2.01c0,0,0,0,0,0.01c-0.38,0.63-0.65,1.3-0.82,1.99c0,0,0,0-0.01,0l-2.54,0.3
C0.57,9.61,0,10.25,0,11l0,0c0,0.76,0.57,1.39,1.32,1.48l2.54,0.3c0,0,0,0,0.01,0c0.17,0.69,0.45,1.36,0.83,1.99c0,0,0,0,0,0.01
L3.11,16.8c-0.47,0.59-0.42,1.44,0.12,1.98l0,0c0.54,0.54,1.39,0.58,1.98,0.12l2.01-1.59c0,0,0,0,0.01,0
c0.63,0.38,1.3,0.65,1.99,0.82c0,0,0,0,0,0.01l0.3,2.54C9.61,21.43,10.25,22,11,22l0,0c0.76,0,1.39-0.57,1.48-1.32l0.3-2.54
c0,0,0,0,0-0.01c0.69-0.17,1.36-0.45,1.99-0.83c0,0,0,0,0.01,0l2.01,1.59c0.59,0.47,1.44,0.42,1.98-0.12l0,0
c0.54-0.54,0.58-1.39,0.12-1.98l-1.59-2.01c0,0,0,0,0-0.01c0.38-0.63,0.65-1.3,0.82-1.99c0,0,0,0,0.01,0l2.54-0.3
C21.43,12.39,22,11.75,22,11z M13.98,13.29c-1.52,1.96-4.45,1.96-5.97,0c-1.04-1.33-1.04-3.25,0-4.58c1.52-1.96,4.45-1.96,5.97,0
C15.02,10.04,15.02,11.95,13.98,13.29z"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 72.48 12" style="enable-background:new 0 0 72.48 12;" xml:space="preserve">
<style type="text/css">
.st0{fill:#020202;}
</style>
<path class="st0" d="M66.48,12H6c-3.31,0-6-2.69-6-6s2.69-6,6-6h60.48c3.31,0,6,2.69,6,6S69.79,12,66.48,12z"/>
</svg>

After

Width:  |  Height:  |  Size: 530 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 76.13 54.75" style="enable-background:new 0 0 76.13 54.75;" xml:space="preserve">
<path d="M27.38,54.75c-1.54,0-3.07-0.59-4.24-1.76L1.76,31.61c-2.34-2.34-2.34-6.14,0-8.48c2.34-2.34,6.14-2.34,8.48,0l17.14,17.14
L65.9,1.76c2.34-2.34,6.14-2.34,8.48,0s2.34,6.14,0,8.48L31.62,53C30.44,54.18,28.9,54.75,27.38,54.75z"/>
</svg>

After

Width:  |  Height:  |  Size: 603 B

View file

@ -1,13 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="34.613" height="18.502" fill="none" version="1.1" viewBox="0 0 34.613 18.502" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m27.112 18.501h-5.47c-1 0-2-0.86-3.13-2.57-0.3008-0.5432-0.6971-1.0276-1.17-1.43l-1.17 1.41c-1.25 1.68-2.37 2.59-3.36 2.59h-5.23c-0.99178 0.0181-1.9771-0.1628-2.8978-0.5321s-1.7579-0.9194-2.4622-1.6179c-0.72014-0.6727-1.2901-1.4898-1.6727-2.3979-0.38256-0.9082-0.56906-1.8869-0.54731-2.8721v-3.58c-0.017013-0.99193 0.17144-1.9767 0.5535-2.8922s0.94946-1.7422 1.6665-2.4278c0.70151-0.70433 1.5376-1.2603 2.4584-1.6348 0.92084-0.37452 1.9076-0.55993 2.9016-0.54519h19.53c0.9864-0.0053033 1.9641 0.18507 2.8764 0.5601s1.7412 0.92727 2.4387 1.6248 1.2498 1.5264 1.6248 2.4387c0.375 0.91233 0.5654 1.89 0.5601 2.8764v3.51c0.0183 0.9778-0.1639 1.949-0.5354 2.8536-0.3715 0.9047-0.9244 1.7237-1.6246 2.4064-0.6896 0.718-1.5196 1.2864-2.4382 1.6701-0.9186 0.3836-1.9064 0.5742-2.9018 0.5599zm-9.77-6c0.83 0 1.77 0.78 2.81 2.34 0.84 1.09 1.3 1.66 1.49 1.66h5.47c0.7244 0.0102 1.4433-0.1263 2.1136-0.4013 0.6702-0.275 1.2779-0.6827 1.7864-1.1987 0.5281-0.495 0.9469-1.0951 1.2293-1.7615 0.2824-0.6665 0.4223-1.3847 0.4107-2.1085v-3.53c0.0116-0.72376-0.1283-1.442-0.4107-2.1084-0.2824-0.66649-0.7012-1.2665-1.2293-1.7616-0.5085-0.51598-1.1162-0.92372-1.7864-1.1987-0.6703-0.27497-1.3892-0.41148-2.1136-0.40132h-19.53c-0.72598-0.01094-1.4466 0.12518-2.1186 0.40015-0.67198 0.27498-1.2813 0.68312-1.7914 1.1999-0.52617 0.49655-0.94359 1.0969-1.2259 1.763s-0.4233 1.3836-0.41412 2.107v3.51c-0.00918 0.7234 0.13183 1.4409 0.41412 2.107s0.69971 1.2665 1.2259 1.763c0.50835 0.5204 1.117 0.9322 1.789 1.2106 0.67205 0.2785 1.3936 0.4178 2.121 0.4094h5.23c0.36 0 0.94-0.6 1.72-1.8 1.09-1.51 2-2.26 2.73-2.26z" fill="#000"/>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 42 22" style="enable-background:new 0 0 42 22;" xml:space="preserve">
<path d="M33.97,0H8.02C3.59,0,0,3.63,0,8.09v5.1C0,18.06,3.91,22,8.73,22h6.29c1.58,0,3.09-0.63,4.2-1.76l1.16-1.17
c0.34-0.35,0.9-0.35,1.24,0l1.16,1.17c1.12,1.13,2.63,1.76,4.2,1.76h6.99c4.43,0,8.03-3.63,8.03-8.1V8.1C41.99,3.63,38.4,0,33.97,0z
M17.41,13.39c-0.53,1.19-1.48,2.15-2.66,2.68C9.56,18.4,4.53,13.33,6.85,8.09C7.37,6.9,8.32,5.94,9.5,5.41
C14.69,3.08,19.72,8.15,17.41,13.39z M35.15,13.39c-0.53,1.19-1.48,2.15-2.66,2.68c-5.19,2.33-10.22-2.74-7.91-7.98
c0.52-1.19,1.48-2.15,2.66-2.68C32.43,3.08,37.46,8.15,35.15,13.39z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 892 B

View file

@ -19,13 +19,15 @@
* The <code>"far-grab"</code> {@link Entities.ActionType|ActionType} moves and rotates an entity to a target position and
* orientation, optionally relative to another entity. Collisions between the entity and the user's avatar are disabled during
* the far-grab.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-FarGrab
* @property {Uuid} otherID=null - If an entity ID, the <code>targetPosition</code> and <code>targetRotation</code> are
* relative to the entity's position and rotation.
* @property {Uuid} otherJointIndex=null - If a joint index in the <code>otherID</code> entity, the <code>targetPosition</code>
* and <code>targetRotation</code> are relative to the entity joint's position and rotation.
* @property {Vec3} targetPosition=0,0,0 - The target position.
* @property {Quat} targetRotation=0,0,0,1 - The target rotation.
* @property {Uuid} otherID=null - If an entity ID, the <code>targetPosition</code> and <code>targetRotation</code> are
* relative to this entity's position and rotation.
* @property {number} linearTimeScale=3.4e+38 - Controls how long it takes for the entity's position to catch up with the
* target position. The value is the time for the action to catch up to 1/e = 0.368 of the target value, where the action
* is applied using an exponential decay.
@ -33,6 +35,7 @@
* target orientation. The value is the time for the action to catch up to 1/e = 0.368 of the target value, where the
* action is applied using an exponential decay.
*/
// The properties are per ObjectActionTractor.
class AvatarActionFarGrab : public ObjectActionTractor {
public:
AvatarActionFarGrab(const QUuid& id, EntityItemPointer ownerEntity);

View file

@ -447,16 +447,16 @@ bool AvatarActionHold::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"hold"</code> {@link Entities.ActionType|ActionType} positions and rotates an entity relative to an avatar's hand.
* Collisions between the entity and the user's avatar are disabled during the hold.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-Hold
* @property {Uuid} holderID=MyAvatar.sessionUUID - The ID of the avatar holding the entity.
* @property {string} hand=right - The hand holding the entity: <code>"left"</code> or <code>"right"</code>.
* @property {Vec3} relativePosition=0,0,0 - The target position relative to the avatar's hand.
* @property {Vec3} relativeRotation=0,0,0,1 - The target rotation relative to the avatar's hand.
* @property {number} timeScale=3.4e+38 - Controls how long it takes for the entity's position and rotation to catch up with
* the target. The value is the time for the action to catch up to 1/e = 0.368 of the target value, where the action is
* applied using an exponential decay.
* @property {string} hand=right - The hand holding the entity: <code>"left"</code> or <code>"right"</code>.
* @property {boolean} kinematic=false - If <code>true</code>, the entity is made kinematic during the action; the entity won't
* lag behind the hand but constraint actions such as <code>"hinge"</code> won't act properly.
* @property {boolean} kinematicSetVelocity=false - If <code>true</code> and <code>kinematic</code> is <code>true</code>, the

View file

@ -165,14 +165,14 @@ public slots:
/**jsdoc
* Set number of cycles texture size is required to be stable
* @function Entities.setMinimumGPUTextureMemStabilityCount
* @function Test.setMinimumGPUTextureMemStabilityCount
* @param {number} count - Number of cycles to wait
*/
Q_INVOKABLE void setMinimumGPUTextureMemStabilityCount(int count);
/**jsdoc
* Check whether all textures have been loaded.
* @function Entities.isTextureLoadingComplete
* @function Test.isTextureLoadingComplete
* @returns {boolean} <code>true</code> texture memory usage is not increasing
*/
Q_INVOKABLE bool isTextureLoadingComplete();

View file

@ -6,12 +6,18 @@
@implementation LatestBuildRequest
- (NSInteger) getCurrentVersion {
NSString* interfaceAppPath = [[Launcher.sharedLauncher getAppPath] stringByAppendingString:@"interface.app"];
NSError * error = nil;
Interface * interface = [[Interface alloc] initWith:interfaceAppPath];
NSInteger currentVersion = [interface getVersion:&error];
if (currentVersion == 0 && error != nil) {
NSLog(@"can't get version from interface, falling back to settings: %@", error);
NSInteger currentVersion;
@try {
NSString* interfaceAppPath = [[Launcher.sharedLauncher getAppPath] stringByAppendingString:@"interface.app"];
NSError * error = nil;
Interface * interface = [[Interface alloc] initWith:interfaceAppPath];
currentVersion = [interface getVersion:&error];
if (currentVersion == 0 && error != nil) {
NSLog(@"can't get version from interface, falling back to settings: %@", error);
currentVersion = [Settings.sharedSettings latestBuildVersion];
}
} @catch (NSException *exception) {
NSLog(@"an exception was thrown: %@", exception);
currentVersion = [Settings.sharedSettings latestBuildVersion];
}
return currentVersion;
@ -58,6 +64,7 @@
BOOL appDirectoryExist = [fileManager fileExistsAtPath:[[sharedLauncher getAppPath] stringByAppendingString:@"interface.app"]];
dispatch_async(dispatch_get_main_queue(), ^{
NSInteger currentVersion = [self getCurrentVersion];
NSLog(@"Latest Build Request -> does build directory exist: %@", appDirectoryExist ? @"TRUE" : @"FALSE");
NSLog(@"Latest Build Request -> current version: %ld", currentVersion);

View file

@ -5,13 +5,13 @@ void redirectLogToDocuments()
{
NSString* filePath = [[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0]
stringByAppendingString:@"/Launcher/"];
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSError * error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:TRUE attributes:nil error:&error];
}
NSString *pathForLog = [filePath stringByAppendingPathComponent:@"log.txt"];
freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}
@ -23,12 +23,12 @@ int main(int argc, const char* argv[]) {
NSLog(@"launcher is already running");
return 0;
}
[NSApplication sharedApplication];
Launcher* sharedLauncher = [Launcher sharedLauncher];
[Settings sharedSettings];
[NSApp setDelegate: sharedLauncher];
// Referenced from https://stackoverflow.com/questions/9155015/handle-cmd-q-in-cocoa-application-and-menu-item-quit-application-programmatic
id menubar = [[NSMenu new] autorelease];
id appMenuItem = [[NSMenuItem new] autorelease];
@ -40,7 +40,7 @@ int main(int argc, const char* argv[]) {
id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
[appMenu addItem:quitMenuItem];
[appMenuItem setSubmenu:appMenu];
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
return NSApplicationMain(argc, argv);
}

View file

@ -109,23 +109,20 @@ bool Basic2DWindowOpenGLDisplayPlugin::internalActivate() {
return Parent::internalActivate();
}
gpu::PipelinePointer Basic2DWindowOpenGLDisplayPlugin::getCompositeScenePipeline() {
gpu::PipelinePointer Basic2DWindowOpenGLDisplayPlugin::getRenderTexturePipeline() {
#if defined(Q_OS_ANDROID)
return _linearToSRGBPipeline;
return _linearToSRGBPipeline;
#else
return _SRGBToLinearPipeline;
#ifndef USE_GLES
return _SRGBToLinearPipeline;
#else
return _drawTexturePipeline;
#endif
#endif
}
gpu::Element Basic2DWindowOpenGLDisplayPlugin::getCompositeFBColorSpace() {
#if defined(Q_OS_ANDROID)
return gpu::Element::COLOR_SRGBA_32;
#else
return gpu::Element::COLOR_RGBA_32;
#endif
}
void Basic2DWindowOpenGLDisplayPlugin::compositeExtra() {
#if defined(Q_OS_ANDROID)
auto& virtualPadManager = VirtualPad::Manager::instance();

View file

@ -37,8 +37,7 @@ public:
virtual void pluginUpdate() override {};
virtual gpu::PipelinePointer getCompositeScenePipeline() override;
virtual gpu::Element getCompositeFBColorSpace() override;
virtual gpu::PipelinePointer getRenderTexturePipeline() override;
protected:
mutable bool _isThrottled = false;

View file

@ -62,7 +62,7 @@ public:
PresentThread() {
connect(qApp, &QCoreApplication::aboutToQuit, [this] {
shutdown();
shutdown();
});
setObjectName("Present");
@ -82,12 +82,11 @@ public:
Lock lock(_mutex);
_shutdown = true;
_condition.wait(lock, [&] { return !_shutdown; });
_condition.wait(lock, [&] { return !_shutdown; });
qCDebug(displayPlugins) << "Present thread shutdown";
}
}
void setNewDisplayPlugin(OpenGLDisplayPlugin* plugin) {
Lock lock(_mutex);
if (isRunning()) {
@ -104,7 +103,6 @@ public:
_context->moveToThread(this);
}
virtual void run() override {
PROFILE_SET_THREAD_NAME("Present Thread");
@ -131,7 +129,6 @@ public:
_condition.notify_one();
}
{
// Main thread does it's thing while we wait on the lock to release
Lock lock(_mutex);
@ -201,7 +198,7 @@ public:
#if defined(Q_OS_MAC)
_context->doneCurrent();
#endif
_refreshRateController->sleepThreadIfNeeded(this, currentPlugin->isHmd());
}
@ -235,7 +232,6 @@ public:
_condition.notify_one();
}
private:
void makeCurrent();
void doneCurrent();
@ -245,7 +241,6 @@ private:
// Used to allow the main thread to perform context operations
Condition _condition;
QThread* _targetOperationThread { nullptr };
bool _pendingOtherThreadOperation { false };
bool _finishedOtherThreadOperation { false };
@ -302,7 +297,6 @@ bool OpenGLDisplayPlugin::activate() {
return false;
}
// This should not return until the new context has been customized
// and the old context (if any) has been uncustomized
presentThread->setNewDisplayPlugin(this);
@ -334,7 +328,7 @@ void OpenGLDisplayPlugin::deactivate() {
_container->showDisplayPluginsTools(false);
if (!_container->currentDisplayActions().isEmpty()) {
foreach(auto itemInfo, _container->currentDisplayActions()) {
foreach (auto itemInfo, _container->currentDisplayActions()) {
_container->removeMenuItem(itemInfo.first, itemInfo.second);
}
_container->currentDisplayActions().clear();
@ -368,7 +362,6 @@ void OpenGLDisplayPlugin::customizeContext() {
image = image.convertToFormat(QImage::Format_ARGB32);
}
if ((image.width() > 0) && (image.height() > 0)) {
cursorData.texture = gpu::Texture::createStrict(
gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
image.width(), image.height(),
@ -384,7 +377,7 @@ void OpenGLDisplayPlugin::customizeContext() {
}
}
if (!_drawTexturePipeline) {
if (!_linearToSRGBPipeline) {
gpu::StatePointer blendState = gpu::StatePointer(new gpu::State());
blendState->setDepthTest(gpu::State::DepthTest(false));
blendState->setBlendFunction(true,
@ -397,17 +390,17 @@ void OpenGLDisplayPlugin::customizeContext() {
scissorState->setDepthTest(gpu::State::DepthTest(false));
scissorState->setScissorEnable(true);
_drawTexturePipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), scissorState);
_drawTexturePipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), scissorState);
_linearToSRGBPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaLinearToSRGB), scissorState);
_linearToSRGBPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaLinearToSRGB), scissorState);
_SRGBToLinearPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaSRGBToLinear), scissorState);
_SRGBToLinearPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureGammaSRGBToLinear), scissorState);
_hudPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), blendState);
_hudPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTexture), blendState);
_mirrorHUDPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureMirroredX), blendState);
_mirrorHUDPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTextureMirroredX), blendState);
_cursorPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTransformedTexture), blendState);
_cursorPipeline = gpu::Pipeline::create(gpu::Shader::createProgram(DrawTransformedTexture), blendState);
}
updateCompositeFramebuffer();
@ -418,9 +411,9 @@ void OpenGLDisplayPlugin::uncustomizeContext() {
_drawTexturePipeline.reset();
_linearToSRGBPipeline.reset();
_SRGBToLinearPipeline.reset();
_cursorPipeline.reset();
_hudPipeline.reset();
_mirrorHUDPipeline.reset();
_cursorPipeline.reset();
_compositeFramebuffer.reset();
withPresentThreadLock([&] {
@ -433,7 +426,6 @@ void OpenGLDisplayPlugin::uncustomizeContext() {
});
}
// Pressing Alt (and Meta) key alone activates the menubar because its style inherits the
// SHMenuBarAltKeyNavigation from QWindowsStyle. This makes it impossible for a scripts to
// receive keyPress events for the Alt (and Meta) key in a reliable manner.
@ -514,11 +506,18 @@ void OpenGLDisplayPlugin::captureFrame(const std::string& filename) const {
});
}
void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer& texture, const glm::ivec4& viewport, const glm::ivec4& scissor) {
void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch,
const gpu::TexturePointer& texture,
const glm::ivec4& viewport,
const glm::ivec4& scissor) {
renderFromTexture(batch, texture, viewport, scissor, nullptr);
}
void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer& texture, const glm::ivec4& viewport, const glm::ivec4& scissor, const gpu::FramebufferPointer& copyFbo /*=gpu::FramebufferPointer()*/) {
void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch,
const gpu::TexturePointer& texture,
const glm::ivec4& viewport,
const glm::ivec4& scissor,
const gpu::FramebufferPointer& copyFbo /*=gpu::FramebufferPointer()*/) {
auto fbo = gpu::FramebufferPointer();
batch.enableStereo(false);
batch.resetViewTransform();
@ -528,13 +527,13 @@ void OpenGLDisplayPlugin::renderFromTexture(gpu::Batch& batch, const gpu::Textur
batch.setViewportTransform(viewport);
batch.setResourceTexture(0, texture);
batch.setPipeline(_drawTexturePipeline);
batch.setPipeline(getRenderTexturePipeline());
batch.draw(gpu::TRIANGLE_STRIP, 4);
if (copyFbo) {
gpu::Vec4i copyFboRect(0, 0, copyFbo->getWidth(), copyFbo->getHeight());
gpu::Vec4i sourceRect(scissor.x, scissor.y, scissor.x + scissor.z, scissor.y + scissor.w);
float aspectRatio = (float)scissor.w / (float) scissor.z; // height/width
float aspectRatio = (float)scissor.w / (float)scissor.z; // height/width
// scale width first
int xOffset = 0;
int yOffset = 0;
@ -635,11 +634,6 @@ void OpenGLDisplayPlugin::compositePointer() {
});
}
// Overridden by Basic2DWindowDisplayPlugin and OculusDisplayPlugin
gpu::PipelinePointer OpenGLDisplayPlugin::getCompositeScenePipeline() {
return _drawTexturePipeline;
}
void OpenGLDisplayPlugin::compositeScene() {
render([&](gpu::Batch& batch) {
batch.enableStereo(false);
@ -682,7 +676,7 @@ void OpenGLDisplayPlugin::internalPresent() {
render([&](gpu::Batch& batch) {
// Note: _displayTexture must currently be the same size as the display.
uvec2 dims = _displayTexture ? uvec2(_displayTexture->getDimensions()) : getSurfacePixels();
auto viewport = ivec4(uvec2(0), dims);
auto viewport = ivec4(uvec2(0), dims);
renderFromTexture(batch, _displayTexture ? _displayTexture : _compositeFramebuffer->getRenderBuffer(0), viewport, viewport);
});
swapBuffers();
@ -765,7 +759,7 @@ float OpenGLDisplayPlugin::presentRate() const {
return _presentRate.rate();
}
std::function<void(int)> OpenGLDisplayPlugin::getRefreshRateOperator() {
std::function<void(int)> OpenGLDisplayPlugin::getRefreshRateOperator() {
return [](int targetRefreshRate) {
auto refreshRateController = DependencyManager::get<PresentThread>()->getRefreshRateController();
refreshRateController->setRefreshRateLimitPeriod(targetRefreshRate);
@ -781,7 +775,6 @@ float OpenGLDisplayPlugin::renderRate() const {
return _renderRate.rate();
}
void OpenGLDisplayPlugin::swapBuffers() {
static auto context = _container->getPrimaryWidget()->context();
context->swapBuffers();
@ -909,17 +902,10 @@ void OpenGLDisplayPlugin::render(std::function<void(gpu::Batch& batch)> f) {
OpenGLDisplayPlugin::~OpenGLDisplayPlugin() {
}
// Added this to allow desktop composite framebuffer to be RGBA while mobile is SRGBA
// Overridden by Basic2DWindowDisplayPlugin
// FIXME: Eventually it would be ideal to have both framebuffers be of the same type
gpu::Element OpenGLDisplayPlugin::getCompositeFBColorSpace() {
return gpu::Element::COLOR_RGBA_32;
}
void OpenGLDisplayPlugin::updateCompositeFramebuffer() {
auto renderSize = glm::uvec2(getRecommendedRenderSize());
if (!_compositeFramebuffer || _compositeFramebuffer->getSize() != renderSize) {
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", getCompositeFBColorSpace(), renderSize.x, renderSize.y));
_compositeFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("OpenGLDisplayPlugin::composite", gpu::Element::COLOR_RGBA_32, renderSize.x, renderSize.y));
}
}
@ -950,14 +936,13 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
// maintain aspect ratio, filling the width first if possible. If that makes the height too
// much, fill height instead. TODO: only do this when texture changes
GLint newX = 0;
GLint newY = 0;
float aspectRatio = (float)texHeight / (float)texWidth;
GLint newWidth = target->width();
GLint newHeight = std::round(aspectRatio * (float) target->width());
GLint newHeight = std::round(aspectRatio * (float)target->width());
if (newHeight > target->height()) {
newHeight = target->height();
newWidth = std::round((float)target->height() / aspectRatio);
@ -966,7 +951,7 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne
newY = (target->height() - newHeight) / 2;
}
glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newX + newWidth, newY + newHeight, GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT, GL_NEAREST);
glBlitNamedFramebuffer(fbo[0], fbo[1], 0, 0, texWidth, texHeight, newX, newY, newX + newWidth, newY + newHeight, GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT, GL_NEAREST);
// don't delete the textures!
glDeleteFramebuffers(2, fbo);
@ -975,3 +960,11 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne
#endif
}
gpu::PipelinePointer OpenGLDisplayPlugin::getRenderTexturePipeline() {
return _drawTexturePipeline;
}
gpu::PipelinePointer OpenGLDisplayPlugin::getCompositeScenePipeline() {
return _drawTexturePipeline;
}

View file

@ -23,11 +23,9 @@
#include <gpu/Batch.h>
namespace gpu {
namespace gl {
class GLBackend;
}
}
namespace gpu { namespace gl {
class GLBackend;
}} // namespace gpu::gl
class RefreshRateController;
@ -35,10 +33,12 @@ class OpenGLDisplayPlugin : public DisplayPlugin {
Q_OBJECT
Q_PROPERTY(float hudAlpha MEMBER _hudAlpha)
using Parent = DisplayPlugin;
protected:
using Mutex = std::mutex;
using Lock = std::unique_lock<Mutex>;
using Condition = std::condition_variable;
public:
~OpenGLDisplayPlugin();
// These must be final to ensure proper ordering of operations
@ -55,13 +55,9 @@ public:
void captureFrame(const std::string& outputName) const override;
void submitFrame(const gpu::FramePointer& newFrame) override;
glm::uvec2 getRecommendedRenderSize() const override {
return getSurfacePixels();
}
glm::uvec2 getRecommendedRenderSize() const override { return getSurfacePixels(); }
glm::uvec2 getRecommendedUiSize() const override {
return getSurfaceSize();
}
glm::uvec2 getRecommendedUiSize() const override { return getSurfaceSize(); }
virtual bool setDisplayTexture(const QString& name) override;
virtual bool onDisplayTextureReset() { return false; };
@ -84,9 +80,10 @@ public:
// Three threads, one for rendering, one for texture transfers, one reserved for the GL driver
int getRequiredThreadCount() const override { return 3; }
void copyTextureToQuickFramebuffer(NetworkTexturePointer source, QOpenGLFramebufferObject* target, GLsync* fenceSync) override;
virtual std::function<void(gpu::Batch&, const gpu::TexturePointer&, bool mirror)> getHUDOperator() override;
void copyTextureToQuickFramebuffer(NetworkTexturePointer source,
QOpenGLFramebufferObject* target,
GLsync* fenceSync) override;
protected:
friend class PresentThread;
@ -105,10 +102,7 @@ protected:
virtual void compositeLayers();
virtual void compositeScene();
virtual void compositePointer();
virtual void compositeExtra() {};
virtual gpu::PipelinePointer getCompositeScenePipeline();
virtual gpu::Element getCompositeFBColorSpace();
virtual void compositeExtra(){};
// These functions must only be called on the presentation thread
virtual void customizeContext();
@ -125,8 +119,15 @@ protected:
// Plugin specific functionality to send the composed scene to the output window or device
virtual void internalPresent();
void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer& texture, const glm::ivec4& viewport, const glm::ivec4& scissor, const gpu::FramebufferPointer& fbo);
void renderFromTexture(gpu::Batch& batch, const gpu::TexturePointer& texture, const glm::ivec4& viewport, const glm::ivec4& scissor);
void renderFromTexture(gpu::Batch& batch,
const gpu::TexturePointer& texture,
const glm::ivec4& viewport,
const glm::ivec4& scissor,
const gpu::FramebufferPointer& fbo);
void renderFromTexture(gpu::Batch& batch,
const gpu::TexturePointer& texture,
const glm::ivec4& viewport,
const glm::ivec4& scissor);
virtual void updateFrameData();
virtual glm::mat4 getViewCorrection() { return glm::mat4(); }
@ -138,7 +139,7 @@ protected:
void render(std::function<void(gpu::Batch& batch)> f);
bool _vsyncEnabled { true };
bool _vsyncEnabled{ true };
QThread* _presentThread{ nullptr };
std::queue<gpu::FramePointer> _newFrameQueue;
RateCounter<200> _droppedFrameRate;
@ -147,7 +148,7 @@ protected:
RateCounter<200> _renderRate;
gpu::FramePointer _currentFrame;
gpu::Frame* _lastFrame { nullptr };
gpu::Frame* _lastFrame{ nullptr };
mat4 _prevRenderView;
gpu::FramebufferPointer _compositeFramebuffer;
gpu::PipelinePointer _hudPipeline;
@ -157,9 +158,11 @@ protected:
gpu::PipelinePointer _linearToSRGBPipeline;
gpu::PipelinePointer _SRGBToLinearPipeline;
gpu::PipelinePointer _cursorPipeline;
gpu::TexturePointer _displayTexture{};
float _compositeHUDAlpha { 1.0f };
float _compositeHUDAlpha{ 1.0f };
virtual gpu::PipelinePointer getRenderTexturePipeline();
virtual gpu::PipelinePointer getCompositeScenePipeline();
struct CursorData {
QImage image;
@ -169,19 +172,19 @@ protected:
};
std::map<uint16_t, CursorData> _cursorsData;
bool _lockCurrentTexture { false };
bool _lockCurrentTexture{ false };
void assertNotPresentThread() const;
void assertIsPresentThread() const;
template<typename F>
template <typename F>
void withPresentThreadLock(F f) const {
assertIsPresentThread();
Lock lock(_presentMutex);
f();
}
template<typename F>
template <typename F>
void withNonPresentThreadLock(F f) const {
assertNotPresentThread();
Lock lock(_presentMutex);
@ -198,4 +201,3 @@ protected:
QImage getScreenshot(float aspectRatio);
QImage getSecondaryCameraScreenshot();
};

View file

@ -28,7 +28,7 @@ class EntityTreeElementExtraEncodeData;
class ReadBitstreamToTreeParams;
/**jsdoc
* Ambient light is defined by the following properties.
* Ambient light is defined by the following properties:
* @typedef {object} Entities.AmbientLight
* @property {number} ambientIntensity=0.5 - The intensity of the light.
* @property {string} ambientURL="" - A cube map image that defines the color of the light coming from each direction. If

View file

@ -48,16 +48,18 @@ bool operator!=(const AnimationPropertyGroup& a, const AnimationPropertyGroup& b
/**jsdoc
* The AnimationProperties are used to configure an animation.
* An animation is configured by the following properties:
* @typedef {object} Entities.AnimationProperties
* @property {string} url="" - The URL of the FBX file that has the animation.
* @property {boolean} allowTranslation=true - <code>true</code> to enable translations contained in the animation to be
* played, <code>false</code> to disable translations.
* @property {number} fps=30 - The speed in frames/s that the animation is played at.
* @property {number} firstFrame=0 - The first frame to play in the animation.
* @property {number} lastFrame=100000 - The last frame to play in the animation.
* @property {number} currentFrame=0 - The current frame being played in the animation.
* @property {boolean} running=false - If <code>true</code> then the animation should play.
* @property {boolean} loop=true - If <code>true</code> then the animation should be continuously repeated in a loop.
* @property {boolean} hold=false - If <code>true</code> then the rotations and translations of the last frame played should be
* @property {boolean} loop=true - If <code>true</code> then the animation is continuously repeated in a loop.
* @property {boolean} hold=false - If <code>true</code> then the rotations and translations of the last frame played are
* maintained when the animation stops playing.
*/
void AnimationPropertyGroup::copyToScriptValue(const EntityPropertyFlags& desiredProperties, QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const {

View file

@ -31,9 +31,8 @@ static const float INITIAL_BLOOM_THRESHOLD { 0.7f };
static const float INITIAL_BLOOM_SIZE { 0.9f };
/**jsdoc
* Bloom is defined by the following properties.
* Bloom is defined by the following properties:
* @typedef {object} Entities.Bloom
*
* @property {number} bloomIntensity=0.25 - The intensity of the bloom effect.
* @property {number} bloomThreshold=0.7 - The threshold for the bloom effect.
* @property {number} bloomSize=0.9 - The size of the bloom effect.

View file

@ -94,47 +94,48 @@ variables. These argument variables are used by the code which is run when bull
#include "EntityItem.h"
/**jsdoc
* <p>An entity action may be one of the following types:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Type</th><th>Description</th><th>Arguments</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"far-grab"</code></td><td>Avatar action</td>
* <td>Moves and rotates an entity to a target position and orientation, optionally relative to another entity. Collisions
* between the entity and the user's avatar are disabled during the far-grab.</td>
* <td>{@link Entities.ActionArguments-FarGrab}</td></tr>
* <tr><td><code>"hold"</code></td><td>Avatar action</td>
* <td>Positions and rotates an entity relative to an avatar's hand. Collisions between the entity and the user's avatar
* are disabled during the hold.</td>
* <td>{@link Entities.ActionArguments-Hold}</td></tr>
* <tr><td><code>"offset"</code></td><td>Object action</td>
* <td>Moves an entity so that it is a set distance away from a target point.</td>
* <td>{@link Entities.ActionArguments-Offset}</td></tr>
* <tr><td><code>"tractor"</code></td><td>Object action</td>
* <td>Moves and rotates an entity to a target position and orientation, optionally relative to another entity.</td>
* <td>{@link Entities.ActionArguments-Tractor}</td></tr>
* <tr><td><code>"travel-oriented"</code></td><td>Object action</td>
* <td>Orients an entity to align with its direction of travel.</td>
* <td>{@link Entities.ActionArguments-TravelOriented}</td></tr>
* <tr><td><code>"hinge"</code></td><td>Object constraint</td>
* <td>Lets an entity pivot about an axis or connects two entities with a hinge joint.</td>
* <td>{@link Entities.ActionArguments-Hinge}</td></tr>
* <tr><td><code>"slider"</code></td><td>Object constraint</td>
* <td>Lets an entity slide and rotate along an axis, or connects two entities that slide and rotate along a shared
* axis.</td>
* <td>{@link Entities.ActionArguments-Slider|ActionArguments-Slider}</td></tr>
* <tr><td><code>"cone-twist"</code></td><td>Object constraint</td>
* <td>Connects two entities with a joint that can move through a cone and can twist.</td>
* <td>{@link Entities.ActionArguments-ConeTwist}</td></tr>
* <tr><td><code>"ball-socket"</code></td><td>Object constraint</td>
* <td>Connects two entities with a ball and socket joint.</td>
* <td>{@link Entities.ActionArguments-BallSocket}</td></tr>
* <tr><td><code>"spring"</code></td><td colspan="3">Synonym for <code>"tractor"</code>. <em>Legacy value.</em></td></tr>
* </tbody>
* </table>
* @typedef {string} Entities.ActionType
*/
* <p>An entity action may be one of the following types:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Type</th><th>Description</th><th>Arguments</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"far-grab"</code></td><td>Avatar action</td>
* <td>Moves and rotates an entity to a target position and orientation, optionally relative to another entity. Collisions
* between the entity and the user's avatar are disabled during the far-grab.</td>
* <td>{@link Entities.ActionArguments-FarGrab}</td></tr>
* <tr><td><code>"hold"</code></td><td>Avatar action</td>
* <td>Positions and rotates an entity relative to an avatar's hand. Collisions between the entity and the user's avatar
* are disabled during the hold.</td>
* <td>{@link Entities.ActionArguments-Hold}</td></tr>
* <tr><td><code>"offset"</code></td><td>Object action</td>
* <td>Moves an entity so that it is a set distance away from a target point.</td>
* <td>{@link Entities.ActionArguments-Offset}</td></tr>
* <tr><td><code>"tractor"</code></td><td>Object action</td>
* <td>Moves and rotates an entity to a target position and orientation, optionally relative to another entity.</td>
* <td>{@link Entities.ActionArguments-Tractor}</td></tr>
* <tr><td><code>"travel-oriented"</code></td><td>Object action</td>
* <td>Orients an entity to align with its direction of travel.</td>
* <td>{@link Entities.ActionArguments-TravelOriented}</td></tr>
* <tr><td><code>"hinge"</code></td><td>Object constraint</td>
* <td>Lets an entity pivot about an axis or connects two entities with a hinge joint.</td>
* <td>{@link Entities.ActionArguments-Hinge}</td></tr>
* <tr><td><code>"slider"</code></td><td>Object constraint</td>
* <td>Lets an entity slide and rotate along an axis, or connects two entities that slide and rotate along a shared
* axis.</td>
* <td>{@link Entities.ActionArguments-Slider|ActionArguments-Slider}</td></tr>
* <tr><td><code>"cone-twist"</code></td><td>Object constraint</td>
* <td>Connects two entities with a joint that can move through a cone and can twist.</td>
* <td>{@link Entities.ActionArguments-ConeTwist}</td></tr>
* <tr><td><code>"ball-socket"</code></td><td>Object constraint</td>
* <td>Connects two entities with a ball and socket joint.</td>
* <td>{@link Entities.ActionArguments-BallSocket}</td></tr>
* <tr><td><code>"spring"</code></td><td colspan="3">Synonym for <code>"tractor"</code>.
* <span class="important">Deprecated.</span></td></tr>
* </tbody>
* </table>
* @typedef {string} Entities.ActionType
*/
// Note: The "none" action type is not listed because it's an internal "uninitialized" value and not useful for scripts.
EntityDynamicType EntityDynamicInterface::dynamicTypeFromString(QString dynamicTypeString) {
QString normalizedDynamicTypeString = dynamicTypeString.toLower().remove('-').remove('_');

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -42,7 +42,10 @@ public:
* <tr><th>Value</th><th>Description</th><th>Properties</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"Box"</code></td><td>A rectangular prism. This is a synonym of <code>"Shape"</code> for the case
* <tr><td><code>"Shape"</code></td><td>A basic entity such as a cube.
* See also, the <code>"Box"</code> and <code>"Sphere"</code> entity types.</td>
* <td>{@link Entities.EntityProperties-Shape|EntityProperties-Shape}</td></tr>
* <tr><td><code>"Box"</code></td><td>A rectangular prism. This is a synonym of <code>"Shape"</code> for the case
* where the entity's <code>shape</code> property value is <code>"Cube"</code>.<br />
* If an entity is created with its <code>type</code>
* set to <code>"Box"</code> it will always be created with a <code>shape</code> property value of
@ -56,16 +59,13 @@ public:
* <code>"Sphere"</code>. If an entity of type <code>Box</code> or <code>Shape</code> has its <code>shape</code> set
* to <code>"Sphere"</code> then its <code>type</code> will be reported as <code>"Sphere"</code>.
* <td>{@link Entities.EntityProperties-Sphere|EntityProperties-Sphere}</td></tr>
* <tr><td><code>"Shape"</code></td><td>A basic entity such as a cube.
* See also, the <code>"Box"</code> and <code>"Sphere"</code> entity types.</td>
* <td>{@link Entities.EntityProperties-Shape|EntityProperties-Shape}</td></tr>
* <tr><td><code>"Model"</code></td><td>A mesh model from an FBX or OBJ file.</td>
* <tr><td><code>"Model"</code></td><td>A mesh model from a glTf, FBX, or OBJ file.</td>
* <td>{@link Entities.EntityProperties-Model|EntityProperties-Model}</td></tr>
* <tr><td><code>"Text"</code></td><td>A pane of text oriented in space.</td>
* <td>{@link Entities.EntityProperties-Text|EntityProperties-Text}</td></tr>
* <tr><td><code>"Image"</code></td><td>An image oriented in space.</td>
* <td>{@link Entities.EntityProperties-Image|EntityProperties-Image}</td></tr>
* <tr><td><code>"Web"</code></td><td>A browsable Web page.</td>
* <tr><td><code>"Web"</code></td><td>A browsable web page.</td>
* <td>{@link Entities.EntityProperties-Web|EntityProperties-Web}</td></tr>
* <tr><td><code>"ParticleEffect"</code></td><td>A particle system that can be used to simulate things such as fire,
* smoke, snow, magic spells, etc.</td>
@ -78,7 +78,7 @@ public:
* <td>{@link Entities.EntityProperties-PolyVox|EntityProperties-PolyVox}</td></tr>
* <tr><td><code>"Grid"</code></td><td>A grid of lines in a plane.</td>
* <td>{@link Entities.EntityProperties-Grid|EntityProperties-Grid}</td></tr>
* <tr><td><code>"Gizmo"</code></td><td>An entity with various UI-related properties.</td>
* <tr><td><code>"Gizmo"</code></td><td>A gizmo intended for UI.</td>
* <td>{@link Entities.EntityProperties-Gizmo|EntityProperties-Gizmo}</td></tr>
* <tr><td><code>"Light"</code></td><td>A local lighting effect.</td>
* <td>{@link Entities.EntityProperties-Light|EntityProperties-Light}</td></tr>

View file

@ -41,35 +41,33 @@ static const glm::vec3 INITIAL_EQUIPPABLE_INDICATOR_OFFSET { glm::vec3(0.0f) };
/**jsdoc
* Grab is defined by the following properties.
* Grabbing behavior is defined by the following properties:
*
* @typedef {object} Entities.Grab
*
* @property {boolean} grabbable=true - If <code>true</code> the entity can be grabbed.
* @property {boolean} grabKinematic=true - If <code>true</code> the entity is updated in a kinematic manner.
* If <code>false</code> it will be grabbed using a tractor action. A kinematic grab will make the item appear more
* tightly held, but will cause it to behave poorly when interacting with dynamic entities.
* @property {boolean} grabFollowsController=true - If <code>true</code> the entity will follow the motions of the
* hand-controller even if the avatar's hand can't get to the implied position. This should be <code>true</code>
* for tools, pens, etc and false for things meant to decorate the hand.
*
* @property {boolean} triggerable=false - If <code>true</code> the entity will receive calls to trigger
* @property {boolean} grabbable=true - If <code>true</code> then the entity can be grabbed.
* @property {boolean} grabKinematic=true - If <code>true</code> then the entity will be updated in a kinematic manner when
* grabbed; if <code>false</code> it will be grabbed using a tractor action. A kinematic grab will make the item appear
* more tightly held but will cause it to behave poorly when interacting with dynamic entities.
* @property {boolean} grabFollowsController=true - If <code>true</code> then the entity will follow the motions of the hand
* controller even if the avatar's hand can't get to the implied position. This should be set <code>true</code> for tools,
* pens, etc. and <code>false</code> for things meant to decorate the hand.
* @property {boolean} triggerable=false - If <code>true</code> then the entity will receive calls to trigger
* {@link Controller|Controller entity methods}.
*
* @property {boolean} equippable=true - If <code>true</code> the entity can be equipped.
* @property {boolean} grabDelegateToParent=true - If <code>true</code> and the entity is grabbed, the grab will be transferred
* to its parent entity if there is one; if <code>false</code>, a child entity can be grabbed and moved relative to its
* parent.
* @property {boolean} equippable=true - If <code>true</code> then the entity can be equipped.
* @property {Vec3} equippableLeftPosition=0,0,0 - Positional offset from the left hand, when equipped.
* @property {Quat} equippableLeftRotation=0,0,0,1 - Rotational offset from the left hand, when equipped.
* @property {Vec3} equippableRightPosition=0,0,0 - Positional offset from the right hand, when equipped.
* @property {Quat} equippableRightRotation=0,0,0,1 - Rotational offset from the right hand, when equipped.
*
* @property {string} equippableIndicatorURL="" - If non-empty, this model will be used to indicate that an
* entity is equippable, rather than the default.
* @property {Vec3} equippableIndicatorScale=1,1,1 - If equippableIndicatorURL is non-empty, this controls the
* @property {Vec3} equippableIndicatorScale=1,1,1 - If <code>equippableIndicatorURL</code> is non-empty, this controls the
scale of the displayed indicator.
* @property {Vec3} equippableIndicatorOffset=0,0,0 - If equippableIndicatorURL is non-empty, this controls the
* @property {Vec3} equippableIndicatorOffset=0,0,0 - If <code>equippableIndicatorURL</code> is non-empty, this controls the
relative offset of the displayed object from the equippable entity.
*/
class GrabPropertyGroup : public PropertyGroup {
public:
// EntityItemProperty related helpers

View file

@ -43,7 +43,7 @@ static const float INITIAL_KEY_LIGHT_ALTITUDE{ 200.0f };
// FIXME: Document hazeAttenuationKeyLight, hazeKeyLightRange, and hazeKeyLightAltitude once they're working and are provided
// in the Create app's UI.
/**jsdoc
* Haze is defined by the following properties.
* Haze is defined by the following properties:
* @typedef {object} Entities.Haze
*
* @property {number} hazeRange=1000 - The horizontal distance at which visibility is reduced to 95%; i.e., 95% of each pixel's
@ -56,7 +56,7 @@ static const float INITIAL_KEY_LIGHT_ALTITUDE{ 200.0f };
* haze color are blended 50/50.
*
* @property {boolean} hazeAltitudeEffect=false - If <code>true</code> then haze decreases with altitude as defined by the
* entity's local coordinate system; <code>hazeBaseRef</code> and </code>hazeCeiling</code> are used.
* entity's local coordinate system; <code>hazeBaseRef</code> and <code>hazeCeiling</code> are used.
* @property {number} hazeBaseRef=0 - The y-axis value in the entity's local coordinate system at which the haze density starts
* reducing with altitude.
* @property {number} hazeCeiling=200 - The y-axis value in the entity's local coordinate system at which the haze density has
@ -65,9 +65,11 @@ static const float INITIAL_KEY_LIGHT_ALTITUDE{ 200.0f };
* @property {number} hazeBackgroundBlend=0 - The proportion of the skybox image to show through the haze: <code>0.0</code>
* displays no skybox image; <code>1.0</code> displays no haze.
*
* @property {boolean} hazeAttenuateKeyLight=false - <em>Currently not supported.</em>
* @property {number} hazeKeyLightRange=1000 - <em>Currently not supported.</em>
* @property {number} hazeKeyLightAltitude=200 - <em>Currently not supported.</em>
* @property {boolean} hazeAttenuateKeyLight=false - If <code>true</code> then the haze attenuates the key light;
* <code>hazeKeyLightRange</code> and <code>hazeKeyLightAltitude</code> are used.
* @property {number} hazeKeyLightRange=1000 - The distance at which the haze attenuates the key light by 95%.
* @property {number} hazeKeyLightAltitude=200 - The altitude at which the haze starts attenuating the key light (i.e., the
* altitude at which the distance starts being calculated).
*/
class HazePropertyGroup : public PropertyGroup {
public:

View file

@ -28,13 +28,13 @@ class EntityTreeElementExtraEncodeData;
class ReadBitstreamToTreeParams;
/**jsdoc
* A key light is defined by the following properties.
* A key light is defined by the following properties:
* @typedef {object} Entities.KeyLight
* @property {Color} color=255,255,255 - The color of the light.
* @property {number} intensity=1 - The intensity of the light.
* @property {Vec3} direction=0,-1,0 - The direction the light is shining.
* @property {boolean} castShadows=false - If <code>true</code> then shadows are cast. Shadows are cast by avatars, plus
* {@link Entities.EntityType|Model} and {@link Entities.EntityType|Shape} entities that have their
* {@link Entities.EntityProperties-Model|Model} and {@link Entities.EntityProperties-Shape|Shape} entities that have their
* <code>{@link Entities.EntityProperties|canCastShadow}</code> property set to <code>true</code>.
*/
class KeyLightPropertyGroup : public PropertyGroup {

View file

@ -63,7 +63,7 @@ class PolyVoxEntityItem : public EntityItem {
virtual int getOnCount() const { return 0; }
/**jsdoc
* <p>A <code>PolyVoxSurfaceStyle</code> may be one of the following:</p>
* <p>The surface of a {@link Entities.EntityProperties-PolyVox|PolyVox} entity may be one of the following styles:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Type</th><th>Description</th></tr>

View file

@ -26,19 +26,17 @@ class OctreePacketData;
class ReadBitstreamToTreeParams;
/**jsdoc
* Pulse is defined by the following properties.
* A color and alpha pulse that an entity may have.
* @typedef {object} Entities.Pulse
*
* @property {number} min=0 - The minimum value of the pulse multiplier.
* @property {number} max=1 - The maximum value of the pulse multiplier.
* @property {number} period=1 - The duration of the color and alpha pulse, in seconds. A pulse multiplier value goes from
* <code>min</code> to <code>max</code>, then <code>max</code> to <code>min</code> in one period.
* @property {PulseMode} colorMode="none" - If "in", the color is pulsed in phase with the pulse period; if "out"
* @property {Entities.PulseMode} colorMode="none" - If "in", the color is pulsed in phase with the pulse period; if "out"
* the color is pulsed out of phase with the pulse period.
* @property {PulseMode} alphaMode="none" - If "in", the alpha is pulsed in phase with the pulse period; if "out"
* @property {Entities.PulseMode} alphaMode="none" - If "in", the alpha is pulsed in phase with the pulse period; if "out"
* the alpha is pulsed out of phase with the pulse period.
*/
class PulsePropertyGroup : public PropertyGroup {
public:
// EntityItemProperty related helpers

View file

@ -25,31 +25,32 @@ class ReadBitstreamToTreeParams;
using u8vec3Color = glm::u8vec3;
/**jsdoc
* A RingGizmo is defined by the following properties.
* A {@link Entities.EntityProperties-Gizmo|ring Gizmo} entity is defined by the following properties:
* @typedef {object} Entities.RingGizmo
*
* @property {number} startAngle=0 - The angle at which the ring will start, in degrees.
* @property {number} endAngle=360 - The angle at which the ring will end, in degrees.
* @property {number} innerRadius=0 - The inner radius of the ring as a fraction of the total radius. 0-1.
* @property {number} startAngle=0 - The angle at which the ring starts, in degrees.
* @property {number} endAngle=360 - The angle at which the ring ends, in degrees.
* @property {number} innerRadius=0 - The inner radius of the ring as a fraction of the total radius, range <code>0.0</code>
* &mdash; <code>1.0</code>.
* @property {Color} innerStartColor - The color at the inner start point of the ring.
* @property {Color} innerEndColor - The color at the inner end point of the ring.
* @property {Color} outerStartColor - The color at the outer start point of the ring.
* @property {Color} outerEndColor - The color at the outer end point of the ring.
* @property {number} innerStartAlpha=1 - The alpha at the inner start point of the ring.
* @property {number} innerEndAlpha=1 - The alpha at the inner end point of the ring.
* @property {number} outerStartAlpha=1 - The alpha at the outer start point of the ring.
* @property {number} outerEndAlpha=1 - The alpha at the outer end point of the ring.
* @property {Color} innerStartColor=255,255,255 - The color at the inner start point of the ring.
* @property {Color} innerEndColor=255,255,255 - The color at the inner end point of the ring.
* @property {Color} outerStartColor=255,255,255 - The color at the outer start point of the ring.
* @property {Color} outerEndColor=255,255,255 - The color at the outer end point of the ring.
* @property {number} innerStartAlpha=1 - The opacity at the inner start point of the ring.
* @property {number} innerEndAlpha=1 - The opacity at the inner end point of the ring.
* @property {number} outerStartAlpha=1 - The opacity at the outer start point of the ring.
* @property {number} outerEndAlpha=1 - The opacity at the outer end point of the ring.
* @property {boolean} hasTickMarks=false - Whether or not to render tick marks.
* @property {number} majorTickMarksAngle - The angle between major tick marks, in degrees.
* @property {number} minorTickMarksAngle - The angle between minor tick marks, in degrees.
* @property {number} majorTickMarksLength - The length of the major tick marks, as a fraction of the radius. A positive value draws tick marks
* outwards from the inner radius; a negative value draws tick marks inwards from the outer radius.
* @property {number} minorTickMarksLength - The length of the minor tick marks, as a fraction of the radius. A positive value draws tick marks
* outwards from the inner radius; a negative value draws tick marks inwards from the outer radius.
* @property {Color} majorTickMarksColor - The color of the major tick marks.
* @property {Color} minorTickMarksColor - The color of the minor tick marks.
* @property {boolean} hasTickMarks=false - <code>true</code> to render tick marks, otherwise <code>false</code>.
* @property {number} majorTickMarksAngle=0 - The angle between major tick marks, in degrees.
* @property {number} minorTickMarksAngle=0 - The angle between minor tick marks, in degrees.
* @property {number} majorTickMarksLength=0 - The length of the major tick marks as a fraction of the radius. A positive value
* draws tick marks outwards from the inner radius; a negative value draws tick marks inwards from the outer radius.
* @property {number} minorTickMarksLength=0 - The length of the minor tick marks, as a fraction of the radius. A positive
* value draws tick marks outwards from the inner radius; a negative value draws tick marks inwards from the outer radius.
* @property {Color} majorTickMarksColor=255,255,255 - The color of the major tick marks.
* @property {Color} minorTickMarksColor=255,255,255 - The color of the minor tick marks.
*/
class RingGizmoPropertyGroup : public PropertyGroup {

View file

@ -22,8 +22,8 @@
namespace entity {
/**jsdoc
* <p>A <code>Shape</code>, <code>Box</code>, or <code>Sphere</code> {@link Entities.EntityType|EntityType} may display as
* one of the following geometrical shapes:</p>
* <p>A <code>"Shape"</code>, <code>"Box"</code>, or <code>"Sphere"</code> {@link Entities.EntityType|EntityType} may
* display as one of the following geometrical shapes:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Dimensions</th><th>Notes</th></tr>

View file

@ -30,7 +30,7 @@ class EntityTreeElementExtraEncodeData;
class ReadBitstreamToTreeParams;
/**jsdoc
* A skybox is defined by the following properties.
* A skybox is defined by the following properties:
* @typedef {object} Entities.Skybox
* @property {Color} color=0,0,0 - Sets the color of the sky if <code>url</code> is <code>""</code>, otherwise modifies the
* color of the cube map image.

View file

@ -70,10 +70,10 @@ bool NetworkMaterialResource::parseJSONColor(const QJsonValue& array, glm::vec3&
}
/**jsdoc
* A material or set of materials such as may be used by a {@link Entities.EntityType|Material} entity.
* @typedef {object} MaterialResource
* A material or set of materials used by a {@link Entities.EntityType|Material entity}.
* @typedef {object} Entities.MaterialResource
* @property {number} materialVersion=1 - The version of the material. <em>Currently not used.</em>
* @property {Material|Material[]} materials - The details of the material or materials.
* @property {Entities.Material|Entities.Material[]} materials - The details of the material or materials.
*/
NetworkMaterialResource::ParsedMaterials NetworkMaterialResource::parseJSONMaterials(const QJsonDocument& materialJSON, const QUrl& baseUrl) {
ParsedMaterials toReturn;
@ -109,60 +109,72 @@ NetworkMaterialResource::ParsedMaterials NetworkMaterialResource::parseJSONMater
}
/**jsdoc
* A material such as may be used by a {@link Entities.EntityType|Material} entity.
* @typedef {object} Material
* A material used in a {@link Entities.MaterialResource|MaterialResource}.
* @typedef {object} Entities.Material
* @property {string} model="hifi_pbr" - Different material models support different properties and rendering modes.
* Supported models are: "hifi_pbr"
* Supported models are: <code>"hifi_pbr"</code>.
* @property {string} name="" - A name for the material. Supported by all material models.
* @property {Color|RGBS|string} emissive - The emissive color, i.e., the color that the material emits. A {@link Color} value
* is treated as sRGB. A {@link RGBS} value can be either RGB or sRGB. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {number|string} opacity=1.0 - The opacity, <code>0.0</code> &ndash; <code>1.0</code>. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {boolean|string} unlit=false - If <code>true</code>, the material is not lit. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {Color|RGBS|string} albedo - The albedo color. A {@link Color} value is treated as sRGB. A {@link RGBS} value can
* be either RGB or sRGB. Set to <code>"fallthrough"</code> to fallthrough to the material below. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {number|string} roughness - The roughness, <code>0.0</code> &ndash; <code>1.0</code>. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {number|string} metallic - The metallicness, <code>0.0</code> &ndash; <code>1.0</code>. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {number|string} scattering - The scattering, <code>0.0</code> &ndash; <code>1.0</code>. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {string} emissiveMap - URL of emissive texture image. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {string} albedoMap - URL of albedo texture image. Set to <code>"fallthrough"</code> to fallthrough to
* the material below. "hifi_pbr" model only.
* @property {string} opacityMap - URL of opacity texture image. Set value the same as the <code>albedoMap</code> value for
* transparency. "hifi_pbr" model only.
* @property {string} roughnessMap - URL of roughness texture image. Can use this or <code>glossMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} glossMap - URL of gloss texture image. Can use this or <code>roughnessMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} metallicMap - URL of metallic texture image. Can use this or <code>specularMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} specularMap - URL of specular texture image. Can use this or <code>metallicMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} normalMap - URL of normal texture image. Can use this or <code>bumpMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} bumpMap - URL of bump texture image. Can use this or <code>normalMap</code>, but not both. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} occlusionMap - URL of occlusion texture image. Set to <code>"fallthrough"</code> to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} scatteringMap - URL of scattering texture image. Only used if <code>normalMap</code> or
* <code>bumpMap</code> is specified. Set to <code>"fallthrough"</code> to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} lightMap - URL of light map texture image. <em>Currently not used.</em>. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} texCoordTransform0 - The transform to use for all of the maps besides occlusionMap and lightMap. Currently unused. Set to
* <code>"fallthrough"</code> to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} texCoordTransform1 - The transform to use for occlusionMap and lightMap. Currently unused. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} lightmapParams - Parameters for controlling how lightMap is used. Currently unused. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {string} materialParams - Parameters for controlling the material projection and repition. Currently unused. Set to <code>"fallthrough"</code>
* to fallthrough to the material below. "hifi_pbr" model only.
* @property {bool} defaultFallthrough=false - If <code>true</code>, all properties will fallthrough to the material below unless they are set. If
* <code>false</code>, they will respect the individual properties' fallthrough state. "hifi_pbr" model only.
* @property {ColorFloat|RGBS|string} emissive - The emissive color, i.e., the color that the material emits. A
* {@link ColorFloat} value is treated as sRGB and must have component values in the range <code>0.0</code> &mdash;
* <code>1.0</code>. A {@link RGBS} value can be either RGB or sRGB.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {number|string} opacity=1.0 - The opacity, range <code>0.0</code> &ndash; <code>1.0</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {boolean|string} unlit=false - If <code>true</code>, the material is not lit, otherwise it is.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {ColorFloat|RGBS|string} albedo - The albedo color. A {@link ColorFloat} value is treated as sRGB and must have
* component values in the range <code>0.0</code> &mdash; <code>1.0</code>. A {@link RGBS} value can be either RGB or sRGB.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {number|string} roughness - The roughness, range <code>0.0</code> &ndash; <code>1.0</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {number|string} metallic - The metallicness, range <code>0.0</code> &ndash; <code>1.0</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {number|string} scattering - The scattering, range <code>0.0</code> &ndash; <code>1.0</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} emissiveMap - The URL of the emissive texture image.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} albedoMap - The URL of the albedo texture image.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} opacityMap - The URL of the opacity texture image. Set the value the same as the <code>albedoMap</code>
* value for transparency.
* <code>"hifi_pbr"</code> model only.
* @property {string} roughnessMap - The URL of the roughness texture image. You can use this or <code>glossMap</code>, but not
* both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} glossMap - The URL of the gloss texture image. You can use this or <code>roughnessMap</code>, but not
* both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} metallicMap - The URL of the metallic texture image. You can use this or <code>specularMap</code>, but
* not both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} specularMap - The URL of the specular texture image. You can use this or <code>metallicMap</code>, but
* not both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} normalMap - The URL of the normal texture image. You can use this or <code>bumpMap</code>, but not both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} bumpMap - The URL of the bump texture image. You can use this or <code>normalMap</code>, but not both.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} occlusionMap - The URL of the occlusion texture image.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} scatteringMap - The URL of the scattering texture image. Only used if <code>normalMap</code> or
* <code>bumpMap</code> is specified.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} lightMap - The URL of the light map texture image.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {Mat4|string} texCoordTransform0 - The transform to use for all of the maps apart from <code>occlusionMap</code>
* and <code>lightMap</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {Mat4|string} texCoordTransform1 - The transform to use for <code>occlusionMap</code> and <code>lightMap</code>.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* @property {string} lightmapParams - Parameters for controlling how lightMap is used.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* <p><em>Currently not used.</em></p>
* @property {string} materialParams - Parameters for controlling the material projection and repetition.
* Set to <code>"fallthrough"</code> to fall through to the material below. <code>"hifi_pbr"</code> model only.
* <p><em>Currently not used.</em></p>
* @property {boolean} defaultFallthrough=false - If <code>true</code>, all properties fall through to the material below
* unless they are set. If <code>false</code>, they respect their individual fall-through setting. <code>"hifi_pbr"</code>
* model only.
*/
// Note: See MaterialEntityItem.h for default values used in practice.
std::pair<std::string, std::shared_ptr<NetworkMaterial>> NetworkMaterialResource::parseJSONMaterial(const QJsonObject& materialJSON, const QUrl& baseUrl) {
@ -399,7 +411,7 @@ std::pair<std::string, std::shared_ptr<NetworkMaterial>> NetworkMaterialResource
material->setPropertyDoesFallthrough(graphics::Material::ExtraFlagBit::LIGHTMAP_PARAMS);
}
}
// TODO: implement lightmapParams
// TODO: implement lightmapParams and update JSDoc
} else if (key == "materialParams") {
auto value = materialJSON.value(key);
if (value.isString()) {
@ -408,7 +420,7 @@ std::pair<std::string, std::shared_ptr<NetworkMaterial>> NetworkMaterialResource
material->setPropertyDoesFallthrough(graphics::Material::ExtraFlagBit::MATERIAL_PARAMS);
}
}
// TODO: implement materialParams
// TODO: implement materialParams and update JSDoc
} else if (key == "defaultFallthrough") {
auto value = materialJSON.value(key);
if (value.isBool()) {

View file

@ -956,7 +956,7 @@ void AccountManager::saveLoginStatus(bool isLoggedIn) {
QProcess launcher;
launcher.setProgram(launcherPath);
launcher.startDetached();
qApp->quit();
QMetaObject::invokeMethod(qApp, "quit", Qt::QueuedConnection);
}
}
}

View file

@ -37,7 +37,7 @@ private slots:
public slots:
/**jsdoc
* Set the maximum number of entity packets that the client can send per second.
* Sets the maximum number of entity packets that the client can send per second.
* @function Entities.setPacketsPerSecond
* @param {number} packetsPerSecond - Integer maximum number of entity packets that the client can send per second.
*/
@ -45,7 +45,7 @@ public slots:
void setPacketsPerSecond(int packetsPerSecond) { return _packetSender->setPacketsPerSecond(packetsPerSecond); }
/**jsdoc
* Get the maximum number of entity packets that the client can send per second.
* Gets the maximum number of entity packets that the client can send per second.
* @function Entities.getPacketsPerSecond
* @returns {number} Integer maximum number of entity packets that the client can send per second.
*/
@ -53,7 +53,7 @@ public slots:
int getPacketsPerSecond() const { return _packetSender->getPacketsPerSecond(); }
/**jsdoc
* Check whether servers exist for the client to send entity packets to, i.e., whether you are connected to a domain and
* Checks whether servers exist for the client to send entity packets to, i.e., whether you are connected to a domain and
* its entity server is working.
* @function Entities.serversExist
* @returns {boolean} <code>true</code> if servers exist for the client to send entity packets to, otherwise
@ -63,7 +63,7 @@ public slots:
bool serversExist() const { return _packetSender->serversExist(); }
/**jsdoc
* Check whether the client has entity packets waiting to be sent.
* Checks whether the client has entity packets waiting to be sent.
* @function Entities.hasPacketsToSend
* @returns {boolean} <code>true</code> if the client has entity packets waiting to be sent, otherwise <code>false</code>.
*/
@ -71,7 +71,7 @@ public slots:
bool hasPacketsToSend() const { return _packetSender->hasPacketsToSend(); }
/**jsdoc
* Get the number of entity packets the client has waiting to be sent.
* Gets the number of entity packets the client has waiting to be sent.
* @function Entities.packetsToSendCount
* @returns {number} Integer number of entity packets the client has waiting to be sent.
*/
@ -79,7 +79,7 @@ public slots:
int packetsToSendCount() const { return (int)_packetSender->packetsToSendCount(); }
/**jsdoc
* Get the entity packets per second send rate of the client over its lifetime.
* Gets the entity packets per second send rate of the client over its lifetime.
* @function Entities.getLifetimePPS
* @returns {number} Entity packets per second send rate of the client over its lifetime.
*/
@ -87,7 +87,7 @@ public slots:
float getLifetimePPS() const { return _packetSender->getLifetimePPS(); }
/**jsdoc
* Get the entity bytes per second send rate of the client over its lifetime.
* Gets the entity bytes per second send rate of the client over its lifetime.
* @function Entities.getLifetimeBPS
* @returns {number} Entity bytes per second send rate of the client over its lifetime.
*/
@ -95,7 +95,7 @@ public slots:
float getLifetimeBPS() const { return _packetSender->getLifetimeBPS(); }
/**jsdoc
* Get the entity packets per second queued rate of the client over its lifetime.
* Gets the entity packets per second queued rate of the client over its lifetime.
* @function Entities.getLifetimePPSQueued
* @returns {number} Entity packets per second queued rate of the client over its lifetime.
*/
@ -103,7 +103,7 @@ public slots:
float getLifetimePPSQueued() const { return _packetSender->getLifetimePPSQueued(); }
/**jsdoc
* Get the entity bytes per second queued rate of the client over its lifetime.
* Gets the entity bytes per second queued rate of the client over its lifetime.
* @function Entities.getLifetimeBPSQueued
* @returns {number} Entity bytes per second queued rate of the client over its lifetime.
*/
@ -111,7 +111,7 @@ public slots:
float getLifetimeBPSQueued() const { return _packetSender->getLifetimeBPSQueued(); }
/**jsdoc
* Get the lifetime of the client from the first entity packet sent until now, in microseconds.
* Gets the lifetime of the client from the first entity packet sent until now, in microseconds.
* @function Entities.getLifetimeInUsecs
* @returns {number} Lifetime of the client from the first entity packet sent until now, in microseconds.
*/
@ -119,7 +119,7 @@ public slots:
long long unsigned int getLifetimeInUsecs() const { return _packetSender->getLifetimeInUsecs(); }
/**jsdoc
* Get the lifetime of the client from the first entity packet sent until now, in seconds.
* Gets the lifetime of the client from the first entity packet sent until now, in seconds.
* @function Entities.getLifetimeInSeconds
* @returns {number} Lifetime of the client from the first entity packet sent until now, in seconds.
*/
@ -127,7 +127,7 @@ public slots:
float getLifetimeInSeconds() const { return _packetSender->getLifetimeInSeconds(); }
/**jsdoc
* Get the total number of entity packets sent by the client over its lifetime.
* Gets the total number of entity packets sent by the client over its lifetime.
* @function Entities.getLifetimePacketsSent
* @returns {number} The total number of entity packets sent by the client over its lifetime.
*/
@ -135,7 +135,7 @@ public slots:
long long unsigned int getLifetimePacketsSent() const { return _packetSender->getLifetimePacketsSent(); }
/**jsdoc
* Get the total bytes of entity packets sent by the client over its lifetime.
* Gets the total bytes of entity packets sent by the client over its lifetime.
* @function Entities.getLifetimeBytesSent
* @returns {number} The total bytes of entity packets sent by the client over its lifetime.
*/
@ -143,7 +143,7 @@ public slots:
long long unsigned int getLifetimeBytesSent() const { return _packetSender->getLifetimeBytesSent(); }
/**jsdoc
* Get the total number of entity packets queued by the client over its lifetime.
* Gets the total number of entity packets queued by the client over its lifetime.
* @function Entities.getLifetimePacketsQueued
* @returns {number} The total number of entity packets queued by the client over its lifetime.
*/
@ -151,7 +151,7 @@ public slots:
long long unsigned int getLifetimePacketsQueued() const { return _packetSender->getLifetimePacketsQueued(); }
/**jsdoc
* Get the total bytes of entity packets queued by the client over its lifetime.
* Gets the total bytes of entity packets queued by the client over its lifetime.
* @function Entities.getLifetimeBytesQueued
* @returns {number} The total bytes of entity packets queued by the client over its lifetime.
*/

View file

@ -145,7 +145,7 @@ bool ObjectActionOffset::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"offset"</code> {@link Entities.ActionType|ActionType} moves an entity so that it is a set distance away from a
* target point.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-Offset
* @property {Vec3} pointToOffsetFrom=0,0,0 - The target point to offset the entity from.

View file

@ -341,15 +341,15 @@ bool ObjectActionTractor::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"tractor"</code> {@link Entities.ActionType|ActionType} moves and rotates an entity to a target position and
* orientation, optionally relative to another entity.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-Tractor
* @property {Uuid} otherID=null - If an entity ID, the <code>targetPosition</code> and <code>targetRotation</code> are
* relative to the entity's position and rotation.
* @property {Uuid} otherJointIndex=null - If a joint index in the <code>otherID</code> entity, the <code>targetPosition</code>
* and <code>targetRotation</code> are relative to the entity joint's position and rotation.
* @property {Vec3} targetPosition=0,0,0 - The target position.
* @property {Quat} targetRotation=0,0,0,1 - The target rotation.
* @property {Uuid} otherID=null - If an entity ID, the <code>targetPosition</code> and <code>targetRotation</code> are
* relative to this entity's position and rotation.
* @property {Uuid} otherJointIndex=null - If an entity JointIndex, the <code>targetPosition</code> and
* <code>targetRotation</code> are relative to this entity's joint's position and rotation.
* @property {number} linearTimeScale=3.4e+38 - Controls how long it takes for the entity's position to catch up with the
* target position. The value is the time for the action to catch up to 1/e = 0.368 of the target value, where the action
* is applied using an exponential decay.

View file

@ -152,7 +152,7 @@ bool ObjectActionTravelOriented::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"travel-oriented"</code> {@link Entities.ActionType|ActionType} orients an entity to align with its direction of
* travel.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-TravelOriented
* @property {Vec3} forward=0,0,0 - The axis of the entity to align with the entity's direction of travel.

View file

@ -183,11 +183,11 @@ bool ObjectConstraintBallSocket::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"ball-socket"</code> {@link Entities.ActionType|ActionType} connects two entities with a ball and socket joint.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-BallSocket
* @property {Vec3} pivot=0,0,0 - The local offset of the joint relative to the entity's position.
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint.
* @property {Vec3} pivot=0,0,0 - The local offset of the joint relative to the entity's position.
* @property {Vec3} otherPivot=0,0,0 - The local offset of the joint relative to the other entity's position.
*/
QVariantMap ObjectConstraintBallSocket::getArguments() {

View file

@ -264,17 +264,18 @@ bool ObjectConstraintConeTwist::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"cone-twist"</code> {@link Entities.ActionType|ActionType} connects two entities with a joint that can move
* through a cone and can twist.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-ConeTwist
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint.
* @property {Vec3} pivot=0,0,0 - The local offset of the joint relative to the entity's position.
* @property {Vec3} axis=1,0,0 - The axis of the entity that moves through the cone. Must be a non-zero vector.
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint.
* @property {Vec3} otherPivot=0,0,0 - The local offset of the joint relative to the other entity's position.
* @property {Vec3} otherAxis=1,0,0 - The axis of the other entity that moves through the cone. Must be a non-zero vector.
* @property {number} swingSpan1=6.238 - The angle through which the joint can move in one axis of the cone, in radians.
* @property {number} swingSpan2=6.238 - The angle through which the joint can move in the other axis of the cone, in radians.
* @property {number} twistSpan=6.238 - The angle through with the joint can twist, in radians.
* @property {number} swingSpan1=2*Math.PI - The angle through which the joint can move in one axis of the cone, in radians.
* @property {number} swingSpan2=2*Math.PI - The angle through which the joint can move in the other axis of the cone, in
* radians.
* @property {number} twistSpan=2*Math.PI - The angle through with the joint can twist, in radians.
*/
QVariantMap ObjectConstraintConeTwist::getArguments() {
QVariantMap arguments = ObjectDynamic::getArguments();

View file

@ -248,18 +248,19 @@ bool ObjectConstraintHinge::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"hinge"</code> {@link Entities.ActionType|ActionType} lets an entity pivot about an axis or connects two entities
* with a hinge joint.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-Hinge
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint, if any. If none is
* specified then the first entity simply pivots about its specified <code>axis</code>.
* @property {Vec3} pivot=0,0,0 - The local offset of the joint relative to the entity's position.
* @property {Vec3} axis=1,0,0 - The axis of the entity that it pivots about. Must be a non-zero vector.
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint, if any. If none is
* specified then the first entity simply pivots about its specified <code>axis</code>.
* @property {Vec3} otherPivot=0,0,0 - The local offset of the joint relative to the other entity's position.
* @property {Vec3} otherAxis=1,0,0 - The axis of the other entity that it pivots about. Must be a non-zero vector.
* @property {number} low=-6.283 - The most negative angle that the hinge can take, in radians.
* @property {number} high=6.283 - The most positive angle that the hinge can take, in radians.
* @property {number} angle=0 - The current angle of the hinge. <em>Read-only.</em>
* @property {number} low=-2*Math.PI - The most negative angle that the hinge can take, in radians.
* @property {number} high=2*Math.PI - The most positive angle that the hinge can take, in radians.
* @property {number} angle=0 - The current angle of the hinge, in radians, range <code>-Math.PI</code> &ndash;
* <code>Math.PI</code>. <em>Read-only.</em>
*/
QVariantMap ObjectConstraintHinge::getArguments() {
QVariantMap arguments = ObjectDynamic::getArguments();

View file

@ -264,27 +264,27 @@ bool ObjectConstraintSlider::updateArguments(QVariantMap arguments) {
/**jsdoc
* The <code>"slider"</code> {@link Entities.ActionType|ActionType} lets an entity slide and rotate along an axis, or connects
* two entities that slide and rotate along a shared axis.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}.
* It has arguments in addition to the common {@link Entities.ActionArguments|ActionArguments}:
*
* @typedef {object} Entities.ActionArguments-Slider
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint, if any. If none is
* specified then the first entity simply slides and rotates about its specified <code>axis</code>.
* @property {Vec3} point=0,0,0 - The local position of a point in the entity that slides along the axis.
* @property {Vec3} axis=1,0,0 - The axis of the entity that slides along the joint. Must be a non-zero vector.
* @property {Uuid} otherEntityID=null - The ID of the other entity that is connected to the joint, if any. If non is
* specified then the first entity simply slides and rotates about its specified <code>axis</code>.
* @property {Vec3} otherPoint=0,0,0 - The local position of a point in the other entity that slides along the axis.
* @property {Vec3} axis=1,0,0 - The axis of the other entity that slides along the joint. Must be a non-zero vector.
* @property {Vec3} otherAxis=1,0,0 - The axis of the other entity that slides along the joint. Must be a non-zero vector.
* @property {number} linearLow=1.17e-38 - The most negative linear offset from the entity's initial point that the entity can
* have along the slider.
* @property {number} linearHigh=3.40e+38 - The most positive linear offset from the entity's initial point that the entity can
* have along the slider.
* @property {number} angularLow=-6.283 - The most negative angle that the entity can rotate about the axis if the action
* @property {number} angularLow=-2*Math.PI - The most negative angle that the entity can rotate about the axis if the action
* involves only one entity, otherwise the most negative angle the rotation can be between the two entities. In radians.
* @property {number} angularHigh=6.283 - The most positive angle that the entity can rotate about the axis if the action
* @property {number} angularHigh=Math.PI - The most positive angle that the entity can rotate about the axis if the action
* involves only one entity, otherwise the most positive angle the rotation can be between the two entities. In radians.
* @property {number} linearPosition=0 - The current linear offset the entity is from its initial point if the action involves
* only one entity, otherwise the linear offset between the two entities' action points. <em>Read-only.</em>
* @property {number} angularPosition=0 - The current angular offset of the entity from its initial rotation if the action
* involves only one entity, otherwise the angular offset between the two entities. <em>Read-only.</em>
* involves only one entity, otherwise the angular offset between the two entities. In radians. <em>Read-only.</em>
*/
QVariantMap ObjectConstraintSlider::getArguments() {
QVariantMap arguments = ObjectDynamic::getArguments();

View file

@ -94,36 +94,36 @@ bool ObjectDynamic::updateArguments(QVariantMap arguments) {
}
/**jsdoc
* Different entity action types have different arguments: some common to all actions (listed below) and some specific to each
* {@link Entities.ActionType|ActionType} (linked to below). The arguments are accessed as an object of property names and
* values.
*
* @typedef {object} Entities.ActionArguments
* @property {Entities.ActionType} type - The type of action.
* @property {string} tag="" - A string that a script can use for its own purposes.
* @property {number} ttl=0 - How long the action should exist, in seconds, before it is automatically deleted. A value of
* <code>0</code> means that the action should not be deleted.
* @property {boolean} isMine=true - Is <code>true</code> if you created the action during your current Interface session,
* <code>false</code> otherwise. <em>Read-only.</em>
* @property {boolean} ::no-motion-state - Is present when the entity hasn't been registered with the physics engine yet (e.g.,
* if the action hasn't been properly configured), otherwise <code>undefined</code>. <em>Read-only.</em>
* @property {boolean} ::active - Is <code>true</code> when the action is modifying the entity's motion, <code>false</code>
* otherwise. Is present once the entity has been registered with the physics engine, otherwise <code>undefined</code>.
* <em>Read-only.</em>
* @property {Entities.PhysicsMotionType} ::motion-type - How the entity moves with the action. Is present once the entity has
* been registered with the physics engine, otherwise <code>undefined</code>. <em>Read-only.</em>
*
* @see The different action types have additional arguments as follows:
* @see {@link Entities.ActionArguments-FarGrab|ActionArguments-FarGrab}
* @see {@link Entities.ActionArguments-Hold|ActionArguments-Hold}
* @see {@link Entities.ActionArguments-Offset|ActionArguments-Offset}
* @see {@link Entities.ActionArguments-Tractor|ActionArguments-Tractor}
* @see {@link Entities.ActionArguments-TravelOriented|ActionArguments-TravelOriented}
* @see {@link Entities.ActionArguments-Hinge|ActionArguments-Hinge}
* @see {@link Entities.ActionArguments-Slider|ActionArguments-Slider}
* @see {@link Entities.ActionArguments-ConeTwist|ActionArguments-ConeTwist}
* @see {@link Entities.ActionArguments-BallSocket|ActionArguments-BallSocket}
*/
* Different entity action types have different arguments: some common to all actions (listed in the table) and some specific
* to each {@link Entities.ActionType|ActionType} (linked to below). The arguments are accessed as an object of property names
* and values.
*
* @typedef {object} Entities.ActionArguments
* @property {Entities.ActionType} type - The type of action.
* @property {string} tag="" - A string that a script can use for its own purposes.
* @property {number} ttl=0 - How long the action should exist, in seconds, before it is automatically deleted. A value of
* <code>0</code> means that the action should not be deleted.
* @property {boolean} isMine=true - Is <code>true</code> if the action was created during the current client session,
* <code>false</code> otherwise. <em>Read-only.</em>
* @property {boolean} ::no-motion-state - Is present when the entity hasn't been registered with the physics engine yet (e.g.,
* if the action hasn't been properly configured), otherwise <code>undefined</code>. <em>Read-only.</em>
* @property {boolean} ::active - Is <code>true</code> when the action is modifying the entity's motion, <code>false</code>
* otherwise. Is present once the entity has been registered with the physics engine, otherwise <code>undefined</code>.
* <em>Read-only.</em>
* @property {Entities.PhysicsMotionType} ::motion-type - How the entity moves with the action. Is present once the entity has
* been registered with the physics engine, otherwise <code>undefined</code>. <em>Read-only.</em>
*
* @comment The different action types have additional arguments as follows:
* @see {@link Entities.ActionArguments-FarGrab|ActionArguments-FarGrab}
* @see {@link Entities.ActionArguments-Hold|ActionArguments-Hold}
* @see {@link Entities.ActionArguments-Offset|ActionArguments-Offset}
* @see {@link Entities.ActionArguments-Tractor|ActionArguments-Tractor}
* @see {@link Entities.ActionArguments-TravelOriented|ActionArguments-TravelOriented}
* @see {@link Entities.ActionArguments-Hinge|ActionArguments-Hinge}
* @see {@link Entities.ActionArguments-Slider|ActionArguments-Slider}
* @see {@link Entities.ActionArguments-ConeTwist|ActionArguments-ConeTwist}
* @see {@link Entities.ActionArguments-BallSocket|ActionArguments-BallSocket}
*/
// Note: The "type" property is set in EntityItem::getActionArguments().
QVariantMap ObjectDynamic::getArguments() {
QVariantMap arguments;

View file

@ -1780,10 +1780,10 @@ void Blender::run() {
blendedMeshSizes.reserve(numMeshes);
QVector<BlendshapeOffset> packedBlendshapeOffsets;
packedBlendshapeOffsets.reserve(numBlendshapeOffsets);
packedBlendshapeOffsets.resize(numBlendshapeOffsets);
QVector<BlendshapeOffsetUnpacked> unpackedBlendshapeOffsets;
unpackedBlendshapeOffsets.reserve(maxBlendshapeOffsets); // reuse for all meshes
unpackedBlendshapeOffsets.resize(maxBlendshapeOffsets); // reuse for all meshes
int offset = 0;
for (auto meshIter = _hfmModel->meshes.cbegin(); meshIter != _hfmModel->meshes.cend(); ++meshIter) {

View file

@ -2205,6 +2205,7 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString&
* lifetime: 300 // Delete after 5 minutes.
* });
*/
// The JSDoc is for the callEntityScriptMethod() call in this method.
// since all of these operations can be asynch we will always do the actual work in the response handler
// for the download
void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, const QString& scriptOrURL, const QString& contents, bool isURL, bool success , const QString& status) {
@ -2389,8 +2390,10 @@ void ScriptEngine::entityScriptContentAvailable(const EntityItemID& entityID, co
* <p>Note: Can only be connected to via <code>this.unoad = function () { ... }</code> in the entity script.</p>
* <table><tr><th>Available in:</th><td>Client Entity Scripts</td><td>Server Entity Scripts</td></tr></table>
* @function Entities.unload
* @param {Uuid} entityID - The ID of the entity that the script is running in.
* @returns {Signal}
*/
// The JSDoc is for the callEntityScriptMethod() call in this method.
void ScriptEngine::unloadEntityScript(const EntityItemID& entityID, bool shouldRemoveFromMap) {
if (QThread::currentThread() != thread()) {
#ifdef THREAD_DEBUGGING

View file

@ -318,6 +318,7 @@ public:
/**jsdoc
* Adds a function to the list of functions called when an entity event occurs on a particular entity.
* <p>See also, the {@link Entities} API.</p>
* @function Script.addEventHandler
* @param {Uuid} entityID - The ID of the entity.
* @param {Script.EntityEvent} eventName - The name of the entity event.
@ -341,6 +342,7 @@ public:
/**jsdoc
* Removes a function from the list of functions called when an entity event occurs on a particular entity.
* <p>See also, the {@link Entities} API.</p>
* @function Script.removeEventHandler
* @param {Uuid} entityID - The ID of the entity.
* @param {Script.EntityEvent} eventName - The name of the entity event.

View file

@ -21,7 +21,7 @@
* <tr><td><code>"none"</code></td><td>The entity will not be billboarded.</td></tr>
* <tr><td><code>"yaw"</code></td><td>The entity will yaw, but not pitch, to face the camera. Its actual rotation will be
* ignored.</td></tr>
* <tr><td><code>"full"</code></td><td>The entity will be billboarded to face the camera. Its actual rotation will be
* <tr><td><code>"full"</code></td><td>The entity will yaw and pitch to face the camera. Its actual rotation will be
* ignored.</td></tr>
* </tbody>
* </table>

View file

@ -8,6 +8,22 @@
#include "ComponentMode.h"
/**jsdoc
* <p>How an effect is applied in a {@link Entities.EntityProperties-Zone|Zone} entity.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"inherit"</code></td><td>The effect from any enclosing zone continues into this zone.</td></tr>
* <tr><td><code>"disabled"</code></td><td>The effect &mdash; from any enclosing zone and this zone &mdash; is disabled in
* this zone.</td></tr>
* <tr><td><code>"enabled"</code></td><td>The effect from this zone is enabled, overriding the effect from any enclosing
* zone.</td></tr>
* </tbody>
* </table>
* @typedef {string} Entities.ComponentMode
*/
const char* componentModeNames[] = {
"inherit",
"disabled",
@ -22,6 +38,20 @@ QString ComponentModeHelpers::getNameForComponentMode(ComponentMode mode) {
return componentModeNames[(int)mode];
}
/**jsdoc
* <p>The priority of updates from avatars in a zone to other clients.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"inherit"</code></td><td>The update priority from any enclosing zone continues into this zone.</td></tr>
* <tr><td><code>"crowd"</code></td><td>The update priority in this zone is the normal priority.</td></tr>
* <tr><td><code>"hero"</code></td><td>Avatars in this zone have an increased update priority.</td></tr>
* </tbody>
* </table>
* @typedef {string} Entities.AvatarPriorityMode
*/
const char* avatarPriorityModeNames[] = {
"inherit",
"crowd",

View file

@ -12,16 +12,16 @@
#include "QString"
/**jsdoc
* <p>Controls how the Gizmo behaves and renders</p>
* <p>A {@link Entities.EntityProperties-Gizmo|Gizmo} entity may be one of the following types:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>ring</code></td><td>A ring gizmo.</td></tr>
* <tr><td><code>"ring"</code></td><td>A ring gizmo.</td></tr>
* </tbody>
* </table>
* @typedef {string} GizmoType
* @typedef {string} Entities.GizmoType
*/
enum GizmoType {

View file

@ -66,7 +66,7 @@ void PointerEvent::setButton(Button button) {
}
/**jsdoc
* A PointerEvent defines a 2D or 3D mouse or similar pointer event.
* A 2D or 3D mouse or similar pointer event.
* @typedef {object} PointerEvent
* @property {string} type - The type of event: <code>"Press"</code>, <code>"DoublePress"</code>, <code>"Release"</code>, or
* <code>"Move"</code>.

View file

@ -12,17 +12,17 @@
#include "QString"
/**jsdoc
* <p>How the geometry of the entity is rendered.</p>
* <p>How the geometry of an entity is rendered.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>solid</code></td><td>The entity will be drawn as a solid shape.</td></tr>
* <tr><td><code>lines</code></td><td>The entity will be drawn as wireframe.</td></tr>
* <tr><td><code>"solid"</code></td><td>The entity is drawn as a solid shape.</td></tr>
* <tr><td><code>"lines"</code></td><td>The entity is drawn as wireframe.</td></tr>
* </tbody>
* </table>
* @typedef {string} PrimitiveMode
* @typedef {string} Entities.PrimitiveMode
*/
enum class PrimitiveMode {

View file

@ -18,12 +18,12 @@
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>none</code></td><td>No pulsing.</td></tr>
* <tr><td><code>in</code></td><td>Pulse in phase with the pulse period.</td></tr>
* <tr><td><code>out</code></td><td>Pulse out of phase with the pulse period.</td></tr>
* <tr><td><code>"none"</code></td><td>No pulsing.</td></tr>
* <tr><td><code>"in"</code></td><td>Pulse in phase with the pulse period.</td></tr>
* <tr><td><code>"out"</code></td><td>Pulse out of phase with the pulse period.</td></tr>
* </tbody>
* </table>
* @typedef {string} PulseMode
* @typedef {string} Entities.PulseMode
*/
enum class PulseMode {

View file

@ -122,43 +122,43 @@ glm::vec3 vec3FromVariant(const QVariant &object, bool& valid);
glm::vec3 vec3FromVariant(const QVariant &object);
/**jsdoc
* A color vector. See also the {@link Vec3(0)|Vec3} object.
*
* @typedef {object} Color
* @property {number} red - Red component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>r</code>, <code>x</code>.
* @property {number} green - Green component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>g</code>, <code>y</code>.
* @property {number} blue - Blue component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>b</code>, <code>z</code>.
* @example <caption>Colors can be set in multiple ways and modified with their aliases, but still stringify in the same way</caption>
* Entities.editEntity(<id>, { color: { x: 1, y: 2, z: 3 }}); // { red: 1, green: 2, blue: 3 }
* Entities.editEntity(<id>, { color: { r: 4, g: 5, b: 6 }}); // { red: 4, green: 5, blue: 6 }
* Entities.editEntity(<id>, { color: { red: 7, green: 8, blue: 9 }}); // { red: 7, green: 8, blue: 9 }
* Entities.editEntity(<id>, { color: [10, 11, 12] }); // { red: 10, green: 11, blue: 12 }
* Entities.editEntity(<id>, { color: 13 }); // { red: 13, green: 13, blue: 13 }
* var color = Entities.getEntityProperties(<id>).color; // { red: 13, green: 13, blue: 13 }
* color.g = 14; // { red: 13, green: 14, blue: 13 }
* color.blue = 15; // { red: 13, green: 14, blue: 15 }
* Entities.editEntity(<id>, { color: "red"}); // { red: 255, green: 0, blue: 0 }
* Entities.editEntity(<id>, { color: "#00FF00"}); // { red: 0, green: 255, blue: 0 }
*/
* A color vector. See also the {@link Vec3(0)|Vec3} object.
*
* @typedef {object} Color
* @property {number} red - Red component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>r</code>, <code>x</code>.
* @property {number} green - Green component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>g</code>, <code>y</code>.
* @property {number} blue - Blue component value. Integer in the range <code>0</code> - <code>255</code>. Synonyms: <code>b</code>, <code>z</code>.
* @example <caption>Colors can be set in multiple ways and modified with their aliases, but still stringify in the same way</caption>
* Entities.editEntity(<id>, { color: { x: 1, y: 2, z: 3 }}); // { red: 1, green: 2, blue: 3 }
* Entities.editEntity(<id>, { color: { r: 4, g: 5, b: 6 }}); // { red: 4, green: 5, blue: 6 }
* Entities.editEntity(<id>, { color: { red: 7, green: 8, blue: 9 }}); // { red: 7, green: 8, blue: 9 }
* Entities.editEntity(<id>, { color: [10, 11, 12] }); // { red: 10, green: 11, blue: 12 }
* Entities.editEntity(<id>, { color: 13 }); // { red: 13, green: 13, blue: 13 }
* var color = Entities.getEntityProperties(<id>).color; // { red: 13, green: 13, blue: 13 }
* color.g = 14; // { red: 13, green: 14, blue: 13 }
* color.blue = 15; // { red: 13, green: 14, blue: 15 }
* Entities.editEntity(<id>, { color: "red"}); // { red: 255, green: 0, blue: 0 }
* Entities.editEntity(<id>, { color: "#00FF00"}); // { red: 0, green: 255, blue: 0 }
*/
/**jsdoc
* A color vector. See also the {@link Vec3(0)|Vec3} object.
*
* @typedef {object} ColorFloat
* @property {number} red - Red component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>r</code>, <code>x</code>.
* @property {number} green - Green component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>g</code>, <code>y</code>.
* @property {number} blue - Blue component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>b</code>, <code>z</code>.
* @example <caption>ColorFloats can be set in multiple ways and modified with their aliases, but still stringify in the same way</caption>
* Entities.editEntity(<id>, { color: { x: 1, y: 2, z: 3 }}); // { red: 1, green: 2, blue: 3 }
* Entities.editEntity(<id>, { color: { r: 4, g: 5, b: 6 }}); // { red: 4, green: 5, blue: 6 }
* Entities.editEntity(<id>, { color: { red: 7, green: 8, blue: 9 }}); // { red: 7, green: 8, blue: 9 }
* Entities.editEntity(<id>, { color: [10, 11, 12] }); // { red: 10, green: 11, blue: 12 }
* Entities.editEntity(<id>, { color: 13 }); // { red: 13, green: 13, blue: 13 }
* var color = Entities.getEntityProperties(<id>).color; // { red: 13, green: 13, blue: 13 }
* color.g = 14; // { red: 13, green: 14, blue: 13 }
* color.blue = 15; // { red: 13, green: 14, blue: 15 }
* Entities.editEntity(<id>, { color: "red"}); // { red: 255, green: 0, blue: 0 }
* Entities.editEntity(<id>, { color: "#00FF00"}); // { red: 0, green: 255, blue: 0 }
*/
* A color vector with real values. Values may also be <code>null</code>. See also the {@link Vec3(0)|Vec3} object.
*
* @typedef {object} ColorFloat
* @property {number} red - Red component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>r</code>, <code>x</code>.
* @property {number} green - Green component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>g</code>, <code>y</code>.
* @property {number} blue - Blue component value. Real in the range <code>0</code> - <code>255</code>. Synonyms: <code>b</code>, <code>z</code>.
* @example <caption>ColorFloats can be set in multiple ways and modified with their aliases, but still stringify in the same way</caption>
* Entities.editEntity(<id>, { color: { x: 1, y: 2, z: 3 }}); // { red: 1, green: 2, blue: 3 }
* Entities.editEntity(<id>, { color: { r: 4, g: 5, b: 6 }}); // { red: 4, green: 5, blue: 6 }
* Entities.editEntity(<id>, { color: { red: 7, green: 8, blue: 9 }}); // { red: 7, green: 8, blue: 9 }
* Entities.editEntity(<id>, { color: [10, 11, 12] }); // { red: 10, green: 11, blue: 12 }
* Entities.editEntity(<id>, { color: 13 }); // { red: 13, green: 13, blue: 13 }
* var color = Entities.getEntityProperties(<id>).color; // { red: 13, green: 13, blue: 13 }
* color.g = 14; // { red: 13, green: 14, blue: 13 }
* color.blue = 15; // { red: 13, green: 14, blue: 15 }
* Entities.editEntity(<id>, { color: "red"}); // { red: 255, green: 0, blue: 0 }
* Entities.editEntity(<id>, { color: "#00FF00"}); // { red: 0, green: 255, blue: 0 }
*/
QScriptValue u8vec3ToScriptValue(QScriptEngine* engine, const glm::u8vec3& vec3);
QScriptValue u8vec3ColorToScriptValue(QScriptEngine* engine, const glm::u8vec3& vec3);
void u8vec3FromScriptValue(const QScriptValue& object, glm::u8vec3& vec3);

View file

@ -12,18 +12,18 @@
#include "QString"
/**jsdoc
* <p>In which layer an entity is rendered.</p>
* <p>A layer in which an entity may be rendered.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>world</code></td><td>The entity will be drawn in the world with everything else.</td></tr>
* <tr><td><code>front</code></td><td>The entity will be drawn on top of the world layer, but behind the HUD sphere.</td></tr>
* <tr><td><code>hud</code></td><td>The entity will be drawn on top of other layers and the HUD sphere.</td></tr>
* <tr><td><code>"world"</code></td><td>The entity is drawn in the world with everything else.</td></tr>
* <tr><td><code>"front"</code></td><td>The entity is drawn on top of the world layer but behind the HUD sphere.</td></tr>
* <tr><td><code>"hud"</code></td><td>The entity is drawn on top of other layers and the HUD sphere.</td></tr>
* </tbody>
* </table>
* @typedef {string} RenderLayer
* @typedef {string} Entities.RenderLayer
*/
enum class RenderLayer {

View file

@ -17,7 +17,7 @@
#include "NumericalConstants.h" // for MILLIMETERS_PER_METER
/**jsdoc
* <p>A ShapeType defines the shape used for collisions or zones.</p>
* <p>Defines the shape used for collisions or zones.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>

View file

@ -1348,7 +1348,20 @@ SpatiallyNestablePointer SpatiallyNestable::findByID(QUuid id, bool& success) {
return parentWP.lock();
}
/**jsdoc
* <p>An in-world item may be one of the following types:</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>"entity"</code></td><td>The item is an entity.</td></tr>
* <tr><td><code>"avatar"</code></td><td>The item is an avatar.</td></tr>
* <tr><td><code>"unknown"</code></td><td>The item cannot be found.</td></tr>
* </tbody>
* </table>
* @typedef {string} Entities.NestableType
*/
QString SpatiallyNestable::nestableTypeToString(NestableType nestableType) {
switch(nestableType) {
case NestableType::Entity:

View file

@ -12,14 +12,14 @@
#include "QString"
/**jsdoc
* <p>Controls how the web surface processed PointerEvents</p>
* <p>Specifies how a web surface processes events.</p>
* <table>
* <thead>
* <tr><th>Value</th><th>Description</th></tr>
* </thead>
* <tbody>
* <tr><td><code>touch</code></td><td>Events are processed as touch events.</td></tr>
* <tr><td><code>mouse</code></td><td>Events are processed as mouse events.</td></tr>
* <tr><td><code>"touch"</code></td><td>Events are processed as touch events.</td></tr>
* <tr><td><code>"mouse"</code></td><td>Events are processed as mouse events.</td></tr>
* </tbody>
* </table>
* @typedef {string} WebInputMode

View file

@ -21,14 +21,14 @@ void packBlendshapeOffsets_AVX2(float (*unpacked)[9], uint32_t (*packed)[4], int
//
// deinterleave (8x9 to 9x8 matrix transpose)
//
__m256 s0 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+0][0])), _mm_load_ps(&unpacked[i+4][0]), 1);
__m256 s1 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+1][0])), _mm_load_ps(&unpacked[i+5][0]), 1);
__m256 s2 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+2][0])), _mm_load_ps(&unpacked[i+6][0]), 1);
__m256 s3 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+3][0])), _mm_load_ps(&unpacked[i+7][0]), 1);
__m256 s4 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+0][4])), _mm_load_ps(&unpacked[i+4][4]), 1);
__m256 s5 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+1][4])), _mm_load_ps(&unpacked[i+5][4]), 1);
__m256 s6 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+2][4])), _mm_load_ps(&unpacked[i+6][4]), 1);
__m256 s7 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_load_ps(&unpacked[i+3][4])), _mm_load_ps(&unpacked[i+7][4]), 1);
__m256 s0 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+0][0])), _mm_loadu_ps(&unpacked[i+4][0]), 1);
__m256 s1 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+1][0])), _mm_loadu_ps(&unpacked[i+5][0]), 1);
__m256 s2 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+2][0])), _mm_loadu_ps(&unpacked[i+6][0]), 1);
__m256 s3 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+3][0])), _mm_loadu_ps(&unpacked[i+7][0]), 1);
__m256 s4 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+0][4])), _mm_loadu_ps(&unpacked[i+4][4]), 1);
__m256 s5 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+1][4])), _mm_loadu_ps(&unpacked[i+5][4]), 1);
__m256 s6 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+2][4])), _mm_loadu_ps(&unpacked[i+6][4]), 1);
__m256 s7 = _mm256_insertf128_ps(_mm256_castps128_ps256(_mm_loadu_ps(&unpacked[i+3][4])), _mm_loadu_ps(&unpacked[i+7][4]), 1);
__m256 t0 = _mm256_unpacklo_ps(s0, s1);
__m256 t1 = _mm256_unpackhi_ps(s0, s1);

View file

@ -124,6 +124,11 @@ void OculusDisplayPlugin::uncustomizeContext() {
Parent::uncustomizeContext();
}
gpu::PipelinePointer OculusDisplayPlugin::getRenderTexturePipeline() {
//return _SRGBToLinearPipeline;
return _drawTexturePipeline;
}
gpu::PipelinePointer OculusDisplayPlugin::getCompositeScenePipeline() {
return _SRGBToLinearPipeline;
}

View file

@ -24,6 +24,9 @@ public:
virtual QJsonObject getHardwareStats() const;
virtual gpu::PipelinePointer getRenderTexturePipeline() override;
virtual gpu::PipelinePointer getCompositeScenePipeline() override;
protected:
QThread::Priority getPresentPriority() override { return QThread::TimeCriticalPriority; }
@ -34,8 +37,6 @@ protected:
void uncustomizeContext() override;
void cycleDebugOutput() override;
virtual gpu::PipelinePointer getCompositeScenePipeline() override;
private:
static const char* NAME;
ovrTextureSwapChain _textureSwapChain;

View file

@ -19,7 +19,8 @@ var HALF = 0.5;
var CLEAR_ENTITY_EDIT_PROPS = true;
var MILISECONDS_IN_SECOND = 1000;
var SECONDS_IN_MINUTE = 60;
var ALWAYS_ON_MAX_LIFETIME_IN_SECONDS = 20 * SECONDS_IN_MINUTE; // Delete after 20 minutes in case a nametag is hanging around in on mode
// Delete after 5 minutes in case a nametag is hanging around in on mode
var ALWAYS_ON_MAX_LIFETIME_IN_SECONDS = 5 * SECONDS_IN_MINUTE;
// *************************************
// START UTILTY
@ -377,6 +378,11 @@ function maybeAddOrRemoveIntervalCheck() {
add(avatar);
return;
}
if (avatar in _this.avatars) {
var entity = _this.avatars[avatar].nametag;
var age = entity.get("age");
entity.edit('lifetime', age + ALWAYS_ON_MAX_LIFETIME_IN_SECONDS);
}
if (avatarDistance > MAX_RADIUS_IGNORE_METERS) {
maybeRemove(avatar);
}