Capture GUI refactor (#1939)

* Merge CTB::ButtonType into CaptureTool::Type

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Remove configshortcuts.cpp which I forgot to do earlier

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Add activeButtonTool & activeButtonToolType in CaptureWidget

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Rename slots in CaptureTool for better mnemonics

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Fix move tool bug

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Refactor ShortcutsWidget::initButtons

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move code from CaptureWidget to SelectionWidget: part 1

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move code from CaptureWidget to SelectionWidget: part 2

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move code from CaptureWidget to SelectionWidget: part 3

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move code from CaptureWidget to SelectionWidget: part 4

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Add SelectionWidget::updateCursor

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move code from CaptureWidget to SelectionWidget: part 5

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Refactor mouse events in CaptureWidget

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Overlay message update

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Replace connect/disconnect with blockSignals

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* updateIcon on button animation finished

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Remove CaptureWidget::selectAll

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Move moveLeft and similar to SelectionWidget

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Mark update calls for removal

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Specialize CaptureWidget update to affected rects

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Tune update of tool objects

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Remove redundant CaptureTool requests

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Improve performance of update in CaptureWidget

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Fix failing builds

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Fix failing builds again

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Fix undo/redo update

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Undo/redo update workaround

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Extend capture tool update rects

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Fix circle count tool update bug

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Add 'Left Double-Click' tooltip to copy button

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>

* Improve ColorPicker performance

Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>
This commit is contained in:
Haris Gušić
2021-10-08 18:04:06 +02:00
committed by GitHub
parent 9cdb8f9fb1
commit fef7787011
76 changed files with 1142 additions and 1159 deletions

View File

@@ -16,14 +16,14 @@
// Button represents a single button of the capture widget, it can enable
// multiple functionality.
CaptureToolButton::CaptureToolButton(const ButtonType t, QWidget* parent)
CaptureToolButton::CaptureToolButton(const CaptureTool::Type t, QWidget* parent)
: CaptureButton(parent)
, m_buttonType(t)
, m_tool(nullptr)
, m_emergeAnimation(nullptr)
{
initButton();
if (t == TYPE_SELECTIONINDICATOR) {
if (t == CaptureTool::TYPE_SELECTIONINDICATOR) {
QFont f = this->font();
setFont(QFont(f.family(), 7, QFont::Bold));
} else {
@@ -62,8 +62,11 @@ void CaptureToolButton::initButton()
QString tooltip = m_tool->description();
QString shortcut =
ConfigHandler().shortcut(QVariant::fromValue(m_buttonType).toString());
if (!shortcut.isEmpty()) {
tooltip += QString(" (%1)").arg(shortcut);
if (m_buttonType == CaptureTool::TYPE_COPY) {
tooltip += QStringLiteral(" (%1Left Double-Click)")
.arg(shortcut.isEmpty() ? QString() : shortcut + " or ");
} else if (!shortcut.isEmpty()) {
tooltip += QStringLiteral(" (%1)").arg(shortcut);
}
setToolTip(tooltip);
@@ -81,7 +84,7 @@ void CaptureToolButton::updateIcon()
setIconSize(size() * 0.6);
}
QList<CaptureToolButton::ButtonType> CaptureToolButton::getIterableButtonTypes()
const QList<CaptureTool::Type>& CaptureToolButton::getIterableButtonTypes()
{
return iterableButtonTypes;
}
@@ -105,8 +108,10 @@ void CaptureToolButton::animatedShow()
if (!isVisible()) {
show();
m_emergeAnimation->start();
connect(
m_emergeAnimation, &QPropertyAnimation::finished, this, []() {});
connect(m_emergeAnimation,
&QPropertyAnimation::finished,
this,
[this]() { updateIcon(); });
}
}
@@ -124,68 +129,60 @@ void CaptureToolButton::setColor(const QColor& c)
QColor CaptureToolButton::m_mainColor;
static std::map<CaptureToolButton::ButtonType, int> buttonTypeOrder
static std::map<CaptureTool::Type, int> buttonTypeOrder
{
{ CaptureToolButton::TYPE_PENCIL, 0 },
{ CaptureToolButton::TYPE_DRAWER, 1 },
{ CaptureToolButton::TYPE_ARROW, 2 },
{ CaptureToolButton::TYPE_SELECTION, 3 },
{ CaptureToolButton::TYPE_RECTANGLE, 4 },
{ CaptureToolButton::TYPE_CIRCLE, 5 },
{ CaptureToolButton::TYPE_MARKER, 6 },
{ CaptureToolButton::TYPE_TEXT, 7 },
{ CaptureToolButton::TYPE_PIXELATE, 8 },
{ CaptureToolButton::TYPE_INVERT, 9 },
{ CaptureToolButton::TYPE_CIRCLECOUNT, 10 },
{ CaptureToolButton::TYPE_SELECTIONINDICATOR, 11 },
{ CaptureToolButton::TYPE_MOVESELECTION, 12 },
{ CaptureToolButton::TYPE_UNDO, 13 },
{ CaptureToolButton::TYPE_REDO, 14 },
{ CaptureToolButton::TYPE_COPY, 15 },
{ CaptureToolButton::TYPE_SAVE, 16 },
{ CaptureToolButton::TYPE_IMAGEUPLOADER, 17 },
{ CaptureTool::TYPE_PENCIL, 0 }, { CaptureTool::TYPE_DRAWER, 1 },
{ CaptureTool::TYPE_ARROW, 2 }, { CaptureTool::TYPE_SELECTION, 3 },
{ CaptureTool::TYPE_RECTANGLE, 4 }, { CaptureTool::TYPE_CIRCLE, 5 },
{ CaptureTool::TYPE_MARKER, 6 }, { CaptureTool::TYPE_TEXT, 7 },
{ CaptureTool::TYPE_PIXELATE, 8 }, { CaptureTool::TYPE_INVERT, 9 },
{ CaptureTool::TYPE_CIRCLECOUNT, 10 },
{ CaptureTool::TYPE_SELECTIONINDICATOR, 11 },
{ CaptureTool::TYPE_MOVESELECTION, 12 }, { CaptureTool::TYPE_UNDO, 13 },
{ CaptureTool::TYPE_REDO, 14 }, { CaptureTool::TYPE_COPY, 15 },
{ CaptureTool::TYPE_SAVE, 16 }, { CaptureTool::TYPE_IMAGEUPLOADER, 17 },
#if !defined(Q_OS_MACOS)
{ CaptureToolButton::TYPE_OPEN_APP, 18 },
{ CaptureToolButton::TYPE_EXIT, 19 }, { CaptureToolButton::TYPE_PIN, 20 },
{ CaptureTool::TYPE_OPEN_APP, 18 }, { CaptureTool::TYPE_EXIT, 19 },
{ CaptureTool::TYPE_PIN, 20 },
#else
{ CaptureToolButton::TYPE_EXIT, 18 }, { CaptureToolButton::TYPE_PIN, 19 },
{ CaptureTool::TYPE_EXIT, 18 }, { CaptureTool::TYPE_PIN, 19 },
#endif
{ CaptureToolButton::TYPE_SIZEINCREASE, 21 },
{ CaptureToolButton::TYPE_SIZEDECREASE, 22 },
{ CaptureTool::TYPE_SIZEINCREASE, 21 },
{ CaptureTool::TYPE_SIZEDECREASE, 22 },
};
int CaptureToolButton::getPriorityByButton(CaptureToolButton::ButtonType b)
int CaptureToolButton::getPriorityByButton(CaptureTool::Type b)
{
auto it = buttonTypeOrder.find(b);
return it == buttonTypeOrder.cend() ? (int)buttonTypeOrder.size()
: it->second;
}
QList<CaptureToolButton::ButtonType> CaptureToolButton::iterableButtonTypes = {
CaptureToolButton::TYPE_PENCIL,
CaptureToolButton::TYPE_DRAWER,
CaptureToolButton::TYPE_ARROW,
CaptureToolButton::TYPE_SELECTION,
CaptureToolButton::TYPE_RECTANGLE,
CaptureToolButton::TYPE_CIRCLE,
CaptureToolButton::TYPE_MARKER,
CaptureToolButton::TYPE_TEXT,
CaptureToolButton::TYPE_PIXELATE,
CaptureToolButton::TYPE_INVERT,
CaptureToolButton::TYPE_SELECTIONINDICATOR,
CaptureToolButton::TYPE_MOVESELECTION,
CaptureToolButton::TYPE_UNDO,
CaptureToolButton::TYPE_REDO,
CaptureToolButton::TYPE_COPY,
CaptureToolButton::TYPE_SAVE,
CaptureToolButton::TYPE_EXIT,
CaptureToolButton::TYPE_IMAGEUPLOADER,
QList<CaptureTool::Type> CaptureToolButton::iterableButtonTypes = {
CaptureTool::TYPE_PENCIL,
CaptureTool::TYPE_DRAWER,
CaptureTool::TYPE_ARROW,
CaptureTool::TYPE_SELECTION,
CaptureTool::TYPE_RECTANGLE,
CaptureTool::TYPE_CIRCLE,
CaptureTool::TYPE_MARKER,
CaptureTool::TYPE_TEXT,
CaptureTool::TYPE_PIXELATE,
CaptureTool::TYPE_INVERT,
CaptureTool::TYPE_SELECTIONINDICATOR,
CaptureTool::TYPE_MOVESELECTION,
CaptureTool::TYPE_UNDO,
CaptureTool::TYPE_REDO,
CaptureTool::TYPE_COPY,
CaptureTool::TYPE_SAVE,
CaptureTool::TYPE_EXIT,
CaptureTool::TYPE_IMAGEUPLOADER,
#if !defined(Q_OS_MACOS)
CaptureToolButton::TYPE_OPEN_APP,
CaptureTool::TYPE_OPEN_APP,
#endif
CaptureToolButton::TYPE_PIN,
CaptureToolButton::TYPE_CIRCLECOUNT,
CaptureToolButton::TYPE_SIZEINCREASE,
CaptureToolButton::TYPE_SIZEDECREASE,
CaptureTool::TYPE_PIN,
CaptureTool::TYPE_CIRCLECOUNT,
CaptureTool::TYPE_SIZEINCREASE,
CaptureTool::TYPE_SIZEDECREASE,
};