[neon/backports-jammy/kimageannotator/Neon/release] /: New upstream version 0.5.2

Boyuan Yang null at kde.org
Tue Jan 16 14:14:19 GMT 2024


Git commit 98b3f5c0629828554d2565fe50d6a6a81536c599 by Boyuan Yang.
Committed on 14/09/2021 at 04:50.
Pushed by jriddell into branch 'Neon/release'.

New upstream version 0.5.2

A  +35   -0    .github/workflows/build.yml
D  +0    -31   .travis.yml
M  +4    -0    CHANGELOG.md
M  +1    -1    CMakeLists.txt
M  +4    -4    README.md
M  +1    -1    example/main.cpp
M  +8    -1    src/annotations/core/AnnotationArea.cpp
M  +1    -1    src/annotations/core/AnnotationArea.h
M  +3    -2    src/backend/Config.cpp
M  +1    -1    src/common/provider/DevicePixelRatioScaler.h
M  +1    -0    src/common/provider/IDevicePixelRatioScaler.h
M  +3    -2    src/gui/annotator/tabs/AnnotationTabCloser.cpp
M  +1    -1    src/gui/annotator/tabs/AnnotationTabCloser.h
M  +1    -7    src/gui/annotator/tabs/AnnotationTabContent.cpp
M  +1    -1    src/gui/annotator/tabs/AnnotationTabContent.h
M  +1    -0    src/gui/canvasModifier/ModifyCanvasWidget.cpp
M  +6    -6    src/widgets/ToolPicker.cpp
M  +1    -1    tests/CMakeLists.txt
M  +15   -8    tests/annotations/core/AnnotationAreaTest.cpp
M  +10   -2    tests/annotations/undo/AddCommandTest.cpp
M  +20   -4    tests/annotations/undo/CropCommandTest.cpp
M  +10   -2    tests/annotations/undo/DeleteCommandTest.cpp
M  +8    -4    tests/annotations/undo/ModifyCanvasCommandTest.cpp
M  +10   -2    tests/annotations/undo/PasteCommandTest.cpp
M  +6    -3    tests/annotations/undo/RotateCommandTest.cpp
M  +20   -4    tests/annotations/undo/ScaleCommandTest.cpp
M  +55   -11   tests/gui/selection/SelectionHandlerTest.cpp
M  +0    -1    tests/mocks/MockDefaultParameters.h
M  +1    -1    tests/mocks/MockDevicePixelRatioScaler.h
M  +2    -0    translations/CMakeLists.txt
M  +42   -41   translations/kImageAnnotator_de.ts
M  +48   -48   translations/kImageAnnotator_el.ts
M  +103  -101  translations/kImageAnnotator_id.ts
M  +75   -73   translations/kImageAnnotator_it.ts
M  +1    -1    translations/kImageAnnotator_pt.ts
C  +98   -98   translations/kImageAnnotator_ro.ts [from: translations/kImageAnnotator_pt.ts - 062% similarity]
C  +32   -32   translations/kImageAnnotator_si.ts [from: translations/kImageAnnotator_id.ts - 087% similarity]
M  +40   -40   translations/kImageAnnotator_zh_CN.ts

https://invent.kde.org/neon/backports-jammy/kimageannotator/-/commit/98b3f5c0629828554d2565fe50d6a6a81536c599

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..f20bb0f
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,35 @@
+name: Build
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    branches: [ master ]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout at v2
+    
+    - name: Setup Qt
+      run: sudo apt-get install qtbase5-dev qttools5-dev extra-cmake-modules libqt5svg5-dev xvfb
+
+    - name: Setup kColorPicker
+      run: |
+        git clone --depth 1 git://github.com/ksnip/kColorPicker
+        cd kColorPicker
+        mkdir build && cd build
+        cmake ..
+        make && sudo make install
+
+    - name: Build
+      working-directory: ${{github.workspace}}
+      run: |
+        mkdir build && cd build
+        cmake .. -DBUILD_TESTS=ON && make VERBOSE=1
+    - name: Test
+      working-directory: ${{github.workspace}}/build
+      run: xvfb-run --auto-servernum --server-num=1 --server-args="-screen 0 1024x768x24" make test CTEST_OUTPUT_ON_FAILURE=1
+      
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 4930aa3..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-language: cpp
-compiler: gcc
-sudo: required
-dist: xenial
-services: xvfb
-
-before_install:
-  - sudo add-apt-repository ppa:beineri/opt-qt594-xenial -y
-  - sudo apt-get update -qq
-
-install:
-  - sudo apt-get -y install mesa-common-dev libglu1-mesa-dev qt59base qt59tools qt59svg
-  - source /opt/qt*/bin/qt*-env.sh
-  - git clone git://github.com/ksnip/kColorPicker
-  - cd kColorPicker
-  - mkdir build && cd build
-  - cmake ..
-  - make && sudo make install
-  - cd ../..
-
-jobs:
-  include:
-    - stage: build
-      script:
-        - mkdir build ; cd build
-        - cmake .. ; make VERBOSE=1
-    - stage: test
-      script:
-        - mkdir build ; cd build
-        - cmake .. -DBUILD_TESTS=ON ; make
-        - xvfb-run --auto-servernum --server-num=1 --server-args="-screen 0 1024x768x24" make test CTEST_OUTPUT_ON_FAILURE=1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1d0362..6c848aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change log
 
+## Release 0.5.2
+* Fixed: Memory leaks caught by ASAN. ([#243](https://github.com/ksnip/kImageAnnotator/issues/243))
+* Changed: Use system font provided by QGuiApplication as default for text tool. ([#247](https://github.com/ksnip/kImageAnnotator/issues/247))
+
 ## Release 0.5.1
 * Fixed: Crashes on destruction. ([#242](https://github.com/ksnip/kImageAnnotator/issues/242))
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c186fad..53c9449 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 cmake_minimum_required(VERSION 3.5)
-project(kImageAnnotator LANGUAGES CXX VERSION 0.5.1)
+project(kImageAnnotator LANGUAGES CXX VERSION 0.5.2)
 
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
diff --git a/README.md b/README.md
index 0e48778..518491f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# kImageAnnotator [![Build Status][travis-badge]][travis-url] [![Translation status][weblate-badge]][weblate-url]
+# kImageAnnotator [![Build Status][github-badge]][github-url] [![Translation status][weblate-badge]][weblate-url]
 Tool for annotating images
 
-Version 0.5.1
+Version 0.5.2
 
 ![kImageAnnotator](https://i.imgur.com/4vlPDUn.png "kImageAnnotator")
 
@@ -51,8 +51,8 @@ For translations we use [Weblate](https://hosted.weblate.org/projects/kimageanno
 Stickers designed by [OpenMoji](https://openmoji.org/) – the open-source emoji and icon project.
 
 
-[travis-badge]:        https://img.shields.io/travis/ksnip/kimageannotator.svg?label=travis&logo=travis
-[travis-url]:          https://travis-ci.org/ksnip/kimageannotator
+[github-badge]:        https://github.com/ksnip/kImageAnnotator/actions/workflows/build.yml/badge.svg
+[github-url]:          https://github.com/ksnip/kImageAnnotator/actions
 
 [weblate-badge]:       https://hosted.weblate.org/widgets/kimageannotator/-/kimageannotator/svg-badge.svg
 [weblate-url]:         https://hosted.weblate.org/engage/kimageannotator/?utm_source=widget
\ No newline at end of file
diff --git a/example/main.cpp b/example/main.cpp
index e7f46bb..522c949 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -41,7 +41,7 @@ int main(int argc, char **argv)
 	QMainWindow mainWindow;
 	mainWindow.setCentralWidget(kImageAnnotator);
 	auto menuBar = mainWindow.menuBar();
-	auto menu = new QMenu(QLatin1String("Edit"));
+	auto menu = new QMenu(QLatin1String("Edit"), &mainWindow);
 	auto annotationAction = new QAction(QLatin1String("Annotation"), &mainWindow);
 	auto cropAction = new QAction(QLatin1String("Crop"), &mainWindow);
 	auto scaleAction = new QAction(QLatin1String("Scale"), &mainWindow);
diff --git a/src/annotations/core/AnnotationArea.cpp b/src/annotations/core/AnnotationArea.cpp
index 02eaef2..915f49d 100644
--- a/src/annotations/core/AnnotationArea.cpp
+++ b/src/annotations/core/AnnotationArea.cpp
@@ -21,7 +21,13 @@
 
 namespace kImageAnnotator {
 
-AnnotationArea::AnnotationArea(Config *config, AbstractSettingsProvider *settingsProvider, IDevicePixelRatioScaler *devicePixelRatioScaler, ZoomValueProvider *zoomValueProvider) :
+AnnotationArea::AnnotationArea(
+		Config *config,
+		AbstractSettingsProvider *settingsProvider,
+		IDevicePixelRatioScaler *devicePixelRatioScaler,
+		ZoomValueProvider *zoomValueProvider,
+		QWidget *parent) :
+	QGraphicsScene(parent),
 	mUndoStack(new UndoStack),
 	mBackgroundImage(nullptr),
 	mCurrentItem(nullptr),
@@ -67,6 +73,7 @@ AnnotationArea::~AnnotationArea()
 	delete mUndoStack;
 	delete mItemModifier;
 	delete mItemCopier;
+	delete mDevicePixelRatioScaler;
 }
 
 void AnnotationArea::loadImage(const QPixmap &image)
diff --git a/src/annotations/core/AnnotationArea.h b/src/annotations/core/AnnotationArea.h
index bfbd3f0..bf786c2 100644
--- a/src/annotations/core/AnnotationArea.h
+++ b/src/annotations/core/AnnotationArea.h
@@ -58,7 +58,7 @@ class AnnotationArea : public QGraphicsScene, public ISettingsListener
 {
     Q_OBJECT
 public:
-    explicit AnnotationArea(Config *config, AbstractSettingsProvider *settingsProvider, IDevicePixelRatioScaler *devicePixelRatioScaler, ZoomValueProvider *zoomValueProvider);
+    explicit AnnotationArea(Config *config, AbstractSettingsProvider *settingsProvider, IDevicePixelRatioScaler *devicePixelRatioScaler, ZoomValueProvider *zoomValueProvider, QWidget *parent);
     ~AnnotationArea() override;
     virtual void loadImage(const QPixmap &image);
     virtual void insertImageItem(const QPointF &position, const QPixmap &image);
diff --git a/src/backend/Config.cpp b/src/backend/Config.cpp
index beb90f2..9e49e0b 100644
--- a/src/backend/Config.cpp
+++ b/src/backend/Config.cpp
@@ -17,6 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#include <QGuiApplication>
 #include "Config.h"
 
 namespace kImageAnnotator {
@@ -563,8 +564,8 @@ FillModes Config::defaultToolFillMode(Tools toolType)
 
 QFont Config::defaultToolFont(Tools tool)
 {
-	auto textFont = QFont(QLatin1String("Times"), 15, QFont::Bold);
-	auto numberFont = QFont(QLatin1String("Helvetica"), 20, QFont::Bold);
+	auto textFont = QFont(QGuiApplication::font().family(), 15, QFont::Bold);
+    auto numberFont = QFont(QGuiApplication::font().family(), 20, QFont::Bold);
 
 	switch (tool) {
 		case Tools::Number:
diff --git a/src/common/provider/DevicePixelRatioScaler.h b/src/common/provider/DevicePixelRatioScaler.h
index 630f0fe..ef2686c 100644
--- a/src/common/provider/DevicePixelRatioScaler.h
+++ b/src/common/provider/DevicePixelRatioScaler.h
@@ -31,7 +31,7 @@ class DevicePixelRatioScaler : public IDevicePixelRatioScaler
 {
 public:
 	DevicePixelRatioScaler() = default;
-	~DevicePixelRatioScaler() = default;
+	~DevicePixelRatioScaler() override = default;
 
     QRectF scale(const QRectF &rect) const override;
 	qreal scaleFactor() const override;
diff --git a/src/common/provider/IDevicePixelRatioScaler.h b/src/common/provider/IDevicePixelRatioScaler.h
index 15e9f4a..67fa0a4 100644
--- a/src/common/provider/IDevicePixelRatioScaler.h
+++ b/src/common/provider/IDevicePixelRatioScaler.h
@@ -25,6 +25,7 @@ namespace kImageAnnotator {
 class IDevicePixelRatioScaler
 {
 public:
+	virtual ~IDevicePixelRatioScaler() = default;
 	virtual QRectF scale(const QRectF &rect) const = 0;
 	virtual qreal scaleFactor() const = 0;
 };
diff --git a/src/gui/annotator/tabs/AnnotationTabCloser.cpp b/src/gui/annotator/tabs/AnnotationTabCloser.cpp
index dd80d18..82391ce 100644
--- a/src/gui/annotator/tabs/AnnotationTabCloser.cpp
+++ b/src/gui/annotator/tabs/AnnotationTabCloser.cpp
@@ -21,8 +21,9 @@
 
 namespace kImageAnnotator {
 
-AnnotationTabCloser::AnnotationTabCloser(QTabWidget *tabWidget) :
-	mTabWidget(tabWidget)
+AnnotationTabCloser::AnnotationTabCloser(QTabWidget *parent) :
+	QObject(parent),
+	mTabWidget(parent)
 {
 	Q_ASSERT(mTabWidget != nullptr);
 }
diff --git a/src/gui/annotator/tabs/AnnotationTabCloser.h b/src/gui/annotator/tabs/AnnotationTabCloser.h
index 44290dc..79911b6 100644
--- a/src/gui/annotator/tabs/AnnotationTabCloser.h
+++ b/src/gui/annotator/tabs/AnnotationTabCloser.h
@@ -30,7 +30,7 @@ class AnnotationTabCloser : public QObject
 {
 	Q_OBJECT
 public:
-	explicit AnnotationTabCloser(QTabWidget *tabWidget);
+	explicit AnnotationTabCloser(QTabWidget *parent);
 	~AnnotationTabCloser() override = default;
 
 public slots:
diff --git a/src/gui/annotator/tabs/AnnotationTabContent.cpp b/src/gui/annotator/tabs/AnnotationTabContent.cpp
index 7f1081c..9a6b16f 100644
--- a/src/gui/annotator/tabs/AnnotationTabContent.cpp
+++ b/src/gui/annotator/tabs/AnnotationTabContent.cpp
@@ -24,7 +24,7 @@ namespace kImageAnnotator {
 AnnotationTabContent::AnnotationTabContent(const QPixmap &pixmap, Config *config, AbstractSettingsProvider *settingsProvider) :
 	mAnnotationView(new AnnotationView(this)),
 	mZoomValueProvider(mAnnotationView->zoomValueProvider()),
-	mAnnotationArea(new AnnotationArea(config, settingsProvider, new DevicePixelRatioScaler, mZoomValueProvider)),
+	mAnnotationArea(new AnnotationArea(config, settingsProvider, new DevicePixelRatioScaler, mZoomValueProvider, this)),
 	mMainLayout(new QHBoxLayout(this)),
 	mSettingsProvider(settingsProvider)
 {
@@ -36,12 +36,6 @@ AnnotationTabContent::AnnotationTabContent(const QPixmap &pixmap, Config *config
 	connect(mZoomValueProvider, &ZoomValueProvider::zoomValueChanged, this, &AnnotationTabContent::zoomValueChange);
 }
 
-AnnotationTabContent::~AnnotationTabContent()
-{
-	delete mAnnotationArea;
-	delete mAnnotationView;
-}
-
 AnnotationArea* AnnotationTabContent::annotationArea() const
 {
 	return mAnnotationArea;
diff --git a/src/gui/annotator/tabs/AnnotationTabContent.h b/src/gui/annotator/tabs/AnnotationTabContent.h
index 99610e5..a56fe20 100644
--- a/src/gui/annotator/tabs/AnnotationTabContent.h
+++ b/src/gui/annotator/tabs/AnnotationTabContent.h
@@ -36,7 +36,7 @@ class AnnotationTabContent : public QWidget
 	Q_OBJECT
 public:
 	AnnotationTabContent(const QPixmap &pixmap, Config *config, AbstractSettingsProvider *settingsProvider);
-	~AnnotationTabContent() override;
+	~AnnotationTabContent() override = default;
 	AnnotationArea* annotationArea() const;
 	ZoomValueProvider* zoomValueProvider() const;
 
diff --git a/src/gui/canvasModifier/ModifyCanvasWidget.cpp b/src/gui/canvasModifier/ModifyCanvasWidget.cpp
index 8fb6214..52860aa 100644
--- a/src/gui/canvasModifier/ModifyCanvasWidget.cpp
+++ b/src/gui/canvasModifier/ModifyCanvasWidget.cpp
@@ -56,6 +56,7 @@ ModifyCanvasWidget::~ModifyCanvasWidget()
 	delete mKeyHelper;
 	delete mColorDialogButton;
 	delete mZoomPicker;
+	delete mSelectionHandler;
 }
 
 void ModifyCanvasWidget::activate(AnnotationArea *annotationArea)
diff --git a/src/widgets/ToolPicker.cpp b/src/widgets/ToolPicker.cpp
index 97ae86b..1f1e845 100644
--- a/src/widgets/ToolPicker.cpp
+++ b/src/widgets/ToolPicker.cpp
@@ -56,7 +56,7 @@ void ToolPicker::initGui()
 	action = createAction(tr("Duplicate"), IconLoader::load(QLatin1String("duplicate.svg")), Qt::Key_U, Tools::Duplicate);
 	createButton(action);
 
-	auto menu = new QMenu();
+	auto menu = new QMenu(this);
 	action = createAction(tr("Arrow"), IconLoader::load(QLatin1String("arrow.svg")), Qt::Key_A, Tools::Arrow);
 	menu->addAction(action);
 	action = createAction(tr("Double Arrow"), IconLoader::load(QLatin1String("doubleArrow.svg")), Qt::Key_D, Tools::DoubleArrow);
@@ -68,7 +68,7 @@ void ToolPicker::initGui()
 	action = createAction(tr("Pen"), IconLoader::load(QLatin1String("pen.svg")), Qt::Key_P, Tools::Pen);
 	createButton(action);
 
-	menu = new QMenu();
+	menu = new QMenu(this);
 	action = createAction(tr("Marker Pen"), IconLoader::load(QLatin1String("markerPen.svg")), Qt::Key_M, Tools::MarkerPen);
 	menu->addAction(action);
 	action = createAction(tr("Marker Rectangle"), IconLoader::load(QLatin1String("markerRect.svg")), Qt::Key_J, Tools::MarkerRect);
@@ -77,7 +77,7 @@ void ToolPicker::initGui()
 	menu->addAction(action);
 	createButton(menu);
 
-	menu = new QMenu();
+	menu = new QMenu(this);
 	action = createAction(tr("Text"), IconLoader::load(QLatin1String("text.svg")), Qt::Key_T, Tools::Text);
 	menu->addAction(action);
 	action = createAction(tr("Text Pointer"), IconLoader::load(QLatin1String("textPointer.svg")), Qt::Key_C, Tools::TextPointer);
@@ -86,7 +86,7 @@ void ToolPicker::initGui()
 	menu->addAction(action);
 	createButton(menu);
 
-	menu = new QMenu();
+	menu = new QMenu(this);
 	action = createAction(tr("Number"), IconLoader::load(QLatin1String("number.svg")), Qt::Key_N, Tools::Number);
 	menu->addAction(action);
 	action = createAction(tr("Number Pointer"), IconLoader::load(QLatin1String("numberPointer.svg")), Qt::Key_O, Tools::NumberPointer);
@@ -95,14 +95,14 @@ void ToolPicker::initGui()
 	menu->addAction(action);
 	createButton(menu);
 
-	menu = new QMenu();
+	menu = new QMenu(this);
 	action = createAction(tr("Blur"), IconLoader::load(QLatin1String("blur.svg")), Qt::Key_B, Tools::Blur);
 	menu->addAction(action);
 	action = createAction(tr("Pixelate"), IconLoader::load(QLatin1String("pixelate.svg")), Qt::Key_X, Tools::Pixelate);
 	menu->addAction(action);
 	createButton(menu);
 
-	menu = new QMenu();
+	menu = new QMenu(this);
 	action = createAction(tr("Rectangle"), IconLoader::load(QLatin1String("rect.svg")), Qt::Key_R, Tools::Rect);
 	menu->addAction(action);
 	action = createAction(tr("Ellipse"), IconLoader::load(QLatin1String("ellipse.svg")), Qt::Key_E, Tools::Ellipse);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 2145b43..ce6635e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -40,7 +40,7 @@ set(UNITTEST_SRC
 	gui/annotator/tabs/AnnotationTabCloserTest.cpp
 	gui/annotator/tabs/AnnotationTabContextMenuTest.cpp
 	widgets/CustomSpinBoxTest.cpp
-		widgets/misc/AttachedSeparatorTest.cpp
+	widgets/misc/AttachedSeparatorTest.cpp
 	widgets/settingsPicker/ToolPickerTest.cpp
 	widgets/settingsPicker/ColorPickerTest.cpp
 	widgets/settingsPicker/NumberPickerTest.cpp
diff --git a/tests/annotations/core/AnnotationAreaTest.cpp b/tests/annotations/core/AnnotationAreaTest.cpp
index 7956834..603af8c 100644
--- a/tests/annotations/core/AnnotationAreaTest.cpp
+++ b/tests/annotations/core/AnnotationAreaTest.cpp
@@ -24,7 +24,8 @@ void AnnotationAreaTest::ExportAsImage_Should_ExportImage_When_ImageSet()
 	QPixmap pixmap(QSize(400, 400));
 	pixmap.fill(QColor(Qt::green));
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	annotationArea.loadImage(pixmap);
 
 	auto resultImage = annotationArea.image();
@@ -36,7 +37,8 @@ void AnnotationAreaTest::ExportAsImage_Should_ExportImage_When_ImageSet()
 void AnnotationAreaTest::ExportAsImage_Should_ExportEmptyImage_When_NoImageSet()
 {
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 
 	auto resultImage = annotationArea.image();
 
@@ -49,8 +51,9 @@ void AnnotationAreaTest::ExportAsImage_Should_ExportScaledImage_When_ScalingEnab
 	QPixmap pixmap(QSize(400, 400));
 	pixmap.fill(QColor(Qt::green));
 	MockDefaultParameters p;
-	p.scaler.setScaleFactor(scaleFactor);
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	scalerMock->setScaleFactor(scaleFactor);
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	annotationArea.loadImage(pixmap);
 
 	auto resultImage = annotationArea.image();
@@ -68,7 +71,8 @@ void AnnotationAreaTest::AddAnnotationItem_Should_AddAnnotationItemToScene()
 	auto lineItem = new AnnotationLine(p1, properties);
 	lineItem->addPoint(p2, false);
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 
 	annotationArea.addAnnotationItem(lineItem);
 
@@ -83,7 +87,8 @@ void AnnotationAreaTest::RemoveAnnotationItem_Should_RemoveAnnotationItemFromSce
 	auto lineItem = new AnnotationLine(p1, properties);
 	lineItem->addPoint(p2, false);
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	annotationArea.addAnnotationItem(lineItem);
 	QCOMPARE(annotationArea.items().contains(lineItem), true);
 
@@ -98,7 +103,8 @@ void AnnotationAreaTest::CanvasRect_Should_ReturnRectUnionOfAllItems_When_NoCanv
 	QPixmap pixmap(backgroundImageBoundingRect.size().toSize());
 	pixmap.fill(QColor(Qt::green));
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	annotationArea.loadImage(pixmap);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 2));
 	QPointF p1(10, 10);
@@ -119,7 +125,8 @@ void AnnotationAreaTest::CanvasRect_Should_ReturnUserDefinedRect_When_CanvasRect
 	QPixmap pixmap(backgroundImageBoundingRect.size());
 	pixmap.fill(QColor(Qt::green));
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	annotationArea.loadImage(pixmap);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 2));
 	QPointF p1(10, 10);
diff --git a/tests/annotations/undo/AddCommandTest.cpp b/tests/annotations/undo/AddCommandTest.cpp
index c8af4f2..72d2f86 100644
--- a/tests/annotations/undo/AddCommandTest.cpp
+++ b/tests/annotations/undo/AddCommandTest.cpp
@@ -23,8 +23,10 @@
 
 void AddCommandTest::TestRedo_Should_ApplyOperation()
 {
+	// arrange
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
 	auto item = new AnnotationLine(line.p1(), properties);
@@ -32,15 +34,19 @@ void AddCommandTest::TestRedo_Should_ApplyOperation()
 	AddCommand addCommand(item, &annotationArea);
 	QCOMPARE(annotationArea.items().contains(item), false);
 
+	// act
 	addCommand.redo();
 
+	// arrange
 	QCOMPARE(annotationArea.items().contains(item), true);
 }
 
 void AddCommandTest::TestUndo_Should_UndoOperation()
 {
+	// arrange
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
 	auto item = new AnnotationLine(line.p1(), properties);
@@ -49,8 +55,10 @@ void AddCommandTest::TestUndo_Should_UndoOperation()
 	addCommand.redo();
 	QCOMPARE(annotationArea.items().contains(item), true);
 
+	// act
 	addCommand.undo();
 
+	// assert
 	QCOMPARE(annotationArea.items().contains(item), false);
 }
 
diff --git a/tests/annotations/undo/CropCommandTest.cpp b/tests/annotations/undo/CropCommandTest.cpp
index fa65f0d..5b447b4 100644
--- a/tests/annotations/undo/CropCommandTest.cpp
+++ b/tests/annotations/undo/CropCommandTest.cpp
@@ -21,23 +21,29 @@
 
 void CropCommandTest::TestRedo_Should_CropImageAndScene()
 {
+	// arrange
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	QGraphicsPixmapItem graphicsPixmapItem(image);
 	QRectF cropRect(100, 100, 200, 200);
 	CropCommand cropCommand(&graphicsPixmapItem, cropRect, &annotationArea);
 
+	// act
 	cropCommand.redo();
 
+	// assert
 	QCOMPARE(annotationArea.sceneRect().size(), cropRect.size());
 	QCOMPARE(graphicsPixmapItem.boundingRect().size(), cropRect.size());
 }
 
 void CropCommandTest::TestRedo_Should_MoveItemToNewPosition()
 {
+	// arrange
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	QGraphicsPixmapItem graphicsPixmapItem(image);
 	QRectF cropRect(100, 100, 200, 200);
@@ -48,32 +54,40 @@ void CropCommandTest::TestRedo_Should_MoveItemToNewPosition()
 	annotationArea.addAnnotationItem(item);
 	CropCommand cropCommand(&graphicsPixmapItem, cropRect, &annotationArea);
 
+	// act
 	cropCommand.redo();
 
+	// assert
 	QCOMPARE(item->position(), QPointF(50, 50));
 	QCOMPARE(item->boundingRect().size(), rect.size());
 }
 
 void CropCommandTest::TestUndo_Should_RestoreOriginalImageAndSceneSize()
 {
+	// arrange
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	QGraphicsPixmapItem graphicsPixmapItem(image);
 	QRectF cropRect(100, 100, 200, 200);
 	CropCommand cropCommand(&graphicsPixmapItem, cropRect, &annotationArea);
 	cropCommand.redo();
 
+	// act
 	cropCommand.undo();
 
+	// assert
 	QVERIFY(annotationArea.sceneRect().size() == image.size());
 	QVERIFY(graphicsPixmapItem.boundingRect().size() == image.size());
 }
 
 void CropCommandTest::TestUndo_Should_MoveItemBackToPreviousPosition()
 {
+	// arrange
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	QGraphicsPixmapItem graphicsPixmapItem(image);
 	QRectF cropRect(100, 100, 200, 200);
@@ -85,8 +99,10 @@ void CropCommandTest::TestUndo_Should_MoveItemBackToPreviousPosition()
 	CropCommand cropCommand(&graphicsPixmapItem, cropRect, &annotationArea);
 	cropCommand.redo();
 
+	// act
 	cropCommand.undo();
 
+	// assert
 	QCOMPARE(item->position(), rect.topLeft());
 	QCOMPARE(item->boundingRect().size(), rect.size());
 }
diff --git a/tests/annotations/undo/DeleteCommandTest.cpp b/tests/annotations/undo/DeleteCommandTest.cpp
index 75c955f..bfd3aa9 100644
--- a/tests/annotations/undo/DeleteCommandTest.cpp
+++ b/tests/annotations/undo/DeleteCommandTest.cpp
@@ -23,8 +23,10 @@
 
 void DeleteCommandTest::TestRedo_Should_ApplyOperation()
 {
+	// arrange
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
 	AnnotationLine item(line.p1(), properties);
@@ -34,15 +36,19 @@ void DeleteCommandTest::TestRedo_Should_ApplyOperation()
 	QList<AbstractAnnotationItem *> items = { &item };
 	DeleteCommand deleteCommand(items, &annotationArea);
 
+	// act
 	deleteCommand.redo();
 
+	// assert
 	QCOMPARE(annotationArea.items().contains(&item), false);
 }
 
 void DeleteCommandTest::TestUndo_Should_UndoOperation()
 {
+	// arrange
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
 	AnnotationLine item(line.p1(), properties);
@@ -53,8 +59,10 @@ void DeleteCommandTest::TestUndo_Should_UndoOperation()
 	deleteCommand.redo();
 	QCOMPARE(annotationArea.items().contains(&item), false);
 
+	// act
 	deleteCommand.undo();
 
+	// assert
 	QCOMPARE(annotationArea.items().contains(&item), true);
 }
 
diff --git a/tests/annotations/undo/ModifyCanvasCommandTest.cpp b/tests/annotations/undo/ModifyCanvasCommandTest.cpp
index 2ad7466..915d65b 100644
--- a/tests/annotations/undo/ModifyCanvasCommandTest.cpp
+++ b/tests/annotations/undo/ModifyCanvasCommandTest.cpp
@@ -22,7 +22,8 @@
 void ModifyCanvasCommandTest::Redo_Should_ModifyCanvasSizeAndColor_When_SizeAndColorChanged()
 {
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	annotationArea.loadImage(image);
 	QRectF newCanvasRect(100, 100, 200, 200);
@@ -39,7 +40,8 @@ void ModifyCanvasCommandTest::Redo_Should_ModifyCanvasSizeAndColor_When_SizeAndC
 void ModifyCanvasCommandTest::Redo_Should_OnlyModifyCanvasColor_When_OnlyColorChanged()
 {
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	annotationArea.loadImage(image);
 	QColor newCanvasColor(Qt::red);
@@ -56,7 +58,8 @@ void ModifyCanvasCommandTest::Redo_Should_OnlyModifyCanvasColor_When_OnlyColorCh
 void ModifyCanvasCommandTest::Undo_Should_RevertCanvasSizeAndColor_When_SizeAndColorChanged()
 {
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	annotationArea.loadImage(image);
 	auto originalCanvasRect = annotationArea.canvasRect();
@@ -79,7 +82,8 @@ void ModifyCanvasCommandTest::Undo_Should_RevertCanvasSizeAndColor_When_SizeAndC
 void ModifyCanvasCommandTest::Undo_Should_RevertOnlyColor_When_OnlyColorChanged()
 {
 	MockDefaultParameters parameters;
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	QPixmap image(400, 400);
 	annotationArea.loadImage(image);
 	QColor newCanvasColor(Qt::red);
diff --git a/tests/annotations/undo/PasteCommandTest.cpp b/tests/annotations/undo/PasteCommandTest.cpp
index c3ec2c0..c3a9318 100644
--- a/tests/annotations/undo/PasteCommandTest.cpp
+++ b/tests/annotations/undo/PasteCommandTest.cpp
@@ -37,11 +37,13 @@ using kImageAnnotator::AnnotationPropertiesFactory;
 
 void PasteCommandTest::TestRedo_Should_AddPastedItemsToAnnotationAreaAtGivenPosition()
 {
+	// arrange
 	auto offset = QPointF(10, 10);
 	auto position = QPointF(50, 50);
 	MockDefaultParameters mockParameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	AnnotationPropertiesFactory propertiesFactory(&mockParameters.config, &mockParameters.settingsProvider);
-	AnnotationArea annotationArea(&mockParameters.config, &mockParameters.settingsProvider, &mockParameters.scaler, &mockParameters.zoomValueProvider);
+	AnnotationArea annotationArea(&mockParameters.config, &mockParameters.settingsProvider, scalerMock, &mockParameters.zoomValueProvider, nullptr);
 	AnnotationItemFactory itemFactory(&propertiesFactory, &mockParameters.settingsProvider, &mockParameters.config);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
@@ -52,8 +54,10 @@ void PasteCommandTest::TestRedo_Should_AddPastedItemsToAnnotationAreaAtGivenPosi
 	PasteCommand pasteCommand(itemsWithOffset, position, &itemFactory, &annotationArea);
 	QVERIFY(dynamic_cast<AnnotationLine *>(annotationArea.items().last()) == nullptr);
 
+	// act
 	pasteCommand.redo();
 
+	// assert
 	auto lastItem = dynamic_cast<AnnotationLine *>(annotationArea.items().last());
 	QVERIFY(lastItem != nullptr);
 	QCOMPARE(lastItem->position(), position + offset);
@@ -61,11 +65,13 @@ void PasteCommandTest::TestRedo_Should_AddPastedItemsToAnnotationAreaAtGivenPosi
 
 void PasteCommandTest::TestUndo_Should_RemovePastedItemsFromAnnotationArea()
 {
+	// arrange
 	auto offset = QPointF(10, 10);
 	auto position = QPointF(50, 50);
 	MockDefaultParameters mockParameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	AnnotationPropertiesFactory propertiesFactory(&mockParameters.config, &mockParameters.settingsProvider);
-	AnnotationArea annotationArea(&mockParameters.config, &mockParameters.settingsProvider, &mockParameters.scaler, &mockParameters.zoomValueProvider);
+	AnnotationArea annotationArea(&mockParameters.config, &mockParameters.settingsProvider, scalerMock, &mockParameters.zoomValueProvider, nullptr);
 	AnnotationItemFactory itemFactory(&propertiesFactory, &mockParameters.settingsProvider, &mockParameters.config);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	QLineF line(10, 10, 20, 20);
@@ -77,8 +83,10 @@ void PasteCommandTest::TestUndo_Should_RemovePastedItemsFromAnnotationArea()
 	pasteCommand.redo();
 	QVERIFY(dynamic_cast<AnnotationLine *>(annotationArea.items().last()) != nullptr);
 
+	// act
 	pasteCommand.undo();
 
+	// arrange
 	QVERIFY(dynamic_cast<AnnotationLine *>(annotationArea.items().last()) == nullptr);
 }
 
diff --git a/tests/annotations/undo/RotateCommandTest.cpp b/tests/annotations/undo/RotateCommandTest.cpp
index cdeeee6..db78718 100644
--- a/tests/annotations/undo/RotateCommandTest.cpp
+++ b/tests/annotations/undo/RotateCommandTest.cpp
@@ -31,7 +31,8 @@ void RotateCommandTest::Redo_Should_RotatePixmapByProvidedAngel()
 	QGraphicsPixmapItem image(pixmap);
 
 	MockDefaultParameters defaultParameters;
-	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, &defaultParameters.scaler, &defaultParameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, scalerMock, &defaultParameters.zoomValueProvider, nullptr);
 	RotateCommand rotateCommand(&image, angel, &annotationArea);
 
 	// act
@@ -53,7 +54,8 @@ void RotateCommandTest::Redo_Should_TrimPixmapAndRemoveTransparentPart_WhenRotat
 	QGraphicsPixmapItem image(pixmap);
 
 	MockDefaultParameters defaultParameters;
-	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, &defaultParameters.scaler, &defaultParameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, scalerMock, &defaultParameters.zoomValueProvider, nullptr);
 	RotateCommand rotate1Command(&image, angel, &annotationArea);
 	rotate1Command.redo();
 	RotateCommand rotate2Command(&image, angel, &annotationArea);
@@ -75,7 +77,8 @@ void RotateCommandTest::Undo_Should_RevertBackToInitialImage()
 	QGraphicsPixmapItem image(pixmap);
 
 	MockDefaultParameters defaultParameters;
-	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, &defaultParameters.scaler, &defaultParameters.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&defaultParameters.config, &defaultParameters.settingsProvider, scalerMock, &defaultParameters.zoomValueProvider, nullptr);
 	RotateCommand rotateCommand(&image, angel, &annotationArea);
 	rotateCommand.redo();
 	QVERIFY(image.pixmap().toImage() != pixmap.toImage());
diff --git a/tests/annotations/undo/ScaleCommandTest.cpp b/tests/annotations/undo/ScaleCommandTest.cpp
index 35ca238..02a4240 100644
--- a/tests/annotations/undo/ScaleCommandTest.cpp
+++ b/tests/annotations/undo/ScaleCommandTest.cpp
@@ -23,64 +23,78 @@
 
 void ScaleCommandTest::TestRedo_Should_ScaleImageToNewSize()
 {
+	// arrange
 	auto oldSize = QSize(500, 500);
 	auto newSize = QSize(250, 250);
 	QPixmap pixmap(oldSize);
 	QGraphicsPixmapItem image(pixmap);
 
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	ScaleCommand scaleCommand(&image, newSize, &annotationArea);
 
+	// act
 	scaleCommand.redo();
 
+	// assert
 	QCOMPARE(image.boundingRect().size().toSize(), newSize);
 }
 
 void ScaleCommandTest::TestUndo_Should_ScaleImageBackToOldSize()
 {
+	// arrange
 	auto oldSize = QSize(500, 500);
 	auto newSize = QSize(250, 250);
 	QPixmap pixmap(oldSize);
 	QGraphicsPixmapItem image(pixmap);
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	ScaleCommand scaleCommand(&image, newSize, &annotationArea);
 	scaleCommand.redo();
 	QCOMPARE(image.boundingRect().size().toSize(), newSize);
 
+	// act
 	scaleCommand.undo();
 
+	// assert
 	QCOMPARE(image.boundingRect().size().toSize(), oldSize);
 }
 
 void ScaleCommandTest::TestRedo_Should_ScaleItemsBySameFactorAsImage()
 {
+	// arrange
 	auto oldSize = QSize(500, 500);
 	auto newSize = QSize(250, 250);
 	QPixmap pixmap(oldSize);
 	QGraphicsPixmapItem image(pixmap);
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	auto rectItem = new AnnotationRect(QPointF(0, 0), properties);
 	rectItem->addPoint(QPointF(50, 50), false);
 	annotationArea.addAnnotationItem(rectItem);
 	ScaleCommand scaleCommand(&image, newSize, &annotationArea);
 
+	// act
 	scaleCommand.redo();
 
+	// assert
 	QCOMPARE(rectItem->boundingRect().size().toSize(), QSize(25, 25));
 }
 
 void ScaleCommandTest::TestUndo_Should_ScaleItemsBackToOriginalSize()
 {
+	// arrange
 	auto oldSize = QSize(500, 500);
 	auto newSize = QSize(250, 250);
 	QPixmap pixmap(oldSize);
 	QGraphicsPixmapItem image(pixmap);
 	MockDefaultParameters p;
-	AnnotationArea annotationArea(&p.config, &p.settingsProvider, &p.scaler, &p.zoomValueProvider);
+	auto scalerMock = new MockDevicePixelRatioScaler();
+	AnnotationArea annotationArea(&p.config, &p.settingsProvider, scalerMock, &p.zoomValueProvider, nullptr);
 	auto properties = PropertiesPtr(new AnnotationProperties(Qt::red, 1));
 	auto rectItem = new AnnotationRect(QPointF(0, 0), properties);
 	rectItem->addPoint(QPointF(50, 50), false);
@@ -89,8 +103,10 @@ void ScaleCommandTest::TestUndo_Should_ScaleItemsBackToOriginalSize()
 	scaleCommand.redo();
 	QCOMPARE(rectItem->boundingRect().size().toSize(), QSize(25, 25));
 
+	// act
 	scaleCommand.undo();
 
+	// assert
 	QCOMPARE(rectItem->boundingRect().size().toSize(), QSize(50, 50));
 }
 
diff --git a/tests/gui/selection/SelectionHandlerTest.cpp b/tests/gui/selection/SelectionHandlerTest.cpp
index a834eba..eafc0fb 100644
--- a/tests/gui/selection/SelectionHandlerTest.cpp
+++ b/tests/gui/selection/SelectionHandlerTest.cpp
@@ -21,65 +21,83 @@
 
 void SelectionHandlerTest::TestSetWidth_Should_EmitSelectionChangedSignal()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	QSignalSpy spy(&selectionHandler, &SelectionHandler::selectionChanged);
 
+	// act
 	selectionHandler.setWidth(30);
 
+	// assert
 	QCOMPARE(spy.count(), 1);
 }
 
 void SelectionHandlerTest::TestSetHeight_Should_EmitSelectionChangedSignal()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	QSignalSpy spy(&selectionHandler, &SelectionHandler::selectionChanged);
 
+	// act
 	selectionHandler.setHeight(30);
 
+	// assert
 	QCOMPARE(spy.count(), 1);
 }
 
 void SelectionHandlerTest::TestSetPositionX_Should_EmitSelectionChangedSignal()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	QSignalSpy spy(&selectionHandler, &SelectionHandler::selectionChanged);
 
+	// act
 	selectionHandler.setPositionY(30);
 
+	// assert
 	QCOMPARE(spy.count(), 1);
 }
 
 void SelectionHandlerTest::TestSetPositionY_Should_EmitSelectionChangedSignal()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	QSignalSpy spy(&selectionHandler, &SelectionHandler::selectionChanged);
 
+	// act
 	selectionHandler.setPositionX(30);
 
+	// assert
 	QCOMPARE(spy.count(), 1);
 }
 
 void SelectionHandlerTest::TestResetSelection_Should_SetSelectionToProvidedRect()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	auto sceneRect = QRectF(0, 0, 500, 500);
 	annotationArea.setSceneRect(sceneRect);
 	SelectionHandler selectionHandler(selectionRestrictor);
@@ -87,16 +105,20 @@ void SelectionHandlerTest::TestResetSelection_Should_SetSelectionToProvidedRect(
 	selectionHandler.setWidth(400);
 	QVERIFY(selectionHandler.selection() != sceneRect);
 
+	// act
 	selectionHandler.resetSelection(sceneRect, sceneRect);
 
+	// assert
 	QCOMPARE(selectionHandler.selection(), sceneRect);
 }
 
 void SelectionHandlerTest::TestIsInMotion_Should_ReturnTrue_WhenClickedOnSelection()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	auto sceneRect = QRectF(0, 0, 500, 500);
 	auto position = QPointF(150, 150);
 	annotationArea.setSceneRect(sceneRect);
@@ -105,16 +127,20 @@ void SelectionHandlerTest::TestIsInMotion_Should_ReturnTrue_WhenClickedOnSelecti
 	selectionHandler.resetSelection(sceneRect, sceneRect);
 	selectionHandler.grab(position);
 
+	// act
 	auto isInMotion = selectionHandler.isInMotion();
 
+	// assert
 	QCOMPARE(isInMotion, true);
 }
 
 void SelectionHandlerTest::TestIsInMotion_Should_ReturnTrue_WhenClickedOnHandle()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	auto sceneRect = QRectF(0, 0, 500, 500);
 	auto position = QPointF(2, 2);
 	annotationArea.setSceneRect(sceneRect);
@@ -122,16 +148,20 @@ void SelectionHandlerTest::TestIsInMotion_Should_ReturnTrue_WhenClickedOnHandle(
 	selectionHandler.init(&annotationArea);
 	selectionHandler.grab(position);
 
+	// act
 	auto isInMotion = selectionHandler.isInMotion();
 
+	// assert
 	QCOMPARE(isInMotion, true);
 }
 
 void SelectionHandlerTest::TestIsInMotion_Should_ReturnFalse_WhenClickedOutsideSelectionAndHandle()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	auto sceneRect = QRectF(0, 0, 500, 500);
 	auto position = QPointF(400, 400);
 	annotationArea.setSceneRect(sceneRect);
@@ -140,36 +170,46 @@ void SelectionHandlerTest::TestIsInMotion_Should_ReturnFalse_WhenClickedOutsideS
 	selectionHandler.setWidth(200);
 	selectionHandler.grab(position);
 
+	// act
 	auto isInMotion = selectionHandler.isInMotion();
 
+	// assert
 	QCOMPARE(isInMotion, false);
 }
 
 void SelectionHandlerTest::TestSelectionHandles_Should_ReturnEightItems()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 
+	// act
 	auto handles = selectionHandler.selectionHandles();
 
+	// assert
 	QCOMPARE(handles.length(), 8);
 }
 
 void SelectionHandlerTest::TestRestrictResize_Should_KeepCurrentSelection_When_NewSelectionHasNegativeWidthAndRestrictionDisabled()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	selectionHandler.setRestrictionEnabled(false);
 	auto selectionBefore = selectionHandler.selection();
 
+	// act
 	selectionHandler.setWidth(-30);
 
+	// assert
 	auto selectionAfter = selectionHandler.selection();
 	QCOMPARE(selectionBefore, selectionAfter);
 	QVERIFY(selectionAfter.width() >= 0);
@@ -177,16 +217,20 @@ void SelectionHandlerTest::TestRestrictResize_Should_KeepCurrentSelection_When_N
 
 void SelectionHandlerTest::TestRestrictResize_Should_KeepCurrentSelection_When_NewSelectionHasNegativeHeightAndRestrictionDisabled()
 {
+	// arrange
 	MockDefaultParameters parameters;
+	auto scalerMock = new MockDevicePixelRatioScaler();
 	auto selectionRestrictor = new MockSelectionRestrictor();
-	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, &parameters.scaler, &parameters.zoomValueProvider);
+	AnnotationArea annotationArea(&parameters.config, &parameters.settingsProvider, scalerMock, &parameters.zoomValueProvider, nullptr);
 	SelectionHandler selectionHandler(selectionRestrictor);
 	selectionHandler.init(&annotationArea);
 	selectionHandler.setRestrictionEnabled(false);
 	auto selectionBefore = selectionHandler.selection();
 
+	// act
 	selectionHandler.setHeight(-30);
 
+	// assert
 	auto selectionAfter = selectionHandler.selection();
 	QCOMPARE(selectionBefore, selectionAfter);
 	QVERIFY(selectionAfter.height() >= 0.0);
diff --git a/tests/mocks/MockDefaultParameters.h b/tests/mocks/MockDefaultParameters.h
index 19faae5..11dad00 100644
--- a/tests/mocks/MockDefaultParameters.h
+++ b/tests/mocks/MockDefaultParameters.h
@@ -32,7 +32,6 @@ struct MockDefaultParameters
 {
     Config config;
     MockSettingsProvider settingsProvider;
-    MockDevicePixelRatioScaler scaler;
     MockZoomValueProvider zoomValueProvider;
 };
 
diff --git a/tests/mocks/MockDevicePixelRatioScaler.h b/tests/mocks/MockDevicePixelRatioScaler.h
index 74bb2c5..9549c70 100644
--- a/tests/mocks/MockDevicePixelRatioScaler.h
+++ b/tests/mocks/MockDevicePixelRatioScaler.h
@@ -30,7 +30,7 @@ class MockDevicePixelRatioScaler : public IDevicePixelRatioScaler
 {
 public:
 	MockDevicePixelRatioScaler();
-	~MockDevicePixelRatioScaler() = default;
+	~MockDevicePixelRatioScaler() override = default;
 
 	QRectF scale(const QRectF &rect) const override;
 	qreal scaleFactor() const override;
diff --git a/translations/CMakeLists.txt b/translations/CMakeLists.txt
index 0bd039b..b720d90 100644
--- a/translations/CMakeLists.txt
+++ b/translations/CMakeLists.txt
@@ -20,7 +20,9 @@ set(KIMAGEANNOTATOR_LANG_TS
 	kImageAnnotator_pl.ts
 	kImageAnnotator_pt.ts
 	kImageAnnotator_pt_BR.ts
+	kImageAnnotator_ro.ts
 	kImageAnnotator_ru.ts
+	kImageAnnotator_si.ts
 	kImageAnnotator_sv.ts
 	kImageAnnotator_tr.ts
 	kImageAnnotator_uk.ts
diff --git a/translations/kImageAnnotator_de.ts b/translations/kImageAnnotator_de.ts
index 7f97f5d..43ae2ac 100644
--- a/translations/kImageAnnotator_de.ts
+++ b/translations/kImageAnnotator_de.ts
@@ -9,19 +9,19 @@
     </message>
     <message>
         <source>Bring to Front</source>
-        <translation>Nach vorne bringen</translation>
+        <translation>Ganz nach vorn</translation>
     </message>
     <message>
         <source>Bring Forward</source>
-        <translation>Nach vorne bringen</translation>
+        <translation>Nach vorn</translation>
     </message>
     <message>
         <source>Send Backward</source>
-        <translation>Nach hinten schicken</translation>
+        <translation>Nach hinten</translation>
     </message>
     <message>
         <source>Send to Back</source>
-        <translation>Nach hinten schicken</translation>
+        <translation>Ganz nach hinten</translation>
     </message>
     <message>
         <source>Select This</source>
@@ -48,45 +48,45 @@
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Allgemeine Einstellungen</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Bild Einstellungen</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished">Farbe</translation>
+        <translation>Farbe</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation type="unfinished">Textfarbe</translation>
+        <translation>Textfarbe</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished">Breite</translation>
+        <translation>Breite</translation>
     </message>
     <message>
         <source>Number Seed</source>
-        <translation type="unfinished">Nummerieren</translation>
+        <translation>Nummerierung ab</translation>
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation type="unfinished">Obfuskierungs-Faktor</translation>
+        <translation>Unschärfe Faktor</translation>
     </message>
     <message>
         <source>Item Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>Objekt-Schatten</translation>
     </message>
     <message>
         <source>Item Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Objekt-Einstellungen</translation>
     </message>
 </context>
 <context>
@@ -101,7 +101,7 @@
     </message>
     <message>
         <source>Close All</source>
-        <translation>Alles schließen</translation>
+        <translation>Alle schließen</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
@@ -116,18 +116,18 @@
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>Werkzeugauswahl</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktiviert</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Deaktiviert</translation>
     </message>
 </context>
 <context>
@@ -154,7 +154,7 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished">Anwenden</translation>
+        <translation>Anwenden</translation>
     </message>
 </context>
 <context>
@@ -180,26 +180,26 @@
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation type="unfinished">Schriftgröße</translation>
+        <translation>Schriftgröße</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Fett</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Kursiv</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Unterstrichen</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ImageEffectPicker</name>
     <message>
         <source>Image Effects</source>
-        <translation>Bildeffekte</translation>
+        <translation>Bild-Effekte</translation>
     </message>
     <message>
         <source>No Effect</source>
@@ -219,7 +219,7 @@
     </message>
     <message>
         <source>Invert Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Farbe invertieren</translation>
     </message>
 </context>
 <context>
@@ -264,7 +264,7 @@ Zeichenfläche das Hintergrundbild beinhaltet.</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Hintergrundfarbe der Zeichenfläche</translation>
     </message>
 </context>
 <context>
@@ -279,20 +279,21 @@ Zeichenfläche das Hintergrundbild beinhaltet.</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation>90° im UZS</translation>
+        <translation>90° im Uhrzeigersinn</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
-        <translation>90° gegen UZS</translation>
+        <translation>90° gegen den Uhrzeigersinn</translation>
     </message>
     <message>
         <source>Arbitrary</source>
-        <translation type="unfinished"></translation>
+        <translation>Beliebig</translation>
     </message>
     <message>
         <source>Positive values rotate clockwise, negative values counter clockwise.
 Rotating by non 90° multipliers might introduce loss of quality.</source>
-        <translation type="unfinished"></translation>
+        <translation>Positive Werte rotieren im Uhrzeigersinn, negative Werte gegen den Uhrzeigersinn.
+Das Drehen um nicht 90°-Multiplikatoren kann zu Qualitätsverlusten führen.</translation>
     </message>
     <message>
         <source>Horizontal</source>
@@ -304,11 +305,11 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Abbrechen</translation>
+        <translation>Abbrechen</translation>
     </message>
     <message>
         <source>Rotate</source>
@@ -316,7 +317,7 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished"></translation>
+        <translation>Umdrehen</translation>
     </message>
 </context>
 <context>
@@ -377,15 +378,15 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Marker Rectangle</source>
-        <translation>Markierungsrechteck</translation>
+        <translation>Rechteckige Markierung</translation>
     </message>
     <message>
         <source>Marker Ellipse</source>
-        <translation>Markierungsellipse</translation>
+        <translation>Ellipsen Markierung</translation>
     </message>
     <message>
         <source>Marker Pen</source>
-        <translation>Markierungsstift</translation>
+        <translation>Stift Markierung</translation>
     </message>
     <message>
         <source>Text</source>
@@ -417,7 +418,7 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Number Pointer</source>
-        <translation>Anzahlzeiger</translation>
+        <translation>Nummer mit Zeiger</translation>
     </message>
     <message>
         <source>Sticker</source>
@@ -433,11 +434,11 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Text Arrow</source>
-        <translation>Pfeil mit Text</translation>
+        <translation>Text mit Pfeil</translation>
     </message>
     <message>
         <source>Number Arrow</source>
-        <translation>Pfeil mit Zahl</translation>
+        <translation>Nummer mit Pfeil</translation>
     </message>
     <message>
         <source>Duplicate</source>
@@ -448,15 +449,15 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Vergrößern (%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Verkleinern (%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zoom zurücksetzen (%1)</translation>
     </message>
 </context>
 </TS>
diff --git a/translations/kImageAnnotator_el.ts b/translations/kImageAnnotator_el.ts
index c6e95bd..03d8b36 100644
--- a/translations/kImageAnnotator_el.ts
+++ b/translations/kImageAnnotator_el.ts
@@ -48,29 +48,29 @@
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Γενικές ρυθμίσεις</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις εικόνας</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished">Χρώμα</translation>
+        <translation>Χρώμα</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation type="unfinished">Χρώμα κειμένου</translation>
+        <translation>Χρώμα κειμένου</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished">Πλάτος</translation>
+        <translation>Πλάτος</translation>
     </message>
     <message>
         <source>Number Seed</source>
@@ -78,7 +78,7 @@
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>Συντελεστής θόλωσης</translation>
     </message>
     <message>
         <source>Item Shadow</source>
@@ -93,41 +93,41 @@
     <name>kImageAnnotator::AnnotationTabContextMenu</name>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Close Other</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο των άλλων</translation>
     </message>
     <message>
         <source>Close All</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο όλων</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο όλων στα αριστερά</translation>
     </message>
     <message>
         <source>Close All to the Right</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο όλων στα δεξιά</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή εργαλείου</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένο</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένο</translation>
     </message>
 </context>
 <context>
@@ -154,56 +154,56 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Εφαρμογή</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FillModePicker</name>
     <message>
         <source>Border And Fill Visibility</source>
-        <translation type="unfinished">Ορατότητα περιγράμματος και γέμισης</translation>
+        <translation>Ορατότητα περιγράμματος και γέμισης</translation>
     </message>
     <message>
         <source>Border and Fill</source>
-        <translation type="unfinished">Περίγραμμα και γέμιση</translation>
+        <translation>Περίγραμμα και γέμιση</translation>
     </message>
     <message>
         <source>Border and No Fill</source>
-        <translation type="unfinished">Περίγραμμα χωρίς γέμιση</translation>
+        <translation>Περίγραμμα χωρίς γέμιση</translation>
     </message>
     <message>
         <source>No Border and No Fill</source>
-        <translation type="unfinished">Χωρίς περίγραμμα και χωρίς γέμιση</translation>
+        <translation>Χωρίς περίγραμμα και χωρίς γέμιση</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation type="unfinished">Μέγεθος γραμματοσειράς</translation>
+        <translation>Μέγεθος γραμματοσειράς</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Έντονα</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλάγια</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Υπογράμμιση</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ImageEffectPicker</name>
     <message>
         <source>Image Effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Τεχνάσματα εικόνας</translation>
     </message>
     <message>
         <source>No Effect</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανένα τέχνασμα</translation>
     </message>
     <message>
         <source>Drop Shadow</source>
@@ -211,22 +211,22 @@
     </message>
     <message>
         <source>Grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Διαβαθμίσεις του γκρι</translation>
     </message>
     <message>
         <source>Border</source>
-        <translation type="unfinished"></translation>
+        <translation>Περίγραμμα</translation>
     </message>
     <message>
         <source>Invert Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιστροφή χρωμάτων</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ModifyCanvasWidget</name>
     <message>
         <source>Restricted</source>
-        <translation type="unfinished"></translation>
+        <translation>Με περιορισμούς</translation>
     </message>
     <message>
         <source>When enabled enforces the canvas
@@ -235,7 +235,7 @@ to include the background image.</source>
     </message>
     <message>
         <source>X:</source>
-        <translation type="unfinished">X:</translation>
+        <translation type="unfinished">x</translation>
     </message>
     <message>
         <source>Y:</source>
@@ -243,23 +243,23 @@ to include the background image.</source>
     </message>
     <message>
         <source>W:</source>
-        <translation type="unfinished">Π:</translation>
+        <translation>Π:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation type="unfinished">Υ:</translation>
+        <translation>Υ:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Εφαρμογή</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Ακύρωση</translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρώμα:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
@@ -270,15 +270,15 @@ to include the background image.</source>
     <name>kImageAnnotator::RotateDialog</name>
     <message>
         <source>Rotate Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιστροφή εικόνας</translation>
     </message>
     <message>
         <source>180°</source>
-        <translation type="unfinished"></translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>90° Δεξιόστροφα</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
@@ -295,27 +295,27 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Horizontal</source>
-        <translation type="unfinished"></translation>
+        <translation>Οριζόντια</translation>
     </message>
     <message>
         <source>Vertical</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατακόρυφα</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished">Εντάξει</translation>
+        <translation>Εντάξει</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>Rotate</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιστροφή</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναστροφή</translation>
     </message>
 </context>
 <context>
@@ -440,22 +440,22 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργία αντιγράφου</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεγέθυνση (%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Σμίκρυνση (%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά εστίασης (%1)</translation>
     </message>
 </context>
 </TS>
diff --git a/translations/kImageAnnotator_id.ts b/translations/kImageAnnotator_id.ts
index bc5cc50..c666bd3 100644
--- a/translations/kImageAnnotator_id.ts
+++ b/translations/kImageAnnotator_id.ts
@@ -5,457 +5,459 @@
     <name>kImageAnnotator::AnnotationContextMenu</name>
     <message>
         <source>Arrange</source>
-        <translation type="unfinished"></translation>
+        <translation>Atur</translation>
     </message>
     <message>
         <source>Bring to Front</source>
-        <translation type="unfinished"></translation>
+        <translation>Bawa ke Depan</translation>
     </message>
     <message>
         <source>Bring Forward</source>
-        <translation type="unfinished"></translation>
+        <translation>Bawa paling depan</translation>
     </message>
     <message>
         <source>Send Backward</source>
-        <translation type="unfinished"></translation>
+        <translation>Kirim paling belakang</translation>
     </message>
     <message>
         <source>Send to Back</source>
-        <translation type="unfinished"></translation>
+        <translation>Kirim ke belakang</translation>
     </message>
     <message>
         <source>Select This</source>
-        <translation type="unfinished"></translation>
+        <translation>Pilih ini</translation>
     </message>
     <message>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Salin</translation>
     </message>
     <message>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Tempel</translation>
     </message>
     <message>
         <source>Edit</source>
-        <translation type="unfinished"></translation>
+        <translation>Sunting</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Hapus</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Pengaturan Umum</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Pengaturan Gambar</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Warna</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Warna Teks</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished"></translation>
+        <translation>Lebar</translation>
     </message>
     <message>
         <source>Number Seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Nomor Seed</translation>
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>Faktor Obfuscation</translation>
     </message>
     <message>
         <source>Item Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>Bayangan item</translation>
     </message>
     <message>
         <source>Item Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Pengaturan item</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationTabContextMenu</name>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Tutup</translation>
     </message>
     <message>
         <source>Close Other</source>
-        <translation type="unfinished"></translation>
+        <translation>Tutup lainnya</translation>
     </message>
     <message>
         <source>Close All</source>
-        <translation type="unfinished"></translation>
+        <translation>Tutup semua</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
-        <translation type="unfinished"></translation>
+        <translation>Tutup semua ke kiri</translation>
     </message>
     <message>
         <source>Close All to the Right</source>
-        <translation type="unfinished"></translation>
+        <translation>Tutup semua ke kanan</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleksi Alat</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktifkan</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Nonaktifkan</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::CropWidget</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Batal</translation>
     </message>
     <message>
         <source>X:</source>
-        <translation type="unfinished"></translation>
+        <translation>X:</translation>
     </message>
     <message>
         <source>Y:</source>
-        <translation type="unfinished"></translation>
+        <translation>Y:</translation>
     </message>
     <message>
         <source>W:</source>
-        <translation type="unfinished"></translation>
+        <translation>L:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation type="unfinished"></translation>
+        <translation>T:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Terapkan</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FillModePicker</name>
     <message>
         <source>Border And Fill Visibility</source>
-        <translation type="unfinished"></translation>
+        <translation>Batas dan visibilitas isian</translation>
     </message>
     <message>
         <source>Border and Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Batas dan Isian</translation>
     </message>
     <message>
         <source>Border and No Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Batas dan Tanpa Isian</translation>
     </message>
     <message>
         <source>No Border and No Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Tanpa Batas dan Tanpa Isian</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Ukuran font</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Tebal</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Miring</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Garis bawah</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ImageEffectPicker</name>
     <message>
         <source>Image Effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Efek gambar</translation>
     </message>
     <message>
         <source>No Effect</source>
-        <translation type="unfinished"></translation>
+        <translation>Tanpa Efek</translation>
     </message>
     <message>
         <source>Drop Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>Bayangan Jatuh</translation>
     </message>
     <message>
         <source>Grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Skala Abu-abu</translation>
     </message>
     <message>
         <source>Border</source>
-        <translation type="unfinished"></translation>
+        <translation>Batas</translation>
     </message>
     <message>
         <source>Invert Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Balikkan Warna</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ModifyCanvasWidget</name>
     <message>
         <source>Restricted</source>
-        <translation type="unfinished"></translation>
+        <translation>Dibatasi</translation>
     </message>
     <message>
         <source>When enabled enforces the canvas
 to include the background image.</source>
-        <translation type="unfinished"></translation>
+        <translation>Saat diaktifkan akan membuat kanvas
+menyertakan gambar latar belakang.</translation>
     </message>
     <message>
         <source>X:</source>
-        <translation type="unfinished"></translation>
+        <translation>X:</translation>
     </message>
     <message>
         <source>Y:</source>
-        <translation type="unfinished"></translation>
+        <translation>Y:</translation>
     </message>
     <message>
         <source>W:</source>
-        <translation type="unfinished"></translation>
+        <translation>L:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation type="unfinished"></translation>
+        <translation>T:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Terapkan</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Batal</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation type="unfinished"></translation>
+        <translation>Warna:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Warna Latar Belakang Kanvas</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::RotateDialog</name>
     <message>
         <source>Rotate Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Putar gambar</translation>
     </message>
     <message>
         <source>180°</source>
-        <translation type="unfinished"></translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>90° Serarah jarum jam</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>90° Berlawanan jarum jam</translation>
     </message>
     <message>
         <source>Arbitrary</source>
-        <translation type="unfinished"></translation>
+        <translation>Sembarang</translation>
     </message>
     <message>
         <source>Positive values rotate clockwise, negative values counter clockwise.
 Rotating by non 90° multipliers might introduce loss of quality.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nilai positif berputar searah jarum jam, nilai negatif berlawanan arah jarum jam.
+Memutar dengan pengganda non 90° mungkin mengurangi kualitasnya.</translation>
     </message>
     <message>
         <source>Horizontal</source>
-        <translation type="unfinished"></translation>
+        <translation>Horisontal</translation>
     </message>
     <message>
         <source>Vertical</source>
-        <translation type="unfinished"></translation>
+        <translation>Vertikal</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished"></translation>
+        <translation>OK</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Batal</translation>
     </message>
     <message>
         <source>Rotate</source>
-        <translation type="unfinished"></translation>
+        <translation>Putar</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished"></translation>
+        <translation>Balik</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ScaleDialog</name>
     <message>
         <source>Scale Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Skala gambar</translation>
     </message>
     <message>
         <source>Keep Aspect Ratio</source>
-        <translation type="unfinished"></translation>
+        <translation>Jaga Rasio Aspek</translation>
     </message>
     <message>
         <source>Width:</source>
-        <translation type="unfinished"></translation>
+        <translation>Lebar:</translation>
     </message>
     <message>
         <source>Height:</source>
-        <translation type="unfinished"></translation>
+        <translation>Tinggi:</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished"></translation>
+        <translation>Ok</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Batal</translation>
     </message>
     <message>
         <source>Pixel</source>
-        <translation type="unfinished"></translation>
+        <translation>Piksel</translation>
     </message>
     <message>
         <source>Percent</source>
-        <translation type="unfinished"></translation>
+        <translation>Persen</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::StickerPicker</name>
     <message>
         <source>Sticker</source>
-        <translation type="unfinished"></translation>
+        <translation>Stiker</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ToolPicker</name>
     <message>
         <source>Select</source>
-        <translation type="unfinished"></translation>
+        <translation>Pilih</translation>
     </message>
     <message>
         <source>Pen</source>
-        <translation type="unfinished"></translation>
+        <translation>Pena</translation>
     </message>
     <message>
         <source>Number</source>
-        <translation type="unfinished"></translation>
+        <translation>Nomor</translation>
     </message>
     <message>
         <source>Marker Rectangle</source>
-        <translation type="unfinished"></translation>
+        <translation>Marker Persegi Panjang</translation>
     </message>
     <message>
         <source>Marker Ellipse</source>
-        <translation type="unfinished"></translation>
+        <translation>Penanda Elips</translation>
     </message>
     <message>
         <source>Marker Pen</source>
-        <translation type="unfinished"></translation>
+        <translation>Spidol</translation>
     </message>
     <message>
         <source>Text</source>
-        <translation type="unfinished"></translation>
+        <translation>Teks</translation>
     </message>
     <message>
         <source>Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Anak panah</translation>
     </message>
     <message>
         <source>Double Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Panah Ganda</translation>
     </message>
     <message>
         <source>Line</source>
-        <translation type="unfinished"></translation>
+        <translation>Garis</translation>
     </message>
     <message>
         <source>Blur</source>
-        <translation type="unfinished"></translation>
+        <translation>Blur</translation>
     </message>
     <message>
         <source>Rectangle</source>
-        <translation type="unfinished"></translation>
+        <translation>Persegi</translation>
     </message>
     <message>
         <source>Ellipse</source>
-        <translation type="unfinished"></translation>
+        <translation>Elips</translation>
     </message>
     <message>
         <source>Number Pointer</source>
-        <translation type="unfinished"></translation>
+        <translation>Penunjuk Angka</translation>
     </message>
     <message>
         <source>Sticker</source>
-        <translation type="unfinished"></translation>
+        <translation>Stiker</translation>
     </message>
     <message>
         <source>Pixelate</source>
-        <translation type="unfinished"></translation>
+        <translation>Pixelate</translation>
     </message>
     <message>
         <source>Text Pointer</source>
-        <translation type="unfinished"></translation>
+        <translation>Penunjuk Teks</translation>
     </message>
     <message>
         <source>Text Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Panah Teks</translation>
     </message>
     <message>
         <source>Number Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Panah Angka</translation>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation type="unfinished"></translation>
+        <translation>Duplikat</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Perbesar (%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Perkecil (%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Setel Ulang Zoom (%1)</translation>
     </message>
 </context>
 </TS>
diff --git a/translations/kImageAnnotator_it.ts b/translations/kImageAnnotator_it.ts
index ef8387c..dbb0bb3 100644
--- a/translations/kImageAnnotator_it.ts
+++ b/translations/kImageAnnotator_it.ts
@@ -5,23 +5,23 @@
     <name>kImageAnnotator::AnnotationContextMenu</name>
     <message>
         <source>Arrange</source>
-        <translation type="unfinished"></translation>
+        <translation>Disponi</translation>
     </message>
     <message>
         <source>Bring to Front</source>
-        <translation type="unfinished"></translation>
+        <translation>Porta in primo piano</translation>
     </message>
     <message>
         <source>Bring Forward</source>
-        <translation type="unfinished"></translation>
+        <translation>Invia in avanti</translation>
     </message>
     <message>
         <source>Send Backward</source>
-        <translation type="unfinished"></translation>
+        <translation>Manda indietro</translation>
     </message>
     <message>
         <source>Send to Back</source>
-        <translation type="unfinished"></translation>
+        <translation>Manda indietro</translation>
     </message>
     <message>
         <source>Select This</source>
@@ -33,7 +33,7 @@
     </message>
     <message>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Incolla</translation>
     </message>
     <message>
         <source>Edit</source>
@@ -48,45 +48,45 @@
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Impostazioni Generali</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Impostazioni immagine</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished">Colore</translation>
+        <translation>Colore</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation type="unfinished">Colore del testo</translation>
+        <translation>Colore del testo</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished">Larghezza</translation>
+        <translation>Larghezza</translation>
     </message>
     <message>
         <source>Number Seed</source>
-        <translation type="unfinished"></translation>
+        <translation>Numero seme</translation>
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>Fattore di offuscamento</translation>
     </message>
     <message>
         <source>Item Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>Ombreggiatura elemento</translation>
     </message>
     <message>
         <source>Item Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Impostazione elemento</translation>
     </message>
 </context>
 <context>
@@ -101,33 +101,33 @@
     </message>
     <message>
         <source>Close All</source>
-        <translation type="unfinished"></translation>
+        <translation>Chiudi tutto</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
-        <translation type="unfinished"></translation>
+        <translation>Chiudi tutto a sinistra</translation>
     </message>
     <message>
         <source>Close All to the Right</source>
-        <translation type="unfinished"></translation>
+        <translation>Chiudi tutto a destra</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>Selezione strumento</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Abilitato</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>Disabilitato</translation>
     </message>
 </context>
 <context>
@@ -154,179 +154,181 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Applica</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FillModePicker</name>
     <message>
         <source>Border And Fill Visibility</source>
-        <translation type="unfinished"></translation>
+        <translation>Visibilità bordo e riempimento</translation>
     </message>
     <message>
         <source>Border and Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Bordo e riempimento</translation>
     </message>
     <message>
         <source>Border and No Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Bordo e nessun riempimento</translation>
     </message>
     <message>
         <source>No Border and No Fill</source>
-        <translation type="unfinished"></translation>
+        <translation>Nessun bordo e nessun riempimento</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation type="unfinished">Dimensione dei caratteri</translation>
+        <translation>Dimensione caratteri</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Grassetto</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Corsivo</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Sottolineatura</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ImageEffectPicker</name>
     <message>
         <source>Image Effects</source>
-        <translation type="unfinished"></translation>
+        <translation>Effetti immagine</translation>
     </message>
     <message>
         <source>No Effect</source>
-        <translation type="unfinished"></translation>
+        <translation>Nessun effetto</translation>
     </message>
     <message>
         <source>Drop Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>Ombra esterna</translation>
     </message>
     <message>
         <source>Grayscale</source>
-        <translation type="unfinished"></translation>
+        <translation>Scala di grigi</translation>
     </message>
     <message>
         <source>Border</source>
-        <translation type="unfinished"></translation>
+        <translation>Bordo</translation>
     </message>
     <message>
         <source>Invert Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Inverti colore</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ModifyCanvasWidget</name>
     <message>
         <source>Restricted</source>
-        <translation type="unfinished"></translation>
+        <translation>Limitato</translation>
     </message>
     <message>
         <source>When enabled enforces the canvas
 to include the background image.</source>
-        <translation type="unfinished"></translation>
+        <translation>Quando abilitato impone la tela
+per includere l'immagine di sfondo.</translation>
     </message>
     <message>
         <source>X:</source>
-        <translation type="unfinished">X:</translation>
+        <translation>X:</translation>
     </message>
     <message>
         <source>Y:</source>
-        <translation type="unfinished">Y:</translation>
+        <translation>Y:</translation>
     </message>
     <message>
         <source>W:</source>
-        <translation type="unfinished">L:</translation>
+        <translation>L:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation type="unfinished">A:</translation>
+        <translation>A:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Applica</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annulla</translation>
+        <translation>Annulla</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation type="unfinished"></translation>
+        <translation>Colore:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Colore di sfondo della tela</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::RotateDialog</name>
     <message>
         <source>Rotate Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Ruota immagine</translation>
     </message>
     <message>
         <source>180°</source>
-        <translation type="unfinished"></translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>90° in senso orario</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>90° in senso antiorario</translation>
     </message>
     <message>
         <source>Arbitrary</source>
-        <translation type="unfinished"></translation>
+        <translation>Arbitrario</translation>
     </message>
     <message>
         <source>Positive values rotate clockwise, negative values counter clockwise.
 Rotating by non 90° multipliers might introduce loss of quality.</source>
-        <translation type="unfinished"></translation>
+        <translation>I valori positivi ruotano in senso orario, i valori negativi in senso antiorario.
+La rotazione di moltiplicatori diversi da 90° potrebbe introdurre una perdita di qualità.</translation>
     </message>
     <message>
         <source>Horizontal</source>
-        <translation type="unfinished"></translation>
+        <translation>Orizzontale</translation>
     </message>
     <message>
         <source>Vertical</source>
-        <translation type="unfinished"></translation>
+        <translation>Verticale</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Annulla</translation>
+        <translation>Annulla</translation>
     </message>
     <message>
         <source>Rotate</source>
-        <translation type="unfinished"></translation>
+        <translation>Ruotare</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished"></translation>
+        <translation>Capovolgere</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ScaleDialog</name>
     <message>
         <source>Scale Image</source>
-        <translation type="unfinished"></translation>
+        <translation>Scala immagine</translation>
     </message>
     <message>
         <source>Keep Aspect Ratio</source>
-        <translation type="unfinished"></translation>
+        <translation>Mantenere proporzioni</translation>
     </message>
     <message>
         <source>Width:</source>
@@ -357,7 +359,7 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     <name>kImageAnnotator::StickerPicker</name>
     <message>
         <source>Sticker</source>
-        <translation type="unfinished"></translation>
+        <translation>Adesivo</translation>
     </message>
 </context>
 <context>
@@ -376,15 +378,15 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Marker Rectangle</source>
-        <translation type="unfinished"></translation>
+        <translation>Marcatore rettangolo</translation>
     </message>
     <message>
         <source>Marker Ellipse</source>
-        <translation type="unfinished"></translation>
+        <translation>Marcatore ellisse</translation>
     </message>
     <message>
         <source>Marker Pen</source>
-        <translation type="unfinished"></translation>
+        <translation>Marcatore penna</translation>
     </message>
     <message>
         <source>Text</source>
@@ -420,42 +422,42 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Sticker</source>
-        <translation type="unfinished"></translation>
+        <translation>Adesivo</translation>
     </message>
     <message>
         <source>Pixelate</source>
-        <translation type="unfinished"></translation>
+        <translation>Pixellato</translation>
     </message>
     <message>
         <source>Text Pointer</source>
-        <translation type="unfinished"></translation>
+        <translation>Puntatore testo</translation>
     </message>
     <message>
         <source>Text Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Freccia testo</translation>
     </message>
     <message>
         <source>Number Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>Numero freccia</translation>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation type="unfinished"></translation>
+        <translation>Duplicare</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ingrandisci (%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Rimpicciolisci (%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Reimposta zoom (%1)</translation>
     </message>
 </context>
 </TS>
diff --git a/translations/kImageAnnotator_pt.ts b/translations/kImageAnnotator_pt.ts
index 1d9fe52..e7518cc 100644
--- a/translations/kImageAnnotator_pt.ts
+++ b/translations/kImageAnnotator_pt.ts
@@ -154,7 +154,7 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished">Aplicar</translation>
+        <translation>Aplicar</translation>
     </message>
 </context>
 <context>
diff --git a/translations/kImageAnnotator_pt.ts b/translations/kImageAnnotator_ro.ts
similarity index 62%
copy from translations/kImageAnnotator_pt.ts
copy to translations/kImageAnnotator_ro.ts
index 1d9fe52..c03d4fb 100644
--- a/translations/kImageAnnotator_pt.ts
+++ b/translations/kImageAnnotator_ro.ts
@@ -1,140 +1,140 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.1" language="pt_BR">
+<TS version="2.1" language="ro">
 <context>
     <name>kImageAnnotator::AnnotationContextMenu</name>
     <message>
         <source>Arrange</source>
-        <translation>Organizar</translation>
+        <translation>Aranjează</translation>
     </message>
     <message>
         <source>Bring to Front</source>
-        <translation>Trazer para frente</translation>
+        <translation>Adu în față</translation>
     </message>
     <message>
         <source>Bring Forward</source>
-        <translation>Avançar um nível</translation>
+        <translation>Adu mai în față</translation>
     </message>
     <message>
         <source>Send Backward</source>
-        <translation>Recuar um nível</translation>
+        <translation>Trimite mai în spate</translation>
     </message>
     <message>
         <source>Send to Back</source>
-        <translation>Enviar para trás</translation>
+        <translation>Trimite în spate</translation>
     </message>
     <message>
         <source>Select This</source>
-        <translation>Selecione isto</translation>
+        <translation>Alege acesta</translation>
     </message>
     <message>
         <source>Copy</source>
-        <translation>Copiar</translation>
+        <translation>Copiază</translation>
     </message>
     <message>
         <source>Paste</source>
-        <translation>Colar</translation>
+        <translation>Lipește</translation>
     </message>
     <message>
         <source>Edit</source>
-        <translation>Editar</translation>
+        <translation>Modifică</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation>Apagar</translation>
+        <translation>Șterge</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation>Configurações Gerais</translation>
+        <translation>Configurări generale</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation>Configurações de imagem</translation>
+        <translation>Configurări imagine</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation>Cor</translation>
+        <translation>Culoare</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation>Cor do texto</translation>
+        <translation>Culoare text</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation>Tamanho / Espessura da Ferramenta atual</translation>
+        <translation>Lățime</translation>
     </message>
     <message>
         <source>Number Seed</source>
-        <translation>Número</translation>
+        <translation>Sămânță numerică</translation>
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation>Fator de Obfuscação</translation>
+        <translation>Factor de eclipsare</translation>
     </message>
     <message>
         <source>Item Shadow</source>
-        <translation>Sombra do Item</translation>
+        <translation>Umbră element</translation>
     </message>
     <message>
         <source>Item Settings</source>
-        <translation>Configurações do item</translation>
+        <translation>Configurări element</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationTabContextMenu</name>
     <message>
         <source>Close</source>
-        <translation>Fechar aba</translation>
+        <translation>Închide</translation>
     </message>
     <message>
         <source>Close Other</source>
-        <translation>Fechar outras abas</translation>
+        <translation>Închide celelalte</translation>
     </message>
     <message>
         <source>Close All</source>
-        <translation>Fechar todas as abas</translation>
+        <translation>Închide toate</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
-        <translation>Fechar abas à esquerda</translation>
+        <translation>Închide toate la stânga</translation>
     </message>
     <message>
         <source>Close All to the Right</source>
-        <translation>Fechar abas à direita</translation>
+        <translation>Închide toate la dreapta</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation>Seleção de ferramentas</translation>
+        <translation>Alegere unealtă</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation>Ativado</translation>
+        <translation>Activat</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation>Desativado</translation>
+        <translation>Dezactivat</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::CropWidget</name>
     <message>
         <source>Cancel</source>
-        <translation>Cancelar</translation>
+        <translation>Renunță</translation>
     </message>
     <message>
         <source>X:</source>
@@ -146,93 +146,93 @@
     </message>
     <message>
         <source>W:</source>
-        <translation>Largura:</translation>
+        <translation>L:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation>Altura:</translation>
+        <translation>Î:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished">Aplicar</translation>
+        <translation>Aplică</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FillModePicker</name>
     <message>
         <source>Border And Fill Visibility</source>
-        <translation>Exibição de borda e preenchimento</translation>
+        <translation>Vizibilitate contur și umplere</translation>
     </message>
     <message>
         <source>Border and Fill</source>
-        <translation>Com borda e com preenchimento</translation>
+        <translation>Contur și umplere</translation>
     </message>
     <message>
         <source>Border and No Fill</source>
-        <translation>Com borda e sem preenchimento</translation>
+        <translation>Contur fără umplere</translation>
     </message>
     <message>
         <source>No Border and No Fill</source>
-        <translation>Sem borda e sem preenchimento</translation>
+        <translation>Fără contur și fără umplere</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation>Tamanho da fonte</translation>
+        <translation>Dimensiune font</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation>Negrito</translation>
+        <translation>Aldin</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation>Itálico</translation>
+        <translation>Cursiv</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation>Sublinhado</translation>
+        <translation>Subliniat</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ImageEffectPicker</name>
     <message>
         <source>Image Effects</source>
-        <translation>Efeitos da imagem</translation>
+        <translation>Efecte imagine</translation>
     </message>
     <message>
         <source>No Effect</source>
-        <translation>Sem efeito</translation>
+        <translation>Fără efect</translation>
     </message>
     <message>
         <source>Drop Shadow</source>
-        <translation>Sombreado</translation>
+        <translation>Lasă umbră</translation>
     </message>
     <message>
         <source>Grayscale</source>
-        <translation>Escala de cinza</translation>
+        <translation>Nuanțe de gri</translation>
     </message>
     <message>
         <source>Border</source>
-        <translation>Borda</translation>
+        <translation>Contur</translation>
     </message>
     <message>
         <source>Invert Color</source>
-        <translation>Inverter cor</translation>
+        <translation>Inversează culoarea</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ModifyCanvasWidget</name>
     <message>
         <source>Restricted</source>
-        <translation>RestritO</translation>
+        <translation>Restricționat</translation>
     </message>
     <message>
         <source>When enabled enforces the canvas
 to include the background image.</source>
-        <translation>Quando ativado, impõe a tela
-para incluir a imagem de fundo.</translation>
+        <translation>La activare forțează canavaua
+să includă imaginea de fundal.</translation>
     </message>
     <message>
         <source>X:</source>
@@ -244,60 +244,60 @@ para incluir a imagem de fundo.</translation>
     </message>
     <message>
         <source>W:</source>
-        <translation>Largura:</translation>
+        <translation>L:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation>Altura:</translation>
+        <translation>Î:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation>Aplicar</translation>
+        <translation>Aplică</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation>Cancelar</translation>
+        <translation>Renunță</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation>Cor:</translation>
+        <translation>Culoare:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
-        <translation>Cor de fundo da tela</translation>
+        <translation>Culoare fundal canava</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::RotateDialog</name>
     <message>
         <source>Rotate Image</source>
-        <translation>Rotacionar Imagem</translation>
+        <translation>Rotește imaginea</translation>
     </message>
     <message>
         <source>180°</source>
-        <translation>180º</translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation>90° no sentido horário</translation>
+        <translation>90° în sensul acelor de ceasornic</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
-        <translation>90° no sentido anti-horário</translation>
+        <translation>90° în sens contrar acelor de ceasornic</translation>
     </message>
     <message>
         <source>Arbitrary</source>
-        <translation>Arbitrário</translation>
+        <translation>Arbitrar</translation>
     </message>
     <message>
         <source>Positive values rotate clockwise, negative values counter clockwise.
 Rotating by non 90° multipliers might introduce loss of quality.</source>
-        <translation>Os valores positivos giram no sentido horário, os valores negativos no sentido anti-horário.
-Rotacionar por multiplicadores diferentes de 90° pode causar perda de qualidade.</translation>
+        <translation>Valorile pozitive rotesc în sensul acelor de ceasornic, cele negative – în sens contrar.
+Rotirea cu non-multiplu de 90° poate introduce pierderi de calitate.</translation>
     </message>
     <message>
         <source>Horizontal</source>
-        <translation>Horizontal</translation>
+        <translation>Orizontal</translation>
     </message>
     <message>
         <source>Vertical</source>
@@ -305,46 +305,46 @@ Rotacionar por multiplicadores diferentes de 90° pode causar perda de qualidade
     </message>
     <message>
         <source>OK</source>
-        <translation>OK</translation>
+        <translation>Bine</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation>Cancelar</translation>
+        <translation>Renunță</translation>
     </message>
     <message>
         <source>Rotate</source>
-        <translation>Rotacionar</translation>
+        <translation>Rotește</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation>Girar - Inverter</translation>
+        <translation>Răstoarnă</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ScaleDialog</name>
     <message>
         <source>Scale Image</source>
-        <translation>Redimensionar imagem</translation>
+        <translation>Scalează imaginea</translation>
     </message>
     <message>
         <source>Keep Aspect Ratio</source>
-        <translation>Manter proporção</translation>
+        <translation>Păstrează raportul de aspect</translation>
     </message>
     <message>
         <source>Width:</source>
-        <translation>Largura:</translation>
+        <translation>Lățime:</translation>
     </message>
     <message>
         <source>Height:</source>
-        <translation>Altura:</translation>
+        <translation>Înălțime:</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation>OK</translation>
+        <translation>Bine</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation>Cancelar</translation>
+        <translation>Renunță</translation>
     </message>
     <message>
         <source>Pixel</source>
@@ -352,112 +352,112 @@ Rotacionar por multiplicadores diferentes de 90° pode causar perda de qualidade
     </message>
     <message>
         <source>Percent</source>
-        <translation>Percentagem</translation>
+        <translation>Procent</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::StickerPicker</name>
     <message>
         <source>Sticker</source>
-        <translation>Adesivo</translation>
+        <translation>Autocolant</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ToolPicker</name>
     <message>
         <source>Select</source>
-        <translation>Seleção</translation>
+        <translation>Alege</translation>
     </message>
     <message>
         <source>Pen</source>
-        <translation>Caneta</translation>
+        <translation>Stilou</translation>
     </message>
     <message>
         <source>Number</source>
-        <translation>Número</translation>
+        <translation>Număr</translation>
     </message>
     <message>
         <source>Marker Rectangle</source>
-        <translation>Marcador Retangular</translation>
+        <translation>Dreptunghi marcator</translation>
     </message>
     <message>
         <source>Marker Ellipse</source>
-        <translation>Marcador Elíptico</translation>
+        <translation>Elipsă marcatoare</translation>
     </message>
     <message>
         <source>Marker Pen</source>
-        <translation>Caneta Marcadora</translation>
+        <translation>Stilou marcator</translation>
     </message>
     <message>
         <source>Text</source>
-        <translation>Texto</translation>
+        <translation>Text</translation>
     </message>
     <message>
         <source>Arrow</source>
-        <translation>Seta</translation>
+        <translation>Săgeată</translation>
     </message>
     <message>
         <source>Double Arrow</source>
-        <translation>Seta Dupla</translation>
+        <translation>Săgeată dublă</translation>
     </message>
     <message>
         <source>Line</source>
-        <translation>Linha</translation>
+        <translation>Linie</translation>
     </message>
     <message>
         <source>Blur</source>
-        <translation>Ofuscar</translation>
+        <translation>Estompare</translation>
     </message>
     <message>
         <source>Rectangle</source>
-        <translation>Retângulo</translation>
+        <translation>Dreptunghi</translation>
     </message>
     <message>
         <source>Ellipse</source>
-        <translation>Elipse</translation>
+        <translation>Elipsă</translation>
     </message>
     <message>
         <source>Number Pointer</source>
-        <translation>Número com ponteiro</translation>
+        <translation>Indicator numeric</translation>
     </message>
     <message>
         <source>Sticker</source>
-        <translation>Adesivo</translation>
+        <translation>Autocolant</translation>
     </message>
     <message>
         <source>Pixelate</source>
-        <translation>Pixelar</translation>
+        <translation>Pixelează</translation>
     </message>
     <message>
         <source>Text Pointer</source>
-        <translation>Texto com ponteiro</translation>
+        <translation>Indicator textual</translation>
     </message>
     <message>
         <source>Text Arrow</source>
-        <translation>Texto com seta</translation>
+        <translation>Săgeată textuală</translation>
     </message>
     <message>
         <source>Number Arrow</source>
-        <translation>Número com seta</translation>
+        <translation>Săgeată numerică</translation>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation>Duplicar</translation>
+        <translation>Duplică</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation>Zoom + (%1)</translation>
+        <translation>Apropie (%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation>Zoom - (%1)</translation>
+        <translation>Îndepărtează (%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation>Redefinir Zoom (%1)</translation>
+        <translation>Reinițializează apropierea (%1)</translation>
     </message>
 </context>
 </TS>
diff --git a/translations/kImageAnnotator_id.ts b/translations/kImageAnnotator_si.ts
similarity index 87%
copy from translations/kImageAnnotator_id.ts
copy to translations/kImageAnnotator_si.ts
index bc5cc50..ae7f986 100644
--- a/translations/kImageAnnotator_id.ts
+++ b/translations/kImageAnnotator_si.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.1" language="id_ID">
+<TS version="2.1" language="si">
 <context>
     <name>kImageAnnotator::AnnotationContextMenu</name>
     <message>
@@ -29,15 +29,15 @@
     </message>
     <message>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>පිටපත්</translation>
     </message>
     <message>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>අලවන්න</translation>
     </message>
     <message>
         <source>Edit</source>
-        <translation type="unfinished"></translation>
+        <translation>සංස්කරණය</translation>
     </message>
     <message>
         <source>Delete</source>
@@ -62,7 +62,7 @@
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished"></translation>
+        <translation>වර්ණය</translation>
     </message>
     <message>
         <source>Text Color</source>
@@ -70,7 +70,7 @@
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished"></translation>
+        <translation>පළල</translation>
     </message>
     <message>
         <source>Number Seed</source>
@@ -93,15 +93,15 @@
     <name>kImageAnnotator::AnnotationTabContextMenu</name>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>වසන්න</translation>
     </message>
     <message>
         <source>Close Other</source>
-        <translation type="unfinished"></translation>
+        <translation>අනෙක්වා වසන්න</translation>
     </message>
     <message>
         <source>Close All</source>
-        <translation type="unfinished"></translation>
+        <translation>සියල්ල වසන්න</translation>
     </message>
     <message>
         <source>Close All to the Left</source>
@@ -116,25 +116,25 @@
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>මෙවලම් තේරීම</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>සබල කර ඇත</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>අබල කර ඇත</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::CropWidget</name>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>අවලංගු</translation>
     </message>
     <message>
         <source>X:</source>
@@ -154,7 +154,7 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>යොදන්න</translation>
     </message>
 </context>
 <context>
@@ -251,15 +251,15 @@ to include the background image.</source>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>යොදන්න</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>අවලංගු</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation type="unfinished"></translation>
+        <translation>වර්ණය:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
@@ -274,7 +274,7 @@ to include the background image.</source>
     </message>
     <message>
         <source>180°</source>
-        <translation type="unfinished"></translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
@@ -303,11 +303,11 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished"></translation>
+        <translation>හරි</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>අවලංගු</translation>
     </message>
     <message>
         <source>Rotate</source>
@@ -330,19 +330,19 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Width:</source>
-        <translation type="unfinished"></translation>
+        <translation>පළල:</translation>
     </message>
     <message>
         <source>Height:</source>
-        <translation type="unfinished"></translation>
+        <translation>උස:</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished"></translation>
+        <translation>හරි</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>අවලංගු</translation>
     </message>
     <message>
         <source>Pixel</source>
@@ -364,7 +364,7 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     <name>kImageAnnotator::ToolPicker</name>
     <message>
         <source>Select</source>
-        <translation type="unfinished"></translation>
+        <translation>තෝරන්න</translation>
     </message>
     <message>
         <source>Pen</source>
@@ -372,7 +372,7 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Number</source>
-        <translation type="unfinished"></translation>
+        <translation>අංකය</translation>
     </message>
     <message>
         <source>Marker Rectangle</source>
@@ -392,11 +392,11 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>ඊතලය</translation>
     </message>
     <message>
         <source>Double Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>ද්විත්ව ඊතලය</translation>
     </message>
     <message>
         <source>Line</source>
@@ -436,22 +436,22 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Number Arrow</source>
-        <translation type="unfinished"></translation>
+        <translation>අංක ඊතලය</translation>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation type="unfinished"></translation>
+        <translation>අනුපිටපත</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>විශාලනය (% 1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>කුඩාලනය (% 1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
diff --git a/translations/kImageAnnotator_zh_CN.ts b/translations/kImageAnnotator_zh_CN.ts
index 9054ff9..668c514 100644
--- a/translations/kImageAnnotator_zh_CN.ts
+++ b/translations/kImageAnnotator_zh_CN.ts
@@ -48,45 +48,45 @@
     <name>kImageAnnotator::AnnotationGeneralSettings</name>
     <message>
         <source>General Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>通用设置</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationImageSettings</name>
     <message>
         <source>Image Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>图像设置</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::AnnotationItemSettings</name>
     <message>
         <source>Color</source>
-        <translation type="unfinished">颜色</translation>
+        <translation>颜色</translation>
     </message>
     <message>
         <source>Text Color</source>
-        <translation type="unfinished">文本颜色</translation>
+        <translation>文本颜色</translation>
     </message>
     <message>
         <source>Width</source>
-        <translation type="unfinished">宽度</translation>
+        <translation>宽度</translation>
     </message>
     <message>
         <source>Number Seed</source>
-        <translation type="unfinished"></translation>
+        <translation>当前数字</translation>
     </message>
     <message>
         <source>Obfuscation Factor</source>
-        <translation type="unfinished">模糊系数</translation>
+        <translation>模糊系数</translation>
     </message>
     <message>
         <source>Item Shadow</source>
-        <translation type="unfinished"></translation>
+        <translation>项影</translation>
     </message>
     <message>
         <source>Item Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>元素设置</translation>
     </message>
 </context>
 <context>
@@ -116,18 +116,18 @@
     <name>kImageAnnotator::AnnotationToolSelection</name>
     <message>
         <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
+        <translation>工具选择</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::BoolPicker</name>
     <message>
         <source>Enabled</source>
-        <translation type="unfinished"></translation>
+        <translation>开启</translation>
     </message>
     <message>
         <source>Disabled</source>
-        <translation type="unfinished"></translation>
+        <translation>关闭</translation>
     </message>
 </context>
 <context>
@@ -154,7 +154,7 @@
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>应用</translation>
     </message>
 </context>
 <context>
@@ -180,19 +180,19 @@
     <name>kImageAnnotator::FontPicker</name>
     <message>
         <source>Font Size</source>
-        <translation type="unfinished">字体大小</translation>
+        <translation>字体大小</translation>
     </message>
     <message>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>粗体</translation>
     </message>
     <message>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>斜体</translation>
     </message>
     <message>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>下划线</translation>
     </message>
 </context>
 <context>
@@ -219,7 +219,7 @@
     </message>
     <message>
         <source>Invert Color</source>
-        <translation type="unfinished"></translation>
+        <translation>反转色</translation>
     </message>
 </context>
 <context>
@@ -235,54 +235,54 @@ to include the background image.</source>
     </message>
     <message>
         <source>X:</source>
-        <translation type="unfinished">X:</translation>
+        <translation>X:</translation>
     </message>
     <message>
         <source>Y:</source>
-        <translation type="unfinished">Y:</translation>
+        <translation>Y:</translation>
     </message>
     <message>
         <source>W:</source>
-        <translation type="unfinished">宽度:</translation>
+        <translation>宽度:</translation>
     </message>
     <message>
         <source>H:</source>
-        <translation type="unfinished">高度:</translation>
+        <translation>高度:</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>应用</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">取消</translation>
+        <translation>取消</translation>
     </message>
     <message>
         <source>Color:</source>
-        <translation type="unfinished"></translation>
+        <translation>颜色:</translation>
     </message>
     <message>
         <source>Canvas Background Color</source>
-        <translation type="unfinished"></translation>
+        <translation>画布背景色</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::RotateDialog</name>
     <message>
         <source>Rotate Image</source>
-        <translation type="unfinished"></translation>
+        <translation>旋转图片</translation>
     </message>
     <message>
         <source>180°</source>
-        <translation type="unfinished"></translation>
+        <translation>180°</translation>
     </message>
     <message>
         <source>90° Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>顺时针旋转90°</translation>
     </message>
     <message>
         <source>90° Counter Clockwise</source>
-        <translation type="unfinished"></translation>
+        <translation>逆时针旋转90°</translation>
     </message>
     <message>
         <source>Arbitrary</source>
@@ -295,27 +295,27 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Horizontal</source>
-        <translation type="unfinished"></translation>
+        <translation>水平</translation>
     </message>
     <message>
         <source>Vertical</source>
-        <translation type="unfinished"></translation>
+        <translation>垂直</translation>
     </message>
     <message>
         <source>OK</source>
-        <translation type="unfinished">确定</translation>
+        <translation>确定</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">取消</translation>
+        <translation>取消</translation>
     </message>
     <message>
         <source>Rotate</source>
-        <translation type="unfinished"></translation>
+        <translation>旋转</translation>
     </message>
     <message>
         <source>Flip</source>
-        <translation type="unfinished"></translation>
+        <translation>反转</translation>
     </message>
 </context>
 <context>
@@ -440,22 +440,22 @@ Rotating by non 90° multipliers might introduce loss of quality.</source>
     </message>
     <message>
         <source>Duplicate</source>
-        <translation type="unfinished"></translation>
+        <translation>复制</translation>
     </message>
 </context>
 <context>
     <name>kImageAnnotator::ZoomPicker</name>
     <message>
         <source>Zoom In (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>放大(%1)</translation>
     </message>
     <message>
         <source>Zoom Out (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>缩小(%1)</translation>
     </message>
     <message>
         <source>Reset Zoom (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>重置大小(%1)</translation>
     </message>
 </context>
 </TS>



More information about the Neon-commits mailing list