Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2947c54eb8 | ||
|
|
561e3f4bd0 | ||
|
|
33f27047b1 | ||
|
|
7c532f5155 | ||
|
|
e62e82795b | ||
|
|
91e07e79c5 | ||
|
|
fc471ce400 |
@@ -7,6 +7,7 @@ import {CombatTracker} from "./src/combattracker.js";
|
|||||||
import {PlaylistControl} from "./src/playlist.js";
|
import {PlaylistControl} from "./src/playlist.js";
|
||||||
import {SoundboardControl} from "./src/soundboard.js";
|
import {SoundboardControl} from "./src/soundboard.js";
|
||||||
import {OtherControls} from "./src/othercontrols.js";
|
import {OtherControls} from "./src/othercontrols.js";
|
||||||
|
import {ExternalModules} from "./src/external.js";
|
||||||
export var streamDeck;
|
export var streamDeck;
|
||||||
export var tokenControl;
|
export var tokenControl;
|
||||||
var move;
|
var move;
|
||||||
@@ -15,6 +16,7 @@ export var combatTracker;
|
|||||||
export var playlistControl;
|
export var playlistControl;
|
||||||
export var soundboard;
|
export var soundboard;
|
||||||
export var otherControls;
|
export var otherControls;
|
||||||
|
export var externalModules;
|
||||||
|
|
||||||
export const moduleName = "MaterialDeck";
|
export const moduleName = "MaterialDeck";
|
||||||
export var selectedTokenId;
|
export var selectedTokenId;
|
||||||
@@ -51,7 +53,7 @@ async function analyzeWSmessage(msg){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data == undefined || data.payload == undefined) return;
|
if (data == undefined || data.payload == undefined) return;
|
||||||
|
//console.log("Received",data);
|
||||||
const action = data.action;
|
const action = data.action;
|
||||||
const event = data.event;
|
const event = data.event;
|
||||||
const context = data.context;
|
const context = data.context;
|
||||||
@@ -70,6 +72,8 @@ async function analyzeWSmessage(msg){
|
|||||||
tokenControl.active = true;
|
tokenControl.active = true;
|
||||||
tokenControl.update(selectedTokenId);
|
tokenControl.update(selectedTokenId);
|
||||||
}
|
}
|
||||||
|
else if (action == 'move')
|
||||||
|
move.update(settings,context);
|
||||||
else if (action == 'macro')
|
else if (action == 'macro')
|
||||||
macroControl.update(settings,context);
|
macroControl.update(settings,context);
|
||||||
else if (action == 'combattracker')
|
else if (action == 'combattracker')
|
||||||
@@ -80,6 +84,8 @@ async function analyzeWSmessage(msg){
|
|||||||
soundboard.update(settings,context);
|
soundboard.update(settings,context);
|
||||||
else if (action == 'other')
|
else if (action == 'other')
|
||||||
otherControls.update(settings,context);
|
otherControls.update(settings,context);
|
||||||
|
else if (action == 'external')
|
||||||
|
externalModules.update(settings,context);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (event == 'willDisappear'){
|
else if (event == 'willDisappear'){
|
||||||
@@ -101,6 +107,8 @@ async function analyzeWSmessage(msg){
|
|||||||
soundboard.keyPressDown(settings);
|
soundboard.keyPressDown(settings);
|
||||||
else if (action == 'other')
|
else if (action == 'other')
|
||||||
otherControls.keyPress(settings);
|
otherControls.keyPress(settings);
|
||||||
|
else if (action == 'external')
|
||||||
|
externalModules.keyPress(settings,context);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (event == 'keyUp'){
|
else if (event == 'keyUp'){
|
||||||
@@ -201,6 +209,7 @@ Hooks.once('ready', ()=>{
|
|||||||
combatTracker = new CombatTracker();
|
combatTracker = new CombatTracker();
|
||||||
playlistControl = new PlaylistControl();
|
playlistControl = new PlaylistControl();
|
||||||
otherControls = new OtherControls();
|
otherControls = new OtherControls();
|
||||||
|
externalModules = new ExternalModules();
|
||||||
|
|
||||||
|
|
||||||
let soundBoardSettings = game.settings.get(moduleName,'soundboardSettings');
|
let soundBoardSettings = game.settings.get(moduleName,'soundboardSettings');
|
||||||
@@ -318,6 +327,7 @@ Hooks.on('renderSidebarTab',()=>{
|
|||||||
Hooks.on('updateScene',()=>{
|
Hooks.on('updateScene',()=>{
|
||||||
if (enableModule == false || ready == false) return;
|
if (enableModule == false || ready == false) return;
|
||||||
otherControls.updateAll();
|
otherControls.updateAll();
|
||||||
|
externalModules.updateAll();
|
||||||
});
|
});
|
||||||
|
|
||||||
Hooks.on('renderSceneControls',()=>{
|
Hooks.on('renderSceneControls',()=>{
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ Instructions and more info can be found in the <a href="https://github.com/CDeen
|
|||||||
Module manifest: https://raw.githubusercontent.com/CDeenen/MaterialDeck/Master/module.json
|
Module manifest: https://raw.githubusercontent.com/CDeenen/MaterialDeck/Master/module.json
|
||||||
|
|
||||||
## Software Versions & Module Incompatibilities
|
## Software Versions & Module Incompatibilities
|
||||||
<b>Foundry VTT:</b> Tested on 0.7.7<br>
|
<b>Foundry VTT:</b> Tested on 0.7.5-0.7.9<br>
|
||||||
<b>Module Incompatibilities:</b> None known.<br>
|
<b>Module Incompatibilities:</b> None known.<br>
|
||||||
|
|
||||||
## Feedback
|
## Feedback
|
||||||
@@ -81,6 +81,8 @@ If you have any suggestions or bugs to report, feel free to create an issue, con
|
|||||||
<b>Author:</b> Cristian Deenen (Cris#6864 on Discord)<br>
|
<b>Author:</b> Cristian Deenen (Cris#6864 on Discord)<br>
|
||||||
<br>
|
<br>
|
||||||
Special thanks to Asmodeus#7588 who made this module possible by generously donating a Stream Deck XL
|
Special thanks to Asmodeus#7588 who made this module possible by generously donating a Stream Deck XL
|
||||||
|
<br>
|
||||||
|
Please consider supporting me on <a href="https://www.patreon.com/materialfoundry">Patreon</a>, and feel free to join the Material Foundry <a href="https://discord.gg/3hd4G6TkmA">Discord</a> server.
|
||||||
|
|
||||||
## Abandonment
|
## Abandonment
|
||||||
Abandoned modules are a (potential) problem for Foundry, because users and/or other modules might rely on abandoned modules, which might break in future Foundry updates.<br>
|
Abandoned modules are a (potential) problem for Foundry, because users and/or other modules might rely on abandoned modules, which might break in future Foundry updates.<br>
|
||||||
|
|||||||
46
changelog.md
@@ -1,4 +1,50 @@
|
|||||||
# Changelog Material Deck Module
|
# Changelog Material Deck Module
|
||||||
|
### v1.2.0 - 28-12-2020
|
||||||
|
Fixes
|
||||||
|
<ul>
|
||||||
|
<li>Incorrect link to some black backgrounds fixed</li>
|
||||||
|
<li>Token Action: Movement speed wouldn't be displayed for DnD5e 1.2.0</li>
|
||||||
|
<li>Macro Action => Hotbar: 10th macro would not trigger and display correctly</li>
|
||||||
|
<li>Combat Tracker Action => Function: Default value would not properly initialize</li>
|
||||||
|
<li>Other Actions => Darkness Control => Display would not function correctly</li>
|
||||||
|
<li>Fixed some issues in the SD plugin where correct settings would not be displayed</li>
|
||||||
|
</ul>
|
||||||
|
Additions:
|
||||||
|
<ul>
|
||||||
|
<li>Added new 'External Modules Action', which will contain all module integrations that don't fit anywhere else</li>
|
||||||
|
<li>Added support for the Custom Hotbar module in 'Macro Action' => Mode: 'Custom Hotbar'. Link to module: https://foundryvtt.com/packages/custom-hotbar/</li>
|
||||||
|
<li>Added support for the FxMaster module in 'External Modules Action' => Mode: 'Fx Master'. Link to module: https://foundryvtt.com/packages/fxmaster/</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
### v1.1.1 - 12-12-2020
|
||||||
|
Fixes
|
||||||
|
<ul>
|
||||||
|
<li>Fixed issue where deleting a playlist would cause an error preventing the Soundboard Configuration to show up</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<b>Compatible server app and SD plugin:</b><br>
|
||||||
|
Material Server v1.0.2 (unchanged): https://github.com/CDeenen/MaterialServer/releases <br>
|
||||||
|
SD plugin v1.1.0 (unchanged): https://github.com/CDeenen/MaterialDeck_SD/releases<br>
|
||||||
|
|
||||||
|
### v1.1.0 - 09-12-2020
|
||||||
|
Fixes
|
||||||
|
<ul>
|
||||||
|
<li>Settings would not show for Combat Tracker action</li>
|
||||||
|
<li>Macro Action => Macro Board default settings fixed</li>
|
||||||
|
<li>API has been improved, making integration with other hardware/software easier, and making future changes/additions easier</li>
|
||||||
|
</ul>
|
||||||
|
Additions:
|
||||||
|
<ul>
|
||||||
|
<li>Added support for Pathfinder 1e and Shadow of the Demon Lord</li>
|
||||||
|
<li>All dialogs that are openable using the SD can now be closed by pressing the button while the dialog is open</li>
|
||||||
|
<li>Playlist Action & Soundboard Action => Stop All now indicates if there are tracks/playlists/sounds playing</li>
|
||||||
|
<li>Confirmed Foundry 0.7.8 compatibility</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<b>Compatible server app and SD plugin:</b><br>
|
||||||
|
Material Server v1.0.2 (unchanged): https://github.com/CDeenen/MaterialServer/releases <br>
|
||||||
|
SD plugin v1.1.0: https://github.com/CDeenen/MaterialDeck_SD/releases<br>
|
||||||
|
|
||||||
### V1.0.1 - 26-11-2020
|
### V1.0.1 - 26-11-2020
|
||||||
<ul>
|
<ul>
|
||||||
<li>Fixed issue where macro from macroboard wouldn't execute if furnace arguments were not defined</li>
|
<li>Fixed issue where macro from macroboard wouldn't execute if furnace arguments were not defined</li>
|
||||||
|
|||||||
BIN
img/combattracker/.thumb/combattracker.png.jpg
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
img/combattracker/.thumb/combattracker@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
img/combattracker/.thumb/nextround.png.jpg
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
img/combattracker/.thumb/nextturn.png.jpg
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
img/combattracker/.thumb/previousround.png.jpg
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
img/combattracker/.thumb/previousturn.png.jpg
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
img/combattracker/.thumb/startcombat.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
img/combattracker/.thumb/stopcombat.png.jpg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
5
img/combattracker/SOURCES.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
combattracker.png: Edited from https://fontawesome.com/icons/fist-raised?style=solid
|
||||||
|
nextturn.png, previousturn.png: Edited from https://fontawesome.com/icons/arrow-right?style=solid
|
||||||
|
nextround.png, previousround.png: Edited from https://fontawesome.com/icons/step-forward?style=solid
|
||||||
|
startcombat.png: Edited from https://fontawesome.com/icons/play?style=solid
|
||||||
|
stopcombat.png: Edited from https://fontawesome.com/icons/stop?style=solid
|
||||||
BIN
img/combattracker/combattracker.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
img/combattracker/combattracker@2x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
img/combattracker/nextround.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
img/combattracker/nextturn.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
img/combattracker/previousround.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
img/combattracker/previousturn.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
img/combattracker/startcombat.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
img/combattracker/stopcombat.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
img/external/.thumb/external.png.jpg
vendored
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/external/.thumb/external@2x.png.jpg
vendored
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/external/.thumb/fxmaster.png.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
2
img/external/SOURCES.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
external.png: Edited from https://fontawesome.com/icons/external-link-alt?style=solid
|
||||||
|
fxmaster.png: Edited from https://fontawesome.com/icons/magic?style=solid
|
||||||
BIN
img/external/external.png
vendored
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
img/external/external@2x.png
vendored
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
img/external/fxmaster.png
vendored
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
img/macro/.thumb/macro.png.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
img/macro/.thumb/macro@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 13 KiB |
1
img/macro/SOURCES.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
macro.png: Foundry's icon folder, converted from .svg, original name: dice-target.svg
|
||||||
BIN
img/macro/macro.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
img/macro/macro@2x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
img/move/.thumb/center.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
img/move/.thumb/center@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
img/move/.thumb/down.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/downleft.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/downright.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/left.png.jpg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
img/move/.thumb/right.png.jpg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
img/move/.thumb/up.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/upleft.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/upright.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/move/.thumb/zoomin.png.jpg
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
img/move/.thumb/zoomout.png.jpg
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
2
img/move/SOURCES.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
center.png: made by me
|
||||||
|
All other images taken from freepngimg.com, iverted color and rotated. Source: https://freepngimg.com/png/24691-right-arrow-hd
|
||||||
BIN
img/move/center.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
img/move/center@2x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
img/move/down.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
img/move/downleft.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
img/move/downright.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
img/move/left.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
img/move/right.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
img/move/up.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
img/move/upleft.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
img/move/upright.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
img/move/zoomin.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
img/move/zoomout.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
img/other/.thumb/cogs.png.jpg
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
img/other/.thumb/other.png.jpg
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
img/other/.thumb/other@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
2
img/other/SOURCES.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
other.png: Made using https://www.elgato.com/en/gaming/keycreator
|
||||||
|
cogs.png: Edited from https://fontawesome.com/icons/cogs?style=solid
|
||||||
BIN
img/other/cogs.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
img/other/darkness/.thumb/darkness.png.jpg
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
img/other/darkness/.thumb/decreasedarkness.png.jpg
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
img/other/darkness/.thumb/increasedarkness.png.jpg
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
2
img/other/darkness/SOURCES.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
decreasedarkness.png: Made using https://www.elgato.com/en/gaming/keycreator
|
||||||
|
increasedarkness.png: Made using https://www.elgato.com/en/gaming/keycreator
|
||||||
BIN
img/other/darkness/darkness.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
img/other/darkness/decreasedarkness.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
img/other/darkness/increasedarkness.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
img/other/other.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
img/other/other@2x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
img/other/pause/.thumb/pause.png.jpg
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
img/other/pause/.thumb/playpause.png.jpg
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
img/other/pause/.thumb/resume.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
3
img/other/pause/SOURCES.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
resume.png: Edited from https://fontawesome.com/icons/play?style=solid
|
||||||
|
pause.png: Edited from https://fontawesome.com/icons/pause?style=solid
|
||||||
|
playpause.png: Combined resume.png and pause.png
|
||||||
BIN
img/other/pause/pause.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
img/other/pause/playpause.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
img/other/pause/resume.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
img/playlist/.thumb/play.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
img/playlist/.thumb/play@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
img/playlist/.thumb/play_redBrightness.png.jpg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
img/playlist/.thumb/stop.png.jpg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
2
img/playlist/SOURCES.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
play.png: Edited from https://fontawesome.com/icons/play?style=solid
|
||||||
|
stop.png: Edited from https://fontawesome.com/icons/stop?style=solid
|
||||||
BIN
img/playlist/play.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
img/playlist/play@2x.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
img/playlist/play_redBrightness.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
img/playlist/stop.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
img/soundboard/.thumb/soundboard.png.jpg
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
img/soundboard/.thumb/soundboard@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
img/soundboard/.thumb/stop.png.jpg
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
2
img/soundboard/SOURCES.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
soundboard.png: Edited from https://fontawesome.com/icons/music?style=solid
|
||||||
|
play.png: Edited from https://fontawesome.com/icons/play?style=solid
|
||||||
BIN
img/soundboard/soundboard.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
img/soundboard/soundboard@2x.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
img/soundboard/stop.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
img/token/.thumb/hp.png.jpg
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
img/token/.thumb/init.png.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
img/token/.thumb/mystery-man.png.jpg
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
img/token/.thumb/mystery-man@2x.png.jpg
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
5
img/token/SOURCES.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
ac.webp: Foundry's icon folder, original name: heater-steel-worn.webp
|
||||||
|
hp.png: made using Elgato's key creator: https://www.elgato.com/en/gaming/keycreator
|
||||||
|
init.png: freepngimg.com, color inverted, from: https://freepngimg.com/png/81025-art-dice-dungeons-system-dragons-d20-triangle/icon
|
||||||
|
speed.webp: Foundry's icon folder, original name: shoes-collared-leather-blue.webp
|
||||||
|
mystery-man.png: Foundry's icon folder, converted from .svg
|
||||||
BIN
img/token/ac.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |