Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3644001dbc | |||
| f4fd1b1b07 | |||
| a150958960 | |||
| 819d349bae | |||
| 0ae6c3f593 | |||
| 945e3212cf | |||
| 3547207eca | |||
| 6669e6722a | |||
| 7524745b18 |
75
.drone.yml
75
.drone.yml
@@ -3,20 +3,87 @@ type: docker
|
|||||||
name: build
|
name: build
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build-deb
|
- name: build-deb-amd64
|
||||||
image: cache.coadcorp.com/library/ubuntu:22.04
|
image: cache.coadcorp.com/library/buildpack-deps:jammy
|
||||||
environment:
|
environment:
|
||||||
DEBIAN_FRONTEND: noninteractive
|
DEBIAN_FRONTEND: noninteractive
|
||||||
commands:
|
commands:
|
||||||
- apt-get update
|
- apt-get update
|
||||||
- apt-get install -y --no-install-recommends build-essential qt5-qmake qtbase5-dev qtbase5-dev-tools libexif-dev qt5-image-formats-plugins libmosquitto-dev dpkg-dev fakeroot ca-certificates
|
- apt-get install -y --no-install-recommends build-essential qt5-qmake qtbase5-dev qtbase5-dev-tools libexif-dev qt5-image-formats-plugins libmosquitto-dev dpkg-dev fakeroot ca-certificates
|
||||||
- bash sbin/build_deb.sh "${DRONE_TAG:-${DRONE_COMMIT_SHA:0:8}}"
|
- ARCH=amd64 BUILD_DIR=build-amd64 bash sbin/build_deb.sh "${DRONE_TAG:-${DRONE_COMMIT_SHA:0:8}}"
|
||||||
- ls -la dist
|
- ls -la dist
|
||||||
|
|
||||||
|
- name: build-deb-armhf
|
||||||
|
image: cache.coadcorp.com/library/buildpack-deps:jammy
|
||||||
|
environment:
|
||||||
|
DEBIAN_FRONTEND: noninteractive
|
||||||
|
ARM_CFLAGS: -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm
|
||||||
|
commands:
|
||||||
|
- dpkg --add-architecture armhf
|
||||||
|
- |
|
||||||
|
cat > /etc/apt/sources.list <<'EOF'
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
|
||||||
|
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
|
||||||
|
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
|
||||||
|
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse
|
||||||
|
deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
|
||||||
|
EOF
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y --no-install-recommends build-essential qt5-qmake qtbase5-dev qtbase5-dev-tools libexif-dev qt5-image-formats-plugins libmosquitto-dev dpkg-dev fakeroot ca-certificates gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf qtbase5-dev:armhf libqt5core5a:armhf libqt5gui5:armhf libqt5widgets5:armhf libqt5network5:armhf libexif-dev:armhf libmosquitto-dev:armhf qt5-image-formats-plugins:armhf
|
||||||
|
- ARCH=armhf BUILD_DIR=build-armhf QMAKESPEC=$PWD/mkspecs/linux-armhf-g++ QMAKE_QTCONF=$PWD/mkspecs/qt-armhf.conf QMAKE_CFLAGS="$ARM_CFLAGS" QMAKE_CXXFLAGS="$ARM_CFLAGS" bash sbin/build_deb.sh "${DRONE_TAG:-${DRONE_COMMIT_SHA:0:8}}"
|
||||||
|
- ls -la dist
|
||||||
|
|
||||||
|
- name: build-deb-arm64
|
||||||
|
image: cache.coadcorp.com/library/buildpack-deps:jammy
|
||||||
|
environment:
|
||||||
|
DEBIAN_FRONTEND: noninteractive
|
||||||
|
ARM64_CFLAGS: -march=armv8-a
|
||||||
|
commands:
|
||||||
|
- dpkg --add-architecture arm64
|
||||||
|
- |
|
||||||
|
cat > /etc/apt/sources.list <<'EOF'
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
|
||||||
|
deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
|
||||||
|
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
|
||||||
|
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiverse
|
||||||
|
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse
|
||||||
|
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
|
||||||
|
EOF
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y --no-install-recommends build-essential qt5-qmake qtbase5-dev qtbase5-dev-tools libexif-dev qt5-image-formats-plugins libmosquitto-dev dpkg-dev fakeroot ca-certificates gcc-aarch64-linux-gnu g++-aarch64-linux-gnu qtbase5-dev:arm64 libqt5core5a:arm64 libqt5gui5:arm64 libqt5widgets5:arm64 libqt5network5:arm64 libexif-dev:arm64 libmosquitto-dev:arm64 qt5-image-formats-plugins:arm64
|
||||||
|
- ARCH=arm64 BUILD_DIR=build-arm64 QMAKESPEC=$PWD/mkspecs/linux-arm64-g++ QMAKE_QTCONF=$PWD/mkspecs/qt-arm64.conf QMAKE_CFLAGS="$ARM64_CFLAGS" QMAKE_CXXFLAGS="$ARM64_CFLAGS" bash sbin/build_deb.sh "${DRONE_TAG:-${DRONE_COMMIT_SHA:0:8}}"
|
||||||
|
- ls -la dist
|
||||||
|
|
||||||
|
- name: build-deps-image
|
||||||
|
image: cache.coadcorp.com/plugins/docker
|
||||||
|
settings:
|
||||||
|
registry: registry.coadcorp.com
|
||||||
|
repo: slide/build-deps
|
||||||
|
dockerfile: Dockerfile.builddeps
|
||||||
|
username:
|
||||||
|
from_secret: REGISTRY_USER
|
||||||
|
password:
|
||||||
|
from_secret: REGISTRY_PASS
|
||||||
|
tags:
|
||||||
|
- latest
|
||||||
|
- ${DRONE_COMMIT_SHA}
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- promote
|
||||||
|
target:
|
||||||
|
- build-deps
|
||||||
|
|
||||||
- name: gitea-release
|
- name: gitea-release
|
||||||
image: cache.coadcorp.com/plugins/gitea-release
|
image: cache.coadcorp.com/plugins/gitea-release
|
||||||
depends_on:
|
depends_on:
|
||||||
- build-deb
|
- build-deb-amd64
|
||||||
|
- build-deb-armhf
|
||||||
|
- build-deb-arm64
|
||||||
settings:
|
settings:
|
||||||
api_key:
|
api_key:
|
||||||
from_secret: GITEA_TOKEN
|
from_secret: GITEA_TOKEN
|
||||||
|
|||||||
17
Dockerfile.builddeps
Normal file
17
Dockerfile.builddeps
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
FROM cache.coadcorp.com/library/ubuntu:22.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
qt5-qmake \
|
||||||
|
qtbase5-dev \
|
||||||
|
qtbase5-dev-tools \
|
||||||
|
libexif-dev \
|
||||||
|
qt5-image-formats-plugins \
|
||||||
|
libmosquitto-dev \
|
||||||
|
dpkg-dev \
|
||||||
|
fakeroot \
|
||||||
|
ca-certificates \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
21
mkspecs/linux-arm64-g++/qmake.conf
Normal file
21
mkspecs/linux-arm64-g++/qmake.conf
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
exists(/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include(/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else: exists(/usr/share/qt5/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include(/usr/share/qt5/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else: exists($$[QT_HOST_DATA]/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include($$[QT_HOST_DATA]/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else {
|
||||||
|
include($$[QT_INSTALL_DATA]/mkspecs/linux-g++/qmake.conf)
|
||||||
|
}
|
||||||
|
|
||||||
|
QMAKE_CC = aarch64-linux-gnu-gcc
|
||||||
|
QMAKE_CXX = aarch64-linux-gnu-g++
|
||||||
|
QMAKE_LINK = aarch64-linux-gnu-g++
|
||||||
|
QMAKE_AR = aarch64-linux-gnu-ar cqs
|
||||||
|
QMAKE_STRIP = aarch64-linux-gnu-strip
|
||||||
|
|
||||||
|
QMAKE_INCDIR_QT = /usr/include/aarch64-linux-gnu/qt5
|
||||||
|
QMAKE_LIBDIR_QT = /usr/lib/aarch64-linux-gnu
|
||||||
|
QMAKE_INCDIR += /usr/include/aarch64-linux-gnu/qt5
|
||||||
|
QMAKE_LIBDIR += /usr/lib/aarch64-linux-gnu
|
||||||
|
QMAKE_LFLAGS += -Wl,-rpath-link,/usr/lib/aarch64-linux-gnu
|
||||||
1
mkspecs/linux-arm64-g++/qplatformdefs.h
Normal file
1
mkspecs/linux-arm64-g++/qplatformdefs.h
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qplatformdefs.h"
|
||||||
21
mkspecs/linux-armhf-g++/qmake.conf
Normal file
21
mkspecs/linux-armhf-g++/qmake.conf
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
exists(/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include(/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else: exists(/usr/share/qt5/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include(/usr/share/qt5/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else: exists($$[QT_HOST_DATA]/mkspecs/linux-g++/qmake.conf) {
|
||||||
|
include($$[QT_HOST_DATA]/mkspecs/linux-g++/qmake.conf)
|
||||||
|
} else {
|
||||||
|
include($$[QT_INSTALL_DATA]/mkspecs/linux-g++/qmake.conf)
|
||||||
|
}
|
||||||
|
|
||||||
|
QMAKE_CC = arm-linux-gnueabihf-gcc
|
||||||
|
QMAKE_CXX = arm-linux-gnueabihf-g++
|
||||||
|
QMAKE_LINK = arm-linux-gnueabihf-g++
|
||||||
|
QMAKE_AR = arm-linux-gnueabihf-ar cqs
|
||||||
|
QMAKE_STRIP = arm-linux-gnueabihf-strip
|
||||||
|
|
||||||
|
QMAKE_INCDIR_QT = /usr/include/arm-linux-gnueabihf/qt5
|
||||||
|
QMAKE_LIBDIR_QT = /usr/lib/arm-linux-gnueabihf
|
||||||
|
QMAKE_INCDIR += /usr/include/arm-linux-gnueabihf/qt5
|
||||||
|
QMAKE_LIBDIR += /usr/lib/arm-linux-gnueabihf
|
||||||
|
QMAKE_LFLAGS += -Wl,-rpath-link,/usr/lib/arm-linux-gnueabihf
|
||||||
1
mkspecs/linux-armhf-g++/qplatformdefs.h
Normal file
1
mkspecs/linux-armhf-g++/qplatformdefs.h
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qplatformdefs.h"
|
||||||
11
mkspecs/qt-arm64.conf
Normal file
11
mkspecs/qt-arm64.conf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Paths]
|
||||||
|
Prefix=/usr
|
||||||
|
Headers=/usr/include/aarch64-linux-gnu/qt5
|
||||||
|
Libraries=/usr/lib/aarch64-linux-gnu
|
||||||
|
ArchData=/usr/lib/aarch64-linux-gnu/qt5
|
||||||
|
Data=/usr/lib/aarch64-linux-gnu/qt5
|
||||||
|
Plugins=/usr/lib/aarch64-linux-gnu/qt5/plugins
|
||||||
|
HostPrefix=/usr
|
||||||
|
HostData=/usr/lib/x86_64-linux-gnu/qt5
|
||||||
|
HostBinaries=/usr/lib/qt5/bin
|
||||||
|
HostLibraries=/usr/lib/x86_64-linux-gnu
|
||||||
11
mkspecs/qt-armhf.conf
Normal file
11
mkspecs/qt-armhf.conf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Paths]
|
||||||
|
Prefix=/usr
|
||||||
|
Headers=/usr/include/arm-linux-gnueabihf/qt5
|
||||||
|
Libraries=/usr/lib/arm-linux-gnueabihf
|
||||||
|
ArchData=/usr/lib/arm-linux-gnueabihf/qt5
|
||||||
|
Data=/usr/lib/arm-linux-gnueabihf/qt5
|
||||||
|
Plugins=/usr/lib/arm-linux-gnueabihf/qt5/plugins
|
||||||
|
HostPrefix=/usr
|
||||||
|
HostData=/usr/lib/x86_64-linux-gnu/qt5
|
||||||
|
HostBinaries=/usr/lib/qt5/bin
|
||||||
|
HostLibraries=/usr/lib/x86_64-linux-gnu
|
||||||
@@ -10,14 +10,44 @@ if [[ ! "$VERSION" =~ ^[0-9] ]]; then
|
|||||||
VERSION="0.0.0+${VERSION}"
|
VERSION="0.0.0+${VERSION}"
|
||||||
fi
|
fi
|
||||||
ARCH="${ARCH:-$(dpkg --print-architecture)}"
|
ARCH="${ARCH:-$(dpkg --print-architecture)}"
|
||||||
|
BUILD_DIR="${BUILD_DIR:-$ROOT_DIR/build-$ARCH}"
|
||||||
PACKAGE_NAME="slide"
|
|
||||||
BUILD_DIR="$ROOT_DIR/build"
|
|
||||||
DIST_DIR="$ROOT_DIR/dist"
|
DIST_DIR="$ROOT_DIR/dist"
|
||||||
STAGE_DIR="$BUILD_DIR/deb"
|
STAGE_DIR="$BUILD_DIR/deb"
|
||||||
|
QMAKE_BIN="${QMAKE_BIN:-qmake}"
|
||||||
|
MAKE_JOBS="${MAKE_JOBS:-2}"
|
||||||
|
|
||||||
|
QMAKE_ARGS=()
|
||||||
|
if [[ -n "${QMAKESPEC:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("-spec" "$QMAKESPEC")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_QTCONF:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("-qtconf" "$QMAKE_QTCONF")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_CC:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_CC=$QMAKE_CC")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_CXX:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_CXX=$QMAKE_CXX")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_LINK:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_LINK=$QMAKE_LINK")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_CFLAGS:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_CFLAGS=$QMAKE_CFLAGS")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_CXXFLAGS:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_CXXFLAGS=$QMAKE_CXXFLAGS")
|
||||||
|
fi
|
||||||
|
if [[ -n "${QMAKE_LFLAGS:-}" ]]; then
|
||||||
|
QMAKE_ARGS+=("QMAKE_LFLAGS=$QMAKE_LFLAGS")
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGE_NAME="slide"
|
||||||
|
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
make build
|
mkdir -p "$BUILD_DIR"
|
||||||
|
"$QMAKE_BIN" "${QMAKE_ARGS[@]}" "$ROOT_DIR/src/slide.pro" -o "$BUILD_DIR/Makefile"
|
||||||
|
make -C "$BUILD_DIR" -j"$MAKE_JOBS"
|
||||||
|
|
||||||
rm -rf "$STAGE_DIR"
|
rm -rf "$STAGE_DIR"
|
||||||
mkdir -p "$STAGE_DIR/DEBIAN" "$STAGE_DIR/usr/local/bin" "$DIST_DIR"
|
mkdir -p "$STAGE_DIR/DEBIAN" "$STAGE_DIR/usr/local/bin" "$DIST_DIR"
|
||||||
@@ -36,4 +66,4 @@ Description: Lightweight slideshow for photo frames
|
|||||||
Simple, lightweight slideshow designed for low power devices.
|
Simple, lightweight slideshow designed for low power devices.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
dpkg-deb --build "$STAGE_DIR" "$DIST_DIR/${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
|
dpkg-deb --build -Zgzip "$STAGE_DIR" "$DIST_DIR/${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <QGraphicsPixmapItem>
|
#include <QGraphicsPixmapItem>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
#include <QTransform>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
QMainWindow(parent),
|
QMainWindow(parent),
|
||||||
@@ -170,11 +171,11 @@ void MainWindow::updateImage()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QLabel *label = this->findChild<QLabel*>("image");
|
QLabel *label = this->findChild<QLabel*>("image");
|
||||||
const QPixmap* oldImage = label->pixmap();
|
QPixmap oldImage = label->pixmap(Qt::ReturnByValue);
|
||||||
if (oldImage != NULL && transitionSeconds > 0)
|
if (!oldImage.isNull() && transitionSeconds > 0)
|
||||||
{
|
{
|
||||||
QPalette palette;
|
QPalette palette;
|
||||||
palette.setBrush(QPalette::Background, *oldImage);
|
palette.setBrush(QPalette::Window, oldImage);
|
||||||
this->setPalette(palette);
|
this->setPalette(palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +214,7 @@ void MainWindow::updateImage()
|
|||||||
|
|
||||||
label->setPixmap(background);
|
label->setPixmap(background);
|
||||||
|
|
||||||
if (oldImage != NULL && transitionSeconds > 0)
|
if (!oldImage.isNull() && transitionSeconds > 0)
|
||||||
{
|
{
|
||||||
auto effect = new QGraphicsOpacityEffect(label);
|
auto effect = new QGraphicsOpacityEffect(label);
|
||||||
effect->setOpacity(0.0);
|
effect->setOpacity(0.0);
|
||||||
@@ -273,9 +274,9 @@ QPixmap MainWindow::getBlurredBackground(const QPixmap& originalSize, const QPix
|
|||||||
|
|
||||||
QPixmap MainWindow::getRotatedPixmap(const QPixmap& p)
|
QPixmap MainWindow::getRotatedPixmap(const QPixmap& p)
|
||||||
{
|
{
|
||||||
QMatrix matrix;
|
QTransform transform;
|
||||||
matrix.rotate(currentImage.rotation);
|
transform.rotate(currentImage.rotation);
|
||||||
return p.transformed(matrix);
|
return p.transformed(transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap MainWindow::getScaledPixmap(const QPixmap& p)
|
QPixmap MainWindow::getScaledPixmap(const QPixmap& p)
|
||||||
@@ -325,12 +326,12 @@ void MainWindow::drawBackground(const QPixmap& originalSize, const QPixmap& scal
|
|||||||
QPixmap background = blur(originalSize.scaledToHeight(height()));
|
QPixmap background = blur(originalSize.scaledToHeight(height()));
|
||||||
QRect rect((background.width() - width())/2, 0, width(), height());
|
QRect rect((background.width() - width())/2, 0, width(), height());
|
||||||
background = background.copy(rect);
|
background = background.copy(rect);
|
||||||
palette.setBrush(QPalette::Background, background);
|
palette.setBrush(QPalette::Window, background);
|
||||||
} else {
|
} else {
|
||||||
QPixmap background = blur(originalSize.scaledToHeight(height()));
|
QPixmap background = blur(originalSize.scaledToHeight(height()));
|
||||||
QRect rect((background.width() - width())/2, 0, width(), height());
|
QRect rect((background.width() - width())/2, 0, width(), height());
|
||||||
background = background.copy(rect);
|
background = background.copy(rect);
|
||||||
palette.setBrush(QPalette::Background, background);
|
palette.setBrush(QPalette::Window, background);
|
||||||
}
|
}
|
||||||
this->setPalette(palette);
|
this->setPalette(palette);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user