diff --git a/data/graphics.qrc b/data/graphics.qrc
index 10d7007c..4cc272b4 100644
--- a/data/graphics.qrc
+++ b/data/graphics.qrc
@@ -5,80 +5,86 @@
img/app/org.flameshot.Flameshot.png
img/app/flameshot.png
img/app/keyboard.svg
- img/material/black/delete.svg
- img/material/black/undo-variant.svg
- img/material/black/text.svg
- img/material/black/square.svg
- img/material/black/square-outline.svg
- img/material/black/size_indicator.svg
- img/material/black/redo-variant.svg
- img/material/black/pin.svg
- img/material/black/pencil.svg
- img/material/black/open_with.svg
- img/material/black/name_edition.svg
- img/material/black/mouse.svg
- img/material/black/mouse-off.svg
- img/material/black/marker.svg
- img/material/black/line.svg
- img/material/black/graphics.svg
- img/material/black/format-text.svg
- img/material/black/format_underlined.svg
- img/material/black/format_strikethrough.svg
- img/material/black/format_italic.svg
- img/material/black/format_bold.svg
- img/material/black/exit-to-app.svg
- img/material/black/cursor-move.svg
- img/material/black/content-save.svg
- img/material/black/content-copy.svg
- img/material/black/config.svg
- img/material/black/colorize.svg
- img/material/black/cloud-upload.svg
- img/material/black/close.svg
- img/material/black/circle-outline.svg
- img/material/black/pixelate.svg
img/material/black/arrow-bottom-left.svg
- img/material/white/undo-variant.svg
- img/material/white/text.svg
- img/material/white/square.svg
- img/material/white/square-outline.svg
- img/material/white/size_indicator.svg
- img/material/white/redo-variant.svg
- img/material/white/pin.svg
- img/material/white/pencil.svg
- img/material/white/open_with.svg
- img/material/white/name_edition.svg
- img/material/white/mouse.svg
- img/material/white/mouse-off.svg
- img/material/white/marker.svg
- img/material/white/line.svg
- img/material/white/graphics.svg
- img/material/white/format-text.svg
- img/material/white/format_underlined.svg
- img/material/white/format_strikethrough.svg
- img/material/white/format_italic.svg
- img/material/white/format_bold.svg
- img/material/white/exit-to-app.svg
- img/material/white/cursor-move.svg
- img/material/white/content-save.svg
- img/material/white/content-copy.svg
- img/material/white/config.svg
- img/material/white/colorize.svg
- img/material/white/cloud-upload.svg
- img/material/white/close.svg
- img/material/white/circle-outline.svg
- img/material/white/pixelate.svg
- img/material/white/arrow-bottom-left.svg
+ img/material/black/centeralign.svg
+ img/material/black/circle-outline.svg
+ img/material/black/close.svg
+ img/material/black/cloud-upload.svg
+ img/material/black/colorize.svg
+ img/material/black/config.svg
+ img/material/black/content-copy.svg
+ img/material/black/content-save.svg
+ img/material/black/cursor-move.svg
+ img/material/black/delete.svg
+ img/material/black/exit-to-app.svg
+ img/material/black/format-text.svg
+ img/material/black/format_bold.svg
+ img/material/black/format_italic.svg
+ img/material/black/format_strikethrough.svg
+ img/material/black/format_underlined.svg
+ img/material/black/graphics.svg
+ img/material/black/leftalign.svg
+ img/material/black/line.svg
+ img/material/black/marker.svg
+ img/material/black/mouse-off.svg
+ img/material/black/mouse.svg
+ img/material/black/name_edition.svg
+ img/material/black/open_with.svg
+ img/material/black/pencil.svg
+ img/material/black/pin.svg
+ img/material/black/pixelate.svg
+ img/material/black/redo-variant.svg
+ img/material/black/rightalign.svg
+ img/material/black/size_indicator.svg
+ img/material/black/square-outline.svg
+ img/material/black/square.svg
+ img/material/black/text.svg
+ img/material/black/undo-variant.svg
img/material/black/circlecount-outline.svg
- img/material/white/circlecount-outline.svg
- img/material/black/shortcut.svg
- img/material/white/shortcut.svg
img/material/black/filepath.svg
- img/material/white/filepath.svg
- img/material/black/plus.svg
- img/material/white/plus.svg
- img/material/black/minus.svg
- img/material/white/minus.svg
img/material/black/invert.svg
+ img/material/black/minus.svg
+ img/material/black/plus.svg
+ img/material/black/shortcut.svg
+ img/material/white/arrow-bottom-left.svg
+ img/material/white/centeralign.svg
+ img/material/white/circle-outline.svg
+ img/material/white/circlecount-outline.svg
+ img/material/white/close.svg
+ img/material/white/cloud-upload.svg
+ img/material/white/colorize.svg
+ img/material/white/config.svg
+ img/material/white/content-copy.svg
+ img/material/white/content-save.svg
+ img/material/white/cursor-move.svg
+ img/material/white/exit-to-app.svg
+ img/material/white/filepath.svg
+ img/material/white/format-text.svg
+ img/material/white/format_bold.svg
+ img/material/white/format_italic.svg
+ img/material/white/format_strikethrough.svg
+ img/material/white/format_underlined.svg
+ img/material/white/graphics.svg
img/material/white/invert.svg
+ img/material/white/leftalign.svg
+ img/material/white/line.svg
+ img/material/white/marker.svg
+ img/material/white/minus.svg
+ img/material/white/mouse-off.svg
+ img/material/white/mouse.svg
+ img/material/white/name_edition.svg
+ img/material/white/open_with.svg
+ img/material/white/pencil.svg
+ img/material/white/pin.svg
+ img/material/white/pixelate.svg
+ img/material/white/plus.svg
+ img/material/white/redo-variant.svg
+ img/material/white/rightalign.svg
+ img/material/white/shortcut.svg
+ img/material/white/size_indicator.svg
+ img/material/white/square-outline.svg
+ img/material/white/square.svg
+ img/material/white/text.svg
+ img/material/white/undo-variant.svg
diff --git a/data/img/material/black/centeralign.svg b/data/img/material/black/centeralign.svg
new file mode 100644
index 00000000..c7c798e0
--- /dev/null
+++ b/data/img/material/black/centeralign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/data/img/material/black/leftalign.svg b/data/img/material/black/leftalign.svg
new file mode 100644
index 00000000..4dc2d506
--- /dev/null
+++ b/data/img/material/black/leftalign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/data/img/material/black/rightalign.svg b/data/img/material/black/rightalign.svg
new file mode 100644
index 00000000..89eb93a4
--- /dev/null
+++ b/data/img/material/black/rightalign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/data/img/material/white/centeralign.svg b/data/img/material/white/centeralign.svg
new file mode 100644
index 00000000..2ae020e0
--- /dev/null
+++ b/data/img/material/white/centeralign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/data/img/material/white/leftalign.svg b/data/img/material/white/leftalign.svg
new file mode 100644
index 00000000..10724500
--- /dev/null
+++ b/data/img/material/white/leftalign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/data/img/material/white/rightalign.svg b/data/img/material/white/rightalign.svg
new file mode 100644
index 00000000..df2a3e79
--- /dev/null
+++ b/data/img/material/white/rightalign.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/src/tools/text/textconfig.cpp b/src/tools/text/textconfig.cpp
index fc7e4525..dfbd0990 100644
--- a/src/tools/text/textconfig.cpp
+++ b/src/tools/text/textconfig.cpp
@@ -18,6 +18,9 @@ TextConfig::TextConfig(QWidget* parent)
, m_underlineButton(nullptr)
, m_weightButton(nullptr)
, m_italicButton(nullptr)
+ , m_leftAlignButton(nullptr)
+ , m_centerAlignButton(nullptr)
+ , m_rightAlignButton(nullptr)
{
m_layout = new QVBoxLayout(this);
@@ -71,12 +74,42 @@ TextConfig::TextConfig(QWidget* parent)
m_italicButton->setToolTip(tr("Italic"));
QHBoxLayout* modifiersLayout = new QHBoxLayout();
+ m_leftAlignButton =
+ new QPushButton(QIcon(iconPrefix + "leftalign.svg"), QLatin1String(""));
+ m_leftAlignButton->setCheckable(true);
+ connect(m_leftAlignButton, &QPushButton::clicked, this, [this] {
+ alignmentChanged(Qt::AlignLeft);
+ });
+ m_leftAlignButton->setToolTip(tr("Left Align"));
+
+ m_centerAlignButton =
+ new QPushButton(QIcon(iconPrefix + "centeralign.svg"), QLatin1String(""));
+ m_centerAlignButton->setCheckable(true);
+ connect(m_centerAlignButton, &QPushButton::clicked, this, [this] {
+ alignmentChanged(Qt::AlignCenter);
+ });
+ m_centerAlignButton->setToolTip(tr("Center Align"));
+
+ m_rightAlignButton =
+ new QPushButton(QIcon(iconPrefix + "rightalign.svg"), QLatin1String(""));
+ m_rightAlignButton->setCheckable(true);
+ connect(m_rightAlignButton, &QPushButton::clicked, this, [this] {
+ alignmentChanged(Qt::AlignRight);
+ });
+ m_rightAlignButton->setToolTip(tr("Right Align"));
+
+ QHBoxLayout* alignmentLayout = new QHBoxLayout();
+ alignmentLayout->addWidget(m_leftAlignButton);
+ alignmentLayout->addWidget(m_centerAlignButton);
+ alignmentLayout->addWidget(m_rightAlignButton);
+
m_layout->addWidget(m_fontsCB);
modifiersLayout->addWidget(m_strikeOutButton);
modifiersLayout->addWidget(m_underlineButton);
modifiersLayout->addWidget(m_weightButton);
modifiersLayout->addWidget(m_italicButton);
m_layout->addLayout(modifiersLayout);
+ m_layout->addLayout(alignmentLayout);
}
void TextConfig::setFontFamily(const QString& fontFamily)
@@ -113,3 +146,28 @@ void TextConfig::weightButtonPressed(const bool w)
emit fontWeightChanged(QFont::Normal);
}
}
+
+void TextConfig::setTextAlignment(Qt::AlignmentFlag alignment)
+{
+
+ switch (alignment) {
+ case (Qt::AlignLeft):
+ m_leftAlignButton->setChecked(true);
+ m_centerAlignButton->setChecked(false);
+ m_rightAlignButton->setChecked(false);
+ break;
+
+ case (Qt::AlignCenter):
+ m_leftAlignButton->setChecked(false);
+ m_centerAlignButton->setChecked(true);
+ m_rightAlignButton->setChecked(false);
+ break;
+
+ case (Qt::AlignRight):
+ m_leftAlignButton->setChecked(false);
+ m_centerAlignButton->setChecked(false);
+ m_rightAlignButton->setChecked(true);
+ break;
+ }
+ emit alignmentChanged(alignment);
+}
diff --git a/src/tools/text/textconfig.h b/src/tools/text/textconfig.h
index 841e573e..f66a385d 100644
--- a/src/tools/text/textconfig.h
+++ b/src/tools/text/textconfig.h
@@ -20,6 +20,7 @@ public:
void setStrikeOut(const bool s);
void setWeight(const int w);
void setItalic(const bool i);
+ void setTextAlignment(Qt::AlignmentFlag alignment);
signals:
void fontFamilyChanged(const QString& f);
@@ -27,7 +28,7 @@ signals:
void fontStrikeOutChanged(const bool dashed);
void fontWeightChanged(const QFont::Weight w);
void fontItalicChanged(const bool italic);
-
+ void alignmentChanged(Qt::AlignmentFlag alignment);
public slots:
private slots:
@@ -40,4 +41,8 @@ private:
QPushButton* m_underlineButton;
QPushButton* m_weightButton;
QPushButton* m_italicButton;
+
+ QPushButton* m_leftAlignButton;
+ QPushButton* m_centerAlignButton;
+ QPushButton* m_rightAlignButton;
};
diff --git a/src/tools/text/texttool.cpp b/src/tools/text/texttool.cpp
index f87d5d74..ca45bacb 100644
--- a/src/tools/text/texttool.cpp
+++ b/src/tools/text/texttool.cpp
@@ -17,6 +17,7 @@ TextTool::TextTool(QObject* parent)
if (!fontFamily.isEmpty()) {
m_font.setFamily(ConfigHandler().fontFamily());
}
+ m_alignment = Qt::AlignRight;
}
TextTool::~TextTool()
@@ -28,6 +29,7 @@ void TextTool::copyParams(const TextTool* from, TextTool* to)
{
CaptureTool::copyParams(from, to);
to->m_font = from->m_font;
+ to->m_alignment = from->m_alignment;
to->m_text = from->m_text;
to->m_size = from->m_size;
to->m_color = from->m_color;
@@ -97,6 +99,7 @@ QWidget* TextTool::widget()
m_widget->setTextColor(m_color);
m_font.setPointSize(m_size + BASE_POINT_SIZE);
m_widget->setFont(m_font);
+ m_widget->setAlignment(m_alignment);
m_widget->setText(m_text);
m_widget->selectAll();
connect(m_widget, &TextWidget::textUpdated, this, &TextTool::updateText);
@@ -138,11 +141,16 @@ QWidget* TextTool::configurationWidget()
&TextConfig::fontWeightChanged,
this,
&TextTool::updateFontWeight);
+
+ connect(
+ m_confW, &TextConfig::alignmentChanged, this, &TextTool::updateAlignment);
+
m_confW->setFontFamily(m_font.family());
m_confW->setItalic(m_font.italic());
m_confW->setUnderline(m_font.underline());
m_confW->setStrikeOut(m_font.strikeOut());
m_confW->setWeight(m_font.weight());
+ m_confW->setTextAlignment(m_alignment);
return m_confW;
}
@@ -168,6 +176,11 @@ CaptureTool* TextTool::copy(QObject* parent)
&TextConfig::fontWeightChanged,
tt,
&TextTool::updateFontWeight);
+
+ connect(m_confW,
+ &TextConfig::alignmentChanged,
+ tt,
+ &TextTool::updateAlignment);
}
copyParams(this, tt);
return tt;
@@ -191,10 +204,15 @@ void TextTool::process(QPainter& painter, const QPixmap& pixmap)
painter.setFont(m_font);
painter.setPen(m_color);
if (!editMode()) {
- painter.drawText(m_textArea + QMargins(-val, -val, val, val), m_text);
+ painter.drawText(
+ m_textArea + QMargins(-val, -val, val, val), m_alignment, m_text);
}
painter.setFont(orig_font);
painter.setPen(orig_pen);
+
+ if (m_widget) {
+ m_widget->setAlignment(m_alignment);
+ }
}
void TextTool::drawObjectSelection(QPainter& painter)
@@ -304,6 +322,14 @@ void TextTool::move(const QPoint& pos)
m_textArea.moveTo(pos);
}
+void TextTool::updateAlignment(Qt::AlignmentFlag alignment)
+{
+ m_alignment = alignment;
+ if (m_widget) {
+ m_widget->setAlignment(m_alignment);
+ }
+}
+
const QPoint* TextTool::pos()
{
m_currentPos = m_textArea.topLeft();
diff --git a/src/tools/text/texttool.h b/src/tools/text/texttool.h
index b547d71b..272191ec 100644
--- a/src/tools/text/texttool.h
+++ b/src/tools/text/texttool.h
@@ -4,9 +4,9 @@
#pragma once
#include "src/tools/capturetool.h"
+#include "textconfig.h"
#include
#include
-
class TextWidget;
class TextConfig;
@@ -61,11 +61,13 @@ private slots:
void updateFontStrikeOut(const bool s);
void updateFontWeight(const QFont::Weight w);
void updateFontItalic(const bool italic);
+ void updateAlignment(Qt::AlignmentFlag alignment);
private:
void closeEditor();
QFont m_font;
+ Qt::AlignmentFlag m_alignment;
QString m_text;
QString m_textOld;
int m_size;
diff --git a/src/tools/text/textwidget.cpp b/src/tools/text/textwidget.cpp
index bec6d0f5..bbc6a115 100644
--- a/src/tools/text/textwidget.cpp
+++ b/src/tools/text/textwidget.cpp
@@ -39,18 +39,11 @@ void TextWidget::setFont(const QFont& f)
adjustSize();
}
-void TextWidget::updateFont(const QFont& f)
+void TextWidget::setAlignment(Qt::AlignmentFlag alignment)
{
- setFont(f);
+ QTextEdit::setAlignment(alignment);
+ adjustSize();
}
-
-void TextWidget::setFontPointSize(qreal s)
-{
- QFont f = font();
- f.setPointSize(s);
- setFont(f);
-}
-
void TextWidget::setTextColor(const QColor& c)
{
QString s(
diff --git a/src/tools/text/textwidget.h b/src/tools/text/textwidget.h
index c4b31f5a..c6d4323a 100644
--- a/src/tools/text/textwidget.h
+++ b/src/tools/text/textwidget.h
@@ -22,9 +22,8 @@ signals:
void textUpdated(const QString& s);
public slots:
- void updateFont(const QFont& f);
void setTextColor(const QColor& c);
- void setFontPointSize(qreal s);
+ void setAlignment(Qt::AlignmentFlag alignment);
private slots:
void emitTextUpdated();