🔀 Merge branch 'fix/ci' into feature/doom
@@ -68,9 +68,29 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
find $GITHUB_WORKSPACE -type f -and \( -name "*.sh" \) | xargs shellcheck
|
find $GITHUB_WORKSPACE -type f -and \( -name "*.sh" \) | xargs shellcheck
|
||||||
|
|
||||||
|
references:
|
||||||
|
name: Generate References
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
if: >
|
||||||
|
github.event_name == 'push' && contains(github.event.head_commit.message, '[generate-references]')
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Download Dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt update -qq
|
||||||
|
sudo apt install gettext -qq
|
||||||
|
- name: Build Burn-My-Windows
|
||||||
|
run: make
|
||||||
|
- name: Generate References
|
||||||
|
run: sudo make references
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: references
|
||||||
|
path: tests/references/
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Run Tests
|
name: Run Tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-22.04
|
||||||
if: >
|
if: >
|
||||||
github.event_name == 'pull_request' ||
|
github.event_name == 'pull_request' ||
|
||||||
( contains(github.ref, 'main') && !contains(github.event.head_commit.message, '[no-ci]') ) ||
|
( contains(github.ref, 'main') && !contains(github.event.head_commit.message, '[no-ci]') ) ||
|
||||||
@@ -86,14 +106,14 @@ jobs:
|
|||||||
- '35'
|
- '35'
|
||||||
- '36'
|
- '36'
|
||||||
session:
|
session:
|
||||||
#- 'gnome-xsession' Disabled for now as it miraculously fails on GitHub. Locally, all tests pass...
|
- 'gnome-xsession'
|
||||||
- 'gnome-wayland-nested'
|
- 'gnome-wayland-nested'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Download Dependencies
|
- name: Download Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt update -qq
|
sudo apt update -qq
|
||||||
sudo apt install gettext -qq
|
sudo apt install gettext imagemagick -qq
|
||||||
- name: Build Burn-My-Windows
|
- name: Build Burn-My-Windows
|
||||||
run: make
|
run: make
|
||||||
- name: Test Burn-My-Windows
|
- name: Test Burn-My-Windows
|
||||||
@@ -101,5 +121,5 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: log_${{ matrix.version }}_${{ matrix.session }}
|
name: result_${{ matrix.version }}_${{ matrix.session }}
|
||||||
path: tests/output/
|
path: tests/output/
|
||||||
@@ -6,11 +6,14 @@
|
|||||||
|
|
||||||
#### New Features
|
#### New Features
|
||||||
|
|
||||||
|
* **New Effect: Doom.** Melt your windows. Inspired by the legendary screen transitions of the original Doom.
|
||||||
* **New Effect: Pixelate.** Pixelate your windows and randomly hide pixels until the entire window is gone.
|
* **New Effect: Pixelate.** Pixelate your windows and randomly hide pixels until the entire window is gone.
|
||||||
|
|
||||||
#### Enhancements
|
#### Enhancements
|
||||||
|
|
||||||
* Under KWin, the effects now use the same names as in the KDE store.
|
* Under KWin, the effects now use the same names as in the KDE store.
|
||||||
|
* The continuous integration tests now use a fuzzy search for the images targets. This way, the test work again on X11 and Wayland.
|
||||||
|
* A new GitHub Actions workflow has been added which is executed whenever a commit message includes the `[generate-references]` tag. This workflow re-creates all reference images for the continuous integration test.
|
||||||
|
|
||||||
## [Burn My Windows 19](https://github.com/schneegans/Burn-My-Windows/releases/tag/v19)
|
## [Burn My Windows 19](https://github.com/schneegans/Burn-My-Windows/releases/tag/v19)
|
||||||
|
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ var Doom = class {
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
shader.set_uniform_float(shader._uActorScale, 1, [testMode ? 1.0 : actorScale]);
|
shader.set_uniform_float(shader._uActorScale, 1, [testMode ? 1.0 : actorScale]);
|
||||||
shader.set_uniform_float(shader._uHorizontalScale, 1, [settings.get_double('doom-horizontal-scale')]);
|
shader.set_uniform_float(shader._uHorizontalScale, 1, [testMode ? 50.0 :settings.get_double('doom-horizontal-scale')]);
|
||||||
shader.set_uniform_float(shader._uVerticalScale, 1, [settings.get_double('doom-vertical-scale')]);
|
shader.set_uniform_float(shader._uVerticalScale, 1, [testMode ? 150.0 : settings.get_double('doom-vertical-scale')]);
|
||||||
shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_double('doom-pixel-size')]);
|
shader.set_uniform_float(shader._uPixelSize, 1, [settings.get_int('doom-pixel-size')]);
|
||||||
// clang-format on
|
// clang-format on
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,124 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------------------- #
|
||||||
|
# This script searches for a given image on the screen and prints the coordinates of the #
|
||||||
|
# upper left corner to STDOUT if it's found. If the image is not found, an exit code #
|
||||||
|
# of 1 is returned. #
|
||||||
|
# #
|
||||||
|
# -s scale_factor: In order to optimize the performance, both, the target image and the #
|
||||||
|
# screen capture is scaled down by 1 / scale_factor. Lower numbers can #
|
||||||
|
# help finding difficult targets but will also increase the calculation #
|
||||||
|
# time. Reasonable values are [1...10], default is 4. #
|
||||||
|
# -f fuzziness: A mean-squared-error threshold under which a location is considered #
|
||||||
|
# to be a match. Default is 0.01. Increase this to make finding a #
|
||||||
|
# target more likely but also increase the possibility of false #
|
||||||
|
# positives. #
|
||||||
|
# -------------------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 -s scale_factor -f fuzziness screen.png target.png" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
SCALE_FACTOR=4
|
||||||
|
FUZZINESS=0.01
|
||||||
|
|
||||||
|
while getopts "s:f:h" opt; do
|
||||||
|
case $opt in
|
||||||
|
s) SCALE_FACTOR="${OPTARG}";;
|
||||||
|
f) FUZZINESS="${OPTARG}";;
|
||||||
|
h) usage; exit 0;;
|
||||||
|
*) usage; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
SCREEN=$1
|
||||||
|
TARGET=$2
|
||||||
|
|
||||||
|
# Make sure the screen image is given.
|
||||||
|
if [[ -z "${SCREEN}" ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure the target image is given.
|
||||||
|
if [[ -z "${TARGET}" ]]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a temporary directory.
|
||||||
|
WORK_DIR=$(mktemp -d)
|
||||||
|
if [[ ! "${WORK_DIR}" || ! -d "${WORK_DIR}" ]]; then
|
||||||
|
echo "Failed to create tmp directory!" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Deletes the temp directory on exit.
|
||||||
|
function cleanup {
|
||||||
|
rm -r "${WORK_DIR}"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
# Reduce the size of the screen capture and the target to optimize the search performance.
|
||||||
|
convert "${SCREEN}" -resize $((100 / SCALE_FACTOR))% "${WORK_DIR}/screen_small.png"
|
||||||
|
convert "${TARGET}" -resize $((100 / SCALE_FACTOR))% "${WORK_DIR}/target_small.png"
|
||||||
|
|
||||||
|
# Make a search on the reduced images.
|
||||||
|
RESULT=$(compare -metric MSE -subimage-search \
|
||||||
|
"${WORK_DIR}/screen_small.png" "${WORK_DIR}/target_small.png" "${WORK_DIR}/out.png" 2>&1)
|
||||||
|
|
||||||
|
if [[ $RESULT == *"error"* ]]; then
|
||||||
|
echo "Failed to find the target: ${RESULT}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We use the position of match to crop the original screen capture tightly around the
|
||||||
|
# match. Some padding is added to make sure that the target is contained in the cropped
|
||||||
|
# screen capture. We then search one more in the full resolution to get the exact pixel
|
||||||
|
# location.
|
||||||
|
|
||||||
|
# Here we extract the pixel location of the match in the scaled-down version.
|
||||||
|
CROP_X=$(echo "${RESULT}" | awk -F[\,\ ] '{print $4}')
|
||||||
|
CROP_Y=$(echo "${RESULT}" | awk -F[\,\ ] '{print $5}')
|
||||||
|
|
||||||
|
# We add more padding if the images are more scaled down.
|
||||||
|
PADDING=$SCALE_FACTOR
|
||||||
|
|
||||||
|
CROP_X=$((CROP_X * SCALE_FACTOR - PADDING))
|
||||||
|
CROP_Y=$((CROP_Y * SCALE_FACTOR - PADDING))
|
||||||
|
|
||||||
|
# Clamp the result.
|
||||||
|
CROP_X=$((CROP_X < 0 ? 0 : CROP_X))
|
||||||
|
CROP_Y=$((CROP_Y < 0 ? 0 : CROP_Y))
|
||||||
|
|
||||||
|
# The crop size depends on the target image size.
|
||||||
|
TARGET_WIDTH=$(identify -format "%[fx:w]" "${TARGET}")
|
||||||
|
TARGET_HEIGHT=$(identify -format "%[fx:h]" "${TARGET}")
|
||||||
|
CROP_WIDTH=$((TARGET_WIDTH + 2*PADDING))
|
||||||
|
CROP_HEIGHT=$((TARGET_HEIGHT + 2*PADDING))
|
||||||
|
|
||||||
|
# Perform the crop.
|
||||||
|
convert "${SCREEN}" -crop ${CROP_WIDTH}x${CROP_HEIGHT}+${CROP_X}+${CROP_Y} \
|
||||||
|
+repage "${WORK_DIR}/screen_cropped.png"
|
||||||
|
|
||||||
|
# Search again on the full resolution.
|
||||||
|
RESULT=$(compare -metric MSE -dissimilarity-threshold "${FUZZINESS}" -subimage-search \
|
||||||
|
"${WORK_DIR}/screen_cropped.png" "${TARGET}" "${WORK_DIR}/out.png" 2>&1)
|
||||||
|
|
||||||
|
if [[ $RESULT == *"error"* ]]; then
|
||||||
|
echo "Failed to find the target: ${RESULT}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the pixel location from the result. This is now relative to the crop position.
|
||||||
|
POS_X=$(echo "${RESULT}" | awk -F[\,\ ] '{print $4}')
|
||||||
|
POS_Y=$(echo "${RESULT}" | awk -F[\,\ ] '{print $5}')
|
||||||
|
|
||||||
|
# Therefore we have to add the crop position to the result.
|
||||||
|
POS_X=$((POS_X + CROP_X))
|
||||||
|
POS_Y=$((POS_Y + CROP_Y))
|
||||||
|
|
||||||
|
# Finally print our result.
|
||||||
|
echo "$POS_X $POS_Y"
|
||||||
@@ -57,7 +57,7 @@ EXTENSION="burn-my-windows@schneegans.github.com"
|
|||||||
# All references images of the effects are captured at & cropped to this region
|
# All references images of the effects are captured at & cropped to this region
|
||||||
# in the center of the screen. This is kind of arbitrary, but has been choosen so that
|
# in the center of the screen. This is kind of arbitrary, but has been choosen so that
|
||||||
# something is visible from each effect.
|
# something is visible from each effect.
|
||||||
CROP="100x100+910+480"
|
CROP="100x100+900+500"
|
||||||
|
|
||||||
# Run the container. For more info, visit https://github.com/Schneegans/gnome-shell-pod.
|
# Run the container. For more info, visit https://github.com/Schneegans/gnome-shell-pod.
|
||||||
POD=$(podman run --rm --cap-add=SYS_NICE --cap-add=IPC_LOCK -td "${IMAGE}")
|
POD=$(podman run --rm --cap-add=SYS_NICE --cap-add=IPC_LOCK -td "${IMAGE}")
|
||||||
@@ -110,7 +110,8 @@ capture_effect() {
|
|||||||
set_setting "open-preview-effect" "${1}"
|
set_setting "open-preview-effect" "${1}"
|
||||||
set_setting "close-preview-effect" "${1}"
|
set_setting "close-preview-effect" "${1}"
|
||||||
|
|
||||||
do_in_pod gnome-extensions prefs "${EXTENSION}"
|
sleep 1
|
||||||
|
do_in_pod gnome-terminal
|
||||||
sleep 3
|
sleep 3
|
||||||
capture "tests/references/${1}-open-${SESSION}-${FEDORA_VERSION}.png"
|
capture "tests/references/${1}-open-${SESSION}-${FEDORA_VERSION}.png"
|
||||||
send_keystroke "Alt+F4"
|
send_keystroke "Alt+F4"
|
||||||
@@ -132,6 +133,11 @@ podman cp "${EXTENSION}.zip" "${POD}:/home/gnomeshell"
|
|||||||
do_in_pod gnome-extensions install "${EXTENSION}.zip"
|
do_in_pod gnome-extensions install "${EXTENSION}.zip"
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------- install gnome-terminal (this is used for testing the animations)
|
||||||
|
|
||||||
|
do_in_pod sudo dnf install -y gnome-terminal
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------- start GNOME Shell
|
# ---------------------------------------------------------------------- start GNOME Shell
|
||||||
|
|
||||||
# Starting with GNOME 40, there is a "Welcome Tour" dialog popping up at first launch.
|
# Starting with GNOME 40, there is a "Welcome Tour" dialog popping up at first launch.
|
||||||
@@ -141,6 +147,9 @@ if [[ "${FEDORA_VERSION}" -gt 33 ]]; then
|
|||||||
do_in_pod gsettings set org.gnome.shell welcome-dialog-last-shown-version "999" || true
|
do_in_pod gsettings set org.gnome.shell welcome-dialog-last-shown-version "999" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Make sure that new windows are opened in the center.
|
||||||
|
do_in_pod gsettings set org.gnome.mutter center-new-windows true
|
||||||
|
|
||||||
echo "Starting $(do_in_pod gnome-shell --version)."
|
echo "Starting $(do_in_pod gnome-shell --version)."
|
||||||
do_in_pod systemctl --user start "${SESSION}@:99"
|
do_in_pod systemctl --user start "${SESSION}@:99"
|
||||||
sleep 10
|
sleep 10
|
||||||
@@ -161,10 +170,16 @@ sleep 3
|
|||||||
|
|
||||||
# --------------------------------------------------------------------- capture the images
|
# --------------------------------------------------------------------- capture the images
|
||||||
|
|
||||||
|
# First we open the preferences and capture a portion of the dialog
|
||||||
|
echo "Opening Preferences."
|
||||||
|
do_in_pod gnome-extensions prefs "${EXTENSION}"
|
||||||
|
sleep 3
|
||||||
|
capture "tests/references/preferences-${SESSION}-${FEDORA_VERSION}.png"
|
||||||
|
send_keystroke "Alt+F4"
|
||||||
|
|
||||||
# The test mode ensures that the animations are "frozen" and do not change in time.
|
# The test mode ensures that the animations are "frozen" and do not change in time.
|
||||||
echo "Entering test mode."
|
echo "Entering test mode."
|
||||||
set_setting "test-mode" true
|
set_setting "test-mode" true
|
||||||
do_in_pod gsettings set org.gnome.mutter center-new-windows true
|
|
||||||
|
|
||||||
capture_effect "energize-a"
|
capture_effect "energize-a"
|
||||||
capture_effect "energize-b"
|
capture_effect "energize-b"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 979 B |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 917 B |
|
Before Width: | Height: | Size: 1021 B After Width: | Height: | Size: 917 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 979 B |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 917 B |
|
Before Width: | Height: | Size: 1021 B After Width: | Height: | Size: 917 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 487 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 504 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 504 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 520 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 491 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 464 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 464 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 651 B |
|
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 594 B |
|
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 699 B |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 625 B |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 276 B After Width: | Height: | Size: 617 B |
|
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 466 B |
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 498 B |
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 498 B |
|
Before Width: | Height: | Size: 352 B After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 437 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 322 B After Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 4.8 KiB |