Merge pull request #8181 from highfidelity/RC-15
Beta Release 15 - Includes up to Developer Release 5103
73
.eslintrc.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
module.exports = {
|
||||
"root": true,
|
||||
"extends": "eslint:recommended",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 5
|
||||
},
|
||||
"globals": {
|
||||
"Account": false,
|
||||
"AnimationCache": false,
|
||||
"Assets": false,
|
||||
"Audio": false,
|
||||
"AudioDevice": false,
|
||||
"AudioEffectOptions": false,
|
||||
"AvatarList": false,
|
||||
"AvatarManager": false,
|
||||
"Camera": false,
|
||||
"Clipboard": false,
|
||||
"Controller": false,
|
||||
"DialogsManager": false,
|
||||
"Entities": false,
|
||||
"FaceTracker": false,
|
||||
"GlobalServices": false,
|
||||
"HMD": false,
|
||||
"LODManager": false,
|
||||
"Mat4": false,
|
||||
"Menu": false,
|
||||
"Messages": false,
|
||||
"ModelCache": false,
|
||||
"MyAvatar": false,
|
||||
"Overlays": false,
|
||||
"Paths": false,
|
||||
"Quat": false,
|
||||
"Rates": false,
|
||||
"Recording": false,
|
||||
"Reticle": false,
|
||||
"Scene": false,
|
||||
"Script": false,
|
||||
"ScriptDiscoveryService": false,
|
||||
"Settings": false,
|
||||
"SoundCache": false,
|
||||
"Stats": false,
|
||||
"TextureCache": false,
|
||||
"Uuid": false,
|
||||
"UndoStack": false,
|
||||
"Vec3": false,
|
||||
"WebSocket": false,
|
||||
"WebWindow": false,
|
||||
"Window": false,
|
||||
"XMLHttpRequest": false,
|
||||
"location": false,
|
||||
"print": false
|
||||
},
|
||||
"rules": {
|
||||
"brace-style": ["error", "1tbs", { "allowSingleLine": false }],
|
||||
"comma-dangle": ["error", "never"],
|
||||
"camelcase": ["error"],
|
||||
"curly": ["error", "all"],
|
||||
"indent": ["error", 4, { "SwitchCase": 1 }],
|
||||
"keyword-spacing": ["error", { "before": true, "after": true }],
|
||||
"max-len": ["error", 128, 4],
|
||||
"new-cap": ["error"],
|
||||
"no-floating-decimal": ["error"],
|
||||
//"no-magic-numbers": ["error", { "ignore": [0, 1], "ignoreArrayIndexes": true }],
|
||||
"no-multiple-empty-lines": ["error"],
|
||||
"no-multi-spaces": ["error"],
|
||||
"no-unused-vars": ["error", { "args": "none", "vars": "local" }],
|
||||
"semi": ["error", "always"],
|
||||
"spaced-comment": ["error", "always", {
|
||||
"line": { "markers": ["/"] }
|
||||
}],
|
||||
"space-before-function-paren": ["error", {"anonymous": "always", "named": "never"}]
|
||||
}
|
||||
};
|
|
@ -22,7 +22,7 @@ macro(optional_win_executable_signing)
|
|||
# setup a post build command to sign the executable
|
||||
add_custom_command(
|
||||
TARGET ${TARGET_NAME} POST_BUILD
|
||||
COMMAND ${SIGNTOOL_EXECUTABLE} sign /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://tsa.starfieldtech.com /td SHA256 ${EXECUTABLE_PATH}
|
||||
COMMAND ${SIGNTOOL_EXECUTABLE} sign /fd sha256 /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://tsa.starfieldtech.com /td SHA256 ${EXECUTABLE_PATH}
|
||||
)
|
||||
else ()
|
||||
message(FATAL_ERROR "HF_PFX_PASSPHRASE must be set for executables to be signed.")
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
; The Inner invocation has written an uninstaller binary for us.
|
||||
; We need to sign it if it's a production or PR build.
|
||||
!if @PRODUCTION_BUILD@ == 1
|
||||
!system '"@SIGNTOOL_EXECUTABLE@" sign /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://tsa.starfieldtech.com /td SHA256 $%TEMP%\@UNINSTALLER_NAME@' = 0
|
||||
!system '"@SIGNTOOL_EXECUTABLE@" sign /fd sha256 /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://tsa.starfieldtech.com /td SHA256 $%TEMP%\@UNINSTALLER_NAME@' = 0
|
||||
!endif
|
||||
|
||||
; Good. Now we can carry on writing the real installer.
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, 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 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.49;}
|
||||
.st1{fill:#1E1E1E;}
|
||||
.st2{opacity:0.5;}
|
||||
.st3{fill:#EAEAEA;}
|
||||
.st4{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M50,146c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146z"/>
|
||||
</g>
|
||||
<g class="st2">
|
||||
<g>
|
||||
<path class="st3" d="M25.1,109.5c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.3,111.4,29.4,109.5,25.1,109.5z"/>
|
||||
<path class="st3" d="M35.4,116.3c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8
|
||||
C35.9,116.2,35.6,116.3,35.4,116.3z M34.7,115.4c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6
|
||||
c-2.9-3.2-6.7-5-10.8-5c-4,0-7.7,1.7-10.6,4.7c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4
|
||||
C28.7,111.2,32.1,112.7,34.7,115.4L34.7,115.4z M36,114.7C36,114.7,36,114.7,36,114.7L36,114.7z M35.9,114.7
|
||||
C35.9,114.7,35.9,114.7,35.9,114.7L35.9,114.7z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.3,116l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0l-1.5,0.9c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C27.8,116.5,27.6,116.2,27.3,116z"/>
|
||||
<path class="st3" d="M31.2,125l-1.2-1.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0c0,0,0,0,0,0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0c0,0,0,0,0,0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5
|
||||
C31.5,126,31.5,125.4,31.2,125z"/>
|
||||
</g>
|
||||
<g class="st2">
|
||||
<path class="st3" d="M19.2,135.5v6.4H18v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6H18v-2.6H19.2z"/>
|
||||
<path class="st3" d="M25.4,141c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
v-3.4h1.3v3.4c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3
|
||||
c-0.5,0-1-0.1-1.4-0.3c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4
|
||||
c0,0.3,0,0.5,0.1,0.8c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5S25.1,141,25.4,141z"/>
|
||||
<path class="st3" d="M31.7,141.9v-6.4H34c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1
|
||||
c0.1,0.4,0.2,0.8,0.2,1.2c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H31.7z
|
||||
M35.9,138.7c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2H34
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C35.8,139.3,35.9,139,35.9,138.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M50,96c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V54c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st3" d="M25.1,59.5c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.3,61.5,29.4,59.5,25.1,59.5z"/>
|
||||
<path class="st3" d="M35.4,66.3c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C35.9,66.2,35.6,66.3,35.4,66.3z
|
||||
M34.7,65.5c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5c-4,0-7.7,1.7-10.6,4.7
|
||||
c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C28.7,61.3,32.1,62.7,34.7,65.5L34.7,65.5z M36,64.7
|
||||
C36,64.7,36,64.7,36,64.7L36,64.7z M35.9,64.7C35.9,64.7,35.9,64.7,35.9,64.7L35.9,64.7z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.3,66l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0L23.2,66c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C27.8,66.5,27.6,66.2,27.3,66z"/>
|
||||
<path class="st3" d="M31.2,75.1L30,73.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0c0,0,0,0,0,0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0c0,0,0,0,0,0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5
|
||||
C31.5,76,31.5,75.5,31.2,75.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M19.2,85.5v6.4H18v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6H18v-2.6H19.2z"/>
|
||||
<path class="st3" d="M25.4,91c0.3,0,0.6-0.1,0.8-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.4h1.3v3.4
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-1-0.1-1.4-0.3
|
||||
c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5S25.1,91,25.4,91z"/>
|
||||
<path class="st3" d="M31.7,91.9v-6.4H34c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H31.7z M35.9,88.7
|
||||
c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2H34
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C35.8,89.3,35.9,89,35.9,88.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st4" d="M50,46.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M25.1,9.6c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.3,11.5,29.4,9.6,25.1,9.6z"/>
|
||||
<path d="M35.4,16.3c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9l0,0
|
||||
c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C35.9,16.3,35.6,16.3,35.4,16.3z
|
||||
M34.7,15.5c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5c-4,0-7.7,1.7-10.6,4.7
|
||||
c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C28.7,11.3,32.1,12.8,34.7,15.5L34.7,15.5z M36,14.8
|
||||
C36,14.8,36,14.8,36,14.8L36,14.8z M35.9,14.8C35.9,14.8,35.9,14.8,35.9,14.8L35.9,14.8z"/>
|
||||
</g>
|
||||
<path d="M27.3,16l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0L23.2,16c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9l1.5,0.9
|
||||
c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C27.8,16.6,27.6,16.2,27.3,16z"/>
|
||||
<path d="M31.2,25.1L30,23.6c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0c0,0,0,0,0,0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5c-0.3,0.4-0.3,0.9,0,1.3
|
||||
l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0c0,0,0,0,0,0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5C31.5,26,31.5,25.5,31.2,25.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M19.2,35.6V42H18v-2.7h-2.9V42h-1.2v-6.4h1.2v2.6H18v-2.6H19.2z"/>
|
||||
<path d="M25.4,41c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8v-3.4h1.3v3.4
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-1-0.1-1.4-0.3
|
||||
c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5C24.9,41,25.1,41,25.4,41z"/>
|
||||
<path d="M31.7,42v-6.4H34c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6C34.9,41.9,34.5,42,34,42H31.7z M35.9,38.8
|
||||
c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2H34
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C35.8,39.3,35.9,39.1,35.9,38.8z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 8 KiB |
145
interface/resources/icons/hud.svg
Normal file
|
@ -0,0 +1,145 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#333333;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st3" d="M25.4,10.2c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.6,12.1,29.7,10.2,25.4,10.2z"/>
|
||||
<path class="st3" d="M35.7,17c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C36.2,16.9,35.9,17,35.7,17z
|
||||
M35,16.1c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5c-4,0-7.7,1.7-10.6,4.7
|
||||
c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C29,11.9,32.4,13.4,35,16.1L35,16.1z M36.3,15.4
|
||||
C36.3,15.4,36.3,15.4,36.3,15.4L36.3,15.4z M36.3,15.4L36.3,15.4L36.3,15.4z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.6,16.7l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0l-1.5,0.9c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C28.2,17.2,28,16.9,27.6,16.7z"/>
|
||||
<path class="st3" d="M31.5,25.7l-1.2-1.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0h0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0h0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5C31.8,26.6,31.8,26.1,31.5,25.7z"
|
||||
/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M19.5,36.2v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H19.5z"/>
|
||||
<path class="st3" d="M25.7,41.7c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.4h1.3
|
||||
v3.4c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-1-0.1-1.4-0.3
|
||||
c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5S25.4,41.7,25.7,41.7z"/>
|
||||
<path class="st3" d="M32,42.6v-6.4h2.3c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H32z M36.2,39.4
|
||||
c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C36.1,40,36.2,39.7,36.2,39.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M25.4,60.2c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.6,62.1,29.7,60.2,25.4,60.2z"/>
|
||||
<path class="st1" d="M35.7,67c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C36.2,66.9,35.9,67,35.7,67z
|
||||
M35,66.1c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5c-4,0-7.7,1.7-10.6,4.7
|
||||
c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C29,61.9,32.4,63.4,35,66.1L35,66.1z M36.3,65.4
|
||||
C36.3,65.4,36.3,65.4,36.3,65.4L36.3,65.4z M36.3,65.4L36.3,65.4L36.3,65.4z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.6,66.7l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0l-1.5,0.9c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C28.2,67.2,28,66.9,27.6,66.7z"/>
|
||||
<path class="st1" d="M31.5,75.7l-1.2-1.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0h0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0h0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5C31.8,76.6,31.8,76.1,31.5,75.7z"
|
||||
/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M19.5,86.2v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H19.5z"/>
|
||||
<path class="st1" d="M25.7,91.7c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.4h1.3
|
||||
v3.4c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-1-0.1-1.4-0.3
|
||||
c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5S25.4,91.7,25.7,91.7z"/>
|
||||
<path class="st1" d="M32,92.6v-6.4h2.3c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H32z M36.2,89.4
|
||||
c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C36.1,90,36.2,89.7,36.2,89.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M25.3,108.3c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.5,110.2,29.6,108.3,25.3,108.3z"/>
|
||||
<path class="st1" d="M35.6,115c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C36,115,35.8,115,35.6,115z
|
||||
M34.8,114.2c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5
|
||||
c-4,0-7.7,1.7-10.6,4.7c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C28.8,110,32.2,111.5,34.8,114.2
|
||||
L34.8,114.2z M36.1,113.5C36.1,113.5,36.1,113.5,36.1,113.5L36.1,113.5z M36.1,113.5C36.1,113.5,36.1,113.5,36.1,113.5L36.1,113.5
|
||||
z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.5,116.7l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0l-1.5,0.9c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C28,117.3,27.8,116.9,27.5,116.7z"/>
|
||||
<path class="st1" d="M31.4,125.8l-1.2-1.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0h0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0h0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5C31.7,126.7,31.7,126.2,31.4,125.8
|
||||
z"/>
|
||||
<g>
|
||||
<path class="st1" d="M19.3,136.3v6.4h-1.2v-2.7h-2.9v2.7H14v-6.4h1.2v2.6h2.9v-2.6H19.3z"/>
|
||||
<path class="st1" d="M25.6,141.7c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
v-3.4h1.3v3.4c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3
|
||||
c-0.5,0-1-0.1-1.4-0.3c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4
|
||||
c0,0.3,0,0.5,0.1,0.8c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5C25,141.7,25.3,141.7,25.6,141.7z"/>
|
||||
<path class="st1" d="M31.8,142.7v-6.4h2.3c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1
|
||||
c0.1,0.4,0.2,0.8,0.2,1.2c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H31.8z
|
||||
M36,139.5c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2H33v4.2h1.1
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C36,140,36,139.8,36,139.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M25.3,158.3c-4.2,0-8,1.8-10.8,4.8c0,0-0.5,0.7,0.2,1.2c0.7,0.6,1.4-0.1,1.4-0.1c2.4-2.4,5.7-3.9,9.2-3.9
|
||||
c3.6,0,6.9,1.5,9.3,4.1c0,0,0.7,0.8,1.5,0.3c0.7-0.4,0.2-1.2,0.2-1.3C33.5,160.3,29.6,158.3,25.3,158.3z"/>
|
||||
<path class="st1" d="M35.6,165.1c-0.2,0-0.4,0-0.5-0.1c-0.2-0.1-0.5-0.3-0.6-0.4l0,0c-2.5-2.6-5.7-4-9.2-4c-3.4,0-6.6,1.4-9.1,3.9
|
||||
l0,0c-0.1,0.1-0.3,0.2-0.4,0.3c-0.5,0.2-0.9,0.2-1.3-0.2c-0.6-0.5-0.4-1.1-0.3-1.4c0-0.1,0.1-0.1,0.1-0.2l0,0
|
||||
c2.9-3.1,6.8-4.9,10.9-4.9c4.2,0,8.2,1.8,11.2,5.1c0.1,0.1,0.3,0.5,0.2,0.9c0,0.3-0.2,0.6-0.5,0.8C36,165,35.8,165.1,35.6,165.1z
|
||||
M34.8,164.2c0.1,0.1,0.6,0.6,1.1,0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.3-0.1-0.5-0.1-0.6c-2.9-3.2-6.7-5-10.8-5
|
||||
c-4,0-7.7,1.7-10.6,4.7c-0.1,0.1-0.3,0.5,0.1,0.9c0.5,0.4,1,0,1.1-0.1c2.6-2.6,5.9-4,9.4-4C28.8,160,32.2,161.5,34.8,164.2
|
||||
L34.8,164.2z M36.1,163.5C36.1,163.5,36.1,163.5,36.1,163.5L36.1,163.5z M36.1,163.5C36.1,163.5,36.1,163.5,36.1,163.5L36.1,163.5
|
||||
z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.5,166.8l-1.5-0.9c-0.3-0.2-0.7-0.2-1,0l-1.5,0.9c-0.3,0.2-0.5,0.5-0.5,0.9l0,1.8c0,0.4,0.2,0.7,0.5,0.9
|
||||
l1.5,0.9c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.4,0,0.5-0.1l1.5-0.9c0.3-0.2,0.5-0.5,0.5-0.9l0-1.8C28,167.3,27.8,167,27.5,166.8z"/>
|
||||
<path class="st1" d="M31.4,175.9l-1.2-1.5c-0.2-0.3-0.5-0.4-0.8-0.4l-7.9,0h0c-0.3,0-0.6,0.1-0.8,0.4l-1.2,1.5
|
||||
c-0.3,0.4-0.3,0.9,0,1.3l1.2,1.5c0.2,0.3,0.5,0.4,0.8,0.4l7.9,0h0c0.3,0,0.6-0.1,0.8-0.4l1.2-1.5C31.7,176.8,31.7,176.2,31.4,175.9
|
||||
z"/>
|
||||
<g>
|
||||
<path class="st1" d="M19.3,186.3v6.4h-1.2V190h-2.9v2.7H14v-6.4h1.2v2.6h2.9v-2.6H19.3z"/>
|
||||
<path class="st1" d="M25.6,191.8c0.3,0,0.6-0.1,0.8-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8v-3.4
|
||||
h1.3v3.4c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-1-0.1-1.4-0.3
|
||||
c-0.4-0.2-0.7-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.2-0.8-0.2-1.2v-3.4h1.3v3.4c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.3,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.5C25,191.7,25.3,191.8,25.6,191.8z"/>
|
||||
<path class="st1" d="M31.8,192.7v-6.4h2.3c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1
|
||||
c0.1,0.4,0.2,0.8,0.2,1.2c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H31.8z
|
||||
M36,189.5c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2H33v4.2h1.1
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C36,190.1,36,189.8,36,189.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
|
@ -30,6 +30,7 @@ Window {
|
|||
width: addressBarDialog.implicitWidth
|
||||
height: addressBarDialog.implicitHeight
|
||||
|
||||
onShownChanged: addressBarDialog.observeShownChanged(shown);
|
||||
Component.onCompleted: {
|
||||
root.parentChanged.connect(center);
|
||||
center();
|
||||
|
|
|
@ -137,12 +137,14 @@ ScrollingWindow {
|
|||
}
|
||||
|
||||
function updateVisiblity() {
|
||||
for (var i = 0; i < tabView.count; ++i) {
|
||||
if (tabView.getTab(i).enabled) {
|
||||
return;
|
||||
if (visible) {
|
||||
for (var i = 0; i < tabView.count; ++i) {
|
||||
if (tabView.getTab(i).enabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
shown = false;
|
||||
}
|
||||
shown = false;
|
||||
}
|
||||
|
||||
function findIndexForUrl(source) {
|
||||
|
|
|
@ -36,15 +36,15 @@ SpinBox {
|
|||
id: spinStyle
|
||||
background: Rectangle {
|
||||
color: isLightColorScheme
|
||||
? (spinBox.focus ? hifi.colors.white : hifi.colors.lightGray)
|
||||
: (spinBox.focus ? hifi.colors.black : hifi.colors.baseGrayShadow)
|
||||
? (spinBox.activeFocus ? hifi.colors.white : hifi.colors.lightGray)
|
||||
: (spinBox.activeFocus ? hifi.colors.black : hifi.colors.baseGrayShadow)
|
||||
border.color: spinBoxLabelInside.visible ? spinBoxLabelInside.color : hifi.colors.primaryHighlight
|
||||
border.width: spinBox.focus ? spinBoxLabelInside.visible ? 2 : 1 : 0
|
||||
border.width: spinBox.activeFocus ? spinBoxLabelInside.visible ? 2 : 1 : 0
|
||||
}
|
||||
|
||||
textColor: isLightColorScheme
|
||||
? (spinBox.focus ? hifi.colors.black : hifi.colors.lightGray)
|
||||
: (spinBox.focus ? hifi.colors.white : hifi.colors.lightGrayText)
|
||||
? (spinBox.activeFocus ? hifi.colors.black : hifi.colors.lightGray)
|
||||
: (spinBox.activeFocus ? hifi.colors.white : hifi.colors.lightGrayText)
|
||||
selectedTextColor: hifi.colors.black
|
||||
selectionColor: hifi.colors.primaryHighlight
|
||||
|
||||
|
@ -96,7 +96,7 @@ SpinBox {
|
|||
anchors.fill: parent
|
||||
propagateComposedEvents: true
|
||||
onWheel: {
|
||||
if(spinBox.focus)
|
||||
if(spinBox.activeFocus)
|
||||
wheel.accepted = false
|
||||
else
|
||||
wheel.accepted = true
|
||||
|
|
|
@ -36,14 +36,14 @@ TextField {
|
|||
|
||||
style: TextFieldStyle {
|
||||
textColor: isLightColorScheme
|
||||
? (textField.focus ? hifi.colors.black : hifi.colors.lightGray)
|
||||
: (textField.focus ? hifi.colors.white : hifi.colors.lightGrayText)
|
||||
? (textField.activeFocus ? hifi.colors.black : hifi.colors.lightGray)
|
||||
: (textField.activeFocus ? hifi.colors.white : hifi.colors.lightGrayText)
|
||||
background: Rectangle {
|
||||
color: isLightColorScheme
|
||||
? (textField.focus ? hifi.colors.white : hifi.colors.textFieldLightBackground)
|
||||
: (textField.focus ? hifi.colors.black : hifi.colors.baseGrayShadow)
|
||||
? (textField.activeFocus ? hifi.colors.white : hifi.colors.textFieldLightBackground)
|
||||
: (textField.activeFocus ? hifi.colors.black : hifi.colors.baseGrayShadow)
|
||||
border.color: hifi.colors.primaryHighlight
|
||||
border.width: textField.focus ? 1 : 0
|
||||
border.width: textField.activeFocus ? 1 : 0
|
||||
radius: isSearchField ? textField.height / 2 : 0
|
||||
|
||||
HiFiGlyphs {
|
||||
|
|
|
@ -24,6 +24,14 @@ FocusScope {
|
|||
readonly property int invalid_position: -9999;
|
||||
property rect recommendedRect: Qt.rect(0,0,0,0);
|
||||
property var expectedChildren;
|
||||
property bool repositionLocked: true
|
||||
|
||||
onRepositionLockedChanged: {
|
||||
if (!repositionLocked) {
|
||||
d.handleSizeChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
onHeightChanged: d.handleSizeChanged();
|
||||
|
||||
|
@ -52,11 +60,13 @@ FocusScope {
|
|||
readonly property real menu: 8000
|
||||
}
|
||||
|
||||
|
||||
QtObject {
|
||||
id: d
|
||||
|
||||
function handleSizeChanged() {
|
||||
if (desktop.repositionLocked) {
|
||||
return;
|
||||
}
|
||||
var oldRecommendedRect = recommendedRect;
|
||||
var newRecommendedRectJS = (typeof Controller === "undefined") ? Qt.rect(0,0,0,0) : Controller.getRecommendedOverlayRect();
|
||||
var newRecommendedRect = Qt.rect(newRecommendedRectJS.x, newRecommendedRectJS.y,
|
||||
|
@ -235,6 +245,10 @@ FocusScope {
|
|||
}
|
||||
|
||||
function repositionAll() {
|
||||
if (desktop.repositionLocked) {
|
||||
return;
|
||||
}
|
||||
|
||||
var oldRecommendedRect = recommendedRect;
|
||||
var oldRecommendedDimmensions = { x: oldRecommendedRect.width, y: oldRecommendedRect.height };
|
||||
var newRecommendedRect = Controller.getRecommendedOverlayRect();
|
||||
|
@ -297,8 +311,8 @@ FocusScope {
|
|||
|
||||
onPinnedChanged: {
|
||||
if (pinned) {
|
||||
nullFocus.focus = true;
|
||||
nullFocus.forceActiveFocus();
|
||||
desktop.focus = true;
|
||||
desktop.forceActiveFocus();
|
||||
|
||||
// recalculate our non-pinned children
|
||||
hiddenChildren = d.findMatchingChildren(desktop, function(child){
|
||||
|
@ -472,17 +486,31 @@ FocusScope {
|
|||
}
|
||||
|
||||
function unfocusWindows() {
|
||||
// First find the active focus item, and unfocus it, all the way
|
||||
// up the parent chain to the window
|
||||
var currentFocus = offscreenWindow.activeFocusItem;
|
||||
var targetWindow = d.getDesktopWindow(currentFocus);
|
||||
while (currentFocus) {
|
||||
if (currentFocus === targetWindow) {
|
||||
break;
|
||||
}
|
||||
currentFocus.focus = false;
|
||||
currentFocus = currentFocus.parent;
|
||||
}
|
||||
|
||||
// Unfocus all windows
|
||||
var windows = d.getTopLevelWindows();
|
||||
for (var i = 0; i < windows.length; ++i) {
|
||||
windows[i].focus = false;
|
||||
}
|
||||
|
||||
// For the desktop to have active focus
|
||||
desktop.focus = true;
|
||||
desktop.forceActiveFocus();
|
||||
}
|
||||
|
||||
FocusHack { id: focusHack; }
|
||||
|
||||
FocusScope { id: nullFocus; }
|
||||
|
||||
Rectangle {
|
||||
id: focusDebugger;
|
||||
objectName: "focusDebugger"
|
||||
|
@ -496,5 +524,5 @@ FocusScope {
|
|||
enabled: DebugQML
|
||||
onTriggered: focusDebugger.visible = !focusDebugger.visible
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -603,7 +603,7 @@ ModalWindow {
|
|||
|
||||
TextField {
|
||||
id: currentSelection
|
||||
label: "Path:"
|
||||
label: selectDirectory ? "Directory:" : "File name:"
|
||||
anchors {
|
||||
left: parent.left
|
||||
right: selectionType.visible ? selectionType.left: parent.right
|
||||
|
|
|
@ -56,13 +56,13 @@ OriginalDesktop.Desktop {
|
|||
var sysToolbar = desktop.getToolbar("com.highfidelity.interface.toolbar.system");
|
||||
var toggleHudButton = sysToolbar.addButton({
|
||||
objectName: "hudToggle",
|
||||
imageURL: "../../../icons/hud-01.svg",
|
||||
imageURL: "../../../icons/hud.svg",
|
||||
visible: true,
|
||||
pinned: true,
|
||||
});
|
||||
|
||||
toggleHudButton.yOffset = Qt.binding(function(){
|
||||
return desktop.pinned ? 50 : 0
|
||||
toggleHudButton.buttonState = Qt.binding(function(){
|
||||
return desktop.pinned ? 1 : 0
|
||||
});
|
||||
toggleHudButton.clicked.connect(function(){
|
||||
console.log("Clicked on hud button")
|
||||
|
|
|
@ -53,11 +53,6 @@ ScrollingWindow {
|
|||
updateRunningScripts();
|
||||
}
|
||||
|
||||
function setDefaultFocus() {
|
||||
// Work around FocusScope of scrollable window.
|
||||
filterEdit.forceActiveFocus();
|
||||
}
|
||||
|
||||
function updateRunningScripts() {
|
||||
var runningScripts = ScriptDiscoveryService.getRunning();
|
||||
runningScriptsModel.clear()
|
||||
|
@ -276,7 +271,6 @@ ScrollingWindow {
|
|||
isSearchField: true
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
focus: true
|
||||
colorScheme: hifi.colorSchemes.dark
|
||||
placeholderText: "Filter"
|
||||
onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i")
|
||||
|
|
|
@ -7,7 +7,7 @@ import "../../windows"
|
|||
import "../../js/Utils.js" as Utils
|
||||
import "../models"
|
||||
|
||||
ScrollingWindow {
|
||||
Window {
|
||||
id: root
|
||||
resizable: true
|
||||
width: 516
|
||||
|
|
|
@ -8,6 +8,7 @@ Item {
|
|||
property var subImage;
|
||||
property int yOffset: 0
|
||||
property int buttonState: 0
|
||||
property int hoverOffset: 0
|
||||
property var toolbar;
|
||||
property real size: 50 // toolbar ? toolbar.buttonSize : 50
|
||||
width: size; height: size
|
||||
|
@ -36,9 +37,15 @@ Item {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
function updateOffset() {
|
||||
yOffset = size * (buttonState + hoverOffset);
|
||||
}
|
||||
onButtonStateChanged: {
|
||||
yOffset = size * buttonState
|
||||
hoverOffset = 0; // subtle: show the new state without hover. don't wait for mouse to be moved away
|
||||
// The above is per UX design, but ALSO avoid a subtle issue that would be a problem because
|
||||
// the hand controllers don't move the mouse when not triggered, so releasing the trigger would
|
||||
// never show unhovered.
|
||||
updateOffset();
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
|
@ -58,8 +65,18 @@ Item {
|
|||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
hoverEnabled: true
|
||||
anchors.fill: parent
|
||||
onClicked: button.clicked();
|
||||
onEntered: {
|
||||
hoverOffset = 2;
|
||||
updateOffset();
|
||||
}
|
||||
onExited: {
|
||||
hoverOffset = 0;
|
||||
updateOffset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,19 @@ Item {
|
|||
onSelected: d.handleSelection(subMenu, currentItem, item)
|
||||
}
|
||||
}
|
||||
property var delay: Timer { // No setTimeout in QML.
|
||||
property var menuItem: null;
|
||||
interval: 0
|
||||
repeat: false
|
||||
running: false
|
||||
function trigger(item) { // Capture item and schedule asynchronous Timer.
|
||||
menuItem = item;
|
||||
start();
|
||||
}
|
||||
onTriggered: {
|
||||
menuItem.trigger(); // Now trigger the item.
|
||||
}
|
||||
}
|
||||
|
||||
function toModel(items) {
|
||||
var result = modelMaker.createObject(desktop);
|
||||
|
@ -128,7 +141,8 @@ Item {
|
|||
|
||||
case MenuItemType.Item:
|
||||
console.log("Triggering " + item.text)
|
||||
item.trigger();
|
||||
// Don't block waiting for modal dialogs and such that the menu might open.
|
||||
delay.trigger(item);
|
||||
clearMenus();
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -773,6 +773,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
|||
auto gpuIdent = GPUIdent::getInstance();
|
||||
auto glContextData = getGLContextData();
|
||||
QJsonObject properties = {
|
||||
{ "version", applicationVersion() },
|
||||
{ "previousSessionCrashed", _previousSessionCrashed },
|
||||
{ "previousSessionRuntime", sessionRunTime.get() },
|
||||
{ "cpu_architecture", QSysInfo::currentCpuArchitecture() },
|
||||
|
@ -963,6 +964,13 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
|||
updateHeartbeat();
|
||||
|
||||
loadSettings();
|
||||
|
||||
// Now that we've loaded the menu and thus switched to the previous display plugin
|
||||
// we can unlock the desktop repositioning code, since all the positions will be
|
||||
// relative to the desktop size for this plugin
|
||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||
offscreenUi->getDesktop()->setProperty("repositionLocked", false);
|
||||
|
||||
// Make sure we don't time out during slow operations at startup
|
||||
updateHeartbeat();
|
||||
|
||||
|
@ -1579,13 +1587,7 @@ void Application::initializeUi() {
|
|||
});
|
||||
offscreenUi->resume();
|
||||
connect(_window, &MainWindow::windowGeometryChanged, [this](const QRect& r){
|
||||
static qreal oldDevicePixelRatio = 0;
|
||||
qreal devicePixelRatio = getActiveDisplayPlugin()->devicePixelRatio();
|
||||
if (devicePixelRatio != oldDevicePixelRatio) {
|
||||
oldDevicePixelRatio = devicePixelRatio;
|
||||
qDebug() << "Device pixel ratio changed, triggering GL resize";
|
||||
resizeGL();
|
||||
}
|
||||
resizeGL();
|
||||
});
|
||||
|
||||
// This will set up the input plugins UI
|
||||
|
@ -1717,22 +1719,22 @@ void Application::paintGL() {
|
|||
if (isHMDMode()) {
|
||||
mat4 camMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||
_myCamera.setPosition(extractTranslation(camMat));
|
||||
_myCamera.setRotation(glm::quat_cast(camMat));
|
||||
_myCamera.setOrientation(glm::quat_cast(camMat));
|
||||
} else {
|
||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition());
|
||||
_myCamera.setRotation(myAvatar->getHead()->getCameraOrientation());
|
||||
_myCamera.setOrientation(myAvatar->getHead()->getCameraOrientation());
|
||||
}
|
||||
} else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) {
|
||||
if (isHMDMode()) {
|
||||
auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix();
|
||||
_myCamera.setRotation(glm::normalize(glm::quat_cast(hmdWorldMat)));
|
||||
_myCamera.setOrientation(glm::normalize(glm::quat_cast(hmdWorldMat)));
|
||||
_myCamera.setPosition(extractTranslation(hmdWorldMat) +
|
||||
myAvatar->getOrientation() * boomOffset);
|
||||
} else {
|
||||
_myCamera.setRotation(myAvatar->getHead()->getOrientation());
|
||||
_myCamera.setOrientation(myAvatar->getHead()->getOrientation());
|
||||
if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) {
|
||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
||||
+ _myCamera.getRotation() * boomOffset);
|
||||
+ _myCamera.getOrientation() * boomOffset);
|
||||
} else {
|
||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
||||
+ myAvatar->getOrientation() * boomOffset);
|
||||
|
@ -1751,7 +1753,7 @@ void Application::paintGL() {
|
|||
|
||||
glm::quat worldMirrorRotation = mirrorBodyOrientation * mirrorHmdRotation;
|
||||
|
||||
_myCamera.setRotation(worldMirrorRotation);
|
||||
_myCamera.setOrientation(worldMirrorRotation);
|
||||
|
||||
glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix());
|
||||
// Mirror HMD lateral offsets
|
||||
|
@ -1762,7 +1764,7 @@ void Application::paintGL() {
|
|||
+ mirrorBodyOrientation * glm::vec3(0.0f, 0.0f, 1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror
|
||||
+ mirrorBodyOrientation * hmdOffset);
|
||||
} else {
|
||||
_myCamera.setRotation(myAvatar->getWorldAlignedOrientation()
|
||||
_myCamera.setOrientation(myAvatar->getWorldAlignedOrientation()
|
||||
* glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)));
|
||||
_myCamera.setPosition(myAvatar->getDefaultEyePosition()
|
||||
+ glm::vec3(0, _raiseMirror * myAvatar->getUniformScale(), 0)
|
||||
|
@ -1775,11 +1777,11 @@ void Application::paintGL() {
|
|||
if (cameraEntity != nullptr) {
|
||||
if (isHMDMode()) {
|
||||
glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix());
|
||||
_myCamera.setRotation(cameraEntity->getRotation() * hmdRotation);
|
||||
_myCamera.setOrientation(cameraEntity->getRotation() * hmdRotation);
|
||||
glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix());
|
||||
_myCamera.setPosition(cameraEntity->getPosition() + (hmdRotation * hmdOffset));
|
||||
} else {
|
||||
_myCamera.setRotation(cameraEntity->getRotation());
|
||||
_myCamera.setOrientation(cameraEntity->getRotation());
|
||||
_myCamera.setPosition(cameraEntity->getPosition());
|
||||
}
|
||||
}
|
||||
|
@ -1960,7 +1962,8 @@ void Application::resizeGL() {
|
|||
static qreal lastDevicePixelRatio = 0;
|
||||
qreal devicePixelRatio = _window->devicePixelRatio();
|
||||
if (offscreenUi->size() != fromGlm(uiSize) || devicePixelRatio != lastDevicePixelRatio) {
|
||||
offscreenUi->resize(fromGlm(uiSize));
|
||||
qDebug() << "Device pixel ratio changed, triggering resize";
|
||||
offscreenUi->resize(fromGlm(uiSize), true);
|
||||
_offscreenContext->makeCurrent();
|
||||
lastDevicePixelRatio = devicePixelRatio;
|
||||
}
|
||||
|
@ -3314,9 +3317,9 @@ void Application::updateMyAvatarLookAtPosition() {
|
|||
if (isLookingAtSomeone) {
|
||||
deflection *= GAZE_DEFLECTION_REDUCTION_DURING_EYE_CONTACT;
|
||||
}
|
||||
lookAtSpot = origin + _myCamera.getRotation() * glm::quat(glm::radians(glm::vec3(
|
||||
lookAtSpot = origin + _myCamera.getOrientation() * glm::quat(glm::radians(glm::vec3(
|
||||
eyePitch * deflection, eyeYaw * deflection, 0.0f))) *
|
||||
glm::inverse(_myCamera.getRotation()) * (lookAtSpot - origin);
|
||||
glm::inverse(_myCamera.getOrientation()) * (lookAtSpot - origin);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4032,7 +4035,7 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) {
|
|||
|
||||
// Set the viewFrustum up with the correct position and orientation of the camera
|
||||
viewFrustum.setPosition(camera.getPosition());
|
||||
viewFrustum.setOrientation(camera.getRotation());
|
||||
viewFrustum.setOrientation(camera.getOrientation());
|
||||
|
||||
// Ask the ViewFrustum class to calculate our corners
|
||||
viewFrustum.calculate();
|
||||
|
@ -4305,7 +4308,7 @@ void Application::renderRearViewMirror(RenderArgs* renderArgs, const QRect& regi
|
|||
myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_REARVIEW_DISTANCE * myAvatar->getScale());
|
||||
}
|
||||
_mirrorCamera.setProjection(glm::perspective(glm::radians(fov), aspect, DEFAULT_NEAR_CLIP, DEFAULT_FAR_CLIP));
|
||||
_mirrorCamera.setRotation(myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI, 0.0f)));
|
||||
_mirrorCamera.setOrientation(myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI, 0.0f)));
|
||||
|
||||
|
||||
// set the bounds of rear mirror view
|
||||
|
@ -4995,7 +4998,6 @@ void Application::takeSnapshot() {
|
|||
|
||||
DependencyManager::get<OffscreenUi>()->load("hifi/dialogs/SnapshotShareDialog.qml", [=](QQmlContext*, QObject* dialog) {
|
||||
dialog->setProperty("source", QUrl::fromLocalFile(fileName));
|
||||
connect(dialog, SIGNAL(uploadSnapshot(const QString& snapshot)), this, SLOT(uploadSnapshot(const QString& snapshot)));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -5348,7 +5350,6 @@ void Application::updateDisplayMode() {
|
|||
_displayPlugin = newDisplayPlugin;
|
||||
}
|
||||
|
||||
|
||||
emit activeDisplayPluginChanged();
|
||||
|
||||
// reset the avatar, to set head and hand palms back to a reasonable default pose.
|
||||
|
|
|
@ -62,14 +62,14 @@ void Camera::update(float deltaTime) {
|
|||
}
|
||||
|
||||
void Camera::recompose() {
|
||||
mat4 orientation = glm::mat4_cast(_rotation);
|
||||
mat4 orientation = glm::mat4_cast(_orientation);
|
||||
mat4 translation = glm::translate(mat4(), _position);
|
||||
_transform = translation * orientation;
|
||||
}
|
||||
|
||||
void Camera::decompose() {
|
||||
_position = vec3(_transform[3]);
|
||||
_rotation = glm::quat_cast(_transform);
|
||||
_orientation = glm::quat_cast(_transform);
|
||||
}
|
||||
|
||||
void Camera::setTransform(const glm::mat4& transform) {
|
||||
|
@ -85,8 +85,8 @@ void Camera::setPosition(const glm::vec3& position) {
|
|||
}
|
||||
}
|
||||
|
||||
void Camera::setRotation(const glm::quat& rotation) {
|
||||
_rotation = rotation;
|
||||
void Camera::setOrientation(const glm::quat& orientation) {
|
||||
_orientation = orientation;
|
||||
recompose();
|
||||
if (_isKeepLookingAt) {
|
||||
lookAt(_lookingAt);
|
||||
|
@ -154,9 +154,9 @@ QString Camera::getModeString() const {
|
|||
void Camera::lookAt(const glm::vec3& lookAt) {
|
||||
glm::vec3 up = IDENTITY_UP;
|
||||
glm::mat4 lookAtMatrix = glm::lookAt(_position, lookAt, up);
|
||||
glm::quat rotation = glm::quat_cast(lookAtMatrix);
|
||||
rotation.w = -rotation.w; // Rosedale approved
|
||||
_rotation = rotation;
|
||||
glm::quat orientation = glm::quat_cast(lookAtMatrix);
|
||||
orientation.w = -orientation.w; // Rosedale approved
|
||||
_orientation = orientation;
|
||||
}
|
||||
|
||||
void Camera::keepLookingAt(const glm::vec3& point) {
|
||||
|
@ -171,7 +171,7 @@ void Camera::loadViewFrustum(ViewFrustum& frustum) const {
|
|||
|
||||
// Set the viewFrustum up with the correct position and orientation of the camera
|
||||
frustum.setPosition(getPosition());
|
||||
frustum.setOrientation(getRotation());
|
||||
frustum.setOrientation(getOrientation());
|
||||
|
||||
// Ask the ViewFrustum class to calculate our corners
|
||||
frustum.calculate();
|
||||
|
|
|
@ -45,7 +45,7 @@ class Camera : public QObject {
|
|||
public:
|
||||
Camera();
|
||||
|
||||
void initialize(); // instantly put the camera at the ideal position and rotation.
|
||||
void initialize(); // instantly put the camera at the ideal position and orientation.
|
||||
|
||||
void update( float deltaTime );
|
||||
|
||||
|
@ -57,25 +57,22 @@ public:
|
|||
|
||||
EntityItemPointer getCameraEntityPointer() const { return _cameraEntity; }
|
||||
|
||||
public slots:
|
||||
QString getModeString() const;
|
||||
void setModeString(const QString& mode);
|
||||
|
||||
glm::quat getRotation() const { return _rotation; }
|
||||
void setRotation(const glm::quat& rotation);
|
||||
|
||||
glm::vec3 getPosition() const { return _position; }
|
||||
void setPosition(const glm::vec3& position);
|
||||
|
||||
glm::quat getOrientation() const { return getRotation(); }
|
||||
void setOrientation(const glm::quat& orientation) { setRotation(orientation); }
|
||||
|
||||
const glm::mat4& getTransform() const { return _transform; }
|
||||
void setTransform(const glm::mat4& transform);
|
||||
|
||||
const glm::mat4& getProjection() const { return _projection; }
|
||||
void setProjection(const glm::mat4& projection);
|
||||
|
||||
public slots:
|
||||
QString getModeString() const;
|
||||
void setModeString(const QString& mode);
|
||||
|
||||
glm::vec3 getPosition() const { return _position; }
|
||||
void setPosition(const glm::vec3& position);
|
||||
|
||||
glm::quat getOrientation() const { return _orientation; }
|
||||
void setOrientation(const glm::quat& orientation);
|
||||
|
||||
QUuid getCameraEntity() const;
|
||||
void setCameraEntity(QUuid entityID);
|
||||
|
||||
|
@ -105,7 +102,7 @@ private:
|
|||
|
||||
// derived
|
||||
glm::vec3 _position;
|
||||
glm::quat _rotation;
|
||||
glm::quat _orientation;
|
||||
bool _isKeepLookingAt{ false };
|
||||
glm::vec3 _lookingAt;
|
||||
EntityItemPointer _cameraEntity;
|
||||
|
|
|
@ -79,10 +79,6 @@ void DiscoverabilityManager::updateLocation() {
|
|||
const QString FRIENDS_ONLY_KEY_IN_LOCATION = "friends_only";
|
||||
locationObject.insert(FRIENDS_ONLY_KEY_IN_LOCATION, (_mode.get() == Discoverability::Friends));
|
||||
|
||||
// if we have a session ID add it now, otherwise add a null value
|
||||
auto sessionID = accountManager->getSessionID();
|
||||
rootObject[SESSION_ID_KEY] = sessionID.isNull() ? QJsonValue() : sessionID.toString();
|
||||
|
||||
JSONCallbackParameters callbackParameters;
|
||||
callbackParameters.jsonCallbackReceiver = this;
|
||||
callbackParameters.jsonCallbackMethod = "handleHeartbeatResponse";
|
||||
|
@ -110,13 +106,8 @@ void DiscoverabilityManager::updateLocation() {
|
|||
callbackParameters.jsonCallbackReceiver = this;
|
||||
callbackParameters.jsonCallbackMethod = "handleHeartbeatResponse";
|
||||
|
||||
QJsonObject heartbeatObject;
|
||||
auto sessionID = accountManager->getSessionID();
|
||||
heartbeatObject[SESSION_ID_KEY] = sessionID.isNull() ? QJsonValue() : sessionID.toString();
|
||||
|
||||
accountManager->sendRequest(API_USER_HEARTBEAT_PATH, AccountManagerAuth::Optional,
|
||||
QNetworkAccessManager::PutOperation, callbackParameters,
|
||||
QJsonDocument(heartbeatObject).toJson());
|
||||
QNetworkAccessManager::PutOperation, callbackParameters);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
DialogsManagerScriptingInterface::DialogsManagerScriptingInterface() {
|
||||
connect(DependencyManager::get<DialogsManager>().data(), &DialogsManager::addressBarToggled,
|
||||
this, &DialogsManagerScriptingInterface::addressBarToggled);
|
||||
connect(DependencyManager::get<DialogsManager>().data(), &DialogsManager::addressBarShown,
|
||||
this, &DialogsManagerScriptingInterface::addressBarShown);
|
||||
}
|
||||
|
||||
void DialogsManagerScriptingInterface::toggleAddressBar() {
|
||||
|
|
|
@ -24,6 +24,7 @@ public slots:
|
|||
|
||||
signals:
|
||||
void addressBarToggled();
|
||||
void addressBarShown(bool visible);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "DependencyManager.h"
|
||||
#include "AddressManager.h"
|
||||
#include "DialogsManager.h"
|
||||
|
||||
HIFI_QML_DEF(AddressBarDialog)
|
||||
|
||||
|
@ -74,3 +75,6 @@ void AddressBarDialog::displayAddressNotFoundMessage() {
|
|||
OffscreenUi::critical("", "There is no address information for that user or place");
|
||||
}
|
||||
|
||||
void AddressBarDialog::observeShownChanged(bool visible) {
|
||||
DependencyManager::get<DialogsManager>()->emitAddressBarShown(visible);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ protected:
|
|||
Q_INVOKABLE void loadHome();
|
||||
Q_INVOKABLE void loadBack();
|
||||
Q_INVOKABLE void loadForward();
|
||||
Q_INVOKABLE void observeShownChanged(bool visible);
|
||||
|
||||
bool _backEnabled;
|
||||
bool _forwardEnabled;
|
||||
|
|
|
@ -150,7 +150,8 @@ void ApplicationOverlay::renderRearViewToFbo(RenderArgs* renderArgs) {
|
|||
}
|
||||
|
||||
void ApplicationOverlay::renderRearView(RenderArgs* renderArgs) {
|
||||
if (!qApp->isHMDMode() && Menu::getInstance()->isOptionChecked(MenuOption::MiniMirror)) {
|
||||
if (!qApp->isHMDMode() && Menu::getInstance()->isOptionChecked(MenuOption::MiniMirror) &&
|
||||
!Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) {
|
||||
gpu::Batch& batch = *renderArgs->_batch;
|
||||
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
|
@ -166,7 +167,7 @@ void ApplicationOverlay::renderRearView(RenderArgs* renderArgs) {
|
|||
batch.setViewTransform(Transform());
|
||||
|
||||
float screenRatio = ((float)qApp->getDevicePixelRatio());
|
||||
float renderRatio = ((float)screenRatio * qApp->getRenderResolutionScale());
|
||||
float renderRatio = ((float)qApp->getRenderResolutionScale());
|
||||
|
||||
auto viewport = qApp->getMirrorViewRect();
|
||||
glm::vec2 bottomLeft(viewport.left(), viewport.top() + viewport.height());
|
||||
|
|
|
@ -40,6 +40,7 @@ public:
|
|||
QPointer<HMDToolsDialog> getHMDToolsDialog() const { return _hmdToolsDialog; }
|
||||
QPointer<LodToolsDialog> getLodToolsDialog() const { return _lodToolsDialog; }
|
||||
QPointer<OctreeStatsDialog> getOctreeStatsDialog() const { return _octreeStatsDialog; }
|
||||
void emitAddressBarShown(bool visible) { emit addressBarShown(visible); }
|
||||
|
||||
public slots:
|
||||
void toggleAddressBar();
|
||||
|
@ -60,6 +61,7 @@ public slots:
|
|||
|
||||
signals:
|
||||
void addressBarToggled();
|
||||
void addressBarShown(bool visible);
|
||||
|
||||
private slots:
|
||||
void hmdToolsClosed();
|
||||
|
|
|
@ -97,7 +97,7 @@ void Circle3DOverlay::render(RenderArgs* args) {
|
|||
_lastColor = colorX;
|
||||
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
|
||||
|
||||
Q_ASSERT(args->_batch);
|
||||
auto& batch = *args->_batch;
|
||||
|
||||
|
@ -283,6 +283,9 @@ const render::ShapeKey Circle3DOverlay::getShapeKey() {
|
|||
if (getAlpha() != 1.0f) {
|
||||
builder.withTranslucent();
|
||||
}
|
||||
if (!getIsSolid()) {
|
||||
builder.withUnlit().withDepthBias();
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
|
|
@ -44,11 +44,10 @@ void Cube3DOverlay::render(RenderArgs* args) {
|
|||
Transform transform;
|
||||
transform.setTranslation(position);
|
||||
transform.setRotation(rotation);
|
||||
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
auto pipeline = args->_pipeline;
|
||||
if (!pipeline) {
|
||||
pipeline = geometryCache->getShapePipeline();
|
||||
pipeline = _isSolid ? geometryCache->getShapePipeline() : geometryCache->getWireShapePipeline();
|
||||
}
|
||||
|
||||
if (_isSolid) {
|
||||
|
@ -56,7 +55,7 @@ void Cube3DOverlay::render(RenderArgs* args) {
|
|||
batch->setModelTransform(transform);
|
||||
geometryCache->renderSolidCubeInstance(*batch, cubeColor, pipeline);
|
||||
} else {
|
||||
|
||||
geometryCache->bindSimpleProgram(*batch, false, false, true, true);
|
||||
if (getIsDashedLine()) {
|
||||
transform.setScale(1.0f);
|
||||
batch->setModelTransform(transform);
|
||||
|
@ -101,6 +100,9 @@ const render::ShapeKey Cube3DOverlay::getShapeKey() {
|
|||
if (getAlpha() != 1.0f) {
|
||||
builder.withTranslucent();
|
||||
}
|
||||
if (!getIsSolid()) {
|
||||
builder.withUnlit().withDepthBias();
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,6 @@ void Grid3DOverlay::render(RenderArgs* args) {
|
|||
transform.setScale(glm::vec3(getDimensions(), 1.0f));
|
||||
transform.setTranslation(position);
|
||||
batch->setModelTransform(transform);
|
||||
|
||||
const float MINOR_GRID_EDGE = 0.0025f;
|
||||
const float MAJOR_GRID_EDGE = 0.005f;
|
||||
DependencyManager::get<GeometryCache>()->renderGrid(*batch, minCorner, maxCorner,
|
||||
|
@ -86,7 +85,7 @@ void Grid3DOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
|
||||
const render::ShapeKey Grid3DOverlay::getShapeKey() {
|
||||
return render::ShapeKey::Builder().withOwnPipeline();
|
||||
return render::ShapeKey::Builder().withOwnPipeline().withUnlit().withDepthBias();
|
||||
}
|
||||
|
||||
void Grid3DOverlay::setProperties(const QVariantMap& properties) {
|
||||
|
|
|
@ -92,7 +92,7 @@ void Image3DOverlay::render(RenderArgs* args) {
|
|||
|
||||
batch->setModelTransform(transform);
|
||||
batch->setResourceTexture(0, _texture->getGPUTexture());
|
||||
|
||||
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(
|
||||
*batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight,
|
||||
glm::vec4(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha)
|
||||
|
|
|
@ -54,17 +54,20 @@ void Line3DOverlay::render(RenderArgs* args) {
|
|||
if (batch) {
|
||||
batch->setModelTransform(_transform);
|
||||
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
geometryCache->bindSimpleProgram(*batch, false, false, true, true);
|
||||
if (getIsDashedLine()) {
|
||||
// TODO: add support for color to renderDashedLine()
|
||||
DependencyManager::get<GeometryCache>()->renderDashedLine(*batch, _start, _end, colorv4, _geometryCacheID);
|
||||
geometryCache->renderDashedLine(*batch, _start, _end, colorv4, _geometryCacheID);
|
||||
} else {
|
||||
DependencyManager::get<GeometryCache>()->renderLine(*batch, _start, _end, colorv4, _geometryCacheID);
|
||||
|
||||
geometryCache->renderLine(*batch, _start, _end, colorv4, _geometryCacheID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const render::ShapeKey Line3DOverlay::getShapeKey() {
|
||||
auto builder = render::ShapeKey::Builder().withoutCullFace();
|
||||
auto builder = render::ShapeKey::Builder().withOwnPipeline();
|
||||
if (getAlpha() != 1.0f) {
|
||||
builder.withTranslucent();
|
||||
}
|
||||
|
|
|
@ -53,13 +53,15 @@ void Rectangle3DOverlay::render(RenderArgs* args) {
|
|||
transform.setRotation(rotation);
|
||||
|
||||
batch->setModelTransform(transform);
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
|
||||
if (getIsSolid()) {
|
||||
glm::vec3 topLeft(-halfDimensions.x, -halfDimensions.y, 0.0f);
|
||||
glm::vec3 bottomRight(halfDimensions.x, halfDimensions.y, 0.0f);
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(*batch, topLeft, bottomRight, rectangleColor);
|
||||
geometryCache->bindSimpleProgram(*batch);
|
||||
geometryCache->renderQuad(*batch, topLeft, bottomRight, rectangleColor);
|
||||
} else {
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
geometryCache->bindSimpleProgram(*batch, false, false, true, true);
|
||||
if (getIsDashedLine()) {
|
||||
glm::vec3 point1(-halfDimensions.x, -halfDimensions.y, 0.0f);
|
||||
glm::vec3 point2(halfDimensions.x, -halfDimensions.y, 0.0f);
|
||||
|
@ -89,7 +91,7 @@ void Rectangle3DOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
|
||||
const render::ShapeKey Rectangle3DOverlay::getShapeKey() {
|
||||
auto builder = render::ShapeKey::Builder();
|
||||
auto builder = render::ShapeKey::Builder().withOwnPipeline();
|
||||
if (getAlpha() != 1.0f) {
|
||||
builder.withTranslucent();
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ void Sphere3DOverlay::render(RenderArgs* args) {
|
|||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
auto pipeline = args->_pipeline;
|
||||
if (!pipeline) {
|
||||
pipeline = geometryCache->getShapePipeline();
|
||||
pipeline = _isSolid ? geometryCache->getShapePipeline() : geometryCache->getWireShapePipeline();
|
||||
}
|
||||
|
||||
if (_isSolid) {
|
||||
|
@ -58,10 +58,13 @@ void Sphere3DOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
|
||||
const render::ShapeKey Sphere3DOverlay::getShapeKey() {
|
||||
auto builder = render::ShapeKey::Builder();
|
||||
auto builder = render::ShapeKey::Builder().withOwnPipeline();
|
||||
if (getAlpha() != 1.0f) {
|
||||
builder.withTranslucent();
|
||||
}
|
||||
if (!getIsSolid()) {
|
||||
builder.withUnlit().withDepthBias();
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
|
|
@ -100,7 +100,9 @@ void Web3DOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
|
||||
batch.setModelTransform(transform);
|
||||
DependencyManager::get<GeometryCache>()->renderQuad(batch, halfSize * -1.0f, halfSize, vec2(0), vec2(1), color);
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
geometryCache->bindSimpleProgram(batch, true, false, true, false);
|
||||
geometryCache->renderQuad(batch, halfSize * -1.0f, halfSize, vec2(0), vec2(1), color);
|
||||
batch.setResourceTexture(0, args->_whiteTexture); // restore default white color after me
|
||||
}
|
||||
|
||||
|
|
|
@ -425,7 +425,7 @@ glm::mat4 CompositorHelper::getReticleTransform(const glm::mat4& eyePose, const
|
|||
d = glm::normalize(overlaySurfacePoint);
|
||||
}
|
||||
reticlePosition = headPosition + (d * getReticleDepth());
|
||||
quat reticleOrientation = glm::quat_cast(_currentDisplayPlugin->getHeadPose());
|
||||
quat reticleOrientation = cancelOutRoll(glm::quat_cast(_currentDisplayPlugin->getHeadPose()));
|
||||
vec3 reticleScale = vec3(Cursor::Manager::instance().getScale() * reticleSize * getReticleDepth());
|
||||
return glm::inverse(eyePose) * createMatFromScaleQuatAndPos(reticleScale, reticleOrientation, reticlePosition);
|
||||
} else {
|
||||
|
|
|
@ -696,6 +696,7 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& info) {
|
|||
QVector<glm::mat4> localTransforms;
|
||||
const FBXGeometry& geometry = _model->getFBXGeometry();
|
||||
int numberOfMeshes = geometry.meshes.size();
|
||||
int totalNumVertices = 0;
|
||||
for (int i = 0; i < numberOfMeshes; i++) {
|
||||
const FBXMesh& mesh = geometry.meshes.at(i);
|
||||
if (mesh.clusters.size() > 0) {
|
||||
|
@ -706,6 +707,13 @@ void RenderableModelEntityItem::computeShapeInfo(ShapeInfo& info) {
|
|||
glm::mat4 identity;
|
||||
localTransforms.push_back(identity);
|
||||
}
|
||||
totalNumVertices += mesh.vertices.size();
|
||||
}
|
||||
const int MAX_VERTICES_PER_STATIC_MESH = 1e6;
|
||||
if (totalNumVertices > MAX_VERTICES_PER_STATIC_MESH) {
|
||||
qWarning() << "model" << getModelURL() << "has too many vertices" << totalNumVertices << "and will collide as a box.";
|
||||
info.setParams(SHAPE_TYPE_BOX, 0.5f * dimensions);
|
||||
return;
|
||||
}
|
||||
|
||||
updateModelBounds();
|
||||
|
|
|
@ -191,9 +191,11 @@ QUuid EntityScriptingInterface::addEntity(const EntityItemProperties& properties
|
|||
if (success) {
|
||||
emit debitEnergySource(cost);
|
||||
queueEntityMessage(PacketType::EntityAdd, id, propertiesWithSimID);
|
||||
}
|
||||
|
||||
return id;
|
||||
return id;
|
||||
} else {
|
||||
return QUuid();
|
||||
}
|
||||
}
|
||||
|
||||
QUuid EntityScriptingInterface::addModelEntity(const QString& name, const QString& modelUrl, const glm::vec3& position) {
|
||||
|
|
|
@ -320,6 +320,11 @@ EntityItemPointer EntityTree::addEntity(const EntityItemID& entityID, const Enti
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (!properties.getClientOnly() && getIsClient() &&
|
||||
!nodeList->getThisNodeCanRez() && !nodeList->getThisNodeCanRezTmp()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool recordCreationTime = false;
|
||||
if (props.getCreated() == UNKNOWN_CREATED_TIME) {
|
||||
// the entity's creation time was not specified in properties, which means this is a NEW entity
|
||||
|
|
|
@ -6,6 +6,14 @@
|
|||
#include <QtOpenGL/QGL>
|
||||
#include <QOpenGLContext>
|
||||
#include <QtCore/QRegularExpression>
|
||||
#include <QtCore/QProcessEnvironment>
|
||||
#ifdef DEBUG
|
||||
static bool enableDebug = true;
|
||||
#else
|
||||
static const QString DEBUG_FLAG("HIFI_ENABLE_OPENGL_45");
|
||||
static bool enableDebug = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
|
||||
#endif
|
||||
|
||||
|
||||
const QSurfaceFormat& getDefaultOpenGLSurfaceFormat() {
|
||||
static QSurfaceFormat format;
|
||||
|
@ -15,9 +23,9 @@ const QSurfaceFormat& getDefaultOpenGLSurfaceFormat() {
|
|||
format.setDepthBufferSize(DEFAULT_GL_DEPTH_BUFFER_BITS);
|
||||
format.setStencilBufferSize(DEFAULT_GL_STENCIL_BUFFER_BITS);
|
||||
setGLFormatVersion(format);
|
||||
#ifdef DEBUG
|
||||
format.setOption(QSurfaceFormat::DebugContext);
|
||||
#endif
|
||||
if (enableDebug) {
|
||||
format.setOption(QSurfaceFormat::DebugContext);
|
||||
}
|
||||
format.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
|
||||
QSurfaceFormat::setDefaultFormat(format);
|
||||
});
|
||||
|
|
|
@ -12,23 +12,30 @@
|
|||
|
||||
#include "OffscreenGLCanvas.h"
|
||||
|
||||
#include <QtCore/QProcessEnvironment>
|
||||
#include <QtGui/QOffscreenSurface>
|
||||
#include <QtGui/QOpenGLDebugLogger>
|
||||
#include <QtGui/QOpenGLContext>
|
||||
|
||||
#include "GLHelpers.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
static bool enableDebugLogger = true;
|
||||
#else
|
||||
static const QString DEBUG_FLAG("HIFI_ENABLE_OPENGL_45");
|
||||
static bool enableDebugLogger = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
|
||||
#endif
|
||||
|
||||
|
||||
OffscreenGLCanvas::OffscreenGLCanvas() : _context(new QOpenGLContext), _offscreenSurface(new QOffscreenSurface){
|
||||
}
|
||||
|
||||
OffscreenGLCanvas::~OffscreenGLCanvas() {
|
||||
#ifdef DEBUG
|
||||
if (_logger) {
|
||||
makeCurrent();
|
||||
delete _logger;
|
||||
_logger = nullptr;
|
||||
}
|
||||
#endif
|
||||
_context->doneCurrent();
|
||||
}
|
||||
|
||||
|
@ -60,7 +67,7 @@ bool OffscreenGLCanvas::makeCurrent() {
|
|||
qDebug() << "GL Renderer: " << QString((const char*) glGetString(GL_RENDERER));
|
||||
});
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
if (result && !_logger) {
|
||||
_logger = new QOpenGLDebugLogger(this);
|
||||
if (_logger->initialize()) {
|
||||
|
@ -71,7 +78,6 @@ bool OffscreenGLCanvas::makeCurrent() {
|
|||
_logger->startLogging(QOpenGLDebugLogger::LoggingMode::SynchronousLogging);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -36,10 +36,7 @@ protected:
|
|||
std::once_flag _reportOnce;
|
||||
QOpenGLContext* _context;
|
||||
QOffscreenSurface* _offscreenSurface;
|
||||
#ifdef DEBUG
|
||||
QOpenGLDebugLogger* _logger{ nullptr };
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#endif // hifi_OffscreenGLCanvas_h
|
||||
|
|
|
@ -416,7 +416,7 @@ void OffscreenQmlSurface::create(QOpenGLContext* shareContext) {
|
|||
_updateTimer.start();
|
||||
}
|
||||
|
||||
void OffscreenQmlSurface::resize(const QSize& newSize_) {
|
||||
void OffscreenQmlSurface::resize(const QSize& newSize_, bool forceResize) {
|
||||
|
||||
if (!_renderer || !_renderer->_quickWindow) {
|
||||
return;
|
||||
|
@ -435,7 +435,7 @@ void OffscreenQmlSurface::resize(const QSize& newSize_) {
|
|||
}
|
||||
|
||||
QSize currentSize = _renderer->_quickWindow->geometry().size();
|
||||
if (newSize == currentSize) {
|
||||
if (newSize == currentSize && !forceResize) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
using MouseTranslator = std::function<QPoint(const QPointF&)>;
|
||||
|
||||
virtual void create(QOpenGLContext* context);
|
||||
void resize(const QSize& size);
|
||||
void resize(const QSize& size, bool forceResize = false);
|
||||
QSize size() const;
|
||||
Q_INVOKABLE QObject* load(const QUrl& qmlSource, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {});
|
||||
Q_INVOKABLE QObject* load(const QString& qmlSourceFile, std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}) {
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
#include "../gl41/GL41Backend.h"
|
||||
#include "../gl45/GL45Backend.h"
|
||||
|
||||
#if defined(NSIGHT_FOUND)
|
||||
#include "nvToolsExt.h"
|
||||
|
@ -31,25 +32,21 @@
|
|||
using namespace gpu;
|
||||
using namespace gpu::gl;
|
||||
|
||||
|
||||
static const QString DEBUG_FLAG("HIFI_ENABLE_OPENGL_45");
|
||||
bool enableOpenGL45 = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
|
||||
static bool enableOpenGL45 = QProcessEnvironment::systemEnvironment().contains(DEBUG_FLAG);
|
||||
|
||||
Backend* GLBackend::createBackend() {
|
||||
|
||||
#if 0
|
||||
// FIXME provide a mechanism to override the backend for testing
|
||||
// Where the gpuContext is initialized and where the TRUE Backend is created and assigned
|
||||
auto version = QOpenGLContextWrapper::currentContextVersion();
|
||||
GLBackend* result;
|
||||
if (enableOpenGL45 && version >= 0x0405) {
|
||||
result = new gpu::gl45::GLBackend;
|
||||
qDebug() << "Using OpenGL 4.5 backend";
|
||||
result = new gpu::gl45::GL45Backend();
|
||||
} else {
|
||||
result = new gpu::gl41::GLBackend;
|
||||
qDebug() << "Using OpenGL 4.1 backend";
|
||||
result = new gpu::gl41::GL41Backend();
|
||||
}
|
||||
#else
|
||||
GLBackend* result = new gpu::gl41::GL41Backend;
|
||||
#endif
|
||||
result->initInput();
|
||||
result->initTransform();
|
||||
gl::GLTexture::initTextureTransferHelper();
|
||||
|
|
|
@ -186,7 +186,7 @@ protected:
|
|||
virtual void killInput() final;
|
||||
virtual void syncInputStateCache() final;
|
||||
virtual void resetInputStage() final;
|
||||
virtual void updateInput() = 0;
|
||||
virtual void updateInput();
|
||||
|
||||
struct InputStageState {
|
||||
bool _invalidFormat { true };
|
||||
|
|
|
@ -150,3 +150,176 @@ void GLBackend::do_setIndirectBuffer(Batch& batch, size_t paramOffset) {
|
|||
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
|
||||
// Core 41 doesn't expose the features to really separate the vertex format from the vertex buffers binding
|
||||
// Core 43 does :)
|
||||
// FIXME crashing problem with glVertexBindingDivisor / glVertexAttribFormat
|
||||
// Once resolved, break this up into the GL 4.1 and 4.5 backends
|
||||
#if 1 || (GPU_INPUT_PROFILE == GPU_CORE_41)
|
||||
#define NO_SUPPORT_VERTEX_ATTRIB_FORMAT
|
||||
#else
|
||||
#define SUPPORT_VERTEX_ATTRIB_FORMAT
|
||||
#endif
|
||||
|
||||
void GLBackend::updateInput() {
|
||||
#if defined(SUPPORT_VERTEX_ATTRIB_FORMAT)
|
||||
if (_input._invalidFormat) {
|
||||
|
||||
InputStageState::ActivationCache newActivation;
|
||||
|
||||
// Assign the vertex format required
|
||||
if (_input._format) {
|
||||
for (auto& it : _input._format->getAttributes()) {
|
||||
const Stream::Attribute& attrib = (it).second;
|
||||
|
||||
GLuint slot = attrib._slot;
|
||||
GLuint count = attrib._element.getLocationScalarCount();
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
GLenum type = _elementTypeToGL41Type[attrib._element.getType()];
|
||||
GLuint offset = attrib._offset;;
|
||||
GLboolean isNormalized = attrib._element.isNormalized();
|
||||
|
||||
GLenum perLocationSize = attrib._element.getLocationSize();
|
||||
|
||||
for (size_t locNum = 0; locNum < locationCount; ++locNum) {
|
||||
newActivation.set(slot + locNum);
|
||||
glVertexAttribFormat(slot + locNum, count, type, isNormalized, offset + locNum * perLocationSize);
|
||||
glVertexAttribBinding(slot + locNum, attrib._channel);
|
||||
}
|
||||
glVertexBindingDivisor(attrib._channel, attrib._frequency);
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
// Manage Activation what was and what is expected now
|
||||
for (size_t i = 0; i < newActivation.size(); i++) {
|
||||
bool newState = newActivation[i];
|
||||
if (newState != _input._attributeActivation[i]) {
|
||||
if (newState) {
|
||||
glEnableVertexAttribArray(i);
|
||||
} else {
|
||||
glDisableVertexAttribArray(i);
|
||||
}
|
||||
_input._attributeActivation.flip(i);
|
||||
}
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
|
||||
_input._invalidFormat = false;
|
||||
_stats._ISNumFormatChanges++;
|
||||
}
|
||||
|
||||
if (_input._invalidBuffers.any()) {
|
||||
int numBuffers = _input._buffers.size();
|
||||
auto buffer = _input._buffers.data();
|
||||
auto vbo = _input._bufferVBOs.data();
|
||||
auto offset = _input._bufferOffsets.data();
|
||||
auto stride = _input._bufferStrides.data();
|
||||
|
||||
for (int bufferNum = 0; bufferNum < numBuffers; bufferNum++) {
|
||||
if (_input._invalidBuffers.test(bufferNum)) {
|
||||
glBindVertexBuffer(bufferNum, (*vbo), (*offset), (*stride));
|
||||
}
|
||||
buffer++;
|
||||
vbo++;
|
||||
offset++;
|
||||
stride++;
|
||||
}
|
||||
_input._invalidBuffers.reset();
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
#else
|
||||
if (_input._invalidFormat || _input._invalidBuffers.any()) {
|
||||
|
||||
if (_input._invalidFormat) {
|
||||
InputStageState::ActivationCache newActivation;
|
||||
|
||||
_stats._ISNumFormatChanges++;
|
||||
|
||||
// Check expected activation
|
||||
if (_input._format) {
|
||||
for (auto& it : _input._format->getAttributes()) {
|
||||
const Stream::Attribute& attrib = (it).second;
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
for (int i = 0; i < locationCount; ++i) {
|
||||
newActivation.set(attrib._slot + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Manage Activation what was and what is expected now
|
||||
for (unsigned int i = 0; i < newActivation.size(); i++) {
|
||||
bool newState = newActivation[i];
|
||||
if (newState != _input._attributeActivation[i]) {
|
||||
|
||||
if (newState) {
|
||||
glEnableVertexAttribArray(i);
|
||||
} else {
|
||||
glDisableVertexAttribArray(i);
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
|
||||
_input._attributeActivation.flip(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// now we need to bind the buffers and assign the attrib pointers
|
||||
if (_input._format) {
|
||||
const Buffers& buffers = _input._buffers;
|
||||
const Offsets& offsets = _input._bufferOffsets;
|
||||
const Offsets& strides = _input._bufferStrides;
|
||||
|
||||
const Stream::Format::AttributeMap& attributes = _input._format->getAttributes();
|
||||
auto& inputChannels = _input._format->getChannels();
|
||||
_stats._ISNumInputBufferChanges++;
|
||||
|
||||
GLuint boundVBO = 0;
|
||||
for (auto& channelIt : inputChannels) {
|
||||
const Stream::Format::ChannelMap::value_type::second_type& channel = (channelIt).second;
|
||||
if ((channelIt).first < buffers.size()) {
|
||||
int bufferNum = (channelIt).first;
|
||||
|
||||
if (_input._invalidBuffers.test(bufferNum) || _input._invalidFormat) {
|
||||
// GLuint vbo = gpu::GL41Backend::getBufferID((*buffers[bufferNum]));
|
||||
GLuint vbo = _input._bufferVBOs[bufferNum];
|
||||
if (boundVBO != vbo) {
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||
(void)CHECK_GL_ERROR();
|
||||
boundVBO = vbo;
|
||||
}
|
||||
_input._invalidBuffers[bufferNum] = false;
|
||||
|
||||
for (unsigned int i = 0; i < channel._slots.size(); i++) {
|
||||
const Stream::Attribute& attrib = attributes.at(channel._slots[i]);
|
||||
GLuint slot = attrib._slot;
|
||||
GLuint count = attrib._element.getLocationScalarCount();
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
GLenum type = gl::ELEMENT_TYPE_TO_GL[attrib._element.getType()];
|
||||
// GLenum perLocationStride = strides[bufferNum];
|
||||
GLenum perLocationStride = attrib._element.getLocationSize();
|
||||
GLuint stride = (GLuint)strides[bufferNum];
|
||||
GLuint pointer = (GLuint)(attrib._offset + offsets[bufferNum]);
|
||||
GLboolean isNormalized = attrib._element.isNormalized();
|
||||
|
||||
for (size_t locNum = 0; locNum < locationCount; ++locNum) {
|
||||
glVertexAttribPointer(slot + (GLuint)locNum, count, type, isNormalized, stride,
|
||||
reinterpret_cast<GLvoid*>(pointer + perLocationStride * (GLuint)locNum));
|
||||
glVertexAttribDivisor(slot + (GLuint)locNum, attrib._frequency);
|
||||
}
|
||||
|
||||
// TODO: Support properly the IAttrib version
|
||||
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// everything format related should be in sync now
|
||||
_input._invalidFormat = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -13,173 +13,7 @@
|
|||
using namespace gpu;
|
||||
using namespace gpu::gl41;
|
||||
|
||||
// Core 41 doesn't expose the features to really separate the vertex format from the vertex buffers binding
|
||||
// Core 43 does :)
|
||||
// FIXME crashing problem with glVertexBindingDivisor / glVertexAttribFormat
|
||||
#if 1 || (GPU_INPUT_PROFILE == GPU_CORE_41)
|
||||
#define NO_SUPPORT_VERTEX_ATTRIB_FORMAT
|
||||
#else
|
||||
#define SUPPORT_VERTEX_ATTRIB_FORMAT
|
||||
#endif
|
||||
|
||||
void GL41Backend::updateInput() {
|
||||
#if defined(SUPPORT_VERTEX_ATTRIB_FORMAT)
|
||||
if (_input._invalidFormat) {
|
||||
|
||||
InputStageState::ActivationCache newActivation;
|
||||
|
||||
// Assign the vertex format required
|
||||
if (_input._format) {
|
||||
for (auto& it : _input._format->getAttributes()) {
|
||||
const Stream::Attribute& attrib = (it).second;
|
||||
|
||||
GLuint slot = attrib._slot;
|
||||
GLuint count = attrib._element.getLocationScalarCount();
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
GLenum type = _elementTypeToGL41Type[attrib._element.getType()];
|
||||
GLuint offset = attrib._offset;;
|
||||
GLboolean isNormalized = attrib._element.isNormalized();
|
||||
|
||||
GLenum perLocationSize = attrib._element.getLocationSize();
|
||||
|
||||
for (size_t locNum = 0; locNum < locationCount; ++locNum) {
|
||||
newActivation.set(slot + locNum);
|
||||
glVertexAttribFormat(slot + locNum, count, type, isNormalized, offset + locNum * perLocationSize);
|
||||
glVertexAttribBinding(slot + locNum, attrib._channel);
|
||||
}
|
||||
glVertexBindingDivisor(attrib._channel, attrib._frequency);
|
||||
}
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
// Manage Activation what was and what is expected now
|
||||
for (size_t i = 0; i < newActivation.size(); i++) {
|
||||
bool newState = newActivation[i];
|
||||
if (newState != _input._attributeActivation[i]) {
|
||||
if (newState) {
|
||||
glEnableVertexAttribArray(i);
|
||||
} else {
|
||||
glDisableVertexAttribArray(i);
|
||||
}
|
||||
_input._attributeActivation.flip(i);
|
||||
}
|
||||
}
|
||||
(void) CHECK_GL_ERROR();
|
||||
|
||||
_input._invalidFormat = false;
|
||||
_stats._ISNumFormatChanges++;
|
||||
}
|
||||
|
||||
if (_input._invalidBuffers.any()) {
|
||||
int numBuffers = _input._buffers.size();
|
||||
auto buffer = _input._buffers.data();
|
||||
auto vbo = _input._bufferVBOs.data();
|
||||
auto offset = _input._bufferOffsets.data();
|
||||
auto stride = _input._bufferStrides.data();
|
||||
|
||||
for (int bufferNum = 0; bufferNum < numBuffers; bufferNum++) {
|
||||
if (_input._invalidBuffers.test(bufferNum)) {
|
||||
glBindVertexBuffer(bufferNum, (*vbo), (*offset), (*stride));
|
||||
}
|
||||
buffer++;
|
||||
vbo++;
|
||||
offset++;
|
||||
stride++;
|
||||
}
|
||||
_input._invalidBuffers.reset();
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
#else
|
||||
if (_input._invalidFormat || _input._invalidBuffers.any()) {
|
||||
|
||||
if (_input._invalidFormat) {
|
||||
InputStageState::ActivationCache newActivation;
|
||||
|
||||
_stats._ISNumFormatChanges++;
|
||||
|
||||
// Check expected activation
|
||||
if (_input._format) {
|
||||
for (auto& it : _input._format->getAttributes()) {
|
||||
const Stream::Attribute& attrib = (it).second;
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
for (int i = 0; i < locationCount; ++i) {
|
||||
newActivation.set(attrib._slot + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Manage Activation what was and what is expected now
|
||||
for (unsigned int i = 0; i < newActivation.size(); i++) {
|
||||
bool newState = newActivation[i];
|
||||
if (newState != _input._attributeActivation[i]) {
|
||||
|
||||
if (newState) {
|
||||
glEnableVertexAttribArray(i);
|
||||
} else {
|
||||
glDisableVertexAttribArray(i);
|
||||
}
|
||||
(void) CHECK_GL_ERROR();
|
||||
|
||||
_input._attributeActivation.flip(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// now we need to bind the buffers and assign the attrib pointers
|
||||
if (_input._format) {
|
||||
const Buffers& buffers = _input._buffers;
|
||||
const Offsets& offsets = _input._bufferOffsets;
|
||||
const Offsets& strides = _input._bufferStrides;
|
||||
|
||||
const Stream::Format::AttributeMap& attributes = _input._format->getAttributes();
|
||||
auto& inputChannels = _input._format->getChannels();
|
||||
_stats._ISNumInputBufferChanges++;
|
||||
|
||||
GLuint boundVBO = 0;
|
||||
for (auto& channelIt : inputChannels) {
|
||||
const Stream::Format::ChannelMap::value_type::second_type& channel = (channelIt).second;
|
||||
if ((channelIt).first < buffers.size()) {
|
||||
int bufferNum = (channelIt).first;
|
||||
|
||||
if (_input._invalidBuffers.test(bufferNum) || _input._invalidFormat) {
|
||||
// GLuint vbo = gpu::GL41Backend::getBufferID((*buffers[bufferNum]));
|
||||
GLuint vbo = _input._bufferVBOs[bufferNum];
|
||||
if (boundVBO != vbo) {
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||
(void) CHECK_GL_ERROR();
|
||||
boundVBO = vbo;
|
||||
}
|
||||
_input._invalidBuffers[bufferNum] = false;
|
||||
|
||||
for (unsigned int i = 0; i < channel._slots.size(); i++) {
|
||||
const Stream::Attribute& attrib = attributes.at(channel._slots[i]);
|
||||
GLuint slot = attrib._slot;
|
||||
GLuint count = attrib._element.getLocationScalarCount();
|
||||
uint8_t locationCount = attrib._element.getLocationCount();
|
||||
GLenum type = gl::ELEMENT_TYPE_TO_GL[attrib._element.getType()];
|
||||
// GLenum perLocationStride = strides[bufferNum];
|
||||
GLenum perLocationStride = attrib._element.getLocationSize();
|
||||
GLuint stride = (GLuint)strides[bufferNum];
|
||||
GLuint pointer = (GLuint)(attrib._offset + offsets[bufferNum]);
|
||||
GLboolean isNormalized = attrib._element.isNormalized();
|
||||
|
||||
for (size_t locNum = 0; locNum < locationCount; ++locNum) {
|
||||
glVertexAttribPointer(slot + (GLuint)locNum, count, type, isNormalized, stride,
|
||||
reinterpret_cast<GLvoid*>(pointer + perLocationStride * (GLuint)locNum));
|
||||
glVertexAttribDivisor(slot + (GLuint)locNum, attrib._frequency);
|
||||
}
|
||||
|
||||
// TODO: Support properly the IAttrib version
|
||||
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// everything format related should be in sync now
|
||||
_input._invalidFormat = false;
|
||||
}
|
||||
#endif
|
||||
Parent::updateInput();
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ using namespace gpu;
|
|||
using namespace gpu::gl41;
|
||||
|
||||
class GL41Query : public gpu::gl::GLQuery {
|
||||
using Parent = gpu::gl::GLBuffer;
|
||||
using Parent = gpu::gl::GLQuery;
|
||||
public:
|
||||
static GLuint allocateQuery() {
|
||||
GLuint result;
|
||||
|
@ -25,7 +25,7 @@ public:
|
|||
}
|
||||
|
||||
GL41Query(const Query& query)
|
||||
: gl::GLQuery(query, allocateQuery()) { }
|
||||
: Parent(query, allocateQuery()) { }
|
||||
};
|
||||
|
||||
gl::GLQuery* GL41Backend::syncGPUObject(const Query& query) {
|
||||
|
|
149
libraries/gpu-gl/src/gpu/gl45/GL45Backend.cpp
Normal file
|
@ -0,0 +1,149 @@
|
|||
//
|
||||
// Created by Sam Gateau on 10/27/2014.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
#include <list>
|
||||
#include <functional>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
Q_LOGGING_CATEGORY(gpugl45logging, "hifi.gpu.gl45")
|
||||
|
||||
using namespace gpu;
|
||||
using namespace gpu::gl45;
|
||||
|
||||
void GL45Backend::do_draw(Batch& batch, size_t paramOffset) {
|
||||
Primitive primitiveType = (Primitive)batch._params[paramOffset + 2]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[primitiveType];
|
||||
uint32 numVertices = batch._params[paramOffset + 1]._uint;
|
||||
uint32 startVertex = batch._params[paramOffset + 0]._uint;
|
||||
|
||||
if (isStereo()) {
|
||||
setupStereoSide(0);
|
||||
glDrawArrays(mode, startVertex, numVertices);
|
||||
setupStereoSide(1);
|
||||
glDrawArrays(mode, startVertex, numVertices);
|
||||
|
||||
_stats._DSNumTriangles += 2 * numVertices / 3;
|
||||
_stats._DSNumDrawcalls += 2;
|
||||
|
||||
} else {
|
||||
glDrawArrays(mode, startVertex, numVertices);
|
||||
_stats._DSNumTriangles += numVertices / 3;
|
||||
_stats._DSNumDrawcalls++;
|
||||
}
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::do_drawIndexed(Batch& batch, size_t paramOffset) {
|
||||
Primitive primitiveType = (Primitive)batch._params[paramOffset + 2]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[primitiveType];
|
||||
uint32 numIndices = batch._params[paramOffset + 1]._uint;
|
||||
uint32 startIndex = batch._params[paramOffset + 0]._uint;
|
||||
|
||||
GLenum glType = gl::ELEMENT_TYPE_TO_GL[_input._indexBufferType];
|
||||
|
||||
auto typeByteSize = TYPE_SIZE[_input._indexBufferType];
|
||||
GLvoid* indexBufferByteOffset = reinterpret_cast<GLvoid*>(startIndex * typeByteSize + _input._indexBufferOffset);
|
||||
|
||||
if (isStereo()) {
|
||||
setupStereoSide(0);
|
||||
glDrawElements(mode, numIndices, glType, indexBufferByteOffset);
|
||||
setupStereoSide(1);
|
||||
glDrawElements(mode, numIndices, glType, indexBufferByteOffset);
|
||||
|
||||
_stats._DSNumTriangles += 2 * numIndices / 3;
|
||||
_stats._DSNumDrawcalls += 2;
|
||||
} else {
|
||||
glDrawElements(mode, numIndices, glType, indexBufferByteOffset);
|
||||
_stats._DSNumTriangles += numIndices / 3;
|
||||
_stats._DSNumDrawcalls++;
|
||||
}
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::do_drawInstanced(Batch& batch, size_t paramOffset) {
|
||||
GLint numInstances = batch._params[paramOffset + 4]._uint;
|
||||
Primitive primitiveType = (Primitive)batch._params[paramOffset + 3]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[primitiveType];
|
||||
uint32 numVertices = batch._params[paramOffset + 2]._uint;
|
||||
uint32 startVertex = batch._params[paramOffset + 1]._uint;
|
||||
|
||||
|
||||
if (isStereo()) {
|
||||
GLint trueNumInstances = 2 * numInstances;
|
||||
|
||||
setupStereoSide(0);
|
||||
glDrawArraysInstanced(mode, startVertex, numVertices, numInstances);
|
||||
setupStereoSide(1);
|
||||
glDrawArraysInstanced(mode, startVertex, numVertices, numInstances);
|
||||
|
||||
_stats._DSNumTriangles += (trueNumInstances * numVertices) / 3;
|
||||
_stats._DSNumDrawcalls += trueNumInstances;
|
||||
} else {
|
||||
glDrawArraysInstanced(mode, startVertex, numVertices, numInstances);
|
||||
_stats._DSNumTriangles += (numInstances * numVertices) / 3;
|
||||
_stats._DSNumDrawcalls += numInstances;
|
||||
}
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::do_drawIndexedInstanced(Batch& batch, size_t paramOffset) {
|
||||
GLint numInstances = batch._params[paramOffset + 4]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[(Primitive)batch._params[paramOffset + 3]._uint];
|
||||
uint32 numIndices = batch._params[paramOffset + 2]._uint;
|
||||
uint32 startIndex = batch._params[paramOffset + 1]._uint;
|
||||
uint32 startInstance = batch._params[paramOffset + 0]._uint;
|
||||
GLenum glType = gl::ELEMENT_TYPE_TO_GL[_input._indexBufferType];
|
||||
auto typeByteSize = TYPE_SIZE[_input._indexBufferType];
|
||||
GLvoid* indexBufferByteOffset = reinterpret_cast<GLvoid*>(startIndex * typeByteSize + _input._indexBufferOffset);
|
||||
|
||||
if (isStereo()) {
|
||||
GLint trueNumInstances = 2 * numInstances;
|
||||
setupStereoSide(0);
|
||||
glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance);
|
||||
setupStereoSide(1);
|
||||
glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance);
|
||||
_stats._DSNumTriangles += (trueNumInstances * numIndices) / 3;
|
||||
_stats._DSNumDrawcalls += trueNumInstances;
|
||||
} else {
|
||||
glDrawElementsInstancedBaseVertexBaseInstance(mode, numIndices, glType, indexBufferByteOffset, numInstances, 0, startInstance);
|
||||
_stats._DSNumTriangles += (numInstances * numIndices) / 3;
|
||||
_stats._DSNumDrawcalls += numInstances;
|
||||
}
|
||||
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::do_multiDrawIndirect(Batch& batch, size_t paramOffset) {
|
||||
uint commandCount = batch._params[paramOffset + 0]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[(Primitive)batch._params[paramOffset + 1]._uint];
|
||||
glMultiDrawArraysIndirect(mode, reinterpret_cast<GLvoid*>(_input._indirectBufferOffset), commandCount, (GLsizei)_input._indirectBufferStride);
|
||||
_stats._DSNumDrawcalls += commandCount;
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::do_multiDrawIndexedIndirect(Batch& batch, size_t paramOffset) {
|
||||
uint commandCount = batch._params[paramOffset + 0]._uint;
|
||||
GLenum mode = gl::PRIMITIVE_TO_GL[(Primitive)batch._params[paramOffset + 1]._uint];
|
||||
GLenum indexType = gl::ELEMENT_TYPE_TO_GL[_input._indexBufferType];
|
||||
glMultiDrawElementsIndirect(mode, indexType, reinterpret_cast<GLvoid*>(_input._indirectBufferOffset), commandCount, (GLsizei)_input._indirectBufferStride);
|
||||
_stats._DSNumDrawcalls += commandCount;
|
||||
_stats._DSNumAPIDrawcalls++;
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
85
libraries/gpu-gl/src/gpu/gl45/GL45Backend.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
//
|
||||
// GL45Backend.h
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 10/27/2014.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#ifndef hifi_gpu_45_GL45Backend_h
|
||||
#define hifi_gpu_45_GL45Backend_h
|
||||
|
||||
#include "../gl/GLBackend.h"
|
||||
#include "../gl/GLTexture.h"
|
||||
|
||||
namespace gpu { namespace gl45 {
|
||||
|
||||
class GL45Backend : public gl::GLBackend {
|
||||
using Parent = gl::GLBackend;
|
||||
// Context Backend static interface required
|
||||
friend class Context;
|
||||
|
||||
public:
|
||||
explicit GL45Backend(bool syncCache) : Parent(syncCache) {}
|
||||
GL45Backend() : Parent() {}
|
||||
|
||||
class GL45Texture : public gpu::gl::GLTexture {
|
||||
using Parent = gpu::gl::GLTexture;
|
||||
GLuint allocate(const Texture& texture);
|
||||
public:
|
||||
GL45Texture(const Texture& texture, bool transferrable);
|
||||
GL45Texture(const Texture& texture, GLTexture* original);
|
||||
|
||||
protected:
|
||||
void transferMip(uint16_t mipLevel, uint8_t face = 0) const;
|
||||
void allocateStorage() const override;
|
||||
void updateSize() const override;
|
||||
void transfer() const override;
|
||||
void syncSampler() const override;
|
||||
void generateMips() const override;
|
||||
void withPreservedTexture(std::function<void()> f) const override;
|
||||
};
|
||||
|
||||
|
||||
protected:
|
||||
GLuint getFramebufferID(const FramebufferPointer& framebuffer) override;
|
||||
gl::GLFramebuffer* syncGPUObject(const Framebuffer& framebuffer) override;
|
||||
|
||||
GLuint getBufferID(const Buffer& buffer) override;
|
||||
gl::GLBuffer* syncGPUObject(const Buffer& buffer) override;
|
||||
|
||||
GLuint getTextureID(const TexturePointer& texture, bool needTransfer = true) override;
|
||||
gl::GLTexture* syncGPUObject(const TexturePointer& texture, bool sync = true) override;
|
||||
|
||||
GLuint getQueryID(const QueryPointer& query) override;
|
||||
gl::GLQuery* syncGPUObject(const Query& query) override;
|
||||
|
||||
// Draw Stage
|
||||
void do_draw(Batch& batch, size_t paramOffset) override;
|
||||
void do_drawIndexed(Batch& batch, size_t paramOffset) override;
|
||||
void do_drawInstanced(Batch& batch, size_t paramOffset) override;
|
||||
void do_drawIndexedInstanced(Batch& batch, size_t paramOffset) override;
|
||||
void do_multiDrawIndirect(Batch& batch, size_t paramOffset) override;
|
||||
void do_multiDrawIndexedIndirect(Batch& batch, size_t paramOffset) override;
|
||||
|
||||
// Input Stage
|
||||
void updateInput() override;
|
||||
|
||||
// Synchronize the state cache of this Backend with the actual real state of the GL Context
|
||||
void transferTransformState(const Batch& batch) const override;
|
||||
void initTransform() override;
|
||||
void updateTransform(const Batch& batch);
|
||||
void resetTransformStage();
|
||||
|
||||
// Output stage
|
||||
void do_blit(Batch& batch, size_t paramOffset) override;
|
||||
};
|
||||
|
||||
} }
|
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(gpugl45logging)
|
||||
|
||||
|
||||
#endif
|
50
libraries/gpu-gl/src/gpu/gl45/GL45BackendBuffer.cpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/15
|
||||
// Copyright 2013-2016 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
#include "../gl/GLBuffer.h"
|
||||
|
||||
using namespace gpu;
|
||||
using namespace gpu::gl45;
|
||||
|
||||
class GL45Buffer : public gl::GLBuffer {
|
||||
using Parent = gpu::gl::GLBuffer;
|
||||
static GLuint allocate() {
|
||||
GLuint result;
|
||||
glCreateBuffers(1, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public:
|
||||
GL45Buffer(const Buffer& buffer, GLBuffer* original) : Parent(buffer, allocate()) {
|
||||
glNamedBufferStorage(_buffer, _size, nullptr, GL_DYNAMIC_STORAGE_BIT);
|
||||
if (original && original->_size) {
|
||||
glCopyNamedBufferSubData(original->_buffer, _buffer, 0, 0, std::min(original->_size, _size));
|
||||
}
|
||||
Backend::setGPUObject(buffer, this);
|
||||
}
|
||||
|
||||
void transfer() override {
|
||||
Size offset;
|
||||
Size size;
|
||||
Size currentPage { 0 };
|
||||
auto data = _gpuObject.getSysmem().readData();
|
||||
while (_gpuObject.getNextTransferBlock(offset, size, currentPage)) {
|
||||
glNamedBufferSubData(_buffer, (GLintptr)offset, (GLsizeiptr)size, data + offset);
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
_gpuObject._flags &= ~Buffer::DIRTY;
|
||||
}
|
||||
};
|
||||
|
||||
GLuint GL45Backend::getBufferID(const Buffer& buffer) {
|
||||
return GL45Buffer::getId<GL45Buffer>(buffer);
|
||||
}
|
||||
|
||||
gl::GLBuffer* GL45Backend::syncGPUObject(const Buffer& buffer) {
|
||||
return GL45Buffer::sync<GL45Buffer>(buffer);
|
||||
}
|
18
libraries/gpu-gl/src/gpu/gl45/GL45BackendInput.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
//
|
||||
// GL45BackendInput.cpp
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 3/8/2015.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
|
||||
using namespace gpu;
|
||||
using namespace gpu::gl45;
|
||||
|
||||
void GL45Backend::updateInput() {
|
||||
Parent::updateInput();
|
||||
}
|
145
libraries/gpu-gl/src/gpu/gl45/GL45BackendOutput.cpp
Normal file
|
@ -0,0 +1,145 @@
|
|||
//
|
||||
// GL45BackendTexture.cpp
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 1/19/2015.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
#include "../gl/GLFramebuffer.h"
|
||||
#include "../gl/GLTexture.h"
|
||||
|
||||
#include <QtGui/QImage>
|
||||
|
||||
namespace gpu { namespace gl45 {
|
||||
|
||||
class GL45Framebuffer : public gl::GLFramebuffer {
|
||||
using Parent = gl::GLFramebuffer;
|
||||
static GLuint allocate() {
|
||||
GLuint result;
|
||||
glCreateFramebuffers(1, &result);
|
||||
return result;
|
||||
}
|
||||
public:
|
||||
void update() override {
|
||||
gl::GLTexture* gltexture = nullptr;
|
||||
TexturePointer surface;
|
||||
if (_gpuObject.getColorStamps() != _colorStamps) {
|
||||
if (_gpuObject.hasColor()) {
|
||||
_colorBuffers.clear();
|
||||
static const GLenum colorAttachments[] = {
|
||||
GL_COLOR_ATTACHMENT0,
|
||||
GL_COLOR_ATTACHMENT1,
|
||||
GL_COLOR_ATTACHMENT2,
|
||||
GL_COLOR_ATTACHMENT3,
|
||||
GL_COLOR_ATTACHMENT4,
|
||||
GL_COLOR_ATTACHMENT5,
|
||||
GL_COLOR_ATTACHMENT6,
|
||||
GL_COLOR_ATTACHMENT7,
|
||||
GL_COLOR_ATTACHMENT8,
|
||||
GL_COLOR_ATTACHMENT9,
|
||||
GL_COLOR_ATTACHMENT10,
|
||||
GL_COLOR_ATTACHMENT11,
|
||||
GL_COLOR_ATTACHMENT12,
|
||||
GL_COLOR_ATTACHMENT13,
|
||||
GL_COLOR_ATTACHMENT14,
|
||||
GL_COLOR_ATTACHMENT15 };
|
||||
|
||||
int unit = 0;
|
||||
for (auto& b : _gpuObject.getRenderBuffers()) {
|
||||
surface = b._texture;
|
||||
if (surface) {
|
||||
gltexture = gl::GLTexture::sync<GL45Backend::GL45Texture>(surface, false); // Grab the gltexture and don't transfer
|
||||
} else {
|
||||
gltexture = nullptr;
|
||||
}
|
||||
|
||||
if (gltexture) {
|
||||
glNamedFramebufferTexture(_id, colorAttachments[unit], gltexture->_texture, 0);
|
||||
_colorBuffers.push_back(colorAttachments[unit]);
|
||||
} else {
|
||||
glNamedFramebufferTexture(_id, colorAttachments[unit], 0, 0);
|
||||
}
|
||||
unit++;
|
||||
}
|
||||
}
|
||||
_colorStamps = _gpuObject.getColorStamps();
|
||||
}
|
||||
|
||||
GLenum attachement = GL_DEPTH_STENCIL_ATTACHMENT;
|
||||
if (!_gpuObject.hasStencil()) {
|
||||
attachement = GL_DEPTH_ATTACHMENT;
|
||||
} else if (!_gpuObject.hasDepth()) {
|
||||
attachement = GL_STENCIL_ATTACHMENT;
|
||||
}
|
||||
|
||||
if (_gpuObject.getDepthStamp() != _depthStamp) {
|
||||
auto surface = _gpuObject.getDepthStencilBuffer();
|
||||
if (_gpuObject.hasDepthStencil() && surface) {
|
||||
gltexture = gl::GLTexture::sync<GL45Backend::GL45Texture>(surface, false); // Grab the gltexture and don't transfer
|
||||
}
|
||||
|
||||
if (gltexture) {
|
||||
glNamedFramebufferTexture(_id, attachement, gltexture->_texture, 0);
|
||||
} else {
|
||||
glNamedFramebufferTexture(_id, attachement, 0, 0);
|
||||
}
|
||||
_depthStamp = _gpuObject.getDepthStamp();
|
||||
}
|
||||
|
||||
|
||||
// Last but not least, define where we draw
|
||||
if (!_colorBuffers.empty()) {
|
||||
glNamedFramebufferDrawBuffers(_id, (GLsizei)_colorBuffers.size(), _colorBuffers.data());
|
||||
} else {
|
||||
glNamedFramebufferDrawBuffer(_id, GL_NONE);
|
||||
}
|
||||
|
||||
// Now check for completness
|
||||
_status = glCheckNamedFramebufferStatus(_id, GL_DRAW_FRAMEBUFFER);
|
||||
|
||||
// restore the current framebuffer
|
||||
checkStatus(GL_DRAW_FRAMEBUFFER);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
GL45Framebuffer(const gpu::Framebuffer& framebuffer)
|
||||
: Parent(framebuffer, allocate()) { }
|
||||
};
|
||||
|
||||
gl::GLFramebuffer* GL45Backend::syncGPUObject(const Framebuffer& framebuffer) {
|
||||
return gl::GLFramebuffer::sync<GL45Framebuffer>(framebuffer);
|
||||
}
|
||||
|
||||
GLuint GL45Backend::getFramebufferID(const FramebufferPointer& framebuffer) {
|
||||
return framebuffer ? gl::GLFramebuffer::getId<GL45Framebuffer>(*framebuffer) : 0;
|
||||
}
|
||||
|
||||
void GL45Backend::do_blit(Batch& batch, size_t paramOffset) {
|
||||
auto srcframebuffer = batch._framebuffers.get(batch._params[paramOffset]._uint);
|
||||
Vec4i srcvp;
|
||||
for (auto i = 0; i < 4; ++i) {
|
||||
srcvp[i] = batch._params[paramOffset + 1 + i]._int;
|
||||
}
|
||||
|
||||
auto dstframebuffer = batch._framebuffers.get(batch._params[paramOffset + 5]._uint);
|
||||
Vec4i dstvp;
|
||||
for (auto i = 0; i < 4; ++i) {
|
||||
dstvp[i] = batch._params[paramOffset + 6 + i]._int;
|
||||
}
|
||||
|
||||
// Assign dest framebuffer if not bound already
|
||||
auto destFbo = getFramebufferID(dstframebuffer);
|
||||
auto srcFbo = getFramebufferID(srcframebuffer);
|
||||
glBlitNamedFramebuffer(srcFbo, destFbo,
|
||||
srcvp.x, srcvp.y, srcvp.z, srcvp.w,
|
||||
dstvp.x, dstvp.y, dstvp.z, dstvp.w,
|
||||
GL_COLOR_BUFFER_BIT, GL_LINEAR);
|
||||
(void) CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
} }
|
38
libraries/gpu-gl/src/gpu/gl45/GL45BackendQuery.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
//
|
||||
// GL45BackendQuery.cpp
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 7/7/2015.
|
||||
// Copyright 2015 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
|
||||
#include "../gl/GLQuery.h"
|
||||
|
||||
namespace gpu { namespace gl45 {
|
||||
|
||||
class GL45Query : public gpu::gl::GLQuery {
|
||||
using Parent = gpu::gl::GLQuery;
|
||||
public:
|
||||
static GLuint allocateQuery() {
|
||||
GLuint result;
|
||||
glCreateQueries(GL_TIME_ELAPSED, 1, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
GL45Query(const Query& query)
|
||||
: Parent(query, allocateQuery()) { }
|
||||
};
|
||||
|
||||
gl::GLQuery* GL45Backend::syncGPUObject(const Query& query) {
|
||||
return GL45Query::sync<GL45Query>(query);
|
||||
}
|
||||
|
||||
GLuint GL45Backend::getQueryID(const QueryPointer& query) {
|
||||
return GL45Query::getId<GL45Query>(query);
|
||||
}
|
||||
|
||||
} }
|
181
libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp
Normal file
|
@ -0,0 +1,181 @@
|
|||
//
|
||||
// GL45BackendTexture.cpp
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 1/19/2015.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
|
||||
#include <unordered_set>
|
||||
#include <unordered_map>
|
||||
#include <QtCore/QThread>
|
||||
|
||||
#include "../gl/GLTexelFormat.h"
|
||||
|
||||
using namespace gpu;
|
||||
using namespace gpu::gl45;
|
||||
|
||||
using GLTexelFormat = gl::GLTexelFormat;
|
||||
using GL45Texture = GL45Backend::GL45Texture;
|
||||
|
||||
GLuint GL45Texture::allocate(const Texture& texture) {
|
||||
Backend::incrementTextureGPUCount();
|
||||
GLuint result;
|
||||
glCreateTextures(getGLTextureType(texture), 1, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
GLuint GL45Backend::getTextureID(const TexturePointer& texture, bool transfer) {
|
||||
return GL45Texture::getId<GL45Texture>(texture, transfer);
|
||||
}
|
||||
|
||||
gl::GLTexture* GL45Backend::syncGPUObject(const TexturePointer& texture, bool transfer) {
|
||||
return GL45Texture::sync<GL45Texture>(texture, transfer);
|
||||
}
|
||||
|
||||
GL45Backend::GL45Texture::GL45Texture(const Texture& texture, bool transferrable)
|
||||
: gl::GLTexture(texture, allocate(texture), transferrable) {}
|
||||
|
||||
GL45Backend::GL45Texture::GL45Texture(const Texture& texture, GLTexture* original)
|
||||
: gl::GLTexture(texture, allocate(texture), original) {}
|
||||
|
||||
void GL45Backend::GL45Texture::withPreservedTexture(std::function<void()> f) const {
|
||||
f();
|
||||
}
|
||||
|
||||
void GL45Backend::GL45Texture::generateMips() const {
|
||||
glGenerateTextureMipmap(_id);
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::GL45Texture::allocateStorage() const {
|
||||
gl::GLTexelFormat texelFormat = gl::GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat());
|
||||
glTextureParameteri(_id, GL_TEXTURE_BASE_LEVEL, 0);
|
||||
glTextureParameteri(_id, GL_TEXTURE_MAX_LEVEL, _maxMip - _minMip);
|
||||
if (_gpuObject.getTexelFormat().isCompressed()) {
|
||||
qFatal("Compressed textures not yet supported");
|
||||
}
|
||||
// Get the dimensions, accounting for the downgrade level
|
||||
Vec3u dimensions = _gpuObject.evalMipDimensions(_minMip);
|
||||
glTextureStorage2D(_id, usedMipLevels(), texelFormat.internalFormat, dimensions.x, dimensions.y);
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
void GL45Backend::GL45Texture::updateSize() const {
|
||||
setSize(_virtualSize);
|
||||
if (!_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_gpuObject.getTexelFormat().isCompressed()) {
|
||||
qFatal("Compressed textures not yet supported");
|
||||
}
|
||||
}
|
||||
|
||||
// Move content bits from the CPU to the GPU for a given mip / face
|
||||
void GL45Backend::GL45Texture::transferMip(uint16_t mipLevel, uint8_t face) const {
|
||||
auto mip = _gpuObject.accessStoredMipFace(mipLevel, face);
|
||||
gl::GLTexelFormat texelFormat = gl::GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat(), mip->getFormat());
|
||||
auto size = _gpuObject.evalMipDimensions(mipLevel);
|
||||
if (GL_TEXTURE_2D == _target) {
|
||||
glTextureSubImage2D(_id, mipLevel, 0, 0, size.x, size.y, texelFormat.format, texelFormat.type, mip->readData());
|
||||
} else if (GL_TEXTURE_CUBE_MAP == _target) {
|
||||
glTextureSubImage3D(_id, mipLevel, 0, 0, face, size.x, size.y, 1, texelFormat.format, texelFormat.type, mip->readData());
|
||||
} else {
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
|
||||
// This should never happen on the main thread
|
||||
// Move content bits from the CPU to the GPU
|
||||
void GL45Backend::GL45Texture::transfer() const {
|
||||
PROFILE_RANGE(__FUNCTION__);
|
||||
//qDebug() << "Transferring texture: " << _privateTexture;
|
||||
// Need to update the content of the GPU object from the source sysmem of the texture
|
||||
if (_contentStamp >= _gpuObject.getDataStamp()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_downsampleSource._texture) {
|
||||
GLuint fbo { 0 };
|
||||
glCreateFramebuffers(1, &fbo);
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
|
||||
// Find the distance between the old min mip and the new one
|
||||
uint16 mipOffset = _minMip - _downsampleSource._minMip;
|
||||
for (uint16 i = _minMip; i <= _maxMip; ++i) {
|
||||
uint16 targetMip = i - _minMip;
|
||||
uint16 sourceMip = targetMip + mipOffset;
|
||||
Vec3u dimensions = _gpuObject.evalMipDimensions(i);
|
||||
for (GLenum target : getFaceTargets(_target)) {
|
||||
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, _downsampleSource._texture, sourceMip);
|
||||
(void)CHECK_GL_ERROR();
|
||||
glCopyTextureSubImage2D(_id, targetMip, 0, 0, 0, 0, dimensions.x, dimensions.y);
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
}
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
||||
glDeleteFramebuffers(1, &fbo);
|
||||
} else {
|
||||
// GO through the process of allocating the correct storage and/or update the content
|
||||
switch (_gpuObject.getType()) {
|
||||
case Texture::TEX_2D:
|
||||
{
|
||||
for (uint16_t i = _minMip; i <= _maxMip; ++i) {
|
||||
if (_gpuObject.isStoredMipFaceAvailable(i)) {
|
||||
transferMip(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case Texture::TEX_CUBE:
|
||||
// transfer pixels from each faces
|
||||
for (uint8_t f = 0; f < CUBE_NUM_FACES; f++) {
|
||||
for (uint16_t i = 0; i < Sampler::MAX_MIP_LEVEL; ++i) {
|
||||
if (_gpuObject.isStoredMipFaceAvailable(i, f)) {
|
||||
transferMip(i, f);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
qCWarning(gpugl45logging) << __FUNCTION__ << " case for Texture Type " << _gpuObject.getType() << " not supported";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (_gpuObject.isAutogenerateMips()) {
|
||||
glGenerateTextureMipmap(_id);
|
||||
(void)CHECK_GL_ERROR();
|
||||
}
|
||||
}
|
||||
|
||||
void GL45Backend::GL45Texture::syncSampler() const {
|
||||
const Sampler& sampler = _gpuObject.getSampler();
|
||||
|
||||
const auto& fm = FILTER_MODES[sampler.getFilter()];
|
||||
glTextureParameteri(_id, GL_TEXTURE_MIN_FILTER, fm.minFilter);
|
||||
glTextureParameteri(_id, GL_TEXTURE_MAG_FILTER, fm.magFilter);
|
||||
|
||||
if (sampler.doComparison()) {
|
||||
glTextureParameteri(_id, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
|
||||
glTextureParameteri(_id, GL_TEXTURE_COMPARE_FUNC, gl::COMPARISON_TO_GL[sampler.getComparisonFunction()]);
|
||||
} else {
|
||||
glTextureParameteri(_id, GL_TEXTURE_COMPARE_MODE, GL_NONE);
|
||||
}
|
||||
|
||||
glTextureParameteri(_id, GL_TEXTURE_WRAP_S, WRAP_MODES[sampler.getWrapModeU()]);
|
||||
glTextureParameteri(_id, GL_TEXTURE_WRAP_T, WRAP_MODES[sampler.getWrapModeV()]);
|
||||
glTextureParameteri(_id, GL_TEXTURE_WRAP_R, WRAP_MODES[sampler.getWrapModeW()]);
|
||||
glTextureParameterfv(_id, GL_TEXTURE_BORDER_COLOR, (const float*)&sampler.getBorderColor());
|
||||
glTextureParameteri(_id, GL_TEXTURE_BASE_LEVEL, (uint16)sampler.getMipOffset());
|
||||
glTextureParameterf(_id, GL_TEXTURE_MIN_LOD, (float)sampler.getMinMip());
|
||||
glTextureParameterf(_id, GL_TEXTURE_MAX_LOD, (sampler.getMaxMip() == Sampler::MAX_MIP_LEVEL ? 1000.f : sampler.getMaxMip()));
|
||||
glTextureParameterf(_id, GL_TEXTURE_MAX_ANISOTROPY_EXT, sampler.getMaxAnisotropy());
|
||||
}
|
||||
|
71
libraries/gpu-gl/src/gpu/gl45/GL45BackendTransform.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
//
|
||||
// GL45BackendTransform.cpp
|
||||
// libraries/gpu/src/gpu
|
||||
//
|
||||
// Created by Sam Gateau on 3/8/2015.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#include "GL45Backend.h"
|
||||
|
||||
using namespace gpu;
|
||||
using namespace gpu::gl45;
|
||||
|
||||
void GL45Backend::initTransform() {
|
||||
GLuint transformBuffers[3];
|
||||
glCreateBuffers(3, transformBuffers);
|
||||
_transform._objectBuffer = transformBuffers[0];
|
||||
_transform._cameraBuffer = transformBuffers[1];
|
||||
_transform._drawCallInfoBuffer = transformBuffers[2];
|
||||
glCreateTextures(GL_TEXTURE_BUFFER, 1, &_transform._objectBufferTexture);
|
||||
size_t cameraSize = sizeof(TransformStageState::CameraBufferElement);
|
||||
while (_transform._cameraUboSize < cameraSize) {
|
||||
_transform._cameraUboSize += _uboAlignment;
|
||||
}
|
||||
}
|
||||
|
||||
void GL45Backend::transferTransformState(const Batch& batch) const {
|
||||
// FIXME not thread safe
|
||||
static std::vector<uint8_t> bufferData;
|
||||
if (!_transform._cameras.empty()) {
|
||||
bufferData.resize(_transform._cameraUboSize * _transform._cameras.size());
|
||||
for (size_t i = 0; i < _transform._cameras.size(); ++i) {
|
||||
memcpy(bufferData.data() + (_transform._cameraUboSize * i), &_transform._cameras[i], sizeof(TransformStageState::CameraBufferElement));
|
||||
}
|
||||
glNamedBufferData(_transform._cameraBuffer, bufferData.size(), bufferData.data(), GL_STREAM_DRAW);
|
||||
}
|
||||
|
||||
if (!batch._objects.empty()) {
|
||||
auto byteSize = batch._objects.size() * sizeof(Batch::TransformObject);
|
||||
bufferData.resize(byteSize);
|
||||
memcpy(bufferData.data(), batch._objects.data(), byteSize);
|
||||
glNamedBufferData(_transform._objectBuffer, bufferData.size(), bufferData.data(), GL_STREAM_DRAW);
|
||||
}
|
||||
|
||||
if (!batch._namedData.empty()) {
|
||||
bufferData.clear();
|
||||
for (auto& data : batch._namedData) {
|
||||
auto currentSize = bufferData.size();
|
||||
auto bytesToCopy = data.second.drawCallInfos.size() * sizeof(Batch::DrawCallInfo);
|
||||
bufferData.resize(currentSize + bytesToCopy);
|
||||
memcpy(bufferData.data() + currentSize, data.second.drawCallInfos.data(), bytesToCopy);
|
||||
_transform._drawCallInfoOffsets[data.first] = (GLvoid*)currentSize;
|
||||
}
|
||||
glNamedBufferData(_transform._drawCallInfoBuffer, bufferData.size(), bufferData.data(), GL_STREAM_DRAW);
|
||||
}
|
||||
|
||||
#ifdef GPU_SSBO_DRAW_CALL_INFO
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, TRANSFORM_OBJECT_SLOT, _transform._objectBuffer);
|
||||
#else
|
||||
glTextureBuffer(_transform._objectBufferTexture, GL_RGBA32F, _transform._objectBuffer);
|
||||
glActiveTexture(GL_TEXTURE0 + TRANSFORM_OBJECT_SLOT);
|
||||
glBindTexture(GL_TEXTURE_BUFFER, _transform._objectBufferTexture);
|
||||
#endif
|
||||
|
||||
CHECK_GL_ERROR();
|
||||
|
||||
// Make sure the current Camera offset is unknown before render Draw
|
||||
_transform._currentCameraOffset = INVALID_OFFSET;
|
||||
}
|
54
libraries/gpu/src/gpu/null/NullBackend.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#ifndef hifi_gpu_Null_Backend_h
|
||||
#define hifi_gpu_Null_Backend_h
|
||||
|
||||
#include <assert.h>
|
||||
#include <functional>
|
||||
#include <bitset>
|
||||
#include <queue>
|
||||
#include <utility>
|
||||
#include <list>
|
||||
#include <array>
|
||||
|
||||
#include <QtCore/QLoggingCategory>
|
||||
|
||||
#include "../Context.h"
|
||||
|
||||
namespace gpu { namespace null {
|
||||
|
||||
class Backend : public gpu::Backend {
|
||||
using Parent = gpu::Backend;
|
||||
// Context Backend static interface required
|
||||
friend class gpu::Context;
|
||||
static void init() {}
|
||||
static gpu::Backend* createBackend() { return new Backend(); }
|
||||
static bool makeProgram(Shader& shader, const Shader::BindingSet& slotBindings) { return true; }
|
||||
|
||||
protected:
|
||||
explicit Backend(bool syncCache) : Parent() { }
|
||||
Backend() : Parent() { }
|
||||
public:
|
||||
~Backend() { }
|
||||
|
||||
void render(Batch& batch) final { }
|
||||
|
||||
// This call synchronize the Full Backend cache with the current GLState
|
||||
// THis is only intended to be used when mixing raw gl calls with the gpu api usage in order to sync
|
||||
// the gpu::Backend state with the true gl state which has probably been messed up by these ugly naked gl calls
|
||||
// Let's try to avoid to do that as much as possible!
|
||||
void syncCache() final { }
|
||||
|
||||
// This is the ugly "download the pixels to sysmem for taking a snapshot"
|
||||
// Just avoid using it, it's ugly and will break performances
|
||||
virtual void downloadFramebuffer(const FramebufferPointer& srcFramebuffer, const Vec4i& region, QImage& destImage) final { }
|
||||
};
|
||||
|
||||
} }
|
||||
|
||||
#endif
|
|
@ -220,12 +220,8 @@ void AccountManager::sendRequest(const QString& path,
|
|||
|
||||
networkRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
// if we're allowed to send usage data, include whatever the current session ID is with this request
|
||||
auto& activityLogger = UserActivityLogger::getInstance();
|
||||
if (activityLogger.isEnabled()) {
|
||||
networkRequest.setRawHeader(METAVERSE_SESSION_ID_HEADER,
|
||||
uuidStringWithoutCurlyBraces(_sessionID).toLocal8Bit());
|
||||
}
|
||||
networkRequest.setRawHeader(METAVERSE_SESSION_ID_HEADER,
|
||||
uuidStringWithoutCurlyBraces(_sessionID).toLocal8Bit());
|
||||
|
||||
QUrl requestURL = _authURL;
|
||||
|
||||
|
|
|
@ -117,7 +117,6 @@ void DomainHandler::hardReset() {
|
|||
_hostname = QString();
|
||||
_sockAddr.clear();
|
||||
|
||||
_hasSignalledProtocolMismatch = false;
|
||||
_domainConnectionRefusals.clear();
|
||||
|
||||
_hasCheckedForAccessToken = false;
|
||||
|
@ -407,25 +406,9 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer<Rec
|
|||
// and check and signal for an access token so that we can make sure they are logged in
|
||||
qCWarning(networking) << "The domain-server denied a connection request: " << reasonMessage;
|
||||
|
||||
if (!_domainConnectionRefusals.contains(reasonCode)) {
|
||||
|
||||
_domainConnectionRefusals.append(reasonCode);
|
||||
|
||||
bool shouldSignal = true;
|
||||
|
||||
// only signal once for a protocol mismatch, even between soft resets that will reset the _domainConnectionRefusals
|
||||
if (reasonCode == ConnectionRefusedReason::ProtocolMismatch) {
|
||||
if (_hasSignalledProtocolMismatch) {
|
||||
shouldSignal = false;
|
||||
} else {
|
||||
_hasSignalledProtocolMismatch = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldSignal) {
|
||||
emit domainConnectionRefused(reasonMessage, (int)reasonCode);
|
||||
}
|
||||
|
||||
if (!_domainConnectionRefusals.contains(reasonMessage)) {
|
||||
_domainConnectionRefusals.insert(reasonMessage);
|
||||
emit domainConnectionRefused(reasonMessage, (int)reasonCode);
|
||||
}
|
||||
|
||||
auto accountManager = DependencyManager::get<AccountManager>();
|
||||
|
|
|
@ -144,8 +144,7 @@ private:
|
|||
QString _pendingPath;
|
||||
QTimer _settingsTimer;
|
||||
|
||||
QList<ConnectionRefusedReason> _domainConnectionRefusals;
|
||||
bool _hasSignalledProtocolMismatch { false };
|
||||
QSet<QString> _domainConnectionRefusals;
|
||||
bool _hasCheckedForAccessToken { false };
|
||||
int _connectionDenialsSinceKeypairRegen { 0 };
|
||||
|
||||
|
|
|
@ -218,10 +218,12 @@ void PhysicalEntitySimulation::getObjectsToAddToPhysics(VectorOfMotionStates& re
|
|||
ShapeInfo shapeInfo;
|
||||
entity->computeShapeInfo(shapeInfo);
|
||||
int numPoints = shapeInfo.getLargestSubshapePointCount();
|
||||
if (numPoints > MAX_HULL_POINTS) {
|
||||
qWarning() << "convex hull with" << numPoints
|
||||
<< "points for entity" << entity->getName()
|
||||
<< "at" << entity->getPosition() << " will be reduced";
|
||||
if (shapeInfo.getType() == SHAPE_TYPE_COMPOUND) {
|
||||
if (numPoints > MAX_HULL_POINTS) {
|
||||
qWarning() << "convex hull with" << numPoints
|
||||
<< "points for entity" << entity->getName()
|
||||
<< "at" << entity->getPosition() << " will be reduced";
|
||||
}
|
||||
}
|
||||
btCollisionShape* shape = ObjectMotionState::getShapeManager()->getShape(shapeInfo);
|
||||
if (shape) {
|
||||
|
|
|
@ -309,6 +309,7 @@ gpu::Stream::FormatPointer& getInstancedSolidStreamFormat() {
|
|||
}
|
||||
|
||||
render::ShapePipelinePointer GeometryCache::_simplePipeline;
|
||||
render::ShapePipelinePointer GeometryCache::_simpleWirePipeline;
|
||||
|
||||
GeometryCache::GeometryCache() :
|
||||
_nextID(0)
|
||||
|
@ -324,6 +325,10 @@ GeometryCache::GeometryCache() :
|
|||
DependencyManager::get<TextureCache>()->getNormalFittingTexture());
|
||||
}
|
||||
);
|
||||
GeometryCache::_simpleWirePipeline =
|
||||
std::make_shared<render::ShapePipeline>(getSimplePipeline(false, false, true, true), nullptr,
|
||||
[](const render::ShapePipeline&, gpu::Batch& batch) { }
|
||||
);
|
||||
}
|
||||
|
||||
GeometryCache::~GeometryCache() {
|
||||
|
|
|
@ -157,7 +157,8 @@ public:
|
|||
gpu::PipelinePointer getSimplePipeline(bool textured = false, bool culled = true,
|
||||
bool unlit = false, bool depthBias = false);
|
||||
render::ShapePipelinePointer getShapePipeline() { return GeometryCache::_simplePipeline; }
|
||||
|
||||
render::ShapePipelinePointer getWireShapePipeline() { return GeometryCache::_simpleWirePipeline; }
|
||||
|
||||
// Static (instanced) geometry
|
||||
void renderShapeInstances(gpu::Batch& batch, Shape shape, size_t count, gpu::BufferPointer& colorBuffer);
|
||||
void renderWireShapeInstances(gpu::Batch& batch, Shape shape, size_t count, gpu::BufferPointer& colorBuffer);
|
||||
|
@ -179,7 +180,7 @@ public:
|
|||
void renderWireSphereInstance(gpu::Batch& batch, const glm::vec4& color,
|
||||
const render::ShapePipelinePointer& pipeline = _simplePipeline);
|
||||
void renderWireSphereInstance(gpu::Batch& batch, const glm::vec3& color,
|
||||
const render::ShapePipelinePointer& pipeline = _simplePipeline) {
|
||||
const render::ShapePipelinePointer& pipeline = _simpleWirePipeline) {
|
||||
renderWireSphereInstance(batch, glm::vec4(color, 1.0f), pipeline);
|
||||
}
|
||||
|
||||
|
@ -193,7 +194,7 @@ public:
|
|||
void renderWireCubeInstance(gpu::Batch& batch, const glm::vec4& color,
|
||||
const render::ShapePipelinePointer& pipeline = _simplePipeline);
|
||||
void renderWireCubeInstance(gpu::Batch& batch, const glm::vec3& color,
|
||||
const render::ShapePipelinePointer& pipeline = _simplePipeline) {
|
||||
const render::ShapePipelinePointer& pipeline = _simpleWirePipeline) {
|
||||
renderWireCubeInstance(batch, glm::vec4(color, 1.0f), pipeline);
|
||||
}
|
||||
|
||||
|
@ -401,6 +402,7 @@ private:
|
|||
gpu::ShaderPointer _simpleShader;
|
||||
gpu::ShaderPointer _unlitShader;
|
||||
static render::ShapePipelinePointer _simplePipeline;
|
||||
static render::ShapePipelinePointer _simpleWirePipeline;
|
||||
QHash<SimpleProgramKey, gpu::PipelinePointer> _simplePrograms;
|
||||
};
|
||||
|
||||
|
|
|
@ -466,6 +466,12 @@ glm::mat4 createMatFromScaleQuatAndPos(const glm::vec3& scale, const glm::quat&
|
|||
glm::vec4(zAxis, 0.0f), glm::vec4(trans, 1.0f));
|
||||
}
|
||||
|
||||
// cancel out roll
|
||||
glm::quat cancelOutRoll(const glm::quat& q) {
|
||||
glm::vec3 forward = q * Vectors::FRONT;
|
||||
return glm::quat_cast(glm::inverse(glm::lookAt(Vectors::ZERO, forward, Vectors::UP)));
|
||||
}
|
||||
|
||||
// cancel out roll and pitch
|
||||
glm::quat cancelOutRollAndPitch(const glm::quat& q) {
|
||||
glm::vec3 zAxis = q * glm::vec3(0.0f, 0.0f, 1.0f);
|
||||
|
|
|
@ -221,6 +221,7 @@ glm::detail::tvec4<T, P> lerp(const glm::detail::tvec4<T, P>& x, const glm::deta
|
|||
|
||||
glm::mat4 createMatFromQuatAndPos(const glm::quat& q, const glm::vec3& p);
|
||||
glm::mat4 createMatFromScaleQuatAndPos(const glm::vec3& scale, const glm::quat& rot, const glm::vec3& trans);
|
||||
glm::quat cancelOutRoll(const glm::quat& q);
|
||||
glm::quat cancelOutRollAndPitch(const glm::quat& q);
|
||||
glm::mat4 cancelOutRollAndPitch(const glm::mat4& m);
|
||||
glm::vec3 transformPoint(const glm::mat4& m, const glm::vec3& p);
|
||||
|
|
|
@ -123,6 +123,7 @@ void QmlWindowClass::initQml(QVariantMap properties) {
|
|||
|
||||
// Forward messages received from QML on to the script
|
||||
connect(_qmlWindow, SIGNAL(sendToScript(QVariant)), this, SLOT(qmlToScript(const QVariant&)), Qt::QueuedConnection);
|
||||
connect(_qmlWindow, SIGNAL(visibleChanged()), this, SIGNAL(visibleChanged()), Qt::QueuedConnection);
|
||||
});
|
||||
}
|
||||
Q_ASSERT(_qmlWindow);
|
||||
|
|
|
@ -24,7 +24,7 @@ class QmlWindowClass : public QObject {
|
|||
Q_OBJECT
|
||||
Q_PROPERTY(glm::vec2 position READ getPosition WRITE setPosition NOTIFY positionChanged)
|
||||
Q_PROPERTY(glm::vec2 size READ getSize WRITE setSize NOTIFY sizeChanged)
|
||||
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibilityChanged)
|
||||
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
|
||||
|
||||
public:
|
||||
static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine);
|
||||
|
@ -52,7 +52,7 @@ public slots:
|
|||
void sendToQml(const QVariant& message);
|
||||
|
||||
signals:
|
||||
void visibilityChanged(bool visible); // Tool window
|
||||
void visibleChanged();
|
||||
void positionChanged();
|
||||
void sizeChanged();
|
||||
void moved(glm::vec2 position);
|
||||
|
|
|
@ -77,6 +77,7 @@ bool SixenseManager::activate() {
|
|||
InputPlugin::activate();
|
||||
|
||||
#ifdef HAVE_SIXENSE
|
||||
#if !defined(Q_OS_LINUX)
|
||||
_container->addMenu(MENU_PATH);
|
||||
_container->addMenuItem(PluginType::INPUT_PLUGIN, MENU_PATH, TOGGLE_SMOOTH,
|
||||
[this] (bool clicked) { setSixenseFilter(clicked); },
|
||||
|
@ -89,6 +90,7 @@ bool SixenseManager::activate() {
|
|||
_container->addMenuItem(PluginType::INPUT_PLUGIN, MENU_PATH, SHOW_DEBUG_CALIBRATED,
|
||||
[this] (bool clicked) { _inputDevice->setDebugDrawCalibrated(clicked); },
|
||||
true, false);
|
||||
#endif
|
||||
|
||||
auto userInputMapper = DependencyManager::get<controller::UserInputMapper>();
|
||||
userInputMapper->registerDevice(_inputDevice);
|
||||
|
@ -106,8 +108,10 @@ void SixenseManager::deactivate() {
|
|||
InputPlugin::deactivate();
|
||||
|
||||
#ifdef HAVE_SIXENSE
|
||||
#if !defined(Q_OS_LINUX)
|
||||
_container->removeMenuItem(MENU_NAME, TOGGLE_SMOOTH);
|
||||
_container->removeMenu(MENU_PATH);
|
||||
#endif
|
||||
|
||||
_inputDevice->_poseStateMap.clear();
|
||||
|
||||
|
|
|
@ -268,6 +268,7 @@ void handleOpenVrEvents() {
|
|||
case vr::VREvent_KeyboardClosed:
|
||||
_keyboardFocusObject = nullptr;
|
||||
_keyboardShown = false;
|
||||
DependencyManager::get<OffscreenUi>()->unfocusWindows();
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -125,7 +125,6 @@ Rectangle {
|
|||
|
||||
TextField {
|
||||
id: addressLine
|
||||
focus: true
|
||||
anchors {
|
||||
left: parent.left; right: parent.right;
|
||||
top: row.bottom; margins: 16;
|
||||
|
|
|
@ -1,194 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, 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 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.9;}
|
||||
.st1{fill:#1E1E1E;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{fill:#EAEAEA;}
|
||||
.st4{opacity:0.47;}
|
||||
.st5{opacity:0.47;enable-background:new ;}
|
||||
</style>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M50,96c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V54c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96z"/>
|
||||
</g>
|
||||
<g class="st0">
|
||||
<path class="st2" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M15.9,41.3c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3s-0.7-0.4-0.9-0.7c-0.3-0.3-0.5-0.7-0.6-1s-0.2-0.8-0.2-1.2
|
||||
s0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1
|
||||
l-0.9,0.7c-0.2-0.3-0.4-0.6-0.6-0.7s-0.6-0.3-0.9-0.3c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.1-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.4-0.4,0.7
|
||||
c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9
|
||||
v-0.5h-1.3v-0.9H17V42h-1v-0.7H15.9z"/>
|
||||
<path d="M20.9,42.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7s-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.8,0.2-1.2s0.4-0.7,0.6-1
|
||||
c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S21.3,42.1,20.9,42.1z M19.1,38.9c0,0.3,0,0.5,0.1,0.8
|
||||
s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7
|
||||
s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2
|
||||
s-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7C19.1,38.3,19.1,38.6,19.1,38.9z"/>
|
||||
<path d="M32,36.7h-2V42h-1.2v-5.3h-2v-1.1H32V36.7z"/>
|
||||
<path d="M35.5,42.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7s-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.8,0.2-1.2s0.4-0.7,0.6-1
|
||||
c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S35.9,42.1,35.5,42.1z M33.7,38.9c0,0.3,0,0.5,0.1,0.8
|
||||
s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8
|
||||
s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.2-0.3,0.4-0.3,0.7C33.7,38.3,33.7,38.6,33.7,38.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M15.9,91.3c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-0.9-0.7c-0.3-0.3-0.5-0.7-0.6-1
|
||||
s-0.2-0.8-0.2-1.2c0-0.4,0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.6,0,1.1,0.1,1.5,0.4
|
||||
c0.4,0.3,0.7,0.6,0.9,1l-0.9,0.7c-0.2-0.3-0.4-0.6-0.6-0.7s-0.6-0.3-0.9-0.3c-0.3,0-0.5,0.1-0.7,0.2s-0.4,0.3-0.5,0.5
|
||||
c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5
|
||||
c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9v-0.5h-1.3v-0.9H17V92h-1v-0.7H15.9z"/>
|
||||
<path class="st3" d="M20.9,92.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C21.7,92,21.3,92.1,20.9,92.1z M19.1,88.9c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2
|
||||
s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7
|
||||
c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7
|
||||
C19.1,88.3,19.1,88.6,19.1,88.9z"/>
|
||||
<path class="st3" d="M32,86.7h-2V92h-1.2v-5.3h-2v-1.1H32V86.7z"/>
|
||||
<path class="st3" d="M35.5,92.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C36.3,92,35.9,92.1,35.5,92.1z M33.7,88.9c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2
|
||||
s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5
|
||||
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7C33.7,88.3,33.7,88.6,33.7,88.9z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<path class="st1" d="M50,146c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<path class="st3" d="M15.9,141.3c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3s-0.7-0.4-0.9-0.7c-0.3-0.3-0.5-0.7-0.6-1
|
||||
s-0.2-0.8-0.2-1.2s0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.6,0,1.1,0.1,1.5,0.4
|
||||
c0.4,0.3,0.7,0.6,0.9,1l-0.9,0.7c-0.2-0.3-0.4-0.6-0.6-0.7s-0.6-0.3-0.9-0.3c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.1-0.4,0.3-0.5,0.5
|
||||
c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5
|
||||
c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9v-0.5h-1.3v-0.9H17v3.3h-1v-0.9H15.9z"/>
|
||||
<path class="st3" d="M20.9,142.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7s-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.8,0.2-1.2
|
||||
s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S21.3,142.1,20.9,142.1z M19.1,138.9c0,0.3,0,0.5,0.1,0.8
|
||||
s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7
|
||||
s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2
|
||||
s-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7C19.1,138.3,19.1,138.6,19.1,138.9z"/>
|
||||
<path class="st3" d="M32,136.7h-2v5.3h-1.2v-5.3h-2v-1.1H32V136.7z"/>
|
||||
<path class="st3" d="M35.5,142.1c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7s-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.8,0.2-1.2
|
||||
s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S35.9,142.1,35.5,142.1z M33.7,138.9c0,0.3,0,0.5,0.1,0.8
|
||||
s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8
|
||||
s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.2-0.3,0.4-0.3,0.7C33.7,138.3,33.7,138.6,33.7,138.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M17.2,28.2c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1c2-2,3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3l0,0.1c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1l-0.1,0c0,0-0.1,0-0.1,0s-0.1-0.1-0.1-0.1l0-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1
|
||||
c0.2,0.7,0.4,1.4,0.5,2.1l0,0.1c0,0,0,0.1,0,0.1c0,0-0.1,0.1-0.1,0.1l-0.1,0l-3.6,0.2l-0.2,0c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1
|
||||
v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7c0,0,0,0,0,0l0,0v6.4c0,0,0,0.1,0,0.1c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0-0.1,0-0.1,0l-3.4-0.2
|
||||
c-0.1,0-0.1,0-0.1-0.1s0-0.1,0-0.2l0-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1c0,0,0.1,0,0.1,0c-0.2-0.5-0.4-1-0.6-1.5
|
||||
c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C14,23.3,15.1,26.1,17.2,28.2z M30.2,23.4c0-0.2,0-0.4,0-0.6v0
|
||||
c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6v0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5l0.1,0
|
||||
c0.3-0.1,0.5-0.1,0.8-0.2l0.1,0c0.1,0,0.2,0,0.2,0.1l0,0.1c0,0,0,0.1,0,0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1c0,0-0.1,0-0.1,0l-0.1,0
|
||||
c0,0,0,0,0,0c0,0-0.1,0-0.1,0C30.2,23.6,30.2,23.5,30.2,23.4L30.2,23.4z M30.3,24.5c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3
|
||||
c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2l0,0.1c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1l-0.1,0c0,0,0,0-0.1,0
|
||||
c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2l0-0.1c0,0,0,0,0,0c0,0,0-0.1,0.1-0.2c0.4-0.6,1-1.6,1.5-3.7C29.9,24.8,30,24.6,30.3,24.5
|
||||
z M25.2,19c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1c0,0,0,0,0.1,0l0,0c0,0,0.1,0,0.1,0l0.1,0c0.1,0,0.1,0.1,0.1,0.2
|
||||
c0,0.1,0,0.2,0,0.4c0,0.1,0,0.3,0,0.4V20c0,0.5,0,1,0,1.4l0,0.2c0,0.4,0,0.8-0.1,1.1c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3
|
||||
c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2l-0.2,0c-0.2,0-0.5,0-0.8,0.1c-0.4,0-0.5,0.1-0.6,0.1c0,0-0.1,0-0.1,0l-0.2-0.1
|
||||
c-0.1,0-0.1-0.1-0.1-0.2L25.2,19L25.2,19z M25.2,25.1c0-0.1,0.1-0.2,0.2-0.2l0.2,0l3.4-0.2c0,0,0.1,0,0.1,0.1c0,0,0.1,0.1,0,0.1
|
||||
l0,0.1c0,0,0,0,0,0c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l0,0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.1,0.3-0.2,0.4l-0.1,0.2
|
||||
c-0.2,0.6-0.5,1.2-0.7,1.8c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6l-0.2,0l0,0c0,0-0.1,0-0.1-0.1s0-0.1,0-0.1
|
||||
L25.2,25.1L25.2,25.1z M21.7,29c0,0-0.1,0.1-0.1,0.1c0,0,0,0,0,0L21.4,29l0,0c-1.8-0.4-4.2-2.6-5.1-5.2l0-0.1c0-0.1,0-0.1,0-0.2
|
||||
c0,0,0.1-0.1,0.2,0l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1
|
||||
C21.8,28.9,21.8,29,21.7,29z M24.4,29.6c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8
|
||||
c-1-1.3-1.5-2.7-1.9-4c0,0,0,0,0,0l0-0.1c0-0.1,0-0.1,0-0.1c0,0,0.1-0.1,0.1-0.1l0.1,0l1.9,0.1l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2
|
||||
L24.4,29.6L24.4,29.6z M23,18.8l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0s-0.9-0.1-1.4-0.1
|
||||
c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5s0-0.1,0.1-0.1s0.1-0.1,0.1,0L23,18.8
|
||||
z M16.6,16.7L16.6,16.7c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1c0,0.1,0,0.1,0,0.2l-0.1,0.2c-1.2,1.6-1.7,3.5-2,5.3
|
||||
l0,0.1c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0l-0.1,0c-0.4-0.1-0.7-0.2-1.1-0.3c-0.6-0.1-1.2-0.3-1.8-0.5l-0.1,0
|
||||
C16.6,16.8,16.5,16.7,16.6,16.7z M16,17.9L16,17.9c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7
|
||||
c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0l-0.1,0c0,0-0.1,0-0.1,0h0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1
|
||||
c-0.4-0.3-0.6-0.6-0.6-1C15.6,20.1,15.7,18.9,16,17.9z"/>
|
||||
</g>
|
||||
<path d="M27.7,15.1c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7C29,3.6,30.8,5,31,6.8
|
||||
c0.1,0.6,0,1.2-0.3,1.7c-1,2.1-2,4.3-2.9,6.4C27.8,15,27.8,15,27.7,15.1z M29.5,7.4c0-1-0.8-1.8-1.8-1.8c-1,0-1.8,0.8-1.8,1.8
|
||||
c0,1,0.8,1.8,1.8,1.8C28.7,9.2,29.5,8.4,29.5,7.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st3" d="M17.2,78.3c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1c2-2,3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3l0,0.1c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1l-0.1,0c0,0-0.1,0-0.1,0s-0.1-0.1-0.1-0.1l0-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1
|
||||
c0.2,0.7,0.4,1.4,0.5,2.1l0,0.1c0,0,0,0.1,0,0.1c0,0-0.1,0.1-0.1,0.1l-0.1,0l-3.6,0.2l-0.2,0c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1
|
||||
v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7c0,0,0,0,0,0l0,0V68c0,0,0,0.1,0,0.1c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0-0.1,0-0.1,0l-3.4-0.2
|
||||
c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2l0-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1c0,0,0.1,0,0.1,0
|
||||
c-0.2-0.5-0.4-1-0.6-1.5c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C14,73.4,15.1,76.2,17.2,78.3z M30.2,73.5
|
||||
c0-0.2,0-0.4,0-0.6v0c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6v0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5
|
||||
l0.1,0c0.3-0.1,0.5-0.1,0.8-0.2l0.1,0c0.1,0,0.2,0,0.2,0.1l0,0.1c0,0,0,0.1,0,0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1c0,0-0.1,0-0.1,0l-0.1,0
|
||||
c0,0,0,0,0,0c0,0-0.1,0-0.1,0C30.2,73.7,30.2,73.7,30.2,73.5L30.2,73.5z M30.3,74.7c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3
|
||||
c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2l0,0.1c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1l-0.1,0c0,0,0,0-0.1,0
|
||||
c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2l0-0.1c0,0,0,0,0,0c0,0,0-0.1,0.1-0.2c0.4-0.6,1-1.6,1.5-3.7C29.9,74.9,30,74.7,30.3,74.7
|
||||
z M25.2,69.2c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1c0,0,0,0,0.1,0l0,0c0,0,0.1,0,0.1,0l0.1,0c0.1,0,0.1,0.1,0.1,0.2
|
||||
c0,0.1,0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4l0,0.2c0,0.4,0,0.8-0.1,1.1c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3
|
||||
c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2l-0.2,0c-0.2,0-0.5,0-0.8,0.1c-0.4,0-0.5,0.1-0.6,0.1c0,0-0.1,0-0.1,0l-0.2-0.1
|
||||
c-0.1,0-0.1-0.1-0.1-0.2L25.2,69.2L25.2,69.2z M25.2,75.3c0-0.1,0.1-0.2,0.2-0.2l0.2,0l3.4-0.2c0,0,0.1,0,0.1,0.1
|
||||
c0,0,0.1,0.1,0,0.1l0,0.1c0,0,0,0,0,0c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l0,0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.1,0.3-0.2,0.4
|
||||
l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6l-0.2,0l0,0c0,0-0.1,0-0.1-0.1
|
||||
c0,0,0-0.1,0-0.1L25.2,75.3L25.2,75.3z M21.7,79.2c0,0-0.1,0.1-0.1,0.1c0,0,0,0,0,0l-0.2-0.1l0,0c-1.8-0.4-4.2-2.6-5.1-5.2l0-0.1
|
||||
c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1
|
||||
C21.8,79.1,21.8,79.1,21.7,79.2z M24.4,79.8c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8
|
||||
c-1-1.3-1.5-2.7-1.9-4c0,0,0,0,0,0l0-0.1c0-0.1,0-0.1,0-0.1c0,0,0.1-0.1,0.1-0.1l0.1,0L23,75l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2
|
||||
L24.4,79.8L24.4,79.8z M23,69l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0s-0.9-0.1-1.4-0.1
|
||||
c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5s0-0.1,0.1-0.1c0,0,0.1-0.1,0.1,0
|
||||
L23,69z M16.6,66.8L16.6,66.8c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1c0,0.1,0,0.1,0,0.2l-0.1,0.2
|
||||
c-1.2,1.6-1.7,3.5-2,5.3l0,0.1c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0l-0.1,0c-0.4-0.1-0.7-0.2-1.1-0.3
|
||||
c-0.6-0.1-1.2-0.3-1.8-0.5l-0.1,0C16.6,67,16.5,66.9,16.6,66.8z M16,68L16,68c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8
|
||||
c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0l-0.1,0c0,0-0.1,0-0.1,0h0
|
||||
c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1c-0.4-0.3-0.6-0.6-0.6-1C15.6,70.3,15.7,69.1,16,68z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.7,65.2c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7c-1,2.1-2,4.3-2.9,6.4C27.8,65.1,27.8,65.2,27.7,65.2z M29.5,57.5c0-1-0.8-1.8-1.8-1.8c-1,0-1.8,0.8-1.8,1.8
|
||||
c0,1,0.8,1.8,1.8,1.8C28.7,59.3,29.5,58.5,29.5,57.5z"/>
|
||||
</g>
|
||||
<g class="st5">
|
||||
<g>
|
||||
<path class="st3" d="M17.2,127.4c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1c2-2,3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3l0,0.1c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1l-0.1,0c0,0-0.1,0-0.1,0s-0.1-0.1-0.1-0.1l0-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1
|
||||
c0.2,0.7,0.4,1.4,0.5,2.1l0,0.1c0,0,0,0.1,0,0.1c0,0-0.1,0.1-0.1,0.1l-0.1,0l-3.6,0.2l-0.2,0c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1
|
||||
v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7c0,0,0,0,0,0l0,0v6.4c0,0,0,0.1,0,0.1c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0-0.1,0-0.1,0l-3.4-0.2
|
||||
c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2l0-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1c0,0,0.1,0,0.1,0
|
||||
c-0.2-0.5-0.4-1-0.6-1.5c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C14,122.5,15.1,125.3,17.2,127.4z M30.2,122.6
|
||||
c0-0.2,0-0.4,0-0.6v0c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6v0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5
|
||||
l0.1,0c0.3-0.1,0.5-0.1,0.8-0.2l0.1,0c0.1,0,0.2,0,0.2,0.1l0,0.1c0,0,0,0.1,0,0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1c0,0-0.1,0-0.1,0l-0.1,0
|
||||
c0,0,0,0,0,0c0,0-0.1,0-0.1,0C30.2,122.8,30.2,122.8,30.2,122.6L30.2,122.6z M30.3,123.7c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3
|
||||
c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2l0,0.1c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1l-0.1,0c0,0,0,0-0.1,0
|
||||
c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2l0-0.1c0,0,0,0,0,0c0,0,0-0.1,0.1-0.2c0.4-0.6,1-1.6,1.5-3.7
|
||||
C29.9,124,30,123.8,30.3,123.7z M25.2,118.3c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1c0,0,0,0,0.1,0l0,0c0,0,0.1,0,0.1,0l0.1,0
|
||||
c0.1,0,0.1,0.1,0.1,0.2c0,0.1,0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4l0,0.2c0,0.4,0,0.8-0.1,1.1c0,0.1,0,0.2,0,0.3
|
||||
c0,0.1,0,0.2,0,0.3c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2l-0.2,0c-0.2,0-0.5,0-0.8,0.1c-0.4,0-0.5,0.1-0.6,0.1
|
||||
c0,0-0.1,0-0.1,0l-0.2-0.1c-0.1,0-0.1-0.1-0.1-0.2L25.2,118.3L25.2,118.3z M25.2,124.4c0-0.1,0.1-0.2,0.2-0.2l0.2,0l3.4-0.2
|
||||
c0,0,0.1,0,0.1,0.1c0,0,0.1,0.1,0,0.1l0,0.1c0,0,0,0,0,0c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l0,0.1c0,0.1,0,0.2-0.1,0.3
|
||||
c-0.1,0.1-0.1,0.3-0.2,0.4l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6l-0.2,0l0,0
|
||||
c0,0-0.1,0-0.1-0.1s0-0.1,0-0.1L25.2,124.4L25.2,124.4z M21.7,128.3c0,0-0.1,0.1-0.1,0.1c0,0,0,0,0,0l-0.2-0.1l0,0
|
||||
c-1.8-0.4-4.2-2.6-5.1-5.2l0-0.1c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7c0.2,0.1,0.4,0.1,0.4,0.4
|
||||
c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1C21.8,128.2,21.8,128.2,21.7,128.3z M24.4,128.9c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0
|
||||
c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8c-1-1.3-1.5-2.7-1.9-4c0,0,0,0,0,0l0-0.1c0-0.1,0-0.1,0-0.1c0,0,0.1-0.1,0.1-0.1l0.1,0l1.9,0.1
|
||||
l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2L24.4,128.9L24.4,128.9z M23,118.1l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1
|
||||
c0,0-0.1,0-0.1,0c0,0,0,0,0,0s-0.9-0.1-1.4-0.1c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1
|
||||
c0-0.3,0-1.4,0-1.5s0-0.1,0.1-0.1c0,0,0.1-0.1,0.1,0L23,118.1z M16.6,115.9L16.6,115.9c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1
|
||||
c0.1,0,0.2,0,0.2,0.1c0,0.1,0,0.1,0,0.2l-0.1,0.2c-1.2,1.6-1.7,3.5-2,5.3l0,0.1c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0
|
||||
l-0.1,0c-0.4-0.1-0.7-0.2-1.1-0.3c-0.6-0.1-1.2-0.3-1.8-0.5l-0.1,0C16.6,116.1,16.5,116,16.6,115.9z M16,117.1L16,117.1
|
||||
c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0l-0.1,0
|
||||
c0,0-0.1,0-0.1,0h0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1c-0.4-0.3-0.6-0.6-0.6-1C15.6,119.4,15.7,118.2,16,117.1z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.7,114.3c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7c-1,2.1-2,4.3-2.9,6.4C27.8,114.2,27.8,114.3,27.7,114.3z M29.5,106.6c0-1-0.8-1.8-1.8-1.8
|
||||
c-1,0-1.8,0.8-1.8,1.8c0,1,0.8,1.8,1.8,1.8C28.7,108.4,29.5,107.6,29.5,106.6z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 18 KiB |
255
scripts/system/assets/images/tools/directory.svg
Normal file
|
@ -0,0 +1,255 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#333333;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<g>
|
||||
<path class="st3" d="M15.9,41.5c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-0.9-0.7
|
||||
c-0.3-0.3-0.5-0.7-0.6-1s-0.2-0.8-0.2-1.2c0-0.4,0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1L15.8,38c-0.2-0.3-0.4-0.6-0.6-0.7S14.6,37,14.3,37c-0.3,0-0.5,0.1-0.7,0.2
|
||||
s-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5
|
||||
c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9V40h-1.3v-0.9H17v3.1h-1v-0.7H15.9z"/>
|
||||
<path class="st3" d="M20.9,42.3c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C21.7,42.2,21.3,42.3,20.9,42.3z M19.1,39.1c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2
|
||||
s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7
|
||||
c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7
|
||||
C19.1,38.5,19.1,38.8,19.1,39.1z"/>
|
||||
<path class="st3" d="M32,36.9h-2v5.3h-1.2v-5.3h-2v-1.1H32V36.9z"/>
|
||||
<path class="st3" d="M35.5,42.3c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C36.3,42.2,35.9,42.3,35.5,42.3z M33.7,39.1c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2
|
||||
s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5
|
||||
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7C33.7,38.5,33.7,38.8,33.7,39.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st3" d="M17.2,28.5c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1s3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3V17c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1h-0.1h-0.1L30,18v-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1c0.2,0.7,0.4,1.4,0.5,2.1v0.1
|
||||
v0.1l-0.1,0.1H29l-3.6,0.2h-0.2h-0.1v-0.1v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7l0,0l0,0v6.4v0.1c0,0.1-0.1,0.2-0.2,0.2l0,0h-0.1
|
||||
l-3.4-0.2c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2v-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1h0.1c-0.2-0.5-0.4-1-0.6-1.5
|
||||
c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C14,23.6,15.1,26.4,17.2,28.5z M30.2,23.7c0-0.2,0-0.4,0-0.6l0,0
|
||||
c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6l0,0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5H33
|
||||
c0.3-0.1,0.5-0.1,0.8-0.2h0.1c0.1,0,0.2,0,0.2,0.1v0.1v0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1h-0.1h-0.1l0,0h-0.1
|
||||
C30.2,23.9,30.2,23.9,30.2,23.7L30.2,23.7z M30.3,24.9c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2
|
||||
v0.1c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.1,0-0.1-0.1-0.1-0.2v-0.1l0,0
|
||||
c0,0,0-0.1,0.1-0.2c0.4-0.6,1-1.6,1.5-3.7C29.9,25.1,30,24.9,30.3,24.9z M25.2,19.4c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1
|
||||
c0,0,0,0,0.1,0l0,0h0.1h0.1c0.1,0,0.1,0.1,0.1,0.2s0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4v0.2c0,0.4,0,0.8-0.1,1.1
|
||||
c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2h-0.2c-0.2,0-0.5,0-0.8,0.1
|
||||
c-0.4,0-0.5,0.1-0.6,0.1h-0.1l-0.2-0.1c-0.1,0-0.1-0.1-0.1-0.2L25.2,19.4L25.2,19.4z M25.2,25.5c0-0.1,0.1-0.2,0.2-0.2h0.2
|
||||
l3.4-0.2c0,0,0.1,0,0.1,0.1c0,0,0.1,0.1,0,0.1v0.1l0,0c0,0,0,0,0,0.1v0.1v0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.1,0.3-0.2,0.4
|
||||
l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6h-0.2l0,0c0,0-0.1,0-0.1-0.1v-0.1
|
||||
L25.2,25.5L25.2,25.5z M21.7,29.4l-0.1,0.1l0,0l-0.2-0.1l0,0c-1.8-0.4-4.2-2.6-5.1-5.2v-0.1c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0
|
||||
l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1C21.8,29.3,21.8,29.3,21.7,29.4z
|
||||
M24.4,30c0,0.1-0.1,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8c-1-1.3-1.5-2.7-1.9-4l0,0v-0.1c0-0.1,0-0.1,0-0.1L21,25
|
||||
h0.1l1.9,0.2l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2L24.4,30L24.4,30z M23,19.2l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1h-0.1
|
||||
l0,0c0,0-0.9-0.1-1.4-0.1c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5
|
||||
s0-0.1,0.1-0.1c0,0,0.1-0.1,0.1,0H23z M16.6,17L16.6,17c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1s0,0.1,0,0.2l-0.1,0.2
|
||||
c-1.2,1.6-1.7,3.5-2,5.3v0.1c0,0,0,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.4-0.1-0.7-0.2-1.1-0.3c-0.6-0.1-1.2-0.3-1.8-0.5h-0.1
|
||||
C16.6,17.2,16.5,17.1,16.6,17z M16,18.2L16,18.2c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7
|
||||
c0,0.1,0,0.1-0.1,0.1h-0.1l0,0h-0.1h-0.1l0,0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1c-0.4-0.3-0.6-0.6-0.6-1
|
||||
C15.6,20.5,15.7,19.3,16,18.2z"/>
|
||||
</g>
|
||||
<path class="st3" d="M27.7,15.4c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7C29.6,11,28.6,13.2,27.7,15.4C27.8,15.3,27.8,15.4,27.7,15.4z M29.5,7.7c0-1-0.8-1.8-1.8-1.8
|
||||
s-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8S29.5,8.7,29.5,7.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M15.9,91.5c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-0.9-0.7
|
||||
c-0.3-0.3-0.5-0.7-0.6-1s-0.2-0.8-0.2-1.2c0-0.4,0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1L15.8,88c-0.2-0.3-0.4-0.6-0.6-0.7S14.6,87,14.3,87c-0.3,0-0.5,0.1-0.7,0.2
|
||||
s-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5
|
||||
c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9V90h-1.3v-0.9H17v3.1h-1v-0.7H15.9z"/>
|
||||
<path class="st1" d="M20.9,92.3c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C21.7,92.2,21.3,92.3,20.9,92.3z M19.1,89.1c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2
|
||||
s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7
|
||||
c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7
|
||||
C19.1,88.5,19.1,88.8,19.1,89.1z"/>
|
||||
<path class="st1" d="M32,86.9h-2v5.3h-1.2v-5.3h-2v-1.1H32V86.9z"/>
|
||||
<path class="st1" d="M35.5,92.3c-0.5,0-0.9-0.1-1.2-0.3s-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1s-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3s0.7,0.4,1,0.7
|
||||
c0.3,0.3,0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7
|
||||
C36.3,92.2,35.9,92.3,35.5,92.3z M33.7,89.1c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5s0.5,0.2,0.8,0.2
|
||||
s0.5-0.1,0.8-0.2s0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7s0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5
|
||||
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7C33.7,88.5,33.7,88.8,33.7,89.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M17.2,78.5c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1s3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3V67c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1h-0.1h-0.1L30,68v-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1c0.2,0.7,0.4,1.4,0.5,2.1v0.1
|
||||
v0.1l-0.1,0.1H29l-3.6,0.2h-0.2h-0.1v-0.1v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7l0,0l0,0v6.4v0.1c0,0.1-0.1,0.2-0.2,0.2l0,0h-0.1
|
||||
l-3.4-0.2c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2v-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1h0.1c-0.2-0.5-0.4-1-0.6-1.5
|
||||
c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C14,73.6,15.1,76.4,17.2,78.5z M30.2,73.7c0-0.2,0-0.4,0-0.6l0,0
|
||||
c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6l0,0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5H33
|
||||
c0.3-0.1,0.5-0.1,0.8-0.2h0.1c0.1,0,0.2,0,0.2,0.1v0.1v0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1h-0.1h-0.1l0,0h-0.1
|
||||
C30.2,73.9,30.2,73.9,30.2,73.7L30.2,73.7z M30.3,74.9c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2
|
||||
v0.1c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.1,0-0.1-0.1-0.1-0.2v-0.1l0,0
|
||||
c0,0,0-0.1,0.1-0.2c0.4-0.6,1-1.6,1.5-3.7C29.9,75.1,30,74.9,30.3,74.9z M25.2,69.4c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1
|
||||
c0,0,0,0,0.1,0l0,0h0.1h0.1c0.1,0,0.1,0.1,0.1,0.2s0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4v0.2c0,0.4,0,0.8-0.1,1.1
|
||||
c0,0.1,0,0.2,0,0.3c0,0.1,0,0.2,0,0.3c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2h-0.2c-0.2,0-0.5,0-0.8,0.1
|
||||
c-0.4,0-0.5,0.1-0.6,0.1h-0.1l-0.2-0.1c-0.1,0-0.1-0.1-0.1-0.2L25.2,69.4L25.2,69.4z M25.2,75.5c0-0.1,0.1-0.2,0.2-0.2h0.2
|
||||
l3.4-0.2c0,0,0.1,0,0.1,0.1c0,0,0.1,0.1,0,0.1v0.1l0,0c0,0,0,0,0,0.1v0.1v0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.1,0.3-0.2,0.4
|
||||
l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6h-0.2l0,0c0,0-0.1,0-0.1-0.1v-0.1
|
||||
L25.2,75.5L25.2,75.5z M21.7,79.4l-0.1,0.1l0,0l-0.2-0.1l0,0c-1.8-0.4-4.2-2.6-5.1-5.2v-0.1c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0
|
||||
l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1C21.8,79.3,21.8,79.3,21.7,79.4z
|
||||
M24.4,80c0,0.1-0.1,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8c-1-1.3-1.5-2.7-1.9-4l0,0v-0.1c0-0.1,0-0.1,0-0.1L21,75
|
||||
h0.1l1.9,0.2l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2L24.4,80L24.4,80z M23,69.2l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1h-0.1
|
||||
l0,0c0,0-0.9-0.1-1.4-0.1c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5
|
||||
s0-0.1,0.1-0.1c0,0,0.1-0.1,0.1,0H23z M16.6,67L16.6,67c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1s0,0.1,0,0.2l-0.1,0.2
|
||||
c-1.2,1.6-1.7,3.5-2,5.3v0.1c0,0,0,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.4-0.1-0.7-0.2-1.1-0.3c-0.6-0.1-1.2-0.3-1.8-0.5h-0.1
|
||||
C16.6,67.2,16.5,67.1,16.6,67z M16,68.2L16,68.2c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7
|
||||
c0,0.1,0,0.1-0.1,0.1h-0.1l0,0h-0.1h-0.1l0,0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1c-0.4-0.3-0.6-0.6-0.6-1
|
||||
C15.6,70.5,15.7,69.3,16,68.2z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.7,65.4c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7C29.6,61,28.6,63.2,27.7,65.4C27.8,65.3,27.8,65.4,27.7,65.4z M29.5,57.7c0-1-0.8-1.8-1.8-1.8
|
||||
s-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8S29.5,58.7,29.5,57.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M15.7,141.6c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-0.9-0.7
|
||||
c-0.3-0.3-0.5-0.7-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-0.9,0.7c-0.2-0.3-0.4-0.6-0.6-0.7c-0.2-0.1-0.6-0.3-0.9-0.3
|
||||
c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.1-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8
|
||||
c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9v-0.5h-1.3v-0.9h2.3v3.1h-1v-0.7H15.7z"
|
||||
/>
|
||||
<path class="st1" d="M20.7,142.4c-0.5,0-0.9-0.1-1.2-0.3c-0.3-0.2-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1c-0.1-0.4-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.7,0.4,1,0.7
|
||||
s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S21.1,142.4,20.7,142.4z
|
||||
M18.9,139.2c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5c0.3,0.1,0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2
|
||||
c0.3-0.1,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7c0-0.3,0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7
|
||||
c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7
|
||||
C18.9,138.6,18.9,138.9,18.9,139.2z"/>
|
||||
<path class="st1" d="M31.8,137h-2v5.3h-1.2V137h-2v-1.1h5.2V137z"/>
|
||||
<path class="st1" d="M35.3,142.4c-0.5,0-0.9-0.1-1.2-0.3c-0.3-0.2-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1c-0.1-0.4-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.7,0.4,1,0.7
|
||||
s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S35.7,142.4,35.3,142.4z
|
||||
M33.5,139.2c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5c0.3,0.1,0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2
|
||||
c0.3-0.1,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7c0-0.3,0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5
|
||||
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7
|
||||
C33.5,138.6,33.5,138.9,33.5,139.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M17,128.6c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1c2-2,3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3v0.1c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1H30h-0.1l-0.1-0.1V118c-0.2-1-0.4-2-0.8-3l-0.5,1c0.2,0.7,0.4,1.4,0.5,2.1v0.1
|
||||
v0.1l-0.1,0.1h-0.1l-3.6,0.2H25h-0.1v-0.1v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7l0,0l0,0v6.4v0.1c0,0.1-0.1,0.2-0.2,0.2l0,0h-0.1
|
||||
l-3.4-0.2c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2V118c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1h0.1c-0.2-0.5-0.4-1-0.6-1.5
|
||||
c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C13.8,123.7,14.9,126.5,17,128.6z M30,123.8c0-0.2,0-0.4,0-0.6l0,0
|
||||
c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6l0,0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5h0.1
|
||||
c0.3-0.1,0.5-0.1,0.8-0.2h0.1c0.1,0,0.2,0,0.2,0.1v0.1v0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1h-0.1h-0.1l0,0h-0.1
|
||||
C30,124,30,124,30,123.8L30,123.8z M30.1,125c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2v0.1
|
||||
c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.1,0-0.1-0.1-0.1-0.2v-0.1l0,0c0,0,0-0.1,0.1-0.2
|
||||
c0.4-0.6,1-1.6,1.5-3.7C29.7,125.2,29.8,125,30.1,125z M25,119.5c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1c0,0,0,0,0.1,0l0,0
|
||||
h0.1h0.1c0.1,0,0.1,0.1,0.1,0.2s0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4v0.2c0,0.4,0,0.8-0.1,1.1c0,0.1,0,0.2,0,0.3
|
||||
c0,0.1,0,0.2,0,0.3c0,0.1,0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2h-0.2c-0.2,0-0.5,0-0.8,0.1c-0.4,0-0.5,0.1-0.6,0.1h-0.1l-0.2-0.1
|
||||
c-0.1,0-0.1-0.1-0.1-0.2L25,119.5L25,119.5z M25,125.6c0-0.1,0.1-0.2,0.2-0.2h0.2l3.4-0.2c0,0,0.1,0,0.1,0.1c0,0,0.1,0.1,0,0.1
|
||||
v0.1l0,0c0,0,0,0,0,0.1v0.1v0.1c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.1,0.3-0.2,0.4l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8
|
||||
c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6h-0.2l0,0c0,0-0.1,0-0.1-0.1v-0.1L25,125.6L25,125.6z M21.5,129.5l-0.1,0.1
|
||||
l0,0l-0.2-0.1l0,0c-1.8-0.4-4.2-2.6-5.1-5.2v-0.1c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7
|
||||
c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1C21.6,129.4,21.6,129.4,21.5,129.5z M24.2,130.1c0,0.1-0.1,0.1-0.1,0.1
|
||||
H24c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8c-1-1.3-1.5-2.7-1.9-4l0,0v-0.1c0-0.1,0-0.1,0-0.1l0.1-0.1h0.1l1.9,0.2l1.2,0.1
|
||||
c0.1,0,0.2,0.1,0.2,0.2L24.2,130.1L24.2,130.1z M22.8,119.3l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1H24l0,0
|
||||
c0,0-0.9-0.1-1.4-0.1c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5s0-0.1,0.1-0.1
|
||||
c0,0,0.1-0.1,0.1,0H22.8z M16.4,117.1L16.4,117.1c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1s0,0.1,0,0.2l-0.1,0.2
|
||||
c-1.2,1.6-1.7,3.5-2,5.3v0.1c0,0,0,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.4-0.1-0.7-0.2-1.1-0.3c-0.6-0.1-1.2-0.3-1.8-0.5h-0.1
|
||||
C16.4,117.3,16.3,117.2,16.4,117.1z M15.8,118.3L15.8,118.3c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7
|
||||
c0,0.1,0,0.1-0.1,0.1h-0.1l0,0h-0.1h-0.1l0,0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1c-0.4-0.3-0.6-0.6-0.6-1
|
||||
C15.4,120.6,15.5,119.4,15.8,118.3z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.5,114.5c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7C29.4,110.1,28.4,112.3,27.5,114.5C27.6,114.4,27.6,114.5,27.5,114.5z M29.3,106.8c0-1-0.8-1.8-1.8-1.8
|
||||
s-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8S29.3,107.8,29.3,106.8z"/>
|
||||
<g>
|
||||
<path class="st1" d="M15.7,191.7c-0.5,0.5-1.1,0.8-1.7,0.8c-0.4,0-0.8-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-0.9-0.7
|
||||
c-0.3-0.3-0.5-0.7-0.6-1s-0.2-0.8-0.2-1.2s0.1-0.9,0.2-1.2c0.2-0.4,0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-0.9,0.7c-0.2-0.3-0.4-0.6-0.6-0.7c-0.2-0.1-0.6-0.3-0.9-0.3
|
||||
c-0.3,0-0.5,0.1-0.7,0.2c-0.2,0.1-0.4,0.3-0.5,0.5c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.6,0.1,0.8
|
||||
c0.1,0.3,0.2,0.5,0.4,0.7s0.4,0.3,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.6,0,1.1-0.3,1.6-0.9v-0.5h-1.3v-0.9h2.3v3.1h-1v-0.7H15.7z"
|
||||
/>
|
||||
<path class="st1" d="M20.7,192.5c-0.5,0-0.9-0.1-1.2-0.3c-0.3-0.2-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1c-0.1-0.4-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.7,0.4,1,0.7
|
||||
s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S21.1,192.5,20.7,192.5z
|
||||
M18.9,189.3c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5c0.3,0.1,0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2
|
||||
c0.3-0.1,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7c0-0.3,0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7
|
||||
c-0.2-0.2-0.3-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.4,0.3-0.6,0.5s-0.3,0.4-0.3,0.7
|
||||
C18.9,188.7,18.9,189,18.9,189.3z"/>
|
||||
<path class="st1" d="M31.8,187.1h-2v5.3h-1.2v-5.3h-2V186h5.2V187.1z"/>
|
||||
<path class="st1" d="M35.3,192.5c-0.5,0-0.9-0.1-1.2-0.3c-0.3-0.2-0.7-0.4-1-0.7c-0.3-0.3-0.5-0.6-0.6-1c-0.1-0.4-0.2-0.8-0.2-1.2
|
||||
c0-0.4,0.1-0.8,0.2-1.2s0.4-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.2-0.3c0.5,0,0.9,0.1,1.2,0.3c0.3,0.2,0.7,0.4,1,0.7
|
||||
s0.5,0.7,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2s-0.1,0.8-0.2,1.2c-0.2,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.7S35.7,192.5,35.3,192.5z
|
||||
M33.5,189.3c0,0.3,0,0.5,0.1,0.8s0.2,0.5,0.4,0.7s0.3,0.4,0.6,0.5c0.3,0.1,0.5,0.2,0.8,0.2s0.5-0.1,0.8-0.2
|
||||
c0.3-0.1,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.3-0.7c0-0.3,0.1-0.5,0.1-0.8s0-0.5-0.1-0.8s-0.2-0.5-0.4-0.7s-0.3-0.4-0.6-0.5
|
||||
c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7
|
||||
C33.5,188.7,33.5,189,33.5,189.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M17,178.7c2,2.1,4.8,3.2,7.8,3.2h0.1c2.9,0,5.7-1.1,7.7-3.1s3.1-4.7,3.2-7.5c0-3-1-5.8-3.1-7.9
|
||||
c-0.6-0.6-1.3-1.2-2-1.6c-0.2,0.5-0.4,1-0.7,1.5c0.3,0.2,0.7,0.5,1,0.8c1,1,1.9,2.1,2.2,3v0.1c0,0.1,0,0.2-0.1,0.2l0,0
|
||||
c-0.8,0.4-1.6,0.6-2.5,0.8c-0.2,0-0.3,0.1-0.5,0.1H30h-0.1l-0.1-0.1v-0.1c-0.2-1-0.4-2-0.8-3l-0.5,1c0.2,0.7,0.4,1.4,0.5,2.1v0.1
|
||||
v0.1l-0.1,0.1h-0.1l-3.6,0.2H25h-0.1v-0.1v-4.9c-0.3-0.6-0.5-1.1-0.7-1.7l0,0l0,0v6.4v0.1c0,0.1-0.1,0.2-0.2,0.2l0,0h-0.1
|
||||
l-3.4-0.2c-0.1,0-0.1,0-0.1-0.1c0,0,0-0.1,0-0.2v-0.1c0.4-1.8,0.9-3.8,2.3-5.5c0.4-0.4,0.8-0.9,1.3-1h0.1c-0.2-0.5-0.4-1-0.6-1.5
|
||||
c-2.5,0.3-4.7,1.3-6.5,3.1c-2,2-3.1,4.6-3.2,7.5C13.8,173.8,14.9,176.6,17,178.7z M30,173.9c0-0.2,0-0.4,0-0.6l0,0
|
||||
c0-0.5,0.1-0.9,0.1-1.4c0-0.6,0-1.2,0-1.8c0-0.2,0-0.4,0-0.6l0,0c0-0.1,0-0.4,0.4-0.5c0.7-0.2,1.5-0.3,2.2-0.5h0.1
|
||||
c0.3-0.1,0.5-0.1,0.8-0.2h0.1c0.1,0,0.2,0,0.2,0.1v0.1v0.1c0,0.2,0.1,0.3,0.1,0.5c0.2,0.9,0.3,1.8,0.2,2.7
|
||||
c-0.1,0.8-0.5,1.4-1.1,1.6c-0.5,0.2-1.1,0.4-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.1,0-0.2,0-0.3,0.1h-0.1h-0.1l0,0h-0.1
|
||||
C30,174.1,30,174.1,30,173.9L30,173.9z M30.1,175.1c0.8-0.2,1.5-0.4,2.3-0.6l0.9-0.3c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0.1,0,0.2v0.1
|
||||
c-0.5,1.2-1.1,2.2-2,3.1c-0.8,0.9-1.9,1.5-3.1,2.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.1,0-0.1-0.1-0.1-0.2v-0.1l0,0c0,0,0-0.1,0.1-0.2
|
||||
c0.4-0.6,1-1.6,1.5-3.7C29.7,175.3,29.8,175.1,30.1,175.1z M25,169.6c0-0.1,0.1-0.2,0.2-0.2h0.2l2.7-0.1l0.9-0.1c0,0,0,0,0.1,0
|
||||
l0,0h0.1h0.1c0.1,0,0.1,0.1,0.1,0.2c0,0.1,0,0.2,0,0.4c0,0.1,0,0.3,0,0.4v0.3c0,0.5,0,1,0,1.4v0.2c0,0.4,0,0.8-0.1,1.1
|
||||
c0,0.1,0,0.2,0,0.3s0,0.2,0,0.3s0,0.4-0.4,0.5c-0.7,0.1-1.3,0.1-2,0.2h-0.2c-0.2,0-0.5,0-0.8,0.1c-0.4,0-0.5,0.1-0.6,0.1h-0.1
|
||||
l-0.2-0.1c-0.1,0-0.1-0.1-0.1-0.2L25,169.6L25,169.6z M25,175.7c0-0.1,0.1-0.2,0.2-0.2h0.2l3.4-0.2c0,0,0.1,0,0.1,0.1
|
||||
c0,0,0.1,0.1,0,0.1v0.1l0,0c0,0,0,0,0,0.1v0.1v0.1c0,0.1,0,0.2-0.1,0.3s-0.1,0.3-0.2,0.4l-0.1,0.2c-0.2,0.6-0.5,1.2-0.7,1.8
|
||||
c-0.2,0.5-0.6,0.9-0.9,1.3c-0.3,0.3-0.9,0.6-1.5,0.6h-0.2l0,0c0,0-0.1,0-0.1-0.1v-0.1L25,175.7L25,175.7z M21.5,179.6l-0.1,0.1
|
||||
l0,0l-0.2-0.1l0,0c-1.8-0.4-4.2-2.6-5.1-5.2v-0.1c0-0.1,0-0.1,0-0.2c0,0,0.1-0.1,0.2,0l0.9,0.3c0.8,0.2,1.6,0.5,2.4,0.7
|
||||
c0.2,0.1,0.4,0.1,0.4,0.4c0.3,1.6,0.8,2.8,1.5,3.8l0.1,0.1C21.6,179.5,21.6,179.5,21.5,179.6z M24.2,180.2c0,0.1-0.1,0.1-0.1,0.1
|
||||
H24c0,0,0,0-0.1,0c0,0-0.9-0.3-1.3-0.8c-1-1.3-1.5-2.7-1.9-4l0,0v-0.1c0-0.1,0-0.1,0-0.1l0.1-0.1h0.1l1.9,0.2l1.2,0.1
|
||||
c0.1,0,0.2,0.1,0.2,0.2L24.2,180.2L24.2,180.2z M22.8,169.4l1.2,0.1c0.1,0,0.2,0.1,0.2,0.2v5c0,0,0,0.1-0.1,0.1H24l0,0
|
||||
c0,0-0.9-0.1-1.4-0.1c-0.6,0-1.2-0.1-1.7-0.2c-0.2,0-0.4-0.3-0.4-0.4c-0.1-1.2-0.1-2.3-0.2-3.1c0-0.3,0-1.4,0-1.5
|
||||
c0-0.1,0-0.1,0.1-0.1c0,0,0.1-0.1,0.1,0H22.8z M16.4,167.2L16.4,167.2c0.8-2.1,2.8-3.9,5-4.7l0.2-0.1c0.1,0,0.2,0,0.2,0.1
|
||||
c0,0.1,0,0.1,0,0.2l-0.1,0.2c-1.2,1.6-1.7,3.5-2,5.3v0.1c0,0,0,0.1-0.1,0.1h-0.1c0,0,0,0-0.1,0h-0.1c-0.4-0.1-0.7-0.2-1.1-0.3
|
||||
c-0.6-0.1-1.2-0.3-1.8-0.5h-0.1C16.4,167.4,16.3,167.3,16.4,167.2z M15.8,168.4L15.8,168.4c0-0.2,0.1-0.2,0.2-0.2l3.3,0.8
|
||||
c0.1,0,0.1,0.1,0.1,0.2l0.1,4.7c0,0.1,0,0.1-0.1,0.1h-0.1l0,0h-0.1h-0.1l0,0c-0.1,0-0.3-0.1-0.5-0.1c-1.1-0.3-1.9-0.6-2.6-1.1
|
||||
c-0.4-0.3-0.6-0.6-0.6-1C15.4,170.7,15.5,169.5,15.8,168.4z"/>
|
||||
</g>
|
||||
<path class="st1" d="M27.5,164.6c-0.5-1-0.9-2-1.4-3c-0.5-1.1-1.1-2.3-1.6-3.4c-0.9-2,0.2-4.3,2.4-4.7c1.8-0.3,3.7,1,3.8,2.9
|
||||
c0.1,0.6,0,1.2-0.3,1.7C29.4,160.2,28.4,162.4,27.5,164.6C27.6,164.5,27.6,164.6,27.5,164.6z M29.3,156.9c0-1-0.8-1.8-1.8-1.8
|
||||
s-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8S29.3,157.9,29.3,156.9z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
|
@ -1,94 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, 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 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.9;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#EAEAEA;}
|
||||
.st4{opacity:0.47;}
|
||||
.st5{opacity:0.47;fill:#EAEAEA;}
|
||||
</style>
|
||||
<g>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M50,46.3c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g class="st0">
|
||||
<path class="st2" d="M50,96.3c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M21.6,21.5c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2l-1.1-1.1c-1.6,1.6-3.2,3.2-4.9,4.8
|
||||
c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8c0.2-0.1,0.5-0.2,0.7-0.4
|
||||
c1.7-1.7,3.4-3.4,5.1-5.1L21.6,21.5z"/>
|
||||
<path d="M28.2,10.6c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8c-0.6,0.6-1.2,1.2-1.7,1.7
|
||||
C30.7,13.2,29.4,11.9,28.2,10.6z"/>
|
||||
<path d="M29.4,19.1c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C36.3,20.9,32.9,18.1,29.4,19.1z M16.7,10.6c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.8,0.7-0.8
|
||||
c0.4,0,0.8,0.4,0.8,0.7C17.4,10.3,17.1,10.6,16.7,10.6z M27.1,13c0.3,0.3,0.6,0.7,1,1c-0.7,0.7-1.4,1.4-2.1,2.1
|
||||
c-0.3-0.3-0.7-0.7-1-1C25.7,14.4,26.4,13.7,27.1,13z"/>
|
||||
<g>
|
||||
<path d="M18.2,41.3v1.1h-4.4V36h4.4v1.1H15v1.5h2.7v1H15v1.7H18.2z"/>
|
||||
<path d="M19.4,42.4V36h2.3c0.5,0,1,0.1,1.4,0.3c0.4,0.2,0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H19.4z M23.6,39.2
|
||||
c0-0.3,0-0.6-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1
|
||||
c0.3,0,0.6-0.1,0.8-0.2c0.2-0.1,0.4-0.3,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7C23.6,39.8,23.6,39.5,23.6,39.2z"/>
|
||||
<path d="M26.1,42.4V36h1.2v6.4H26.1z"/>
|
||||
<path d="M33.6,37.1h-2v5.3h-1.2v-5.3h-2V36h5.3V37.1z"/>
|
||||
</g>
|
||||
<path class="st3" d="M21.9,71.5c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2l-1.1-1.1
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L21.9,71.5z"/>
|
||||
<path class="st3" d="M28.5,60.6c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31,63.2,29.8,61.9,28.5,60.6z"/>
|
||||
<path class="st3" d="M29.7,69.1c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C36.6,70.9,33.2,68.1,29.7,69.1z M17,60.6c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.8,0.7-0.8
|
||||
c0.4,0,0.8,0.4,0.8,0.7C17.7,60.3,17.4,60.6,17,60.6z M27.4,63c0.3,0.3,0.6,0.7,1,1c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1
|
||||
C26,64.4,26.7,63.7,27.4,63z"/>
|
||||
<g>
|
||||
<path class="st3" d="M18.5,91.4v1.1H14v-6.4h4.4v1.1h-3.1v1.5H18v1h-2.7v1.7H18.5z"/>
|
||||
<path class="st3" d="M19.7,92.4v-6.4H22c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H19.7z M23.9,89.2
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2H21v4.2H22c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C23.9,89.8,23.9,89.5,23.9,89.2z"/>
|
||||
<path class="st3" d="M26.4,92.4v-6.4h1.2v6.4H26.4z"/>
|
||||
<path class="st3" d="M34,87.1h-2v5.3h-1.2v-5.3h-2v-1.1H34V87.1z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<g class="st0">
|
||||
<path class="st2" d="M50,146.3c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path class="st5" d="M21.9,121.5c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2l-1.1-1.1
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L21.9,121.5z"/>
|
||||
<path class="st5" d="M28.5,110.6c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31,113.2,29.8,111.9,28.5,110.6z"/>
|
||||
<path class="st5" d="M29.7,119.1c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C36.6,120.9,33.2,118.1,29.7,119.1z M17,110.6c-0.4,0-0.7-0.3-0.7-0.7
|
||||
c0-0.4,0.3-0.8,0.7-0.8c0.4,0,0.8,0.4,0.8,0.7C17.7,110.3,17.4,110.6,17,110.6z M27.4,113c0.3,0.3,0.6,0.7,1,1
|
||||
c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1C26,114.4,26.7,113.7,27.4,113z"/>
|
||||
<g class="st4">
|
||||
<path class="st3" d="M18.5,141.4v1.1H14v-6.4h4.4v1.1h-3.1v1.5H18v1h-2.7v1.7H18.5z"/>
|
||||
<path class="st3" d="M19.7,142.4v-6.4H22c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H19.7z M23.9,139.2
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2H21v4.2H22c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C23.9,139.8,23.9,139.5,23.9,139.2z"/>
|
||||
<path class="st3" d="M26.4,142.4v-6.4h1.2v6.4H26.4z"/>
|
||||
<path class="st3" d="M34,137.1h-2v5.3h-1.2v-5.3h-2v-1.1H34V137.1z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 6.8 KiB |
123
scripts/system/assets/images/tools/edit.svg
Normal file
|
@ -0,0 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#333333;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<path class="st3" d="M22.2,21.5c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2L20,19.4
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L22.2,21.5z"/>
|
||||
<path class="st3" d="M28.8,10.6c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31.3,13.2,30.1,11.9,28.8,10.6z"/>
|
||||
<path class="st3" d="M30.2,19.9c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C37.2,21.7,33.7,18.9,30.2,19.9z M17.5,11.5c-0.4,0-0.7-0.3-0.7-0.7
|
||||
c0-0.4,0.3-0.8,0.7-0.8c0.4,0,0.8,0.4,0.8,0.7C18.3,11.1,17.9,11.5,17.5,11.5z M27.9,13.8c0.3,0.3,0.6,0.7,1,1
|
||||
c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1C26.5,15.2,27.2,14.5,27.9,13.8z"/>
|
||||
<g>
|
||||
<path class="st3" d="M18.8,41.3v1.1h-4.4V36h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H18.8z"/>
|
||||
<path class="st3" d="M20,42.4V36h2.3c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H20z M24.2,39.2
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C24.2,39.8,24.2,39.5,24.2,39.2z"/>
|
||||
<path class="st3" d="M26.7,42.4v-6.4h1.2v6.4H26.7z"/>
|
||||
<path class="st3" d="M34.3,37.1h-2v5.3H31v-5.3h-2V36h5.3V37.1z"/>
|
||||
</g>
|
||||
<path class="st1" d="M22.2,71.5c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2L20,69.4
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L22.2,71.5z"/>
|
||||
<path class="st1" d="M28.8,60.6c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31.3,63.2,30.1,61.9,28.8,60.6z"/>
|
||||
<path class="st1" d="M30.3,69.9c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C37.2,71.7,33.8,68.9,30.3,69.9z M17.6,61.5c-0.4,0-0.7-0.3-0.7-0.7
|
||||
c0-0.4,0.3-0.8,0.7-0.8c0.4,0,0.8,0.4,0.8,0.7C18.3,61.1,18,61.5,17.6,61.5z M28,63.8c0.3,0.3,0.6,0.7,1,1
|
||||
c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1C26.6,65.2,27.3,64.5,28,63.8z"/>
|
||||
<g>
|
||||
<path class="st1" d="M18.8,91.3v1.1h-4.4V86h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H18.8z"/>
|
||||
<path class="st1" d="M20,92.4V86h2.3c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H20z M24.2,89.2
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C24.2,89.8,24.2,89.5,24.2,89.2z"/>
|
||||
<path class="st1" d="M26.7,92.4v-6.4h1.2v6.4H26.7z"/>
|
||||
<path class="st1" d="M34.3,87.1h-2v5.3H31v-5.3h-2V86h5.3V87.1z"/>
|
||||
</g>
|
||||
<path class="st1" d="M22,121.6c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2l-1.1-1.1
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L22,121.6z"/>
|
||||
<path class="st1" d="M28.6,110.7c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31.1,113.2,29.9,112,28.6,110.7z"/>
|
||||
<path class="st1" d="M30.2,120c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C37.1,121.8,33.7,119,30.2,120z M17.5,111.5c-0.4,0-0.7-0.3-0.7-0.7
|
||||
c0-0.4,0.3-0.8,0.7-0.8c0.4,0,0.8,0.4,0.8,0.7C18.2,111.2,17.9,111.5,17.5,111.5z M27.9,113.9c0.3,0.3,0.6,0.7,1,1
|
||||
c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1C26.5,115.3,27.2,114.6,27.9,113.9z"/>
|
||||
<g>
|
||||
<path class="st1" d="M18.6,141.4v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H18.6z"/>
|
||||
<path class="st1" d="M19.8,142.5v-6.4h2.3c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H19.8z M24,139.3
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C24,139.9,24,139.6,24,139.3z"/>
|
||||
<path class="st1" d="M26.5,142.5v-6.4h1.2v6.4H26.5z"/>
|
||||
<path class="st1" d="M34.1,137.2h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V137.2z"/>
|
||||
</g>
|
||||
<path class="st1" d="M22,171.6c-1.4,1.4-2.8,2.8-4.2,4.2c-0.3-0.3-0.7-0.7-1-1c1.4-1.4,2.8-2.8,4.2-4.2l-1.1-1.1
|
||||
c-1.6,1.6-3.2,3.2-4.9,4.8c-0.3,0.3-0.5,0.7-0.6,1.2c-0.2,1.3-0.4,2.6-0.6,4c0.1,0,0.2,0,0.3,0c1.3-0.3,2.5-0.5,3.8-0.8
|
||||
c0.2-0.1,0.5-0.2,0.7-0.4c1.7-1.7,3.4-3.4,5.1-5.1L22,171.6z"/>
|
||||
<path class="st1" d="M28.6,160.8c0.5-0.5,1.1-1.1,1.7-1.7c0.2-0.2,0.5-0.2,0.7,0c1,1,2,2,3,3c0.2,0.2,0.2,0.5,0,0.8
|
||||
c-0.6,0.6-1.2,1.2-1.7,1.7C31.1,163.3,29.9,162,28.6,160.8z"/>
|
||||
<path class="st1" d="M30.2,170.1c-0.3,0.1-0.4,0-0.6-0.2c-0.4-0.4-0.8-0.8-1.2-1.2c1-1,1.9-1.9,2.9-2.9c0.1-0.1,0.2-0.2,0.2-0.2
|
||||
c-1.3-1.3-2.5-2.5-3.8-3.9c-0.1,0.1-0.1,0.2-0.2,0.3c-1,1-1.9,1.9-2.9,2.9c-1.8-1.8-3.5-3.5-5.3-5.3c-0.1-0.1-0.3-0.3-0.4-0.4
|
||||
c-1-0.7-2.2-0.6-3,0.3c-0.8,0.9-0.7,2.2,0.1,3c2.6,2.6,5.3,5.3,7.9,7.9c0.9,0.9,1.7,1.7,2.6,2.6c0.1,0.1,0.2,0.2,0.1,0.4
|
||||
c-0.1,0.4-0.2,0.8-0.2,1.2c-0.2,2.5,1.4,4.7,3.9,5.4c1,0.3,2,0.2,3.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2c-0.7-0.7-1.5-1.5-2.2-2.2
|
||||
c-0.5-0.5-0.6-1.4-0.1-1.9c0.4-0.4,0.8-0.8,1.2-1.2c0.6-0.5,1.3-0.5,1.8,0c0.1,0.1,0.2,0.2,0.3,0.3c0.7,0.7,1.5,1.5,2.2,2.2
|
||||
c0,0,0.1,0,0.1,0c0.1-0.4,0.2-0.8,0.2-1.3C37.1,171.9,33.7,169,30.2,170.1z M17.4,161.6c-0.4,0-0.7-0.3-0.7-0.7
|
||||
c0-0.4,0.3-0.8,0.7-0.8c0.4,0,0.8,0.4,0.8,0.7C18.2,161.2,17.8,161.6,17.4,161.6z M27.8,164c0.3,0.3,0.6,0.7,1,1
|
||||
c-0.7,0.7-1.4,1.4-2.1,2.1c-0.3-0.3-0.7-0.7-1-1C26.4,165.4,27.1,164.7,27.8,164z"/>
|
||||
<g>
|
||||
<path class="st1" d="M18.6,191.5v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H18.6z"/>
|
||||
<path class="st1" d="M19.8,192.6v-6.4h2.3c0.5,0,1,0.1,1.4,0.3s0.7,0.4,1,0.7c0.3,0.3,0.5,0.6,0.6,1c0.1,0.4,0.2,0.8,0.2,1.2
|
||||
c0,0.5-0.1,0.9-0.2,1.3c-0.1,0.4-0.4,0.7-0.6,1c-0.3,0.3-0.6,0.5-1,0.6c-0.4,0.2-0.8,0.2-1.3,0.2H19.8z M24,189.4
|
||||
c0-0.3,0-0.6-0.1-0.8s-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2h-1.1v4.2h1.1c0.3,0,0.6-0.1,0.8-0.2
|
||||
c0.2-0.1,0.4-0.3,0.6-0.4s0.3-0.4,0.4-0.7C24,189.9,24,189.7,24,189.4z"/>
|
||||
<path class="st1" d="M26.5,192.6v-6.4h1.2v6.4H26.5z"/>
|
||||
<path class="st1" d="M34.1,187.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V187.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9 KiB |
|
@ -1,306 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, 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 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.9;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#EAEAEA;}
|
||||
.st4{opacity:0.47;}
|
||||
</style>
|
||||
<g>
|
||||
<g class="st0">
|
||||
<path class="st1" d="M50,46.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g class="st0">
|
||||
<path class="st2" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M6.7,41.3v1.1H2.2V36h4.4v1.1H3.5v1.5h2.7v1H3.5v1.7H6.7z"/>
|
||||
<path d="M8.3,36l1.6,2.4l1.6-2.4h1.3l-2.3,3.2l2.2,3.1h-1.3l-1.5-2.3l-1.5,2.3H7l2.2-3.1L7,36H8.3z"/>
|
||||
<path d="M12.8,42.4l2.5-6.4h1l2.5,6.4h-1.3L17,40.8h-2.2l-0.6,1.6H12.8z M15.9,37.3l-0.9,2.6h1.8L15.9,37.3z"/>
|
||||
<path d="M24.8,42.4v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2V36h1.3l1.9,3.6l1.9-3.6H26v6.4H24.8z"/>
|
||||
<path d="M27.3,42.4V36H30c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H27.3z M28.6,39.1H30
|
||||
c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4c0-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1h-1.4V39.1z"/>
|
||||
<path d="M32.9,42.4V36h1.2v5.3h3.3v1.1H32.9z"/>
|
||||
<path d="M42.7,41.3v1.1h-4.4V36h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H42.7z"/>
|
||||
<path d="M47.4,37.6c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2s0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6s-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2
|
||||
s-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3S44,39.2,43.8,39c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.3,1,0.5L47.4,37.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M6.7,91.3v1.1H2.2V86h4.4v1.1H3.5v1.5h2.7v1H3.5v1.7H6.7z"/>
|
||||
<path class="st3" d="M8.3,86l1.6,2.4l1.6-2.4h1.3l-2.3,3.2l2.2,3.1h-1.3l-1.5-2.3l-1.5,2.3H7l2.2-3.1L7,86H8.3z"/>
|
||||
<path class="st3" d="M12.8,92.4l2.5-6.4h1l2.5,6.4h-1.3L17,90.8h-2.2l-0.6,1.6H12.8z M15.9,87.3l-0.9,2.6h1.8L15.9,87.3z"/>
|
||||
<path class="st3" d="M24.8,92.4v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2V86h1.3l1.9,3.6l1.9-3.6H26v6.4H24.8z"/>
|
||||
<path class="st3" d="M27.3,92.4V86H30c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H27.3z M28.6,89.1H30
|
||||
c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1h-1.4V89.1z"/>
|
||||
<path class="st3" d="M32.9,92.4V86h1.2v5.3h3.3v1.1H32.9z"/>
|
||||
<path class="st3" d="M42.7,91.3v1.1h-4.4V86h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H42.7z"/>
|
||||
<path class="st3" d="M47.4,87.6c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9s-0.3,0.4-0.5,0.6c-0.2,0.1-0.5,0.3-0.8,0.3s-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2
|
||||
c-0.5-0.1-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2s-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.3,1,0.5L47.4,87.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M33,8.1H15.9c-0.9,0-1.7,0.7-1.7,1.7v12.1c0,0.9,0.7,1.7,1.7,1.7h7.7v1.8l-5.3,3c-0.4,0.2-0.5,0.7-0.3,1.1
|
||||
c0.2,0.4,0.7,0.5,1.1,0.3l4.5-2.5v2.6c0,0.4,0.3,0.8,0.8,0.8c0.4,0,0.8-0.3,0.8-0.8v-2.6l4.3,2.6c0.1,0.1,0.3,0.1,0.4,0.1
|
||||
c0.3,0,0.5-0.1,0.7-0.4c0.2-0.4,0.1-0.8-0.3-1.1l-5.1-3.1v-1.8H33c0.9,0,1.7-0.7,1.7-1.7V9.8C34.7,8.8,33.9,8.1,33,8.1z M33,21.9
|
||||
H15.9V9.8H33V21.9z"/>
|
||||
<path d="M26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5
|
||||
C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5
|
||||
C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5
|
||||
C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5
|
||||
C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5C26.3,13.5,26.3,13.5,26.3,13.5
|
||||
C26.3,13.5,26.3,13.5,26.3,13.5C26.4,13.5,26.4,13.6,26.3,13.5c0.1,0.1,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0.1,0.2,0.1,0.2,0.2l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0.2,0.2,0.4,0.3,0.6,0.3c0.2,0,0.4-0.1,0.6-0.2c0.3-0.3,0.4-0.9,0-1.2c-0.2-0.2-0.4-0.4-0.7-0.6c-0.2-0.1-0.3-0.2-0.5-0.2
|
||||
c-0.3,0-0.5,0.1-0.7,0.3C25.8,12.7,25.9,13.2,26.3,13.5z"/>
|
||||
<path d="M23.8,13c0.1,0,0.1,0,0.2,0c0,0,0.1,0,0.1,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9c-0.3,0-0.6,0-0.9,0.1c-0.5,0.1-0.8,0.5-0.7,1C23,12.7,23.4,13,23.8,13z"/>
|
||||
<path d="M27.5,15.8C27.5,15.8,27.5,15.8,27.5,15.8C27.5,15.8,27.5,15.8,27.5,15.8C27.5,15.8,27.5,15.8,27.5,15.8
|
||||
C27.5,15.8,27.5,15.9,27.5,15.8L27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8L27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8C27.5,15.9,27.5,15.9,27.5,15.8
|
||||
c0,0.1,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0.1,0,0.2,0,0.2
|
||||
c-0.1,0.5,0.2,0.9,0.7,1c0,0,0.1,0,0.1,0c0.4,0,0.8-0.3,0.8-0.7c0-0.2,0.1-0.5,0.1-0.8c0,0,0-0.1,0-0.1c0-0.5-0.4-0.8-0.9-0.8
|
||||
c0,0,0,0,0,0C27.8,14.9,27.5,15.3,27.5,15.8z"/>
|
||||
<path d="M26.3,20.1c0.1,0,0.3,0,0.4-0.1c0.3-0.1,0.5-0.3,0.7-0.5c0.4-0.3,0.4-0.8,0.1-1.2c-0.2-0.2-0.4-0.3-0.7-0.3
|
||||
c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.1-0.3,0.2-0.5,0.3c-0.4,0.2-0.6,0.8-0.3,1.2C25.7,20,26,20.1,26.3,20.1z"/>
|
||||
<path d="M20.2,17.9c0.1,0.3,0.5,0.5,0.8,0.5c0.1,0,0.2,0,0.4-0.1c0.4-0.2,0.6-0.7,0.4-1.1c0-0.1-0.1-0.1-0.1-0.2l0,0c0,0,0,0,0,0
|
||||
l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-0.1-0.1-0.2-0.1-0.3
|
||||
c-0.1-0.4-0.4-0.6-0.8-0.6c-0.1,0-0.1,0-0.2,0c-0.5,0.1-0.7,0.6-0.6,1C20,17.3,20.1,17.6,20.2,17.9z"/>
|
||||
<path d="M20.7,14.9c0.1,0.1,0.3,0.1,0.4,0.1c0.3,0,0.6-0.2,0.8-0.5c0.1-0.1,0.1-0.2,0.2-0.3c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0.1-0.1,0.1-0.1c0.3-0.4,0.2-0.9-0.2-1.2c-0.2-0.1-0.3-0.2-0.5-0.2
|
||||
c-0.3,0-0.5,0.1-0.7,0.3c-0.2,0.2-0.3,0.5-0.5,0.7C20.1,14.1,20.2,14.7,20.7,14.9z"/>
|
||||
<path d="M22.6,20.2c0.3,0.1,0.5,0.2,0.8,0.3c0.1,0,0.1,0,0.2,0c0.4,0,0.7-0.3,0.8-0.7c0.1-0.5-0.2-0.9-0.6-1c0,0,0,0,0,0l0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c-0.2,0-0.3-0.1-0.5-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1c-0.3,0-0.6,0.2-0.8,0.5C22,19.5,22.2,20,22.6,20.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M33,58.5H15.9c-0.9,0-1.7,0.7-1.7,1.7v12.1c0,0.9,0.7,1.7,1.7,1.7h7.7v1.8l-5.3,3c-0.4,0.2-0.5,0.7-0.3,1.1
|
||||
c0.2,0.4,0.7,0.5,1.1,0.3l4.5-2.5v2.6c0,0.4,0.3,0.8,0.8,0.8c0.4,0,0.8-0.3,0.8-0.8v-2.6l4.3,2.6c0.1,0.1,0.3,0.1,0.4,0.1
|
||||
c0.3,0,0.5-0.1,0.7-0.4c0.2-0.4,0.1-0.8-0.3-1.1l-5.1-3.1v-1.8H33c0.9,0,1.7-0.7,1.7-1.7V60.2C34.7,59.2,33.9,58.5,33,58.5z
|
||||
M33,72.3H15.9V60.2H33V72.3z"/>
|
||||
<path class="st3" d="M26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9
|
||||
C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9
|
||||
C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9
|
||||
C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9
|
||||
C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9C26.3,63.9,26.3,63.9,26.3,63.9
|
||||
C26.3,63.9,26.3,63.9,26.3,63.9C26.4,63.9,26.4,63.9,26.3,63.9c0.1,0.1,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0.1,0.2,0.1,0.2,0.2l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0.2,0.2,0.4,0.3,0.6,0.3c0.2,0,0.4-0.1,0.6-0.2c0.3-0.3,0.4-0.9,0-1.2c-0.2-0.2-0.4-0.4-0.7-0.6c-0.2-0.1-0.3-0.2-0.5-0.2
|
||||
c-0.3,0-0.5,0.1-0.7,0.3C25.8,63,25.9,63.6,26.3,63.9z"/>
|
||||
<path class="st3" d="M23.8,63.4c0.1,0,0.1,0,0.2,0c0,0,0.1,0,0.1,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9c-0.3,0-0.6,0-0.9,0.1c-0.5,0.1-0.8,0.5-0.7,1
|
||||
C23,63.1,23.4,63.4,23.8,63.4z"/>
|
||||
<path class="st3" d="M27.5,66.2C27.5,66.2,27.5,66.2,27.5,66.2C27.5,66.2,27.5,66.2,27.5,66.2C27.5,66.2,27.5,66.2,27.5,66.2
|
||||
C27.5,66.2,27.5,66.2,27.5,66.2L27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2L27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2C27.5,66.3,27.5,66.3,27.5,66.2
|
||||
c0,0.1,0,0.1,0,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0.1,0,0.2,0,0.2
|
||||
c-0.1,0.5,0.2,0.9,0.7,1c0,0,0.1,0,0.1,0c0.4,0,0.8-0.3,0.8-0.7c0-0.2,0.1-0.5,0.1-0.8c0,0,0-0.1,0-0.1c0-0.5-0.4-0.8-0.9-0.8
|
||||
c0,0,0,0,0,0C27.8,65.3,27.5,65.7,27.5,66.2z"/>
|
||||
<path class="st3" d="M26.3,70.5c0.1,0,0.3,0,0.4-0.1c0.3-0.1,0.5-0.3,0.7-0.5c0.4-0.3,0.4-0.8,0.1-1.2c-0.2-0.2-0.4-0.3-0.7-0.3
|
||||
c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.1-0.3,0.2-0.5,0.3c-0.4,0.2-0.6,0.8-0.3,1.2C25.7,70.4,26,70.5,26.3,70.5z"/>
|
||||
<path class="st3" d="M20.2,68.3c0.1,0.3,0.5,0.5,0.8,0.5c0.1,0,0.2,0,0.4-0.1c0.4-0.2,0.6-0.7,0.4-1.1c0-0.1-0.1-0.1-0.1-0.2l0,0
|
||||
c0,0,0,0,0,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-0.1-0.1-0.2-0.1-0.3
|
||||
c-0.1-0.4-0.4-0.6-0.8-0.6c-0.1,0-0.1,0-0.2,0c-0.5,0.1-0.7,0.6-0.6,1C20,67.7,20.1,68,20.2,68.3z"/>
|
||||
<path class="st3" d="M20.7,65.3c0.1,0.1,0.3,0.1,0.4,0.1c0.3,0,0.6-0.2,0.8-0.5c0.1-0.1,0.1-0.2,0.2-0.3c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0.1-0.1,0.1-0.1c0.3-0.4,0.2-0.9-0.2-1.2c-0.2-0.1-0.3-0.2-0.5-0.2
|
||||
c-0.3,0-0.5,0.1-0.7,0.3c-0.2,0.2-0.3,0.5-0.5,0.7C20.1,64.5,20.2,65.1,20.7,65.3z"/>
|
||||
<path class="st3" d="M22.6,70.6c0.3,0.1,0.5,0.2,0.8,0.3c0.1,0,0.1,0,0.2,0c0.4,0,0.7-0.3,0.8-0.7c0.1-0.5-0.2-0.9-0.6-1
|
||||
c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c-0.2,0-0.3-0.1-0.5-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1c-0.3,0-0.6,0.2-0.8,0.5C22,69.9,22.2,70.4,22.6,70.6z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<g class="st0">
|
||||
<path class="st2" d="M50,146.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<path class="st3" d="M6.7,141.3v1.1H2.2V136h4.4v1.1H3.5v1.5h2.7v1H3.5v1.7H6.7z"/>
|
||||
<path class="st3" d="M8.3,136l1.6,2.4l1.6-2.4h1.3l-2.3,3.2l2.2,3.1h-1.3l-1.5-2.3l-1.5,2.3H7l2.2-3.1L7,136H8.3z"/>
|
||||
<path class="st3" d="M12.8,142.4l2.5-6.4h1l2.5,6.4h-1.3l-0.6-1.6h-2.2l-0.6,1.6H12.8z M15.9,137.3l-0.9,2.6h1.8L15.9,137.3z"/>
|
||||
<path class="st3" d="M24.8,142.4v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2V136h1.3l1.9,3.6l1.9-3.6H26v6.4H24.8z"/>
|
||||
<path class="st3" d="M27.3,142.4V136H30c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H27.3z M28.6,139.1H30
|
||||
c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1h-1.4V139.1z"/>
|
||||
<path class="st3" d="M32.9,142.4V136h1.2v5.3h3.3v1.1H32.9z"/>
|
||||
<path class="st3" d="M42.7,141.3v1.1h-4.4V136h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H42.7z"/>
|
||||
<path class="st3" d="M47.4,137.6c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9s-0.3,0.4-0.5,0.6c-0.2,0.1-0.5,0.3-0.8,0.3s-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2
|
||||
c-0.5-0.1-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2s-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.3,1,0.5L47.4,137.6z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<path class="st3" d="M33,108.5H15.9c-0.9,0-1.7,0.7-1.7,1.7v12.1c0,0.9,0.7,1.7,1.7,1.7h7.7v1.8l-5.3,3c-0.4,0.2-0.5,0.7-0.3,1.1
|
||||
c0.2,0.4,0.7,0.5,1.1,0.3l4.5-2.5v2.6c0,0.4,0.3,0.8,0.8,0.8c0.4,0,0.8-0.3,0.8-0.8v-2.6l4.3,2.6c0.1,0.1,0.3,0.1,0.4,0.1
|
||||
c0.3,0,0.5-0.1,0.7-0.4c0.2-0.4,0.1-0.8-0.3-1.1l-5.1-3.1v-1.8H33c0.9,0,1.7-0.7,1.7-1.7v-12.1C34.7,109.2,33.9,108.5,33,108.5z
|
||||
M33,122.3H15.9v-12.1H33V122.3z"/>
|
||||
<path class="st3" d="M26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9C26.3,113.9,26.3,113.9,26.3,113.9
|
||||
C26.4,113.9,26.4,113.9,26.3,113.9c0.1,0.1,0.1,0.1,0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0.1,0.1,0.2,0.1,0.2,0.2l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.2,0.2,0.4,0.3,0.6,0.3
|
||||
c0.2,0,0.4-0.1,0.6-0.2c0.3-0.3,0.4-0.9,0-1.2c-0.2-0.2-0.4-0.4-0.7-0.6c-0.2-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.7,0.3
|
||||
C25.8,113,25.9,113.6,26.3,113.9z"/>
|
||||
<path class="st3" d="M23.8,113.4c0.1,0,0.1,0,0.2,0c0,0,0.1,0,0.1,0h0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0.1,0,0.2,0,0.2,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0.5,0,0.9-0.4,0.9-0.9s-0.4-0.9-0.9-0.9c-0.3,0-0.6,0-0.9,0.1c-0.5,0.1-0.8,0.5-0.7,1C23,113.1,23.4,113.4,23.8,113.4
|
||||
z"/>
|
||||
<path class="st3" d="M27.5,116.2C27.5,116.2,27.5,116.2,27.5,116.2C27.5,116.2,27.5,116.2,27.5,116.2
|
||||
C27.5,116.2,27.5,116.2,27.5,116.2C27.5,116.2,27.5,116.2,27.5,116.2L27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2L27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2
|
||||
C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2C27.5,116.3,27.5,116.3,27.5,116.2c0,0.1,0,0.1,0,0.1
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0,0.1,0,0.2,0,0.2c-0.1,0.5,0.2,0.9,0.7,1
|
||||
c0,0,0.1,0,0.1,0c0.4,0,0.8-0.3,0.8-0.7c0-0.2,0.1-0.5,0.1-0.8c0,0,0-0.1,0-0.1c0-0.5-0.4-0.8-0.9-0.8c0,0,0,0,0,0
|
||||
C27.8,115.3,27.5,115.7,27.5,116.2z"/>
|
||||
<path class="st3" d="M26.3,120.5c0.1,0,0.3,0,0.4-0.1c0.3-0.1,0.5-0.3,0.7-0.5c0.4-0.3,0.4-0.8,0.1-1.2c-0.2-0.2-0.4-0.3-0.7-0.3
|
||||
c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.1-0.3,0.2-0.5,0.3c-0.4,0.2-0.6,0.8-0.3,1.2C25.7,120.4,26,120.5,26.3,120.5z"/>
|
||||
<path class="st3" d="M20.2,118.3c0.1,0.3,0.5,0.5,0.8,0.5c0.1,0,0.2,0,0.4-0.1c0.4-0.2,0.6-0.7,0.4-1.1c0-0.1-0.1-0.1-0.1-0.2l0,0
|
||||
c0,0,0,0,0,0l0,0c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0-0.1-0.1-0.2-0.1-0.3
|
||||
c-0.1-0.4-0.4-0.6-0.8-0.6c-0.1,0-0.1,0-0.2,0c-0.5,0.1-0.7,0.6-0.6,1C20,117.7,20.1,118,20.2,118.3z"/>
|
||||
<path class="st3" d="M20.7,115.3c0.1,0.1,0.3,0.1,0.4,0.1c0.3,0,0.6-0.2,0.8-0.5c0.1-0.1,0.1-0.2,0.2-0.3c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0.1-0.1,0.1-0.1c0.3-0.4,0.2-0.9-0.2-1.2c-0.2-0.1-0.3-0.2-0.5-0.2
|
||||
c-0.3,0-0.5,0.1-0.7,0.3c-0.2,0.2-0.3,0.5-0.5,0.7C20.1,114.5,20.2,115.1,20.7,115.3z"/>
|
||||
<path class="st3" d="M22.6,120.6c0.3,0.1,0.5,0.2,0.8,0.3c0.1,0,0.1,0,0.2,0c0.4,0,0.7-0.3,0.8-0.7c0.1-0.5-0.2-0.9-0.6-1
|
||||
c0,0,0,0,0,0l0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c-0.2,0-0.3-0.1-0.5-0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.1c-0.3,0-0.6,0.2-0.8,0.5C22,119.9,22.2,120.4,22.6,120.6z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 30 KiB |
|
@ -1,124 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, 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 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.49;}
|
||||
.st1{opacity:0.9;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#FFFFFF;}
|
||||
.st4{fill:#EAEAEA;}
|
||||
.st5{opacity:0.49;fill:#EAEAEA;}
|
||||
</style>
|
||||
<g class="st0">
|
||||
<g class="st1">
|
||||
<path class="st2" d="M50,146.4c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g class="st1">
|
||||
<path class="st3" d="M50,46.6c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46.6z"/>
|
||||
</g>
|
||||
<path d="M27.3,21.1v3.5c0,0.6-0.5,1.1-1.1,1.1H13c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1h3.8c-0.1-0.4-0.3-0.9-0.3-1.3
|
||||
H13c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7c0,0.3,0.3,0.7,0.6,0.7h8.5
|
||||
c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7V27c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4v-4.4
|
||||
C28.2,20.5,27.8,20.8,27.3,21.1z"/>
|
||||
<path d="M35.7,19.8h-3.7c-0.9,0-1.6-0.9-2.1-1.7c-0.2-0.3-0.6-0.8-0.8-1c-0.2,0.1-0.6,0.6-0.8,0.9c-0.6,0.8-1.2,1.8-2.2,1.8h-3.5
|
||||
c-2.8,0-5-2.2-5-5v-2.3c0-2.8,2.3-5,5-5h13.1c2.8,0,5,2.2,5,5v2.3C40.8,17.6,38.5,19.8,35.7,19.8z M29.2,15.8c0.8,0,1.4,0.8,1.9,1.6
|
||||
c0.2,0.4,0.8,1.1,1,1.1h3.7c2,0,3.7-1.6,3.7-3.7v-2.3c0-2-1.7-3.7-3.7-3.7H22.7c-2,0-3.7,1.6-3.7,3.7v2.3c0,2,1.7,3.7,3.7,3.7h3.5
|
||||
c0.3,0,0.8-0.7,1.1-1.2C27.8,16.5,28.4,15.8,29.2,15.8C29.2,15.8,29.2,15.8,29.2,15.8z"/>
|
||||
<path d="M36.9,21.6c-0.2-0.1-0.4,0-0.6,0.1l-1.8,1.8l0.7,0.7l0.9-0.9c0,0,0.3,1.3-0.7,2.4c-1,1-2.3,0.6-2.3,0.6l0.8-0.8l-0.8-0.8
|
||||
l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,1.7,0.3,3.1-1.1c1.3-1.3,1-3.1,1-3.1
|
||||
l0.8,0.8l0.8-0.8l-1.6-1.6C37.2,21.8,37,21.7,36.9,21.6z"/>
|
||||
<g>
|
||||
<path d="M10.3,37.9c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2s0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6s-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2S6.4,42.2,6,41.9
|
||||
l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1c0.7,0,1-0.2,1-0.7
|
||||
c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2c-0.3-0.1-0.6-0.2-0.8-0.3
|
||||
s-0.4-0.2-0.6-0.3c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9c0.1-0.3,0.3-0.5,0.5-0.6
|
||||
s0.5-0.3,0.7-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.3,1,0.5L10.3,37.9z"/>
|
||||
<path d="M14.3,36.3h1.1l0.7,2.1l0.7-2.1H18L17,39.2l0.8,2l1.8-5h1.4l-2.6,6.4h-1L16.2,40l-1.1,2.7h-1l-2.6-6.4h1.3l1.8,5l0.8-2
|
||||
L14.3,36.3z"/>
|
||||
<path d="M21.8,42.6v-6.4h1.2v6.4H21.8z"/>
|
||||
<path d="M29.4,37.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V37.3z"/>
|
||||
<path d="M30,39.4c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7s0.8-0.3,1.3-0.3c0.6,0,1.1,0.1,1.5,0.4
|
||||
c0.4,0.3,0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1,0-0.3,0-0.4,0
|
||||
c-0.3,0-0.6,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.1,0.2-0.3,0.4-0.3,0.7s-0.1,0.5-0.1,0.8c0,0.3,0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7
|
||||
c0.2,0.2,0.3,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.3-0.2,0.4-0.3
|
||||
c0.1-0.1,0.2-0.3,0.3-0.4l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.6c-0.2,0.2-0.4,0.3-0.6,0.5c-0.2,0.1-0.5,0.2-0.7,0.3
|
||||
c-0.3,0.1-0.5,0.1-0.8,0.1c-0.4,0-0.9-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1C30.1,40.2,30,39.8,30,39.4z"/>
|
||||
<path d="M42,36.3v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H42z"/>
|
||||
</g>
|
||||
<g class="st1">
|
||||
<path class="st2" d="M50,96.6c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.6z"/>
|
||||
</g>
|
||||
<path class="st4" d="M27.3,71.1v3.5c0,0.6-0.5,1.1-1.1,1.1H13c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1h3.8
|
||||
c-0.1-0.4-0.3-0.9-0.3-1.3H13c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
c0,0.3,0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7V77c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4
|
||||
v-4.4C28.2,70.5,27.8,70.8,27.3,71.1z"/>
|
||||
<path class="st4" d="M35.7,69.8h-3.7c-0.9,0-1.6-0.9-2.1-1.7c-0.2-0.3-0.6-0.8-0.8-1c-0.2,0.1-0.6,0.6-0.8,0.9
|
||||
c-0.6,0.8-1.2,1.8-2.2,1.8h-3.5c-2.8,0-5-2.2-5-5v-2.3c0-2.8,2.3-5,5-5h13.1c2.8,0,5,2.2,5,5v2.3C40.8,67.6,38.5,69.8,35.7,69.8z
|
||||
M29.2,65.8c0.8,0,1.4,0.8,1.9,1.6c0.2,0.4,0.8,1.1,1,1.1h3.7c2,0,3.7-1.6,3.7-3.7v-2.3c0-2-1.7-3.7-3.7-3.7H22.7
|
||||
c-2,0-3.7,1.6-3.7,3.7v2.3c0,2,1.7,3.7,3.7,3.7h3.5c0.3,0,0.8-0.7,1.1-1.2C27.8,66.5,28.4,65.8,29.2,65.8
|
||||
C29.2,65.8,29.2,65.8,29.2,65.8z"/>
|
||||
<path class="st4" d="M36.9,71.6c-0.2-0.1-0.4,0-0.6,0.1l-1.8,1.8l0.7,0.7l0.9-0.9c0,0,0.3,1.3-0.7,2.4c-1,1-2.3,0.6-2.3,0.6l0.8-0.8
|
||||
l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,1.7,0.3,3.1-1.1
|
||||
c1.3-1.3,1-3.1,1-3.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.2,71.8,37,71.7,36.9,71.6z"/>
|
||||
<g>
|
||||
<path class="st4" d="M10.3,87.9c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2s-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2S7.6,87.8,7.6,88c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3s0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2
|
||||
c-0.5-0.1-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3S6.5,89,6.4,88.8c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4s0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2s0.7,0.3,1,0.5L10.3,87.9z"/>
|
||||
<path class="st4" d="M14.3,86.3h1.1l0.7,2.1l0.7-2.1H18L17,89.2l0.8,2l1.8-5h1.4l-2.6,6.4h-1L16.2,90l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L14.3,86.3z"/>
|
||||
<path class="st4" d="M21.8,92.6v-6.4h1.2v6.4H21.8z"/>
|
||||
<path class="st4" d="M29.4,87.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V87.3z"/>
|
||||
<path class="st4" d="M30,89.4c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7c0.4-0.2,0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4s0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3s-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3,0-0.4,0c-0.3,0-0.6,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.1,0.2-0.3,0.4-0.3,0.7s-0.1,0.5-0.1,0.8c0,0.3,0,0.6,0.1,0.8
|
||||
c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1c0.1,0,0.3-0.1,0.4-0.2
|
||||
c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.4l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.6c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.7,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.4,0-0.9-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C30.1,90.2,30,89.8,30,89.4z"/>
|
||||
<path class="st4" d="M42,86.2v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H42z"/>
|
||||
</g>
|
||||
<path class="st5" d="M27.3,121.1v3.5c0,0.6-0.5,1.1-1.1,1.1H13c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1h3.8
|
||||
c-0.1-0.4-0.3-0.9-0.3-1.3H13c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
c0,0.3,0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7V127c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4
|
||||
v-4.4C28.2,120.5,27.8,120.8,27.3,121.1z"/>
|
||||
<path class="st5" d="M35.7,119.8h-3.7c-0.9,0-1.6-0.9-2.1-1.7c-0.2-0.3-0.6-0.8-0.8-1c-0.2,0.1-0.6,0.6-0.8,0.9
|
||||
c-0.6,0.8-1.2,1.8-2.2,1.8h-3.5c-2.8,0-5-2.2-5-5v-2.3c0-2.8,2.3-5,5-5h13.1c2.8,0,5,2.2,5,5v2.3C40.8,117.6,38.5,119.8,35.7,119.8z
|
||||
M29.2,115.8c0.8,0,1.4,0.8,1.9,1.6c0.2,0.4,0.8,1.1,1,1.1h3.7c2,0,3.7-1.6,3.7-3.7v-2.3c0-2-1.7-3.7-3.7-3.7H22.7
|
||||
c-2,0-3.7,1.6-3.7,3.7v2.3c0,2,1.7,3.7,3.7,3.7h3.5c0.3,0,0.8-0.7,1.1-1.2C27.8,116.5,28.4,115.8,29.2,115.8
|
||||
C29.2,115.8,29.2,115.8,29.2,115.8z"/>
|
||||
<path class="st5" d="M36.9,121.6c-0.2-0.1-0.4,0-0.6,0.1l-1.8,1.8l0.7,0.7l0.9-0.9c0,0,0.3,1.3-0.7,2.4c-1,1-2.3,0.6-2.3,0.6
|
||||
l0.8-0.8l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,1.7,0.3,3.1-1.1
|
||||
c1.3-1.3,1-3.1,1-3.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.2,121.8,37,121.7,36.9,121.6z"/>
|
||||
<g class="st0">
|
||||
<path class="st4" d="M10.3,137.9c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2s-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.3,0-0.6,0.1-0.8,0.2s-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3s0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7
|
||||
c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2
|
||||
c-0.5-0.1-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3s-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4s0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2s0.7,0.3,1,0.5L10.3,137.9z"/>
|
||||
<path class="st4" d="M14.3,136.3h1.1l0.7,2.1l0.7-2.1H18l-1.1,2.9l0.8,2l1.8-5h1.4l-2.6,6.4h-1l-1.1-2.7l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L14.3,136.3z"/>
|
||||
<path class="st4" d="M21.8,142.6v-6.4h1.2v6.4H21.8z"/>
|
||||
<path class="st4" d="M29.4,137.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V137.3z"/>
|
||||
<path class="st4" d="M30,139.4c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1c0.3-0.3,0.6-0.5,1-0.7c0.4-0.2,0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4s0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3s-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3,0-0.4,0c-0.3,0-0.6,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.1,0.2-0.3,0.4-0.3,0.7s-0.1,0.5-0.1,0.8c0,0.3,0,0.6,0.1,0.8
|
||||
c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.3,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1c0.1,0,0.3-0.1,0.4-0.2
|
||||
c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.4l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.6c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.7,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.4,0-0.9-0.1-1.2-0.3c-0.4-0.2-0.7-0.4-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C30.1,140.2,30,139.8,30,139.4z"/>
|
||||
<path class="st4" d="M42,136.2v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H42z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
147
scripts/system/assets/images/tools/market.svg
Normal file
|
@ -0,0 +1,147 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#333333;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<g>
|
||||
<path class="st3" d="M12,42.3v-4.2l-1.6,3.1H9.6L8,38.1v4.2H6.7v-6.4h1.3l1.9,3.6l1.9-3.6h1.3v6.4H12z"/>
|
||||
<path class="st3" d="M14.1,42.3l2.5-6.4h1l2.5,6.4h-1.3l-0.6-1.6H16l-0.6,1.6H14.1z M17.1,37.3l-0.9,2.6H18L17.1,37.3z"/>
|
||||
<path class="st3" d="M21.1,42.3v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H21.1z M22.3,39.1h1.6c0.1,0,0.2,0,0.3-0.1
|
||||
c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3
|
||||
c-0.1-0.1-0.2-0.2-0.3-0.2C24,37.1,23.9,37,23.8,37h-1.5V39.1z"/>
|
||||
<path class="st3" d="M27.3,42.3v-6.4h1.2v3.1l2.8-3.1h1.3l-2.4,2.8l2.6,3.6h-1.3l-2-2.9l-0.9,0.9v1.9H27.3z"/>
|
||||
<path class="st3" d="M38,41.2v1.1h-4.4v-6.4h4.4V37h-3.1v1.5h2.7v1h-2.7v1.7H38z"/>
|
||||
<path class="st3" d="M44,37h-2v5.3h-1.2V37h-2v-1.1H44V37z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st3" d="M14.1,11.7c0.2,0,0.3,0,0.5,0c0.3,0,0.5,0,0.8,0.1c0.4,0.1,0.8,0.4,1,0.8c0.1,0.2,0.2,0.5,0.3,0.8
|
||||
c0.1,0.3,0.2,0.6,0.3,1c0.1,0.5,0.3,1,0.4,1.4c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.4,0.2,0.8,0.4,1.2c0.1,0.5,0.3,1,0.4,1.5
|
||||
c0,0.1,0.1,0.2,0.1,0.3c0.1,0.5,0.2,0.9,0.4,1.3c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.7,0.3,1.1,0.3c0.1,0,0.2,0,0.4,0l1.1,0l2.9,0
|
||||
c1.3,0,2.5,0,3.8,0c0.6,0,1.3,0,1.9,0c0,0,0.1,0,0.1,0c0.3,0,0.6,0,0.9-0.1c0.2-0.1,0.4-0.5,0.4-0.8l0,0l0.1-0.5c0,0,0,0,0,0
|
||||
c0-0.1,0-0.1,0-0.1h0c0.3-1,0.6-2.1,0.9-3.1c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.4,0.2-0.8,0.4-1.2c0.1-0.4,0.2-0.8,0-1.1
|
||||
c-0.1-0.2-0.4-0.2-0.7-0.2c-0.3,0-9.6,0.1-14.5,0.2l-0.2,0l-0.3-1.1c0-0.1-0.1-0.3-0.1-0.5c0-0.1-0.1-0.2-0.1-0.3
|
||||
c0-0.1,0-0.1-0.1-0.2c0-0.2-0.1-0.4-0.1-0.5c-0.1-0.3-0.3-0.7-0.6-0.9c-0.2-0.2-0.5-0.4-0.9-0.5c-0.2,0-0.3,0-0.5-0.1
|
||||
c-0.2,0-0.5,0-0.7,0c-1,0-2,0-3,0c-0.1,0-0.1,0-0.2,0c-0.2,0-0.4,0-0.5,0c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.2-0.2,0.6-0.1,0.9
|
||||
c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4,0,0.6,0c0.3,0,0.6,0,0.8,0l0.9,0C13.8,11.7,14,11.7,14.1,11.7z M32.1,15.7l-1.3,4.7l-0.3,0.2
|
||||
l-0.1,0c-0.1,0-1.1,0-2.8,0c-2.5,0-6,0-6.4,0l0,0h0c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.4-0.8c-0.1-0.6-0.3-1.3-0.5-2
|
||||
c-0.1-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.2-0.7l-0.2-0.6H32.1z"/>
|
||||
<path class="st3" d="M22.2,24.1L22.2,24.1c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.9,0,1.5-0.6,1.5-1.5c0-0.4-0.2-0.8-0.4-1C23,24.2,22.7,24.1,22.2,24.1z"/>
|
||||
<path class="st3" d="M29.3,24.1L29.3,24.1c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1.1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.8,0,1.5-0.7,1.5-1.5c0-0.4-0.1-0.7-0.4-1C30.1,24.2,29.8,24.1,29.3,24.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M12,92.3v-4.2l-1.6,3.1H9.6L8,88.1v4.2H6.7v-6.4h1.3l1.9,3.6l1.9-3.6h1.3v6.4H12z"/>
|
||||
<path class="st1" d="M14.1,92.3l2.5-6.4h1l2.5,6.4h-1.3l-0.6-1.6H16l-0.6,1.6H14.1z M17.1,87.3l-0.9,2.6H18L17.1,87.3z"/>
|
||||
<path class="st1" d="M21.1,92.3v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H21.1z M22.3,89.1h1.6c0.1,0,0.2,0,0.3-0.1
|
||||
c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3
|
||||
c-0.1-0.1-0.2-0.2-0.3-0.2C24,87.1,23.9,87,23.8,87h-1.5V89.1z"/>
|
||||
<path class="st1" d="M27.3,92.3v-6.4h1.2v3.1l2.8-3.1h1.3l-2.4,2.8l2.6,3.6h-1.3l-2-2.9l-0.9,0.9v1.9H27.3z"/>
|
||||
<path class="st1" d="M38,91.2v1.1h-4.4v-6.4h4.4V87h-3.1v1.5h2.7v1h-2.7v1.7H38z"/>
|
||||
<path class="st1" d="M44,87h-2v5.3h-1.2V87h-2v-1.1H44V87z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M14.1,61.7c0.2,0,0.3,0,0.5,0c0.3,0,0.5,0,0.8,0.1c0.4,0.1,0.8,0.4,1,0.8c0.1,0.2,0.2,0.5,0.3,0.8
|
||||
c0.1,0.3,0.2,0.6,0.3,1c0.1,0.5,0.3,1,0.4,1.4c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.4,0.2,0.8,0.4,1.2c0.1,0.5,0.3,1,0.4,1.5
|
||||
c0,0.1,0.1,0.2,0.1,0.3c0.1,0.5,0.2,0.9,0.4,1.3c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.7,0.3,1.1,0.3c0.1,0,0.2,0,0.4,0l1.1,0l2.9,0
|
||||
c1.3,0,2.5,0,3.8,0c0.6,0,1.3,0,1.9,0c0,0,0.1,0,0.1,0c0.3,0,0.6,0,0.9-0.1c0.2-0.1,0.4-0.5,0.4-0.8l0,0l0.1-0.5c0,0,0,0,0,0
|
||||
c0-0.1,0-0.1,0-0.1h0c0.3-1,0.6-2.1,0.9-3.1c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.4,0.2-0.8,0.4-1.2c0.1-0.4,0.2-0.8,0-1.1
|
||||
c-0.1-0.2-0.4-0.2-0.7-0.2c-0.3,0-9.6,0.1-14.5,0.2l-0.2,0l-0.3-1.1c0-0.1-0.1-0.3-0.1-0.5c0-0.1-0.1-0.2-0.1-0.3
|
||||
c0-0.1,0-0.1-0.1-0.2c0-0.2-0.1-0.4-0.1-0.5c-0.1-0.3-0.3-0.7-0.6-0.9c-0.2-0.2-0.5-0.4-0.9-0.5c-0.2,0-0.3,0-0.5-0.1
|
||||
c-0.2,0-0.5,0-0.7,0c-1,0-2,0-3,0c-0.1,0-0.1,0-0.2,0c-0.2,0-0.4,0-0.5,0c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.2-0.2,0.6-0.1,0.9
|
||||
c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4,0,0.6,0c0.3,0,0.6,0,0.8,0l0.9,0C13.8,61.7,14,61.7,14.1,61.7z M32.1,65.7l-1.3,4.7l-0.3,0.2
|
||||
l-0.1,0c-0.1,0-1.1,0-2.8,0c-2.5,0-6,0-6.4,0l0,0h0c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.4-0.8c-0.1-0.6-0.3-1.3-0.5-2
|
||||
c-0.1-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.2-0.7l-0.2-0.6H32.1z"/>
|
||||
<path class="st1" d="M22.2,74.1L22.2,74.1c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.9,0,1.5-0.6,1.5-1.5c0-0.4-0.2-0.8-0.4-1C23,74.2,22.7,74.1,22.2,74.1z"/>
|
||||
<path class="st1" d="M29.3,74.1L29.3,74.1c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1.1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.8,0,1.5-0.7,1.5-1.5c0-0.4-0.1-0.7-0.4-1C30.1,74.2,29.8,74.1,29.3,74.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M11.8,142.4v-4.2l-1.6,3.1H9.5l-1.6-3.1v4.2H6.6V136h1.3l1.9,3.6l1.9-3.6H13v6.4H11.8z"/>
|
||||
<path class="st1" d="M13.9,142.4l2.5-6.4h1l2.5,6.4h-1.3l-0.6-1.6h-2.2l-0.6,1.6H13.9z M17,137.4l-0.9,2.6h1.8L17,137.4z"/>
|
||||
<path class="st1" d="M20.9,142.4V136h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8
|
||||
c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H20.9z M22.1,139.2h1.6c0.1,0,0.2,0,0.3-0.1
|
||||
c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3
|
||||
c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1-0.1-0.2-0.1-0.3-0.1h-1.5V139.2z"/>
|
||||
<path class="st1" d="M27.2,142.4V136h1.2v3.1l2.8-3.1h1.3l-2.4,2.8l2.6,3.6h-1.3l-2-2.9l-0.9,0.9v1.9H27.2z"/>
|
||||
<path class="st1" d="M37.8,141.3v1.1h-4.4V136h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H37.8z"/>
|
||||
<path class="st1" d="M43.8,137.1h-2v5.3h-1.2v-5.3h-2V136h5.3V137.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M13.9,111.8c0.2,0,0.3,0,0.5,0c0.3,0,0.5,0,0.8,0.1c0.4,0.1,0.8,0.4,1,0.8c0.1,0.2,0.2,0.5,0.3,0.8
|
||||
c0.1,0.3,0.2,0.6,0.3,1c0.1,0.5,0.3,1,0.4,1.4c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.4,0.2,0.8,0.4,1.2c0.1,0.5,0.3,1,0.4,1.5
|
||||
c0,0.1,0.1,0.2,0.1,0.3c0.1,0.5,0.2,0.9,0.4,1.3c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.7,0.3,1.1,0.3c0.1,0,0.2,0,0.4,0l1.1,0l2.9,0
|
||||
c1.3,0,2.5,0,3.8,0c0.6,0,1.3,0,1.9,0c0,0,0.1,0,0.1,0c0.3,0,0.6,0,0.9-0.1c0.2-0.1,0.4-0.5,0.4-0.8l0,0l0.1-0.5c0,0,0,0,0,0
|
||||
c0-0.1,0-0.1,0-0.1h0c0.3-1,0.6-2.1,0.9-3.1c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.4,0.2-0.8,0.4-1.2c0.1-0.4,0.2-0.8,0-1.1
|
||||
c-0.1-0.2-0.4-0.2-0.7-0.2c-0.3,0-9.6,0.1-14.5,0.2l-0.2,0l-0.3-1.1c0-0.1-0.1-0.3-0.1-0.5c0-0.1-0.1-0.2-0.1-0.3
|
||||
c0-0.1,0-0.1-0.1-0.2c0-0.2-0.1-0.4-0.1-0.5c-0.1-0.3-0.3-0.7-0.6-0.9c-0.2-0.2-0.5-0.4-0.9-0.5c-0.2,0-0.3,0-0.5-0.1
|
||||
c-0.2,0-0.5,0-0.7,0c-1,0-2,0-3,0c-0.1,0-0.1,0-0.2,0c-0.2,0-0.4,0-0.5,0c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.2-0.2,0.6-0.1,0.9
|
||||
c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4,0,0.6,0c0.3,0,0.6,0,0.8,0l0.9,0C13.7,111.8,13.8,111.8,13.9,111.8z M32,115.8l-1.3,4.7
|
||||
l-0.3,0.2l-0.1,0c-0.1,0-1.1,0-2.8,0c-2.5,0-6,0-6.4,0l0,0h0c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.4-0.8
|
||||
c-0.1-0.6-0.3-1.3-0.5-2c-0.1-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.2-0.7l-0.2-0.6H32z"/>
|
||||
<path class="st1" d="M22.1,124.2L22.1,124.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.9,0,1.5-0.6,1.5-1.5c0-0.4-0.2-0.8-0.4-1C22.9,124.3,22.5,124.2,22.1,124.2z"/>
|
||||
<path class="st1" d="M29.2,124.2L29.2,124.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1.1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.8,0,1.5-0.7,1.5-1.5c0-0.4-0.1-0.7-0.4-1C30,124.3,29.6,124.2,29.2,124.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M11.8,192.5v-4.2l-1.6,3.1H9.5l-1.6-3.1v4.2H6.6v-6.4h1.3l1.9,3.6l1.9-3.6H13v6.4H11.8z"/>
|
||||
<path class="st1" d="M13.9,192.5l2.5-6.4h1l2.5,6.4h-1.3l-0.6-1.6h-2.2l-0.6,1.6H13.9z M17,187.4L16,190h1.8L17,187.4z"/>
|
||||
<path class="st1" d="M20.9,192.5v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7
|
||||
c0.1,0.3,0.2,0.5,0.2,0.8c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H20.9z M22.1,189.2h1.6
|
||||
c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4
|
||||
s-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1-0.1-0.2-0.1-0.3-0.1h-1.5V189.2z"/>
|
||||
<path class="st1" d="M27.2,192.5v-6.4h1.2v3.1l2.8-3.1h1.3l-2.4,2.8l2.6,3.6h-1.3l-2-2.9l-0.9,0.9v1.9H27.2z"/>
|
||||
<path class="st1" d="M37.8,191.4v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H37.8z"/>
|
||||
<path class="st1" d="M43.8,187.2h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V187.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M13.9,161.8c0.2,0,0.3,0,0.5,0c0.3,0,0.5,0,0.8,0.1c0.4,0.1,0.8,0.4,1,0.8c0.1,0.2,0.2,0.5,0.3,0.8
|
||||
c0.1,0.3,0.2,0.6,0.3,1c0.1,0.5,0.3,1,0.4,1.4c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.4,0.2,0.8,0.4,1.2c0.1,0.5,0.3,1,0.4,1.5
|
||||
c0,0.1,0.1,0.2,0.1,0.3c0.1,0.5,0.2,0.9,0.4,1.3c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.7,0.3,1.1,0.3c0.1,0,0.2,0,0.4,0l1.1,0l2.9,0
|
||||
c1.3,0,2.5,0,3.8,0c0.6,0,1.3,0,1.9,0c0,0,0.1,0,0.1,0c0.3,0,0.6,0,0.9-0.1c0.2-0.1,0.4-0.5,0.4-0.8l0,0l0.1-0.5c0,0,0,0,0,0
|
||||
c0-0.1,0-0.1,0-0.1h0c0.3-1,0.6-2.1,0.9-3.1c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.4,0.2-0.8,0.4-1.2c0.1-0.4,0.2-0.8,0-1.1
|
||||
c-0.1-0.2-0.4-0.2-0.7-0.2c-0.3,0-9.6,0.1-14.5,0.2l-0.2,0l-0.3-1.1c0-0.1-0.1-0.3-0.1-0.5c0-0.1-0.1-0.2-0.1-0.3
|
||||
c0-0.1,0-0.1-0.1-0.2c0-0.2-0.1-0.4-0.1-0.5c-0.1-0.3-0.3-0.7-0.6-0.9c-0.2-0.2-0.5-0.4-0.9-0.5c-0.2,0-0.3,0-0.5-0.1
|
||||
c-0.2,0-0.5,0-0.7,0c-1,0-2,0-3,0c-0.1,0-0.1,0-0.2,0c-0.2,0-0.4,0-0.5,0c-0.2,0-0.3,0.1-0.4,0.2c-0.2,0.2-0.2,0.6-0.1,0.9
|
||||
c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4,0,0.6,0c0.3,0,0.6,0,0.8,0l0.9,0C13.7,161.8,13.8,161.8,13.9,161.8z M32,165.8l-1.3,4.7
|
||||
l-0.3,0.2l-0.1,0c-0.1,0-1.1,0-2.8,0c-2.5,0-6,0-6.4,0l0,0h0c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.4-0.8
|
||||
c-0.1-0.6-0.3-1.3-0.5-2c-0.1-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.2-0.7l-0.2-0.6H32z"/>
|
||||
<path class="st1" d="M22.1,174.2L22.1,174.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.9,0,1.5-0.6,1.5-1.5c0-0.4-0.2-0.8-0.4-1C22.9,174.3,22.5,174.2,22.1,174.2z"/>
|
||||
<path class="st1" d="M29.2,174.2L29.2,174.2c-0.5,0-0.8,0.1-1.1,0.3c-0.3,0.3-0.4,0.6-0.4,1.1c0,0.4,0.1,0.8,0.4,1.1
|
||||
c0.3,0.3,0.6,0.4,1.1,0.4c0.8,0,1.5-0.7,1.5-1.5c0-0.4-0.1-0.7-0.4-1C30,174.3,29.6,174.2,29.2,174.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
126
scripts/system/assets/images/tools/mic.svg
Normal file
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#1E1E1E;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<g>
|
||||
<path class="st2" d="M18,192.8v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2v-6.4h1.3l1.9,3.6l1.9-3.6h1.3v6.4H18z"/>
|
||||
<path class="st2" d="M23.5,191.8c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3h1.2v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-0.9-0.1-1.3-0.3
|
||||
c-0.4-0.2-0.6-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3H22v3.3c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.2,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.3,0.5,0.5S23.2,191.8,23.5,191.8z"/>
|
||||
<path class="st2" d="M32.6,187.5h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V187.5z"/>
|
||||
<path class="st2" d="M38,191.8v1.1h-4.4v-6.4H38v1.1h-3.1v1.5h2.7v1h-2.7v1.7H38z"/>
|
||||
</g>
|
||||
<path class="st2" d="M28.2,115.4l1.1-1.1c-1.1-1.3-2.7-2.1-4.6-2.1c-1.7,0-3.3,0.8-4.4,2c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c0.8-0.9,2-1.5,3.3-1.5C26.2,113.7,27.4,114.4,28.2,115.4z"/>
|
||||
<path class="st2" d="M30.8,112.8l1.1-1.1c-1.8-2-4.4-3.2-7.2-3.2c-2.8,0-5.3,1.2-7,3c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c1.5-1.6,3.6-2.6,5.9-2.6C27.2,110,29.4,111.1,30.8,112.8z"/>
|
||||
<path class="st2" d="M26.7,119.9v-2.4c0-1.1-0.9-1.9-1.9-1.9h0c-1.1,0-1.9,0.9-1.9,1.9v2.4H26.7z"/>
|
||||
<path class="st2" d="M22.9,121.5v2.4c0,1.1,0.9,1.9,1.9,1.9h0c1.1,0,1.9-0.9,1.9-1.9v-2.4H22.9z"/>
|
||||
<path class="st2" d="M30.6,124.3c0,0,0-2.6,0-2.7c0-0.5-0.4-0.9-1-0.9c-0.5,0-0.9,0.4-0.9,0.9c0,0.2,0,2.5,0,2.7
|
||||
c0,1.9-1.7,3.5-3.9,3.5c-2.1,0-3.9-1.6-3.9-3.5c0-0.2,0-2.6,0-2.8c0-0.5-0.4-0.9-0.9-1c-0.5,0-0.9,0.3-1,0.9c0,0.1,0,2.8,0,2.9
|
||||
c0,2.6,2.1,4.8,4.8,5.2l0,1.8h-2.2c-0.5,0-0.9,0.4-0.9,0.9c0,0.5,0.4,0.9,0.9,0.9H28c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9
|
||||
h-2.3l0-1.8C28.5,129.1,30.6,126.9,30.6,124.3z"/>
|
||||
<path class="st2" d="M28.3,65.3l1.1-1.1c-1.1-1.3-2.7-2.1-4.6-2.1c-1.7,0-3.3,0.8-4.4,2c0.4,0.4,0.8,0.8,1.1,1.1
|
||||
c0.8-0.9,2-1.5,3.3-1.5C26.3,63.6,27.5,64.3,28.3,65.3z"/>
|
||||
<path class="st2" d="M31,62.7l1.1-1.1c-1.8-2-4.4-3.2-7.2-3.2c-2.8,0-5.3,1.2-7,3c0.4,0.4,0.8,0.8,1.1,1.1c1.5-1.6,3.6-2.6,5.9-2.6
|
||||
C27.3,59.9,29.5,61,31,62.7z"/>
|
||||
<path class="st2" d="M26.9,69.8v-2.4c0-1.1-0.9-1.9-1.9-1.9h0c-1.1,0-1.9,0.9-1.9,1.9v2.4H26.9z"/>
|
||||
<path class="st2" d="M23,71.4v2.4c0,1.1,0.9,1.9,1.9,1.9h0c1.1,0,1.9-0.9,1.9-1.9v-2.4H23z"/>
|
||||
<path class="st2" d="M30.7,74.2c0,0,0-2.6,0-2.7c0-0.5-0.4-0.9-1-0.9c-0.5,0-0.9,0.4-0.9,0.9c0,0.2,0,2.5,0,2.7
|
||||
c0,1.9-1.7,3.5-3.9,3.5c-2.1,0-3.9-1.6-3.9-3.5c0-0.2,0-2.6,0-2.8c0-0.5-0.4-0.9-0.9-1c-0.5,0-0.9,0.3-1,0.9c0,0.1,0,2.8,0,2.9
|
||||
c0,2.6,2.1,4.8,4.8,5.2l0,1.8h-2.2c-0.5,0-0.9,0.4-0.9,0.9c0,0.5,0.4,0.9,0.9,0.9h6.4c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9
|
||||
h-2.3l0-1.8C28.6,79,30.7,76.9,30.7,74.2z"/>
|
||||
<g>
|
||||
<path class="st2" d="M18,92.8v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2v-6.4h1.3l1.9,3.6l1.9-3.6h1.3v6.4H18z"/>
|
||||
<path class="st2" d="M23.5,91.8c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3h1.2v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-0.9-0.1-1.3-0.3
|
||||
c-0.4-0.2-0.6-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3H22v3.3c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.2,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.3,0.5,0.5S23.2,91.8,23.5,91.8z"/>
|
||||
<path class="st2" d="M32.6,87.5h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V87.5z"/>
|
||||
<path class="st2" d="M38,91.8v1.1h-4.4v-6.4H38v1.1h-3.1v1.5h2.7v1h-2.7v1.7H38z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M8.3,41.9c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3h1.2v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7C9.3,42.9,8.8,43,8.3,43c-0.5,0-0.9-0.1-1.3-0.3
|
||||
c-0.4-0.2-0.6-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3h1.2v3.3c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.2,0.1,0.5,0.3,0.7s0.3,0.3,0.5,0.5S8,41.9,8.3,41.9z"/>
|
||||
<path class="st2" d="M13.8,38.8v4.1h-1.2v-6.4h1l3.3,4.2v-4.2h1.2v6.4h-1L13.8,38.8z"/>
|
||||
<path class="st2" d="M24.9,42.9v-4.2l-1.6,3.1h-0.7l-1.6-3.1v4.2h-1.2v-6.4H21l1.9,3.6l1.9-3.6h1.3v6.4H24.9z"/>
|
||||
<path class="st2" d="M30.4,41.9c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3h1.2v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-0.9-0.1-1.3-0.3
|
||||
c-0.4-0.2-0.6-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3h1.2v3.3c0,0.3,0,0.5,0.1,0.8
|
||||
c0.1,0.2,0.1,0.5,0.3,0.7s0.3,0.3,0.5,0.5S30.1,41.9,30.4,41.9z"/>
|
||||
<path class="st2" d="M39.4,37.6h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V37.6z"/>
|
||||
<path class="st2" d="M44.9,41.8v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H44.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<polygon class="st2" points="27.3,18.7 27.3,18.7 27.3,18.7 "/>
|
||||
<path class="st2" d="M26.1,14.4l2.7-2.7c0.4-0.4,0.4-1.1,0-1.5c-0.4-0.4-1.1-0.4-1.5,0l-2.7,2.7l-2.7-2.7c-0.4-0.4-1.1-0.4-1.5,0
|
||||
s-0.4,1.1,0,1.5l2.7,2.7l-2.7,2.7c-0.4,0.4-0.4,1.1,0,1.5c0.4,0.4,1.1,0.4,1.5,0l2.7-2.7l2.7,2.7c0.4,0.4,1.1,0.4,1.5,0
|
||||
c0.4-0.4,0.4-1.1,0-1.5L26.1,14.4z"/>
|
||||
</g>
|
||||
<path class="st2" d="M22.9,21.6V24c0,1.1,0.9,1.9,1.9,1.9h0c1.1,0,1.9-0.9,1.9-1.9v-2.4H22.9z"/>
|
||||
<path class="st2" d="M30.6,24.4c0,0,0-2.6,0-2.7c0-0.5-0.4-0.9-1-0.9c-0.5,0-0.9,0.4-0.9,0.9c0,0.2,0,2.5,0,2.7
|
||||
c0,1.9-1.7,3.5-3.9,3.5c-2.1,0-3.9-1.6-3.9-3.5c0-0.2,0-2.6,0-2.8c0-0.5-0.4-0.9-0.9-1c-0.5,0-0.9,0.3-1,0.9c0,0.1,0,2.8,0,2.9
|
||||
c0,2.6,2.1,4.8,4.8,5.2l0,1.8h-2.2c-0.5,0-0.9,0.4-0.9,0.9c0,0.5,0.4,0.9,0.9,0.9H28c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9
|
||||
h-2.3l0-1.8C28.5,29.2,30.6,27,30.6,24.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<polygon class="st2" points="27.3,168.6 27.3,168.6 27.3,168.6 "/>
|
||||
<path class="st2" d="M26.1,164.3l2.7-2.7c0.4-0.4,0.4-1.1,0-1.5c-0.4-0.4-1.1-0.4-1.5,0l-2.7,2.7l-2.7-2.7
|
||||
c-0.4-0.4-1.1-0.4-1.5,0c-0.4,0.4-0.4,1.1,0,1.5l2.7,2.7l-2.7,2.7c-0.4,0.4-0.4,1.1,0,1.5c0.4,0.4,1.1,0.4,1.5,0l2.7-2.7l2.7,2.7
|
||||
c0.4,0.4,1.1,0.4,1.5,0c0.4-0.4,0.4-1.1,0-1.5L26.1,164.3z"/>
|
||||
</g>
|
||||
<path class="st2" d="M22.9,171.5v2.4c0,1.1,0.9,1.9,1.9,1.9h0c1.1,0,1.9-0.9,1.9-1.9v-2.4H22.9z"/>
|
||||
<path class="st2" d="M30.6,174.3c0,0,0-2.6,0-2.7c0-0.5-0.4-0.9-1-0.9c-0.5,0-0.9,0.4-0.9,0.9c0,0.2,0,2.5,0,2.7
|
||||
c0,1.9-1.7,3.5-3.9,3.5c-2.1,0-3.9-1.6-3.9-3.5c0-0.2,0-2.6,0-2.8c0-0.5-0.4-0.9-0.9-1c-0.5,0-0.9,0.3-1,0.9c0,0.1,0,2.8,0,2.9
|
||||
c0,2.6,2.1,4.8,4.8,5.2l0,1.8h-2.2c-0.5,0-0.9,0.4-0.9,0.9c0,0.5,0.4,0.9,0.9,0.9H28c0.5,0,0.9-0.4,0.9-0.9c0-0.5-0.4-0.9-0.9-0.9
|
||||
h-2.3l0-1.8C28.5,179.1,30.6,176.9,30.6,174.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st2" d="M8.2,141.9c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3H11v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-0.9-0.1-1.3-0.3
|
||||
S6.3,142.3,6,142c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3h1.2v3.3c0,0.3,0,0.5,0.1,0.8c0.1,0.2,0.1,0.5,0.3,0.7
|
||||
c0.1,0.2,0.3,0.3,0.5,0.5S7.9,141.9,8.2,141.9z"/>
|
||||
<path class="st2" d="M13.7,138.8v4.1h-1.2v-6.4h1l3.3,4.2v-4.2H18v6.4h-1L13.7,138.8z"/>
|
||||
<path class="st2" d="M24.8,142.9v-4.2l-1.6,3.2h-0.7l-1.6-3.2v4.2h-1.2v-6.4h1.3l1.9,3.6l1.9-3.6H26v6.4H24.8z"/>
|
||||
<path class="st2" d="M30.3,141.9c0.3,0,0.5-0.1,0.7-0.2s0.4-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7s0.1-0.5,0.1-0.8v-3.3h1.2v3.3
|
||||
c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.7-0.5,1c-0.2,0.3-0.5,0.5-0.9,0.7c-0.4,0.2-0.8,0.3-1.3,0.3c-0.5,0-0.9-0.1-1.3-0.3
|
||||
s-0.6-0.4-0.9-0.7c-0.2-0.3-0.4-0.6-0.5-1c-0.1-0.4-0.1-0.8-0.1-1.2v-3.3h1.2v3.3c0,0.3,0,0.5,0.1,0.8c0.1,0.2,0.1,0.5,0.3,0.7
|
||||
c0.1,0.2,0.3,0.3,0.5,0.5S30,141.9,30.3,141.9z"/>
|
||||
<path class="st2" d="M39.3,137.6h-2v5.3H36v-5.3h-2v-1.1h5.3V137.6z"/>
|
||||
<path class="st2" d="M44.8,141.8v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H44.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.4 KiB |
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<svg width="50" height="50.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<metadata id="metadata27">image/svg+xml</metadata>
|
||||
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g id="g3" opacity="0.9">
|
||||
<path id="path5" d="m50,46c0,2.2 -1.8,4 -4,4l-42,0c-2.2,0 -4,-1.8 -4,-4l0,-42c0,-2.2 1.8,-4 4,-4l42,0c2.2,0 4,1.8 4,4l0,42z" fill="#1E1E1E"/>
|
||||
</g>
|
||||
<text xml:space="preserve" text-anchor="middle" font-family="Sans" font-size="11px" id="svg_5" y="42.610549" x="25.949214" stroke="#cbcbcb" fill="#cbcbcb">Mute</text>
|
||||
<ellipse ry="6.644531" rx="0.632813" id="svg_6" cy="15.716017" cx="25.316401" stroke-width="5" stroke="#cbcbcb" fill="#1E1E1E"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 702 B |
167
scripts/system/assets/images/tools/switch.svg
Normal file
|
@ -0,0 +1,167 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 200.1" style="enable-background:new 0 0 50 200.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#1E1E1E;}
|
||||
.st2{fill:none;stroke:#75FF48;stroke-width:0.25;stroke-miterlimit:10;}
|
||||
.st3{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g id="Layer_2">
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50.1,146.1c0,2.2-1.8,4-4,4h-42c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M50,196.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V196.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M50,96.1c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
</g>
|
||||
<g id="Layer_1">
|
||||
<path class="st3" d="M27.7,20.9v3.5c0,0.6-0.5,1.1-1.1,1.1H13.4c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1l3.9,0
|
||||
c-0.1-0.5-0.2-1-0.2-1.3l-3.8,0c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
s0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7s-0.3-0.7-0.6-0.7h-3.7v-1.2c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4V20
|
||||
C28.7,20.4,28.2,20.7,27.7,20.9z"/>
|
||||
<path class="st3" d="M36.2,19.9h-3.7c-0.5,0-0.9-0.4-1.5-1.4c-0.4-0.6-0.9-1.3-1.4-1.3l0-0.6l0,0.6c-0.5,0-0.9,0.6-1.4,1.2
|
||||
c-0.6,0.9-1.1,1.5-1.7,1.5h-3.5c-2.4,0-4.3-1.9-4.3-4.3v-2.3c0-2.4,1.9-4.3,4.3-4.3h13.1c2.4,0,4.3,1.9,4.3,4.3v2.3
|
||||
C40.5,18,38.6,19.9,36.2,19.9z M32.7,18.7h3.5c1.7,0,3.1-1.4,3.1-3v-2.3c0-1.7-1.4-3-3.1-3H23.1c-1.7,0-3.1,1.4-3.1,3v2.3
|
||||
c0,1.7,1.4,3,3.1,3h3.4c0.2-0.2,0.6-0.7,0.7-0.9c0.6-0.8,1.2-1.7,2.3-1.8l0.1,0c1.2,0,1.8,1,2.4,1.8C32.4,18.3,32.6,18.5,32.7,18.7
|
||||
z"/>
|
||||
<path class="st3" d="M37.4,21.5c-0.2-0.1-0.4,0-0.6,0.1L35,23.4l0.7,0.7l0.9-0.9c0,0,0.3,1.3-0.7,2.4c-1,1-2.3,0.6-2.3,0.6l0.8-0.8
|
||||
l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,1.7,0.3,3.1-1.1
|
||||
c1.3-1.3,1-3.1,1-3.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.6,21.6,37.5,21.5,37.4,21.5z"/>
|
||||
<path class="st3" d="M11.8,37.7c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.4,0-0.6,0.1-0.8,0.2C9.1,37.4,9,37.6,9,37.8c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2s0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.7,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.5,0.1,0.8
|
||||
c0,0.4-0.1,0.7-0.2,0.9c-0.1,0.2-0.3,0.5-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.5-0.2
|
||||
S7.8,42,7.4,41.8L8,40.7c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3c0.2,0.1,0.4,0.2,0.7,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1.1-0.2,1.1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.4C8,39,7.9,38.9,7.8,38.7c-0.1-0.2-0.1-0.4-0.1-0.7c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6c0.2-0.2,0.5-0.3,0.8-0.4C9.4,36,9.7,36,10.1,36c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.7,0.3,1,0.5L11.8,37.7z"
|
||||
/>
|
||||
<path class="st3" d="M15.8,36.1h1.1l0.7,2.1l0.7-2.1h1.2L18.4,39l0.8,2l1.8-5h1.4l-2.6,6.4h-1l-1.1-2.7l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L15.8,36.1z"/>
|
||||
<path class="st3" d="M23.3,42.5v-6.4h1.2v6.4H23.3z"/>
|
||||
<path class="st3" d="M30.8,37.2h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V37.2z"/>
|
||||
<path class="st3" d="M31.4,39.2c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.7c0.4-0.2,0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.1-0.1-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.2s-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7c-0.1,0.3-0.1,0.5-0.1,0.8
|
||||
c0,0.3,0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1
|
||||
c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.5l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.5-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C31.5,40.1,31.4,39.7,31.4,39.2z"/>
|
||||
<path class="st3" d="M43.5,36.1v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H43.5z"/>
|
||||
<g>
|
||||
<path class="st3" d="M27.7,70.9v3.5c0,0.6-0.5,1.1-1.1,1.1H13.4c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1h3.8
|
||||
c-0.1-0.4-0.3-0.9-0.3-1.3h-3.5c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
c0,0.3,0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7v-1.2c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4
|
||||
V70C28.7,70.4,28.2,70.7,27.7,70.9z"/>
|
||||
<path class="st3" d="M29.7,66.6c0.8,0,1.4,0.8,1.9,1.6c0.2,0.4,0.8,1.1,1,1.1h3.7c2,0,3.7-1.6,3.7-3.7v-2.3c0-2-1.7-3.7-3.7-3.7
|
||||
H23.1c-2,0-3.7,1.6-3.7,3.7v2.3c0,2,1.7,3.7,3.7,3.7h3.5c0.3,0,0.8-0.7,1.1-1.2C28.3,67.4,28.8,66.6,29.7,66.6
|
||||
C29.6,66.6,29.7,66.6,29.7,66.6z"/>
|
||||
<path class="st3" d="M37.4,71.5c-0.2-0.1-0.4,0-0.6,0.1L35,73.4l0.7,0.7l0.9-0.9c0,0,0.3,1.3-0.7,2.4c-1,1-2.3,0.6-2.3,0.6
|
||||
l0.8-0.8l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,1.7,0.3,3.1-1.1
|
||||
c1.3-1.3,1-3.1,1-3.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.6,71.6,37.5,71.5,37.4,71.5z"/>
|
||||
</g>
|
||||
<path class="st3" d="M11.8,87.7c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.4,0-0.6,0.1-0.8,0.2C9.1,87.4,9,87.6,9,87.8c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.7,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.5,0.1,0.8
|
||||
c0,0.4-0.1,0.7-0.2,0.9c-0.1,0.2-0.3,0.5-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.5-0.2
|
||||
S7.8,92,7.4,91.8L8,90.7c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3c0.2,0.1,0.4,0.2,0.7,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1.1-0.2,1.1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.4C8,89,7.9,88.9,7.8,88.7c-0.1-0.2-0.1-0.4-0.1-0.7c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6c0.2-0.2,0.5-0.3,0.8-0.4C9.4,86,9.7,86,10.1,86c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.7,0.3,1,0.5L11.8,87.7z"
|
||||
/>
|
||||
<path class="st3" d="M15.8,86.1h1.1l0.7,2.1l0.7-2.1h1.2L18.4,89l0.8,2l1.8-5h1.4l-2.6,6.4h-1l-1.1-2.7l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L15.8,86.1z"/>
|
||||
<path class="st3" d="M23.3,92.5v-6.4h1.2v6.4H23.3z"/>
|
||||
<path class="st3" d="M30.8,87.2h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V87.2z"/>
|
||||
<path class="st3" d="M31.4,89.2c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.7c0.4-0.2,0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.1-0.1-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7c-0.1,0.3-0.1,0.5-0.1,0.8
|
||||
c0,0.3,0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1
|
||||
c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.5l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.5-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C31.5,90.1,31.4,89.7,31.4,89.2z"/>
|
||||
<path class="st3" d="M43.5,86.1v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H43.5z"/>
|
||||
<path class="st3" d="M26.6,120.8l0,4.7c0,0.6-0.5,1.1-1.1,1.1H12.3c-0.6,0-1.1-0.5-1.1-1.1V119c0-0.6,0.5-1.1,1.1-1.1h7.2
|
||||
c-0.1-0.4-0.3-0.9-0.3-1.3h-6.9c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
c0,0.3,0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7v-1.2c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4
|
||||
v-4.7C27.5,120.8,27,120.7,26.6,120.8z"/>
|
||||
<path class="st3" d="M38,119h-3.7c-0.5,0-0.9-0.4-1.5-1.4c-0.4-0.6-0.9-1.3-1.3-1.3c-0.5,0-0.9,0.6-1.4,1.2
|
||||
c-0.6,0.9-1.1,1.5-1.7,1.5h-3.5c-2.4,0-4.3-1.9-4.3-4.3v-2.3c0-2.4,1.9-4.3,4.3-4.3H38c2.4,0,4.3,1.9,4.3,4.3v2.3
|
||||
C42.3,117.1,40.4,119,38,119z M34.5,117.7H38c1.7,0,3.1-1.4,3.1-3v-2.3c0-1.7-1.4-3-3.1-3H24.9c-1.7,0-3.1,1.4-3.1,3v2.3
|
||||
c0,1.7,1.4,3,3.1,3h3.4c0.2-0.2,0.6-0.7,0.7-0.9c0.6-0.8,1.2-1.7,2.3-1.8l0.1,0c1.2,0,1.8,1,2.4,1.8
|
||||
C34.2,117.4,34.4,117.6,34.5,117.7z"/>
|
||||
<path class="st3" d="M37.2,120.5c-0.2-0.1-0.4,0-0.6,0.1l-1.8,1.8l0.7,0.7l0.9-0.9c0,0,0.3,2.3-0.7,3.4c-1,1-3.3,0.6-3.3,0.6
|
||||
l0.8-0.8l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,2.7,0.3,4.1-1.1
|
||||
c1.3-1.3,1-4.1,1-4.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.4,120.7,37.3,120.6,37.2,120.5z"/>
|
||||
<path class="st3" d="M11.6,137.8c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.4,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.7,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.5,0.1,0.8
|
||||
c0,0.4-0.1,0.7-0.2,0.9c-0.1,0.2-0.3,0.5-0.5,0.6s-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.5-0.2
|
||||
s-0.9-0.4-1.3-0.6l0.6-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.7,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1.1-0.2,1.1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.4c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.7c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6c0.2-0.2,0.5-0.3,0.8-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.7,0.3,1,0.5
|
||||
L11.6,137.8z"/>
|
||||
<path class="st3" d="M15.6,136.2h1.1l0.7,2.1l0.7-2.1h1.2l-1.1,2.9l0.8,2l1.8-5h1.4l-2.6,6.4h-1l-1.1-2.7l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L15.6,136.2z"/>
|
||||
<path class="st3" d="M23.1,142.6v-6.4h1.2v6.4H23.1z"/>
|
||||
<path class="st3" d="M30.7,137.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V137.3z"/>
|
||||
<path class="st3" d="M31.3,139.3c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.7s0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.1-0.1-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7c-0.1,0.3-0.1,0.5-0.1,0.8
|
||||
c0,0.3,0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1
|
||||
c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.5l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.5-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C31.3,140.1,31.3,139.7,31.3,139.3z"/>
|
||||
<path class="st3" d="M43.3,136.2v6.4h-1.2v-2.7h-2.9v2.7H38v-6.4h1.2v2.6h2.9v-2.6H43.3z"/>
|
||||
<path class="st3" d="M26.6,171v4.5c0,0.6-0.5,1.1-1.1,1.1H12.3c-0.6,0-1.1-0.5-1.1-1.1v-6.5c0-0.6,0.5-1.1,1.1-1.1h6.8
|
||||
c-0.1-0.4-0.3-0.9-0.3-1.3h-6.5c-1.4,0-2.4,1.1-2.4,2.4v6.5c0,1.4,1.1,2.4,2.4,2.4h5.9v1.2h-3.4c-0.3,0-0.6,0.3-0.6,0.7
|
||||
c0,0.3,0.3,0.7,0.6,0.7h8.5c0.3,0,0.6-0.3,0.6-0.7c0-0.3-0.3-0.7-0.6-0.7h-3.7V178c-0.1,0-0.2,0-0.4,0h6.3c1.4,0,2.4-1.1,2.4-2.4
|
||||
v-5.4C27.5,170.5,27.1,170.8,26.6,171z"/>
|
||||
<path class="st3" d="M31.5,165.7c0.8,0,1.4,0.8,1.9,1.6c0.2,0.4,0.8,1.1,1,1.1H38c2,0,3.7-1.6,3.7-3.7v-2.3c0-2-1.7-3.7-3.7-3.7
|
||||
H24.9c-2,0-3.7,1.6-3.7,3.7v2.3c0,2,1.7,3.7,3.7,3.7h3.5c0.3,0,0.8-0.7,1.1-1.2C30.1,166.5,30.7,165.7,31.5,165.7
|
||||
C31.5,165.7,31.5,165.7,31.5,165.7z"/>
|
||||
<path class="st3" d="M37.2,170.6c-0.2-0.1-0.4,0-0.6,0.1l-1.8,1.8l0.7,0.7l0.9-0.9c0,0,0.3,2.3-0.7,3.4c-1,1-3.3,0.6-3.3,0.6
|
||||
l0.8-0.8l-0.8-0.8l-1.7,1.7l0,0c0,0-0.1,0.1-0.1,0.2c-0.1,0.2,0,0.4,0.1,0.6l1.8,1.8l0.8-0.8l-0.9-0.9c0,0,2.7,0.3,4.1-1.1
|
||||
c1.3-1.3,1-4.1,1-4.1l0.8,0.8l0.8-0.8l-1.6-1.6C37.4,170.7,37.3,170.7,37.2,170.6z"/>
|
||||
<path class="st3" d="M11.6,187.9c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1
|
||||
c-0.4,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2s0.3,0.1,0.5,0.2
|
||||
c0.2,0.1,0.4,0.1,0.7,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.5,0.1,0.8
|
||||
c0,0.4-0.1,0.7-0.2,0.9c-0.1,0.2-0.3,0.5-0.5,0.6s-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.5-0.2
|
||||
s-0.9-0.4-1.3-0.6l0.6-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.7,0.2c0.2,0.1,0.5,0.1,0.7,0.1
|
||||
c0.7,0,1.1-0.2,1.1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2
|
||||
c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.4c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.7c0-0.3,0.1-0.6,0.2-0.9
|
||||
c0.1-0.3,0.3-0.5,0.5-0.6c0.2-0.2,0.5-0.3,0.8-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.7,0.3,1,0.5
|
||||
L11.6,187.9z"/>
|
||||
<path class="st3" d="M15.6,186.2h1.1l0.7,2.1l0.7-2.1h1.2l-1.1,2.9l0.8,2l1.8-5h1.4l-2.6,6.4h-1l-1.1-2.7l-1.1,2.7h-1l-2.6-6.4h1.3
|
||||
l1.8,5l0.8-2L15.6,186.2z"/>
|
||||
<path class="st3" d="M23.1,192.6v-6.4h1.2v6.4H23.1z"/>
|
||||
<path class="st3" d="M30.7,187.3h-2v5.3h-1.2v-5.3h-2v-1.1h5.3V187.3z"/>
|
||||
<path class="st3" d="M31.3,189.4c0-0.4,0.1-0.8,0.2-1.2c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.7s0.8-0.3,1.3-0.3
|
||||
c0.6,0,1.1,0.1,1.5,0.4c0.4,0.3,0.7,0.6,0.9,1l-1,0.7c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.1-0.1-0.3-0.1-0.4-0.2
|
||||
c-0.1,0-0.3-0.1-0.4-0.1c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7c-0.1,0.3-0.1,0.5-0.1,0.8
|
||||
c0,0.3,0,0.6,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.7c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.3,0,0.4-0.1
|
||||
c0.1,0,0.3-0.1,0.4-0.2c0.1-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.5l1,0.6c-0.1,0.2-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.3-0.6,0.5
|
||||
c-0.2,0.1-0.5,0.2-0.8,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.5-1-0.8c-0.3-0.3-0.5-0.7-0.6-1.1
|
||||
C31.3,190.2,31.3,189.8,31.3,189.4z"/>
|
||||
<path class="st3" d="M43.3,186.2v6.4h-1.2v-2.7h-2.9v2.7H38v-6.4h1.2v2.6h2.9v-2.6H43.3z"/>
|
||||
<path class="st3" d="M21.3,21.1c-1.2-0.1-3-1.4-3.6-3.1h-4.1v6.2h12.6v-3.1H21.3z"/>
|
||||
<path class="st3" d="M22.8,120.7c-1.3,0-2.2-0.4-3-1.7h-7.2v6.2h12.6v-4.5H22.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
|
@ -10,9 +10,10 @@
|
|||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
/*global print, MyAvatar, Entities, AnimationCache, SoundCache, Scene, Camera, Overlays, Audio, HMD, AvatarList, AvatarManager, Controller, UndoStack, Window, Account, GlobalServices, Script, ScriptDiscoveryService, LODManager, Menu, Vec3, Quat, AudioDevice, Paths, Clipboard, Settings, XMLHttpRequest, Reticle, Messages, setEntityCustomData, getEntityCustomData, vec3toStr */
|
||||
/* global setEntityCustomData, getEntityCustomData, vec3toStr, flatten, Xform */
|
||||
|
||||
Script.include("/~/system/libraries/utils.js");
|
||||
Script.include("../libraries/Xform.js");
|
||||
|
||||
//
|
||||
// add lines where the hand ray picking is happening
|
||||
|
@ -138,7 +139,7 @@ var DEFAULT_GRABBABLE_DATA = {
|
|||
var USE_BLACKLIST = true;
|
||||
var blacklist = [];
|
||||
|
||||
//we've created various ways of visualizing looking for and moving distant objects
|
||||
// we've created various ways of visualizing looking for and moving distant objects
|
||||
var USE_ENTITY_LINES_FOR_SEARCHING = false;
|
||||
var USE_OVERLAY_LINES_FOR_SEARCHING = true;
|
||||
|
||||
|
@ -254,7 +255,8 @@ function isIn2DMode() {
|
|||
// In this version, we make our own determination of whether we're aimed a HUD element,
|
||||
// because other scripts (such as handControllerPointer) might be using some other visualization
|
||||
// instead of setting Reticle.visible.
|
||||
return EXTERNALLY_MANAGED_2D_MINOR_MODE && (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position));
|
||||
return (EXTERNALLY_MANAGED_2D_MINOR_MODE &&
|
||||
(Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)));
|
||||
}
|
||||
function restore2DMode() {
|
||||
if (!EXTERNALLY_MANAGED_2D_MINOR_MODE) {
|
||||
|
@ -273,7 +275,7 @@ EntityPropertiesCache.prototype.clear = function() {
|
|||
EntityPropertiesCache.prototype.findEntities = function(position, radius) {
|
||||
var entities = Entities.findEntities(position, radius);
|
||||
var _this = this;
|
||||
entities.forEach(function (x) {
|
||||
entities.forEach(function(x) {
|
||||
_this.updateEntity(x);
|
||||
});
|
||||
};
|
||||
|
@ -285,7 +287,7 @@ EntityPropertiesCache.prototype.updateEntity = function(entityID) {
|
|||
if (props.userData) {
|
||||
try {
|
||||
userData = JSON.parse(props.userData);
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
print("WARNING: malformed userData on " + entityID + ", name = " + props.name + ", error = " + err);
|
||||
}
|
||||
}
|
||||
|
@ -295,9 +297,9 @@ EntityPropertiesCache.prototype.updateEntity = function(entityID) {
|
|||
};
|
||||
EntityPropertiesCache.prototype.getEntities = function() {
|
||||
return Object.keys(this.cache);
|
||||
}
|
||||
};
|
||||
EntityPropertiesCache.prototype.getProps = function(entityID) {
|
||||
var obj = this.cache[entityID]
|
||||
var obj = this.cache[entityID];
|
||||
return obj ? obj : undefined;
|
||||
};
|
||||
EntityPropertiesCache.prototype.getGrabbableProps = function(entityID) {
|
||||
|
@ -324,6 +326,14 @@ EntityPropertiesCache.prototype.getWearableProps = function(entityID) {
|
|||
return undefined;
|
||||
}
|
||||
};
|
||||
EntityPropertiesCache.prototype.getEquipHotspotsProps = function(entityID) {
|
||||
var props = this.cache[entityID];
|
||||
if (props) {
|
||||
return props.userData.equipHotspots ? props.userData.equipHotspots : {};
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
function MyController(hand) {
|
||||
this.hand = hand;
|
||||
|
@ -337,7 +347,7 @@ function MyController(hand) {
|
|||
this.getHandRotation = function() {
|
||||
var controllerHandInput = (this.hand === RIGHT_HAND) ? Controller.Standard.RightHand : Controller.Standard.LeftHand;
|
||||
return Quat.multiply(MyAvatar.orientation, Controller.getPoseValue(controllerHandInput).rotation);
|
||||
}
|
||||
};
|
||||
|
||||
this.actionID = null; // action this script created...
|
||||
this.grabbedEntity = null; // on this entity.
|
||||
|
@ -350,11 +360,11 @@ function MyController(hand) {
|
|||
this.rawSecondaryValue = 0;
|
||||
this.rawThumbValue = 0;
|
||||
|
||||
//for visualizations
|
||||
// for visualizations
|
||||
this.overlayLine = null;
|
||||
this.particleBeamObject = null;
|
||||
|
||||
//for lights
|
||||
// for lights
|
||||
this.spotlight = null;
|
||||
this.pointlight = null;
|
||||
this.overlayLine = null;
|
||||
|
@ -379,7 +389,7 @@ function MyController(hand) {
|
|||
var _this = this;
|
||||
|
||||
var suppressedIn2D = [STATE_OFF, STATE_SEARCHING];
|
||||
this.ignoreInput = function () {
|
||||
this.ignoreInput = function() {
|
||||
// We've made the decision to use 'this' for new code, even though it is fragile,
|
||||
// in order to keep/ the code uniform without making any no-op line changes.
|
||||
return (-1 !== suppressedIn2D.indexOf(this.state)) && isIn2DMode();
|
||||
|
@ -410,7 +420,7 @@ function MyController(hand) {
|
|||
this.callEntityMethodOnGrabbed = function(entityMethodName) {
|
||||
var args = [this.hand === RIGHT_HAND ? "right" : "left", MyAvatar.sessionUUID];
|
||||
Entities.callEntityMethod(this.grabbedEntity, entityMethodName, args);
|
||||
}
|
||||
};
|
||||
|
||||
this.setState = function(newState, reason) {
|
||||
|
||||
|
@ -508,7 +518,7 @@ function MyController(hand) {
|
|||
ignoreRayIntersection: true,
|
||||
drawInFront: true, // Even when burried inside of something, show it.
|
||||
visible: true
|
||||
}
|
||||
};
|
||||
this.searchSphere = Overlays.addOverlay("sphere", sphereProperties);
|
||||
} else {
|
||||
Overlays.editOverlay(this.searchSphere, {
|
||||
|
@ -518,7 +528,7 @@ function MyController(hand) {
|
|||
visible: true
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.overlayLineOn = function(closePoint, farPoint, color) {
|
||||
if (this.overlayLine === null) {
|
||||
|
@ -567,7 +577,7 @@ function MyController(hand) {
|
|||
this.overlayLineOn(handPosition, searchSphereLocation,
|
||||
(this.triggerSmoothedGrab() || this.secondarySqueezed()) ? INTERSECT_COLOR : NO_INTERSECT_COLOR);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.handleDistantParticleBeam = function(handPosition, objectPosition, color) {
|
||||
|
||||
|
@ -634,7 +644,7 @@ function MyController(hand) {
|
|||
"alphaFinish": 1,
|
||||
"additiveBlending": 0,
|
||||
"textures": "https://hifi-content.s3.amazonaws.com/alan/dev/textures/grabsprite-3.png"
|
||||
}
|
||||
};
|
||||
|
||||
this.particleBeamObject = Entities.addEntity(particleBeamPropertiesObject);
|
||||
};
|
||||
|
@ -648,7 +658,7 @@ function MyController(hand) {
|
|||
emitSpeed: speed,
|
||||
speedSpread: spread,
|
||||
lifespan: lifespan
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
this.evalLightWorldTransform = function(modelPos, modelRot) {
|
||||
|
@ -702,9 +712,9 @@ function MyController(hand) {
|
|||
this.spotlight = Entities.addEntity(lightProperties);
|
||||
} else {
|
||||
Entities.editEntity(this.spotlight, {
|
||||
//without this, this light would maintain rotation with its parent
|
||||
// without this, this light would maintain rotation with its parent
|
||||
rotation: Quat.fromPitchYawRollDegrees(-90, 0, 0)
|
||||
})
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -768,7 +778,7 @@ function MyController(hand) {
|
|||
Entities.deleteEntity(this.particleBeamObject);
|
||||
this.particleBeamObject = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.turnLightsOff = function() {
|
||||
if (this.spotlight !== null) {
|
||||
|
@ -844,7 +854,7 @@ function MyController(hand) {
|
|||
|
||||
this.thumbPress = function(value) {
|
||||
_this.rawThumbValue = value;
|
||||
}
|
||||
};
|
||||
|
||||
this.thumbPressed = function() {
|
||||
return _this.rawThumbValue > THUMB_ON_VALUE;
|
||||
|
@ -869,8 +879,8 @@ function MyController(hand) {
|
|||
}
|
||||
};
|
||||
|
||||
this.createHotspots = function () {
|
||||
var props, overlay;
|
||||
this.createHotspots = function() {
|
||||
var _this = this;
|
||||
|
||||
var HAND_EQUIP_SPHERE_COLOR = { red: 90, green: 255, blue: 90 };
|
||||
var HAND_EQUIP_SPHERE_ALPHA = 0.7;
|
||||
|
@ -888,6 +898,7 @@ function MyController(hand) {
|
|||
|
||||
this.hotspotOverlays = [];
|
||||
|
||||
var overlay;
|
||||
if (DRAW_HAND_SPHERES) {
|
||||
// add tiny green sphere around the palm.
|
||||
var handPosition = this.getHandPosition();
|
||||
|
@ -901,7 +912,6 @@ function MyController(hand) {
|
|||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
|
||||
this.hotspotOverlays.push({
|
||||
entityID: undefined,
|
||||
overlay: overlay,
|
||||
|
@ -919,11 +929,11 @@ function MyController(hand) {
|
|||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
|
||||
this.hotspotOverlays.push({
|
||||
entityID: undefined,
|
||||
overlay: overlay,
|
||||
type: "hand"
|
||||
type: "hand",
|
||||
localPosition: {x: 0, y: 0, z: 0}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -931,64 +941,71 @@ function MyController(hand) {
|
|||
this.entityPropertyCache.clear();
|
||||
this.entityPropertyCache.findEntities(MyAvatar.position, HOTSPOT_DRAW_DISTANCE);
|
||||
|
||||
var _this = this;
|
||||
this.entityPropertyCache.getEntities().forEach(function (entityID) {
|
||||
if (_this.entityIsEquippableWithoutDistanceCheck(entityID)) {
|
||||
props = _this.entityPropertyCache.getProps(entityID);
|
||||
if (DRAW_GRAB_BOXES) {
|
||||
// add blue box overlays for grabbable entities.
|
||||
this.entityPropertyCache.getEntities().forEach(function(entityID) {
|
||||
var props = _this.entityPropertyCache.getProps(entityID);
|
||||
if (_this.entityIsGrabbable(entityID)) {
|
||||
var overlay = Overlays.addOverlay("cube", {
|
||||
rotation: props.rotation,
|
||||
position: props.position,
|
||||
size: props.dimensions,
|
||||
color: GRAB_BOX_COLOR,
|
||||
alpha: GRAB_BOX_ALPHA,
|
||||
solid: true,
|
||||
visible: true,
|
||||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
_this.hotspotOverlays.push({
|
||||
entityID: entityID,
|
||||
overlay: overlay,
|
||||
type: "near",
|
||||
localPosition: {x: 0, y: 0, z: 0}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
overlay = Overlays.addOverlay("sphere", {
|
||||
rotation: props.rotation,
|
||||
position: props.position,
|
||||
size: EQUIP_RADIUS * 2,
|
||||
color: EQUIP_SPHERE_COLOR,
|
||||
alpha: EQUIP_SPHERE_ALPHA,
|
||||
solid: true,
|
||||
visible: true,
|
||||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
|
||||
_this.hotspotOverlays.push({
|
||||
entityID: entityID,
|
||||
overlay: overlay,
|
||||
type: "equip"
|
||||
});
|
||||
}
|
||||
|
||||
if (DRAW_GRAB_BOXES && _this.entityIsGrabbable(entityID)) {
|
||||
props = _this.entityPropertyCache.getProps(entityID);
|
||||
|
||||
overlay = Overlays.addOverlay("cube", {
|
||||
rotation: props.rotation,
|
||||
position: props.position,
|
||||
size: props.dimensions, //{x: props.dimensions.x, y: props.dimensions.y, z: props.dimensions.z},
|
||||
color: GRAB_BOX_COLOR,
|
||||
alpha: GRAB_BOX_ALPHA,
|
||||
solid: true,
|
||||
visible: true,
|
||||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
|
||||
_this.hotspotOverlays.push({
|
||||
entityID: entityID,
|
||||
overlay: overlay,
|
||||
type: "near"
|
||||
});
|
||||
}
|
||||
// add green spheres for each equippable hotspot.
|
||||
flatten(this.entityPropertyCache.getEntities().map(function(entityID) {
|
||||
return _this.collectEquipHotspots(entityID);
|
||||
})).filter(function(hotspot) {
|
||||
return _this.hotspotIsEquippable(hotspot);
|
||||
}).forEach(function(hotspot) {
|
||||
var overlay = Overlays.addOverlay("sphere", {
|
||||
position: hotspot.worldPosition,
|
||||
size: hotspot.radius * 2,
|
||||
color: EQUIP_SPHERE_COLOR,
|
||||
alpha: EQUIP_SPHERE_ALPHA,
|
||||
solid: true,
|
||||
visible: true,
|
||||
ignoreRayIntersection: true,
|
||||
drawInFront: false
|
||||
});
|
||||
_this.hotspotOverlays.push({
|
||||
entityID: hotspot.entityID,
|
||||
overlay: overlay,
|
||||
type: "equip",
|
||||
localPosition: hotspot.localPosition
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.updateHotspots = function() {
|
||||
var _this = this;
|
||||
var props;
|
||||
this.hotspotOverlays.forEach(function (overlayInfo) {
|
||||
this.hotspotOverlays.forEach(function(overlayInfo) {
|
||||
if (overlayInfo.type === "hand") {
|
||||
Overlays.editOverlay(overlayInfo.overlay, { position: _this.getHandPosition() });
|
||||
} else if (overlayInfo.type === "equip") {
|
||||
_this.entityPropertyCache.updateEntity(overlayInfo.entityID);
|
||||
props = _this.entityPropertyCache.getProps(overlayInfo.entityID);
|
||||
Overlays.editOverlay(overlayInfo.overlay, { position: props.position, rotation: props.rotation });
|
||||
var entityXform = new Xform(props.rotation, props.position);
|
||||
Overlays.editOverlay(overlayInfo.overlay, {
|
||||
position: entityXform.xformPoint(overlayInfo.localPosition),
|
||||
rotation: props.rotation
|
||||
});
|
||||
} else if (overlayInfo.type === "near") {
|
||||
_this.entityPropertyCache.updateEntity(overlayInfo.entityID);
|
||||
props = _this.entityPropertyCache.getProps(overlayInfo.entityID);
|
||||
|
@ -998,7 +1015,7 @@ function MyController(hand) {
|
|||
};
|
||||
|
||||
this.destroyHotspots = function() {
|
||||
this.hotspotOverlays.forEach(function (overlayInfo) {
|
||||
this.hotspotOverlays.forEach(function(overlayInfo) {
|
||||
Overlays.deleteOverlay(overlayInfo.overlay);
|
||||
});
|
||||
this.hotspotOverlays = [];
|
||||
|
@ -1012,14 +1029,14 @@ function MyController(hand) {
|
|||
this.destroyHotspots();
|
||||
};
|
||||
|
||||
///
|
||||
// Performs ray pick test from the hand controller into the world
|
||||
// @param {number} which hand to use, RIGHT_HAND or LEFT_HAND
|
||||
// @returns {object} returns object with two keys entityID and distance
|
||||
//
|
||||
this.calcRayPickInfo = function(hand) {
|
||||
|
||||
var pose = Controller.getPoseValue((hand === RIGHT_HAND) ? Controller.Standard.RightHand : Controller.Standard.LeftHand);
|
||||
var standardControllerValue = (hand === RIGHT_HAND) ? Controller.Standard.RightHand : Controller.Standard.LeftHand;
|
||||
var pose = Controller.getPoseValue(standardControllerValue);
|
||||
var worldHandPosition = Vec3.sum(Vec3.multiplyQbyV(MyAvatar.orientation, pose.translation), MyAvatar.position);
|
||||
var worldHandRotation = Quat.multiply(MyAvatar.orientation, pose.rotation);
|
||||
|
||||
|
@ -1058,63 +1075,82 @@ function MyController(hand) {
|
|||
}
|
||||
|
||||
var overlayIntersection = Overlays.findRayIntersection(pickRayBacked);
|
||||
if (!intersection.intersects || (overlayIntersection.intersects && (intersection.distance > overlayIntersection.distance))) {
|
||||
if (!intersection.intersects ||
|
||||
(overlayIntersection.intersects && (intersection.distance > overlayIntersection.distance))) {
|
||||
intersection = overlayIntersection;
|
||||
}
|
||||
|
||||
if (intersection.intersects) {
|
||||
return { entityID: intersection.entityID,
|
||||
searchRay: pickRay,
|
||||
distance: Vec3.distance(pickRay.origin, intersection.intersection) }
|
||||
return {
|
||||
entityID: intersection.entityID,
|
||||
searchRay: pickRay,
|
||||
distance: Vec3.distance(pickRay.origin, intersection.intersection)
|
||||
};
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
this.entityWantsTrigger = function (entityID) {
|
||||
this.entityWantsTrigger = function(entityID) {
|
||||
var grabbableProps = this.entityPropertyCache.getGrabbableProps(entityID);
|
||||
return grabbableProps && grabbableProps.wantsTrigger;
|
||||
};
|
||||
|
||||
this.entityIsEquippableWithoutDistanceCheck = function (entityID) {
|
||||
// returns a list of all equip-hotspots assosiated with this entity.
|
||||
// @param {UUID} entityID
|
||||
// @returns {Object[]} array of objects with the following fields.
|
||||
// * entityID {UUID}
|
||||
// * localPosition {Vec3} position of the hotspot in object space.
|
||||
// * worldPosition {vec3} position of the hotspot in world space.
|
||||
// * radius {number} radius of equip hotspot
|
||||
// * joints {Object} keys are joint names values are arrays of two elements:
|
||||
// offset position {Vec3} and offset rotation {Quat}, both are in the coordinate system of the joint.
|
||||
this.collectEquipHotspots = function(entityID) {
|
||||
var result = [];
|
||||
var props = this.entityPropertyCache.getProps(entityID);
|
||||
var handPosition = props.position;
|
||||
return this.entityIsEquippableWithDistanceCheck(entityID, handPosition);
|
||||
var entityXform = new Xform(props.rotation, props.position);
|
||||
var equipHotspotsProps = this.entityPropertyCache.getEquipHotspotsProps(entityID);
|
||||
if (equipHotspotsProps && equipHotspotsProps.length > 0) {
|
||||
var i, length = equipHotspotsProps.length;
|
||||
for (i = 0; i < length; i++) {
|
||||
var hotspot = equipHotspotsProps[i];
|
||||
if (hotspot.position && hotspot.radius && hotspot.joints) {
|
||||
result.push({
|
||||
entityID: entityID,
|
||||
localPosition: hotspot.position,
|
||||
worldPosition: entityXform.xformPoint(hotspot.position),
|
||||
radius: hotspot.radius,
|
||||
joints: hotspot.joints
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var wearableProps = this.entityPropertyCache.getWearableProps(entityID);
|
||||
if (wearableProps && wearableProps.joints) {
|
||||
result.push({
|
||||
entityID: entityID,
|
||||
localPosition: {x: 0, y: 0, z: 0},
|
||||
worldPosition: entityXform.pos,
|
||||
radius: EQUIP_RADIUS,
|
||||
joints: wearableProps.joints
|
||||
});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
this.entityIsEquippableWithDistanceCheck = function (entityID, handPosition) {
|
||||
var props = this.entityPropertyCache.getProps(entityID);
|
||||
var distance = Vec3.distance(props.position, handPosition);
|
||||
var grabProps = this.entityPropertyCache.getGrabProps(entityID);
|
||||
this.hotspotIsEquippable = function(hotspot) {
|
||||
var props = this.entityPropertyCache.getProps(hotspot.entityID);
|
||||
var grabProps = this.entityPropertyCache.getGrabProps(hotspot.entityID);
|
||||
var debug = (WANT_DEBUG_SEARCH_NAME && props.name === WANT_DEBUG_SEARCH_NAME);
|
||||
|
||||
var refCount = ("refCount" in grabProps) ? grabProps.refCount : 0;
|
||||
if (refCount > 0) {
|
||||
var okToEquipFromOtherHand = ((this.getOtherHandController().state == STATE_NEAR_GRABBING ||
|
||||
this.getOtherHandController().state == STATE_DISTANCE_HOLDING) &&
|
||||
this.getOtherHandController().grabbedEntity == hotspot.entityID);
|
||||
if (refCount > 0 && !okToEquipFromOtherHand) {
|
||||
if (debug) {
|
||||
print("equip is skipping '" + props.name + "': it is already grabbed");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (distance > EQUIP_RADIUS) {
|
||||
if (debug) {
|
||||
print("equip is skipping '" + props.name + "': too far away, " + distance + " meters");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
var wearableProps = this.entityPropertyCache.getWearableProps(entityID);
|
||||
if (!wearableProps || !wearableProps.joints) {
|
||||
if (debug) {
|
||||
print("equip is skipping '" + props.name + "': no wearable attach-point");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
|
||||
if (!wearableProps.joints[handJointName]) {
|
||||
if (debug) {
|
||||
print("equip is skipping '" + props.name + "': no wearable joint for " + handJointName);
|
||||
print("equip is skipping '" + props.name + "': grabbed by someone else");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -1122,7 +1158,7 @@ function MyController(hand) {
|
|||
return true;
|
||||
};
|
||||
|
||||
this.entityIsGrabbable = function (entityID) {
|
||||
this.entityIsGrabbable = function(entityID) {
|
||||
var grabbableProps = this.entityPropertyCache.getGrabbableProps(entityID);
|
||||
var grabProps = this.entityPropertyCache.getGrabProps(entityID);
|
||||
var props = this.entityPropertyCache.getProps(entityID);
|
||||
|
@ -1255,29 +1291,31 @@ function MyController(hand) {
|
|||
this.entityPropertyCache.findEntities(handPosition, NEAR_GRAB_RADIUS);
|
||||
var candidateEntities = this.entityPropertyCache.getEntities();
|
||||
|
||||
var equippableEntities = candidateEntities.filter(function (entity) {
|
||||
return _this.entityIsEquippableWithDistanceCheck(entity, handPosition);
|
||||
var equippableHotspots = flatten(candidateEntities.map(function(entityID) {
|
||||
return _this.collectEquipHotspots(entityID);
|
||||
})).filter(function(hotspot) {
|
||||
return _this.hotspotIsEquippable(hotspot) && Vec3.distance(hotspot.worldPosition, handPosition) < hotspot.radius;
|
||||
});
|
||||
|
||||
var entity;
|
||||
if (equippableEntities.length > 0) {
|
||||
if (equippableHotspots.length > 0) {
|
||||
// sort by distance
|
||||
equippableEntities.sort(function (a, b) {
|
||||
var aDistance = Vec3.distance(_this.entityPropertyCache.getProps(a).position, handPosition);
|
||||
var bDistance = Vec3.distance(_this.entityPropertyCache.getProps(b).position, handPosition);
|
||||
equippableHotspots.sort(function(a, b) {
|
||||
var aDistance = Vec3.distance(a.worldPosition, handPosition);
|
||||
var bDistance = Vec3.distance(b.worldPosition, handPosition);
|
||||
return aDistance - bDistance;
|
||||
});
|
||||
entity = equippableEntities[0];
|
||||
if (this.triggerSmoothedGrab()) {
|
||||
this.grabbedEntity = entity;
|
||||
this.setState(STATE_HOLD, "eqipping '" + this.entityPropertyCache.getProps(entity).name + "'");
|
||||
this.grabbedHotspot = equippableHotspots[0];
|
||||
this.grabbedEntity = equippableHotspots[0].entityID;
|
||||
this.setState(STATE_HOLD, "eqipping '" + this.entityPropertyCache.getProps(this.grabbedEntity).name + "'");
|
||||
return;
|
||||
} else {
|
||||
// TODO: highlight the equippable object?
|
||||
}
|
||||
}
|
||||
|
||||
var grabbableEntities = candidateEntities.filter(function (entity) {
|
||||
var grabbableEntities = candidateEntities.filter(function(entity) {
|
||||
return _this.entityIsNearGrabbable(entity, handPosition, NEAR_GRAB_MAX_DISTANCE);
|
||||
});
|
||||
|
||||
|
@ -1294,7 +1332,7 @@ function MyController(hand) {
|
|||
|
||||
if (grabbableEntities.length > 0) {
|
||||
// sort by distance
|
||||
grabbableEntities.sort(function (a, b) {
|
||||
grabbableEntities.sort(function(a, b) {
|
||||
var aDistance = Vec3.distance(_this.entityPropertyCache.getProps(a).position, handPosition);
|
||||
var bDistance = Vec3.distance(_this.entityPropertyCache.getProps(b).position, handPosition);
|
||||
return aDistance - bDistance;
|
||||
|
@ -1354,9 +1392,11 @@ function MyController(hand) {
|
|||
}
|
||||
}
|
||||
|
||||
//search line visualizations
|
||||
// search line visualizations
|
||||
if (USE_ENTITY_LINES_FOR_SEARCHING === true) {
|
||||
this.lineOn(rayPickInfo.searchRay.origin, Vec3.multiply(rayPickInfo.searchRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR);
|
||||
this.lineOn(rayPickInfo.searchRay.origin,
|
||||
Vec3.multiply(rayPickInfo.searchRay.direction, LINE_LENGTH),
|
||||
NO_INTERSECT_COLOR);
|
||||
}
|
||||
|
||||
this.searchIndicatorOn(rayPickInfo.searchRay);
|
||||
|
@ -1371,11 +1411,11 @@ function MyController(hand) {
|
|||
timeScale = DISTANCE_HOLDING_ACTION_TIMEFRAME;
|
||||
}
|
||||
return timeScale;
|
||||
}
|
||||
};
|
||||
|
||||
this.getMass = function(dimensions, density) {
|
||||
return (dimensions.x * dimensions.y * dimensions.z) * density;
|
||||
}
|
||||
};
|
||||
|
||||
this.distanceHoldingEnter = function() {
|
||||
|
||||
|
@ -1502,7 +1542,8 @@ function MyController(hand) {
|
|||
|
||||
var RADIAL_GRAB_AMPLIFIER = 10.0;
|
||||
if (Math.abs(this.grabRadialVelocity) > 0.0) {
|
||||
this.grabRadius = this.grabRadius + (this.grabRadialVelocity * deltaObjectTime * this.grabRadius * RADIAL_GRAB_AMPLIFIER);
|
||||
this.grabRadius = this.grabRadius + (this.grabRadialVelocity * deltaObjectTime *
|
||||
this.grabRadius * RADIAL_GRAB_AMPLIFIER);
|
||||
}
|
||||
|
||||
var newTargetPosition = Vec3.multiply(this.grabRadius, Quat.getUp(controllerRotation));
|
||||
|
@ -1530,30 +1571,9 @@ function MyController(hand) {
|
|||
}
|
||||
}
|
||||
|
||||
// var defaultConstraintData = {
|
||||
// axisStart: false,
|
||||
// axisEnd: false
|
||||
// }
|
||||
//
|
||||
// var constraintData = getEntityCustomData('lightModifierKey', this.grabbedEntity, defaultConstraintData);
|
||||
// var clampedVector;
|
||||
// var targetPosition;
|
||||
// if (constraintData.axisStart !== false) {
|
||||
// clampedVector = this.projectVectorAlongAxis(this.currentObjectPosition,
|
||||
// constraintData.axisStart,
|
||||
// constraintData.axisEnd);
|
||||
// targetPosition = clampedVector;
|
||||
// } else {
|
||||
// targetPosition = {
|
||||
// x: this.currentObjectPosition.x,
|
||||
// y: this.currentObjectPosition.y,
|
||||
// z: this.currentObjectPosition.z
|
||||
// }
|
||||
// }
|
||||
|
||||
var handPosition = this.getHandPosition();
|
||||
|
||||
//visualizations
|
||||
// visualizations
|
||||
if (USE_ENTITY_LINES_FOR_MOVING === true) {
|
||||
this.lineOn(handPosition, Vec3.subtract(grabbedProperties.position, handPosition), INTERSECT_COLOR);
|
||||
}
|
||||
|
@ -1561,7 +1581,7 @@ function MyController(hand) {
|
|||
this.overlayLineOn(handPosition, grabbedProperties.position, INTERSECT_COLOR);
|
||||
}
|
||||
if (USE_PARTICLE_BEAM_FOR_MOVING === true) {
|
||||
this.handleDistantParticleBeam(handPosition, grabbedProperties.position, INTERSECT_COLOR)
|
||||
this.handleDistantParticleBeam(handPosition, grabbedProperties.position, INTERSECT_COLOR);
|
||||
}
|
||||
if (USE_POINTLIGHT === true) {
|
||||
this.handlePointLight(this.grabbedEntity);
|
||||
|
@ -1621,46 +1641,17 @@ function MyController(hand) {
|
|||
scalar = 1;
|
||||
}
|
||||
var projection = Vec3.sum(axisStart, Vec3.multiply(scalar, Vec3.normalize(bPrime)));
|
||||
return projection
|
||||
return projection;
|
||||
};
|
||||
|
||||
this.hasPresetOffsets = function() {
|
||||
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
|
||||
if ("joints" in wearableData) {
|
||||
var allowedJoints = wearableData.joints;
|
||||
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
|
||||
if (handJointName in allowedJoints) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
this.getPresetPosition = function() {
|
||||
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
|
||||
var allowedJoints = wearableData.joints;
|
||||
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
|
||||
if (handJointName in allowedJoints) {
|
||||
return allowedJoints[handJointName][0];
|
||||
}
|
||||
}
|
||||
|
||||
this.getPresetRotation = function() {
|
||||
var wearableData = getEntityCustomData('wearable', this.grabbedEntity, {joints: {}});
|
||||
var allowedJoints = wearableData.joints;
|
||||
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
|
||||
if (handJointName in allowedJoints) {
|
||||
return allowedJoints[handJointName][1];
|
||||
}
|
||||
}
|
||||
|
||||
this.dropGestureReset = function() {
|
||||
this.fastHandMoveDetected = false;
|
||||
this.fastHandMoveTimer = 0;
|
||||
};
|
||||
|
||||
this.dropGestureProcess = function(deltaTime) {
|
||||
var pose = Controller.getPoseValue((this.hand === RIGHT_HAND) ? Controller.Standard.RightHand : Controller.Standard.LeftHand);
|
||||
var standardControllerValue = (this.hand === RIGHT_HAND) ? Controller.Standard.RightHand : Controller.Standard.LeftHand;
|
||||
var pose = Controller.getPoseValue(standardControllerValue);
|
||||
var worldHandVelocity = Vec3.multiplyQbyV(MyAvatar.orientation, pose.velocity);
|
||||
var worldHandRotation = Quat.multiply(MyAvatar.orientation, pose.rotation);
|
||||
|
||||
|
@ -1710,6 +1701,12 @@ function MyController(hand) {
|
|||
this.grabbedEntity = saveGrabbedID;
|
||||
}
|
||||
|
||||
var otherHandController = this.getOtherHandController();
|
||||
if (otherHandController.grabbedEntity == this.grabbedEntity &&
|
||||
(otherHandController.state == STATE_NEAR_GRABBING || otherHandController.state == STATE_DISTANCE_HOLDING)) {
|
||||
otherHandController.setState(STATE_OFF, "other hand grabbed this entity");
|
||||
}
|
||||
|
||||
var grabbedProperties = Entities.getEntityProperties(this.grabbedEntity, GRABBABLE_PROPERTIES);
|
||||
this.activateEntity(this.grabbedEntity, grabbedProperties, false);
|
||||
|
||||
|
@ -1718,13 +1715,17 @@ function MyController(hand) {
|
|||
var handPosition = this.getHandPosition();
|
||||
|
||||
var hasPresetPosition = false;
|
||||
if (this.state == STATE_HOLD && this.hasPresetOffsets()) {
|
||||
if (this.state == STATE_HOLD && this.grabbedHotspot) {
|
||||
var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, this.grabbedEntity, DEFAULT_GRABBABLE_DATA);
|
||||
// if an object is "equipped" and has a predefined offset, use it.
|
||||
this.ignoreIK = grabbableData.ignoreIK ? grabbableData.ignoreIK : false;
|
||||
this.offsetPosition = this.getPresetPosition();
|
||||
this.offsetRotation = this.getPresetRotation();
|
||||
hasPresetPosition = true;
|
||||
|
||||
var handJointName = this.hand === RIGHT_HAND ? "RightHand" : "LeftHand";
|
||||
if (this.grabbedHotspot.joints[handJointName]) {
|
||||
this.offsetPosition = this.grabbedHotspot.joints[handJointName][0];
|
||||
this.offsetRotation = this.grabbedHotspot.joints[handJointName][1];
|
||||
hasPresetPosition = true;
|
||||
}
|
||||
} else {
|
||||
this.ignoreIK = false;
|
||||
|
||||
|
@ -1757,7 +1758,7 @@ function MyController(hand) {
|
|||
var reparentProps = {
|
||||
parentID: MyAvatar.sessionUUID,
|
||||
parentJointIndex: handJointIndex
|
||||
}
|
||||
};
|
||||
if (hasPresetPosition) {
|
||||
reparentProps["localPosition"] = this.offsetPosition;
|
||||
reparentProps["localRotation"] = this.offsetRotation;
|
||||
|
@ -1826,7 +1827,6 @@ function MyController(hand) {
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
var now = Date.now();
|
||||
if (now - this.lastUnequipCheckTime > MSECS_PER_SEC * CHECK_TOO_FAR_UNEQUIP_TIME) {
|
||||
this.lastUnequipCheckTime = now;
|
||||
|
@ -1995,6 +1995,7 @@ function MyController(hand) {
|
|||
}));
|
||||
|
||||
this.grabbedEntity = null;
|
||||
this.grabbedHotspot = null;
|
||||
|
||||
if (this.triggerSmoothedGrab()) {
|
||||
this.waitForTriggerRelease = true;
|
||||
|
@ -2097,7 +2098,7 @@ function MyController(hand) {
|
|||
print("disconnecting stray child of hand: (" + _this.hand + ") " + childID);
|
||||
Entities.editEntity(childID, {parentID: NULL_UUID});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
this.deactivateEntity = function(entityID, noVelocity) {
|
||||
var deactiveProps;
|
||||
|
@ -2122,7 +2123,7 @@ function MyController(hand) {
|
|||
|
||||
// things that are held by parenting and dropped with no velocity will end up as "static" in bullet. If
|
||||
// it looks like the dropped thing should fall, give it a little velocity.
|
||||
var props = Entities.getEntityProperties(entityID, ["parentID", "velocity", "dynamic", "shapeType"])
|
||||
var props = Entities.getEntityProperties(entityID, ["parentID", "velocity", "dynamic", "shapeType"]);
|
||||
var parentID = props.parentID;
|
||||
|
||||
var doSetVelocity = false;
|
||||
|
@ -2183,6 +2184,10 @@ function MyController(hand) {
|
|||
}
|
||||
setEntityCustomData(GRAB_USER_DATA_KEY, entityID, data);
|
||||
};
|
||||
|
||||
this.getOtherHandController = function() {
|
||||
return (this.hand === RIGHT_HAND) ? leftController : rightController;
|
||||
};
|
||||
}
|
||||
|
||||
var rightController = new MyController(RIGHT_HAND);
|
||||
|
@ -2204,7 +2209,8 @@ mapping.from([Controller.Standard.RightPrimaryThumb]).peek().to(rightController.
|
|||
|
||||
Controller.enableMapping(MAPPING_NAME);
|
||||
|
||||
//the section below allows the grab script to listen for messages that disable either one or both hands. useful for two handed items
|
||||
// the section below allows the grab script to listen for messages
|
||||
// that disable either one or both hands. useful for two handed items
|
||||
var handToDisable = 'none';
|
||||
|
||||
function update(deltaTime) {
|
||||
|
@ -2267,7 +2273,7 @@ var handleHandMessages = function(channel, message, sender) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Messages.messageReceived.connect(handleHandMessages);
|
||||
|
||||
|
|
|
@ -125,8 +125,17 @@ function ignoreMouseActivity() {
|
|||
weMovedReticle = false;
|
||||
return true;
|
||||
}
|
||||
var MARGIN = 25;
|
||||
var reticleMinX = MARGIN, reticleMaxX, reticleMinY = MARGIN, reticleMaxY;
|
||||
function updateRecommendedArea() {
|
||||
var dims = Controller.getViewportDimensions();
|
||||
reticleMaxX = dims.x - MARGIN;
|
||||
reticleMaxY = dims.y - MARGIN;
|
||||
}
|
||||
var setReticlePosition = function (point2d) {
|
||||
weMovedReticle = true;
|
||||
point2d.x = Math.max(reticleMinX, Math.min(point2d.x, reticleMaxX));
|
||||
point2d.y = Math.max(reticleMinY, Math.min(point2d.y, reticleMaxY));
|
||||
Reticle.setPosition(point2d);
|
||||
};
|
||||
|
||||
|
@ -187,6 +196,32 @@ function overlayFromWorldPoint(point) {
|
|||
return { x: horizontalPixels, y: verticalPixels };
|
||||
}
|
||||
|
||||
function activeHudPoint2d(activeHand) { // if controller is valid, update reticle position and answer 2d point. Otherwise falsey.
|
||||
var controllerPose = Controller.getPoseValue(activeHand);
|
||||
// Valid if any plugged-in hand controller is "on". (uncradled Hydra, green-lighted Vive...)
|
||||
if (!controllerPose.valid) {
|
||||
return; // Controller is cradled.
|
||||
}
|
||||
var controllerPosition = Vec3.sum(Vec3.multiplyQbyV(MyAvatar.orientation, controllerPose.translation),
|
||||
MyAvatar.position);
|
||||
// This gets point direction right, but if you want general quaternion it would be more complicated:
|
||||
var controllerDirection = Quat.getUp(Quat.multiply(MyAvatar.orientation, controllerPose.rotation));
|
||||
|
||||
var hudPoint3d = calculateRayUICollisionPoint(controllerPosition, controllerDirection);
|
||||
if (!hudPoint3d) {
|
||||
if (Menu.isOptionChecked("Overlays")) { // With our hud resetting strategy, hudPoint3d should be valid here
|
||||
print('Controller is parallel to HUD'); // so let us know that our assumptions are wrong.
|
||||
}
|
||||
return;
|
||||
}
|
||||
var hudPoint2d = overlayFromWorldPoint(hudPoint3d);
|
||||
|
||||
// We don't know yet if we'll want to make the cursor or laser visble, but we need to move it to see if
|
||||
// it's pointing at a QML tool (aka system overlay).
|
||||
setReticlePosition(hudPoint2d);
|
||||
return hudPoint2d;
|
||||
}
|
||||
|
||||
// MOUSE ACTIVITY --------
|
||||
//
|
||||
var isSeeking = false;
|
||||
|
@ -351,8 +386,23 @@ function isPointingAtOverlayStartedNonFullTrigger(trigger) {
|
|||
}
|
||||
clickMapping.from(rightTrigger.full).when(isPointingAtOverlayStartedNonFullTrigger(rightTrigger)).to(Controller.Actions.ReticleClick);
|
||||
clickMapping.from(leftTrigger.full).when(isPointingAtOverlayStartedNonFullTrigger(leftTrigger)).to(Controller.Actions.ReticleClick);
|
||||
clickMapping.from(Controller.Standard.RightSecondaryThumb).peek().to(Controller.Actions.ContextMenu);
|
||||
clickMapping.from(Controller.Standard.LeftSecondaryThumb).peek().to(Controller.Actions.ContextMenu);
|
||||
// The following is essentially like Left and Right versions of
|
||||
// clickMapping.from(Controller.Standard.RightSecondaryThumb).peek().to(Controller.Actions.ContextMenu);
|
||||
// except that we first update the reticle position from the appropriate hand position, before invoking the ContextMenu.
|
||||
var wantsMenu = 0;
|
||||
clickMapping.from(function () { return wantsMenu; }).to(Controller.Actions.ContextMenu);
|
||||
clickMapping.from(Controller.Standard.RightSecondaryThumb).peek().to(function (clicked) {
|
||||
if (clicked) {
|
||||
activeHudPoint2d(Controller.Standard.RightHand);
|
||||
}
|
||||
wantsMenu = clicked;
|
||||
});
|
||||
clickMapping.from(Controller.Standard.LeftSecondaryThumb).peek().to(function (clicked) {
|
||||
if (clicked) {
|
||||
activeHudPoint2d(Controller.Standard.LeftHand);
|
||||
}
|
||||
wantsMenu = clicked;
|
||||
});
|
||||
clickMapping.from(Controller.Hardware.Keyboard.RightMouseClicked).peek().to(function () {
|
||||
// Allow the reticle depth to be set correctly:
|
||||
// Wait a tick for the context menu to be displayed, and then simulate a (non-hand-controller) mouse move
|
||||
|
@ -398,7 +448,7 @@ function update() {
|
|||
}
|
||||
updateSeeking(true);
|
||||
if (!handControllerLockOut.expired(now)) {
|
||||
return off(); // Let them use mouse it in peace.
|
||||
return off(); // Let them use mouse in peace.
|
||||
}
|
||||
if (!Menu.isOptionChecked("First Person")) {
|
||||
return off(); // What to do? menus can be behind hand!
|
||||
|
@ -408,28 +458,13 @@ function update() {
|
|||
}
|
||||
leftTrigger.update();
|
||||
rightTrigger.update();
|
||||
var controllerPose = Controller.getPoseValue(activeHand);
|
||||
// Valid if any plugged-in hand controller is "on". (uncradled Hydra, green-lighted Vive...)
|
||||
if (!controllerPose.valid) {
|
||||
return off(); // Controller is cradled.
|
||||
if (!activeTrigger.state) {
|
||||
return off(); // No trigger
|
||||
}
|
||||
var controllerPosition = Vec3.sum(Vec3.multiplyQbyV(MyAvatar.orientation, controllerPose.translation),
|
||||
MyAvatar.position);
|
||||
// This gets point direction right, but if you want general quaternion it would be more complicated:
|
||||
var controllerDirection = Quat.getUp(Quat.multiply(MyAvatar.orientation, controllerPose.rotation));
|
||||
|
||||
var hudPoint3d = calculateRayUICollisionPoint(controllerPosition, controllerDirection);
|
||||
if (!hudPoint3d) {
|
||||
if (Menu.isOptionChecked("Overlays")) { // With our hud resetting strategy, hudPoint3d should be valid here
|
||||
print('Controller is parallel to HUD'); // so let us know that our assumptions are wrong.
|
||||
}
|
||||
var hudPoint2d = activeHudPoint2d(activeHand);
|
||||
if (!hudPoint2d) {
|
||||
return off();
|
||||
}
|
||||
var hudPoint2d = overlayFromWorldPoint(hudPoint3d);
|
||||
|
||||
// We don't know yet if we'll want to make the cursor visble, but we need to move it to see if
|
||||
// it's pointing at a QML tool (aka system overlay).
|
||||
setReticlePosition(hudPoint2d);
|
||||
// If there's a HUD element at the (newly moved) reticle, just make it visible and bail.
|
||||
if (isPointingAtOverlay(hudPoint2d)) {
|
||||
if (HMD.active) {
|
||||
|
@ -446,23 +481,16 @@ function update() {
|
|||
return;
|
||||
}
|
||||
// We are not pointing at a HUD element (but it could be a 3d overlay).
|
||||
if (!activeTrigger.state) {
|
||||
return off(); // No trigger
|
||||
}
|
||||
clearSystemLaser();
|
||||
Reticle.visible = false;
|
||||
}
|
||||
|
||||
var UPDATE_INTERVAL = 50; // milliseconds. Script.update is too frequent.
|
||||
var updater = Script.setInterval(update, UPDATE_INTERVAL);
|
||||
Script.scriptEnding.connect(function () {
|
||||
Script.clearInterval(updater);
|
||||
});
|
||||
setupHandler(Script.update, update);
|
||||
|
||||
// Check periodically for changes to setup.
|
||||
var SETTINGS_CHANGE_RECHECK_INTERVAL = 10 * 1000; // milliseconds
|
||||
function checkSettings() {
|
||||
updateFieldOfView();
|
||||
updateRecommendedArea();
|
||||
}
|
||||
checkSettings();
|
||||
var settingsChecker = Script.setInterval(checkSettings, SETTINGS_CHANGE_RECHECK_INTERVAL);
|
||||
|
|
|
@ -192,7 +192,7 @@ var toolBar = (function() {
|
|||
});
|
||||
|
||||
activeButton = toolBar.addTool({
|
||||
imageURL: toolIconUrl + "edit-01.svg",
|
||||
imageURL: toolIconUrl + "edit.svg",
|
||||
subImage: {
|
||||
x: 0,
|
||||
y: Tool.IMAGE_WIDTH,
|
||||
|
|
|
@ -53,18 +53,22 @@ function toggleExamples() {
|
|||
var toolBar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system");
|
||||
|
||||
var browseExamplesButton = toolBar.addButton({
|
||||
imageURL: toolIconUrl + "examples-01.svg",
|
||||
imageURL: toolIconUrl + "market.svg",
|
||||
objectName: "examples",
|
||||
yOffset: 50,
|
||||
alpha: 0.9,
|
||||
buttonState: 1,
|
||||
alpha: 0.9
|
||||
});
|
||||
|
||||
var browseExamplesButtonDown = false;
|
||||
|
||||
browseExamplesButton.clicked.connect(function(){
|
||||
function onExamplesWindowVisibilityChanged() {
|
||||
browseExamplesButton.writeProperty('buttonState', examplesWindow.visible ? 0 : 1);
|
||||
}
|
||||
function onClick() {
|
||||
toggleExamples();
|
||||
});
|
||||
}
|
||||
browseExamplesButton.clicked.connect(onClick);
|
||||
examplesWindow.visibleChanged.connect(onExamplesWindowVisibilityChanged);
|
||||
|
||||
Script.scriptEnding.connect(function () {
|
||||
browseExamplesButton.clicked.disconnect();
|
||||
browseExamplesButton.clicked.disconnect(onClick);
|
||||
examplesWindow.visibleChanged.disconnect(onExamplesWindowVisibilityChanged);
|
||||
});
|
||||
|
|
|
@ -14,16 +14,22 @@ var toolBar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system");
|
|||
|
||||
var button = toolBar.addButton({
|
||||
objectName: "goto",
|
||||
imageURL: Script.resolvePath("assets/images/tools/directory-01.svg"),
|
||||
imageURL: Script.resolvePath("assets/images/tools/directory.svg"),
|
||||
visible: true,
|
||||
yOffset: 50,
|
||||
buttonState: 1,
|
||||
alpha: 0.9,
|
||||
});
|
||||
|
||||
button.clicked.connect(function(){
|
||||
|
||||
function onAddressBarShown(visible) {
|
||||
button.writeProperty('buttonState', visible ? 0 : 1);
|
||||
}
|
||||
function onClicked(){
|
||||
DialogsManager.toggleAddressBar();
|
||||
});
|
||||
}
|
||||
button.clicked.connect(onClicked);
|
||||
DialogsManager.addressBarShown.connect(onAddressBarShown);
|
||||
|
||||
Script.scriptEnding.connect(function () {
|
||||
button.clicked.disconnect();
|
||||
button.clicked.disconnect(onClicked);
|
||||
DialogsManager.addressBarShown.disconnect(onAddressBarShown);
|
||||
});
|
||||
|
|
|
@ -20,23 +20,28 @@ var desktopMenuItemName = "Desktop";
|
|||
|
||||
var toolBar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system");
|
||||
var button;
|
||||
|
||||
function onHmdChanged(isHmd) {
|
||||
button.writeProperty('buttonState', isHmd ? 0 : 1);
|
||||
}
|
||||
function onClicked(){
|
||||
var isDesktop = Menu.isOptionChecked(desktopMenuItemName);
|
||||
Menu.setIsOptionChecked(isDesktop ? headset : desktopMenuItemName, true);
|
||||
}
|
||||
if (headset) {
|
||||
button = toolBar.addButton({
|
||||
objectName: "hmdToggle",
|
||||
imageURL: Script.resolvePath("assets/images/tools/hmd-switch-01.svg"),
|
||||
imageURL: Script.resolvePath("assets/images/tools/switch.svg"),
|
||||
visible: true,
|
||||
yOffset: 50,
|
||||
alpha: 0.9,
|
||||
});
|
||||
onHmdChanged(HMD.active);
|
||||
|
||||
button.clicked.connect(function(){
|
||||
var isDesktop = Menu.isOptionChecked(desktopMenuItemName);
|
||||
Menu.setIsOptionChecked(isDesktop ? headset : desktopMenuItemName, true);
|
||||
});
|
||||
button.clicked.connect(onClicked);
|
||||
HMD.displayModeChanged.connect(onHmdChanged);
|
||||
|
||||
Script.scriptEnding.connect(function () {
|
||||
button.clicked.disconnect();
|
||||
button.clicked.disconnect(onClicked);
|
||||
HMD.displayModeChanged.disconnect(onHmdChanged);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,14 @@ Xform.prototype.mirrorX = function() {
|
|||
{x: -this.pos.x, y: this.pos.y, z: this.pos.z});
|
||||
};
|
||||
|
||||
Xform.prototype.xformVector = function (vector) {
|
||||
return Vec3.multiplyQbyV(this.rot, vector);
|
||||
}
|
||||
|
||||
Xform.prototype.xformPoint = function (point) {
|
||||
return Vec3.sum(Vec3.multiplyQbyV(this.rot, point), this.pos);
|
||||
}
|
||||
|
||||
Xform.prototype.toString = function() {
|
||||
var rot = this.rot;
|
||||
var pos = this.pos;
|
||||
|
|
|
@ -141,7 +141,9 @@ CameraManager = function() {
|
|||
};
|
||||
|
||||
that.enable = function() {
|
||||
if (Camera.mode == "independent" || that.enabled) return;
|
||||
if (Camera.mode == "independent" || that.enabled || HMD.active) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < CAPTURED_KEYS.length; i++) {
|
||||
Controller.captureKeyEvents({
|
||||
|
@ -179,7 +181,9 @@ CameraManager = function() {
|
|||
}
|
||||
|
||||
that.disable = function(ignoreCamera) {
|
||||
if (!that.enabled) return;
|
||||
if (!that.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < CAPTURED_KEYS.length; i++) {
|
||||
Controller.releaseKeyEvents({
|
||||
|
@ -352,27 +356,21 @@ CameraManager = function() {
|
|||
that.mousePressEvent = function(event) {
|
||||
|
||||
if (cameraTool.mousePressEvent(event)) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (!that.enabled) return;
|
||||
if (!that.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.isRightButton || (event.isLeftButton && event.isControl && !event.isShifted)) {
|
||||
|
||||
that.mode = MODE_ORBIT;
|
||||
} else if (event.isMiddleButton || (event.isLeftButton && event.isControl && event.isShifted)) {
|
||||
|
||||
|
||||
that.mode = MODE_PAN;
|
||||
}
|
||||
|
||||
if (that.mode !== MODE_INACTIVE) {
|
||||
|
||||
|
||||
hasDragged = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -381,7 +379,9 @@ CameraManager = function() {
|
|||
|
||||
that.mouseReleaseEvent = function(event) {
|
||||
|
||||
if (!that.enabled) return;
|
||||
if (!that.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
that.mode = MODE_INACTIVE;
|
||||
Reticle.setVisible(true);
|
||||
|
@ -403,7 +403,9 @@ CameraManager = function() {
|
|||
};
|
||||
|
||||
that.wheelEvent = function(event) {
|
||||
if (!that.enabled) return;
|
||||
if (!that.enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
var dZoom = -event.delta * SCROLL_SENSITIVITY;
|
||||
|
||||
|
@ -459,8 +461,12 @@ CameraManager = function() {
|
|||
}
|
||||
|
||||
function normalizeDegrees(degrees) {
|
||||
while (degrees > 180) degrees -= 360;
|
||||
while (degrees < -180) degrees += 360;
|
||||
while (degrees > 180) {
|
||||
degrees -= 360;
|
||||
}
|
||||
while (degrees < -180) {
|
||||
degrees += 360;
|
||||
}
|
||||
return degrees;
|
||||
}
|
||||
|
||||
|
@ -483,7 +489,6 @@ CameraManager = function() {
|
|||
that.targetZoomDistance = clamp(that.targetZoomDistance, MIN_ZOOM_DISTANCE, MAX_ZOOM_DISTANCE);
|
||||
}
|
||||
|
||||
|
||||
if (easing) {
|
||||
easingTime = Math.min(EASE_TIME, easingTime + dt);
|
||||
}
|
||||
|
|
|
@ -111,8 +111,8 @@ EntityListTool = function(opts) {
|
|||
}
|
||||
});
|
||||
|
||||
webView.visibilityChanged.connect(function (visible) {
|
||||
if (visible) {
|
||||
webView.visibleChanged.connect(function () {
|
||||
if (webView.visible) {
|
||||
that.sendUpdate();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -309,5 +309,11 @@ calculateHandSizeRatio = function() {
|
|||
|
||||
clamp = function(val, min, max){
|
||||
return Math.max(min, Math.min(max, val))
|
||||
}
|
||||
}
|
||||
|
||||
// flattens an array of arrays into a single array
|
||||
// example: flatten([[1], [3, 4], []) => [1, 3, 4]
|
||||
// NOTE: only does one level of flattening, it is not recursive.
|
||||
flatten = function(array) {
|
||||
return [].concat.apply([], array);
|
||||
}
|
||||
|
|
|
@ -14,16 +14,26 @@ var toolBar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system");
|
|||
|
||||
var button = toolBar.addButton({
|
||||
objectName: "mute",
|
||||
imageURL: Script.resolvePath("assets/images/tools/microphone.svg"),
|
||||
imageURL: Script.resolvePath("assets/images/tools/mic.svg"),
|
||||
visible: true,
|
||||
alpha: 0.9,
|
||||
});
|
||||
|
||||
button.clicked.connect(function(){
|
||||
var menuItem = "Mute Microphone";
|
||||
Menu.setIsOptionChecked(menuItem, !Menu.isOptionChecked(menuItem));
|
||||
buttonState: 1,
|
||||
alpha: 0.9
|
||||
});
|
||||
|
||||
function onMuteToggled() {
|
||||
// We could just toggle state, but we're less likely to get out of wack if we read the AudioDevice.
|
||||
// muted => button "on" state => 1. go figure.
|
||||
button.writeProperty('buttonState', AudioDevice.getMuted() ? 0 : 1);
|
||||
}
|
||||
onMuteToggled();
|
||||
function onClicked(){
|
||||
var menuItem = "Mute Microphone";
|
||||
Menu.setIsOptionChecked(menuItem, !Menu.isOptionChecked(menuItem));
|
||||
}
|
||||
button.clicked.connect(onClicked);
|
||||
AudioDevice.muteToggled.connect(onMuteToggled);
|
||||
|
||||
Script.scriptEnding.connect(function () {
|
||||
button.clicked.disconnect();
|
||||
button.clicked.disconnect(onClicked);
|
||||
AudioDevice.muteToggled.disconnect(onMuteToggled);
|
||||
});
|
||||
|
|
|
@ -599,8 +599,6 @@ var usersWindow = (function () {
|
|||
usersRequest.ontimeout = pollUsersTimedOut;
|
||||
usersRequest.onreadystatechange = processUsers;
|
||||
usersRequest.send();
|
||||
|
||||
checkLoggedIn();
|
||||
}
|
||||
|
||||
processUsers = function () {
|
||||
|
@ -646,6 +644,8 @@ var usersWindow = (function () {
|
|||
updateUsersDisplay();
|
||||
updateOverlayPositions();
|
||||
|
||||
checkLoggedIn();
|
||||
|
||||
} else {
|
||||
print("Error: Request for users status returned " + usersRequest.status + " " + usersRequest.statusText);
|
||||
usersTimer = Script.setTimeout(pollUsers, HTTP_GET_TIMEOUT); // Try again after a longer delay.
|
||||
|
|
187
tests/gpu-test/src/TestFbx.cpp
Normal file
|
@ -0,0 +1,187 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "TestFbx.h"
|
||||
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
#include <QtCore/QFile>
|
||||
|
||||
#include <FBXReader.h>
|
||||
|
||||
struct MyVertex {
|
||||
vec3 position;
|
||||
vec2 texCoords;
|
||||
vec3 normal;
|
||||
uint32_t color;
|
||||
|
||||
static gpu::Stream::FormatPointer getVertexFormat() {
|
||||
static const gpu::Element POSITION_ELEMENT { gpu::VEC3, gpu::FLOAT, gpu::XYZ };
|
||||
static const gpu::Element TEXTURE_ELEMENT { gpu::VEC2, gpu::FLOAT, gpu::UV };
|
||||
static const gpu::Element NORMAL_ELEMENT { gpu::VEC3, gpu::FLOAT, gpu::XYZ };
|
||||
static const gpu::Element COLOR_ELEMENT { gpu::VEC4, gpu::NUINT8, gpu::RGBA };
|
||||
gpu::Stream::FormatPointer vertexFormat { std::make_shared<gpu::Stream::Format>() };
|
||||
vertexFormat->setAttribute(gpu::Stream::POSITION, 0, POSITION_ELEMENT, offsetof(MyVertex, position));
|
||||
vertexFormat->setAttribute(gpu::Stream::TEXCOORD, 0, TEXTURE_ELEMENT, offsetof(MyVertex, texCoords));
|
||||
vertexFormat->setAttribute(gpu::Stream::COLOR, 0, COLOR_ELEMENT, offsetof(MyVertex, color));
|
||||
vertexFormat->setAttribute(gpu::Stream::NORMAL, 0, NORMAL_ELEMENT, offsetof(MyVertex, normal));
|
||||
return vertexFormat;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct Part {
|
||||
size_t baseVertex;
|
||||
size_t baseIndex;
|
||||
size_t materialId;
|
||||
};
|
||||
|
||||
struct DrawElementsIndirectCommand {
|
||||
uint count { 0 };
|
||||
uint instanceCount { 1 };
|
||||
uint firstIndex { 0 };
|
||||
uint baseVertex { 0 };
|
||||
uint baseInstance { 0 };
|
||||
};
|
||||
|
||||
|
||||
class FileDownloader : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit FileDownloader(QUrl imageUrl, QObject *parent = 0) : QObject(parent) {
|
||||
connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloaded(QNetworkReply*)));
|
||||
QNetworkRequest request(imageUrl);
|
||||
m_WebCtrl.get(request);
|
||||
}
|
||||
|
||||
virtual ~FileDownloader() {}
|
||||
|
||||
const QByteArray& downloadedData() const {
|
||||
return m_DownloadedData;
|
||||
}
|
||||
|
||||
signals:
|
||||
void downloaded();
|
||||
|
||||
private slots:
|
||||
void fileDownloaded(QNetworkReply* pReply) {
|
||||
m_DownloadedData = pReply->readAll();
|
||||
pReply->deleteLater();
|
||||
emit downloaded();
|
||||
}
|
||||
|
||||
private:
|
||||
QNetworkAccessManager m_WebCtrl;
|
||||
QByteArray m_DownloadedData;
|
||||
};
|
||||
|
||||
|
||||
static const QUrl TEST_ASSET = QString("https://s3.amazonaws.com/DreamingContent/assets/models/tardis/console.fbx");
|
||||
static const mat4 TEST_ASSET_TRANSFORM = glm::translate(mat4(), vec3(0, -1.5f, 0)) * glm::scale(mat4(), vec3(0.01f));
|
||||
//static const QUrl TEST_ASSET = QString("https://s3.amazonaws.com/DreamingContent/assets/simple/SimpleMilitary/Models/Vehicles/tank_02_c.fbx");
|
||||
//static const mat4 TEST_ASSET_TRANSFORM = glm::translate(mat4(), vec3(0, -0.5f, 0)) * glm::scale(mat4(), vec3(0.1f));
|
||||
|
||||
TestFbx::TestFbx(const render::ShapePlumberPointer& shapePlumber) : _shapePlumber(shapePlumber) {
|
||||
FileDownloader* downloader = new FileDownloader(TEST_ASSET, qApp);
|
||||
QObject::connect(downloader, &FileDownloader::downloaded, [this, downloader] {
|
||||
parseFbx(downloader->downloadedData());
|
||||
});
|
||||
}
|
||||
|
||||
bool TestFbx::isReady() const {
|
||||
return _partCount != 0;
|
||||
}
|
||||
|
||||
void TestFbx::parseFbx(const QByteArray& fbxData) {
|
||||
QVariantHash mapping;
|
||||
FBXGeometry* fbx = readFBX(fbxData, mapping);
|
||||
size_t totalVertexCount = 0;
|
||||
size_t totalIndexCount = 0;
|
||||
size_t totalPartCount = 0;
|
||||
size_t highestIndex = 0;
|
||||
for (const auto& mesh : fbx->meshes) {
|
||||
size_t vertexCount = mesh.vertices.size();
|
||||
totalVertexCount += mesh.vertices.size();
|
||||
highestIndex = std::max(highestIndex, vertexCount);
|
||||
totalPartCount += mesh.parts.size();
|
||||
for (const auto& part : mesh.parts) {
|
||||
totalIndexCount += part.quadTrianglesIndices.size();
|
||||
totalIndexCount += part.triangleIndices.size();
|
||||
}
|
||||
}
|
||||
size_t baseVertex = 0;
|
||||
std::vector<MyVertex> vertices;
|
||||
vertices.reserve(totalVertexCount);
|
||||
std::vector<uint16_t> indices;
|
||||
indices.reserve(totalIndexCount);
|
||||
std::vector<DrawElementsIndirectCommand> parts;
|
||||
parts.reserve(totalPartCount);
|
||||
_partCount = totalPartCount;
|
||||
for (const auto& mesh : fbx->meshes) {
|
||||
baseVertex = vertices.size();
|
||||
|
||||
vec3 color;
|
||||
for (const auto& part : mesh.parts) {
|
||||
DrawElementsIndirectCommand partIndirect;
|
||||
partIndirect.baseVertex = (uint)baseVertex;
|
||||
partIndirect.firstIndex = (uint)indices.size();
|
||||
partIndirect.baseInstance = (uint)parts.size();
|
||||
_partTransforms.push_back(mesh.modelTransform);
|
||||
auto material = fbx->materials[part.materialID];
|
||||
color = material.diffuseColor;
|
||||
for (auto index : part.quadTrianglesIndices) {
|
||||
indices.push_back(index);
|
||||
}
|
||||
for (auto index : part.triangleIndices) {
|
||||
indices.push_back(index);
|
||||
}
|
||||
size_t triangles = (indices.size() - partIndirect.firstIndex);
|
||||
Q_ASSERT(0 == (triangles % 3));
|
||||
//triangles /= 3;
|
||||
partIndirect.count = (uint)triangles;
|
||||
parts.push_back(partIndirect);
|
||||
}
|
||||
|
||||
size_t vertexCount = mesh.vertices.size();
|
||||
for (size_t i = 0; i < vertexCount; ++i) {
|
||||
MyVertex vertex;
|
||||
vertex.position = mesh.vertices[(int)i];
|
||||
vec3 n = mesh.normals[(int)i];
|
||||
vertex.normal = n;
|
||||
vertex.texCoords = mesh.texCoords[(int)i];
|
||||
vertex.color = toCompactColor(vec4(color, 1));
|
||||
vertices.push_back(vertex);
|
||||
}
|
||||
}
|
||||
|
||||
_vertexBuffer->append(vertices);
|
||||
_indexBuffer->append(indices);
|
||||
_indirectBuffer->append(parts);
|
||||
delete fbx;
|
||||
}
|
||||
|
||||
void TestFbx::renderTest(size_t testId, RenderArgs* args) {
|
||||
gpu::Batch& batch = *(args->_batch);
|
||||
//pipeline->pipeline
|
||||
if (_partCount) {
|
||||
for (size_t i = 0; i < _partCount; ++i) {
|
||||
batch.setModelTransform(TEST_ASSET_TRANSFORM * _partTransforms[i]);
|
||||
batch.setupNamedCalls(__FUNCTION__, [this](gpu::Batch& batch, gpu::Batch::NamedBatchData&) {
|
||||
RenderArgs args; args._batch = &batch;
|
||||
_shapePlumber->pickPipeline(&args, render::ShapeKey());
|
||||
batch.setInputBuffer(0, _vertexBuffer, 0, sizeof(MyVertex));
|
||||
batch.setIndexBuffer(gpu::UINT16, _indexBuffer, 0);
|
||||
batch.setInputFormat(MyVertex::getVertexFormat());
|
||||
batch.setIndirectBuffer(_indirectBuffer, 0);
|
||||
batch.multiDrawIndexedIndirect((uint)_partCount, gpu::TRIANGLES);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "TestFbx.moc"
|
35
tests/gpu-test/src/TestFbx.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "TestHelpers.h"
|
||||
|
||||
#include <render/ShapePipeline.h>
|
||||
|
||||
class FBXGeometry;
|
||||
|
||||
class TestFbx : public GpuTestBase {
|
||||
size_t _partCount { 0 };
|
||||
model::Material _material;
|
||||
render::ShapeKey _shapeKey;
|
||||
std::vector<mat4> _partTransforms;
|
||||
render::ShapePlumberPointer _shapePlumber;
|
||||
gpu::Stream::FormatPointer _vertexFormat { std::make_shared<gpu::Stream::Format>() };
|
||||
gpu::BufferPointer _vertexBuffer { std::make_shared<gpu::Buffer>() };
|
||||
gpu::BufferPointer _indexBuffer { std::make_shared<gpu::Buffer>() };
|
||||
gpu::BufferPointer _indirectBuffer { std::make_shared<gpu::Buffer>() };
|
||||
public:
|
||||
TestFbx(const render::ShapePlumberPointer& shapePlumber);
|
||||
bool isReady() const override;
|
||||
void renderTest(size_t test, RenderArgs* args) override;
|
||||
|
||||
private:
|
||||
void parseFbx(const QByteArray& fbxData);
|
||||
};
|
||||
|
||||
|
54
tests/gpu-test/src/TestFloorGrid.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "TestFloorGrid.h"
|
||||
|
||||
|
||||
TestFloorGrid::TestFloorGrid() {
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
// Render grid on xz plane (not the optimal way to do things, but w/e)
|
||||
// Note: GeometryCache::renderGrid will *not* work, as it is apparenly unaffected by batch rotations and renders xy only
|
||||
static const std::string GRID_INSTANCE = "Grid";
|
||||
static auto compactColor1 = toCompactColor(vec4 { 0.35f, 0.25f, 0.15f, 1.0f });
|
||||
static auto compactColor2 = toCompactColor(vec4 { 0.15f, 0.25f, 0.35f, 1.0f });
|
||||
static std::vector<glm::mat4> transforms;
|
||||
static gpu::BufferPointer colorBuffer;
|
||||
if (!transforms.empty()) {
|
||||
transforms.reserve(200);
|
||||
colorBuffer = std::make_shared<gpu::Buffer>();
|
||||
for (int i = 0; i < 100; ++i) {
|
||||
{
|
||||
glm::mat4 transform = glm::translate(mat4(), vec3(0, -1, -50 + i));
|
||||
transform = glm::scale(transform, vec3(100, 1, 1));
|
||||
transforms.push_back(transform);
|
||||
colorBuffer->append(compactColor1);
|
||||
}
|
||||
|
||||
{
|
||||
glm::mat4 transform = glm::mat4_cast(quat(vec3(0, PI / 2.0f, 0)));
|
||||
transform = glm::translate(transform, vec3(0, -1, -50 + i));
|
||||
transform = glm::scale(transform, vec3(100, 1, 1));
|
||||
transforms.push_back(transform);
|
||||
colorBuffer->append(compactColor2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void TestFloorGrid::renderTest(size_t testId, RenderArgs* args) {
|
||||
//gpu::Batch& batch = *(args->_batch);
|
||||
//auto pipeline = geometryCache->getSimplePipeline();
|
||||
//for (auto& transform : transforms) {
|
||||
// batch.setModelTransform(transform);
|
||||
// batch.setupNamedCalls(GRID_INSTANCE, [=](gpu::Batch& batch, gpu::Batch::NamedBatchData& data) {
|
||||
// batch.setPipeline(_pipeline);
|
||||
// geometryCache->renderWireShapeInstances(batch, GeometryCache::Line, data.count(), colorBuffer);
|
||||
// });
|
||||
//}
|
||||
}
|
26
tests/gpu-test/src/TestFloorGrid.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <GLMHelpers.h>
|
||||
#include <Transform.h>
|
||||
|
||||
#include <gpu/Resource.h>
|
||||
#include <gpu/Stream.h>
|
||||
|
||||
#include "TestHelpers.h"
|
||||
|
||||
class TestFloorGrid : public GpuTestBase {
|
||||
public:
|
||||
TestFloorGrid();
|
||||
void renderTest(size_t testId, RenderArgs* args) override;
|
||||
};
|
||||
|
||||
|
88
tests/gpu-test/src/TestFloorTexture.cpp
Normal file
|
@ -0,0 +1,88 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "TestFloorTexture.h"
|
||||
|
||||
struct Vertex {
|
||||
vec4 position;
|
||||
vec4 texture;
|
||||
vec4 normal;
|
||||
vec4 color;
|
||||
};
|
||||
static const uint TEXTURE_OFFSET = offsetof(Vertex, texture);
|
||||
static const uint NORMAL_OFFSET = offsetof(Vertex, normal);
|
||||
static const uint POSITION_OFFSET = offsetof(Vertex, position);
|
||||
static const uint COLOR_OFFSET = offsetof(Vertex, color);
|
||||
static const gpu::Element POSITION_ELEMENT { gpu::VEC3, gpu::FLOAT, gpu::XYZ };
|
||||
static const gpu::Element TEXTURE_ELEMENT { gpu::VEC2, gpu::FLOAT, gpu::UV };
|
||||
static const gpu::Element NORMAL_ELEMENT { gpu::VEC3, gpu::FLOAT, gpu::XYZ };
|
||||
static const gpu::Element COLOR_ELEMENT { gpu::VEC4, gpu::FLOAT, gpu::RGBA };
|
||||
|
||||
FloorTextureTest::FloorTextureTest() {
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
std::vector<Vertex> vertices;
|
||||
const int MINX = -1000;
|
||||
const int MAXX = 1000;
|
||||
|
||||
vertices.push_back({
|
||||
vec4(MAXX, 0, MAXX, 1),
|
||||
vec4(MAXX, MAXX, 0, 0),
|
||||
vec4(0, 1, 0, 1),
|
||||
vec4(1),
|
||||
});
|
||||
|
||||
vertices.push_back({
|
||||
vec4(MAXX, 0, MINX, 1),
|
||||
vec4(MAXX, 0, 0, 0),
|
||||
vec4(0, 1, 0, 1),
|
||||
vec4(1),
|
||||
});
|
||||
|
||||
vertices.push_back({
|
||||
vec4(MINX, 0, MINX, 1),
|
||||
vec4(0, 0, 0, 0),
|
||||
vec4(0, 1, 0, 1),
|
||||
vec4(1),
|
||||
});
|
||||
|
||||
vertices.push_back({
|
||||
vec4(MINX, 0, MAXX, 1),
|
||||
vec4(0, MAXX, 0, 0),
|
||||
vec4(0, 1, 0, 1),
|
||||
vec4(1),
|
||||
});
|
||||
|
||||
vertexBuffer->append(vertices);
|
||||
indexBuffer->append(std::vector<uint16_t>({ 0, 1, 2, 2, 3, 0 }));
|
||||
texture = DependencyManager::get<TextureCache>()->getImageTexture("C:/Users/bdavis/Git/openvr/samples/bin/cube_texture.png");
|
||||
//texture = DependencyManager::get<TextureCache>()->getImageTexture("H:/test.png");
|
||||
//texture = DependencyManager::get<TextureCache>()->getImageTexture("H:/crate_blue.fbm/lambert8SG_Normal_OpenGL.png");
|
||||
vertexFormat->setAttribute(gpu::Stream::POSITION, 0, POSITION_ELEMENT, POSITION_OFFSET);
|
||||
vertexFormat->setAttribute(gpu::Stream::TEXCOORD, 0, TEXTURE_ELEMENT, TEXTURE_OFFSET);
|
||||
vertexFormat->setAttribute(gpu::Stream::COLOR, 0, COLOR_ELEMENT, COLOR_OFFSET);
|
||||
vertexFormat->setAttribute(gpu::Stream::NORMAL, 0, NORMAL_ELEMENT, NORMAL_OFFSET);
|
||||
}
|
||||
|
||||
void FloorTextureTest::renderTest(size_t testId, RenderArgs* args) {
|
||||
gpu::Batch& batch = *(args->_batch);
|
||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||
static auto start = usecTimestampNow();
|
||||
auto now = usecTimestampNow();
|
||||
if ((now - start) > USECS_PER_SECOND * 1) {
|
||||
start = now;
|
||||
texture->incremementMinMip();
|
||||
}
|
||||
|
||||
geometryCache->bindSimpleProgram(batch, true, true, true);
|
||||
batch.setInputBuffer(0, vertexBuffer, 0, sizeof(Vertex));
|
||||
batch.setInputFormat(vertexFormat);
|
||||
batch.setIndexBuffer(gpu::UINT16, indexBuffer, 0);
|
||||
batch.setResourceTexture(0, texture);
|
||||
batch.setModelTransform(glm::translate(glm::mat4(), vec3(0, -0.1, 0)));
|
||||
batch.drawIndexed(gpu::TRIANGLES, 6, 0);
|
||||
}
|
22
tests/gpu-test/src/TestFloorTexture.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
//
|
||||
// Created by Bradley Austin Davis on 2016/05/16
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "TestHelpers.h"
|
||||
|
||||
class FloorTextureTest : public GpuTestBase {
|
||||
gpu::BufferPointer vertexBuffer { std::make_shared<gpu::Buffer>() };
|
||||
gpu::BufferPointer indexBuffer { std::make_shared<gpu::Buffer>() };
|
||||
gpu::Stream::FormatPointer vertexFormat { std::make_shared<gpu::Stream::Format>() };
|
||||
gpu::TexturePointer texture;
|
||||
public:
|
||||
FloorTextureTest();
|
||||
void renderTest(size_t testId, RenderArgs* args) override;
|
||||
};
|
||||
|
||||
|
|
@ -62,6 +62,9 @@
|
|||
#include <render/CullTask.h>
|
||||
|
||||
#include "TestWindow.h"
|
||||
#include "TestFbx.h"
|
||||
#include "TestFloorGrid.h"
|
||||
#include "TestFloorTexture.h"
|
||||
#include "TestInstancedShapes.h"
|
||||
#include "TestShapes.h"
|
||||
|
||||
|
@ -90,8 +93,8 @@ class MyTestWindow : public TestWindow {
|
|||
#endif
|
||||
updateCamera();
|
||||
_testBuilders = TestBuilders({
|
||||
//[this] { return new TestFbx(_shapePlumber); },
|
||||
[] { return new TestShapes(); },
|
||||
[this] { return new TestFbx(_shapePlumber); },
|
||||
[] { return new TestInstancedShapes(); },
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
<@include gpu/Config.slh@>
|
||||
<$VERSION_HEADER$>
|
||||
// Generated on <$_SCRIBE_DATE$>
|
||||
//
|
||||
// simple.frag
|
||||
// fragment shader
|
||||
//
|
||||
// Created by Andrzej Kapolka on 9/15/14.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
<@include DeferredBufferWrite.slh@>
|
||||
<@include model/Material.slh@>
|
||||
|
||||
// the interpolated normal
|
||||
in vec3 _normal;
|
||||
in vec3 _color;
|
||||
|
||||
void main(void) {
|
||||
packDeferredFragment(
|
||||
normalize(_normal.xyz),
|
||||
1.0,
|
||||
_color.rgb,
|
||||
DEFAULT_ROUGHNESS, DEFAULT_METALLIC, DEFAULT_EMISSIVE, DEFAULT_OCCLUSION);
|
||||
}
|