diff --git a/src/config/buttonlistview.cpp b/src/config/buttonlistview.cpp index 11b6ca9411..bb134d3720 100644 --- a/src/config/buttonlistview.cpp +++ b/src/config/buttonlistview.cpp @@ -36,9 +36,9 @@ void ButtonListView::initButtonList() { ToolFactory factory; - auto listTypes = CaptureButton::getIterableButtonTypes(); + auto listTypes = CaptureToolButton::getIterableButtonTypes(); - for (const CaptureButton::ButtonType t : listTypes) { + for (const CaptureToolButton::ButtonType t : listTypes) { CaptureTool* tool = factory.CreateTool(t); // add element to the local map @@ -64,14 +64,14 @@ ButtonListView::initButtonList() void ButtonListView::updateActiveButtons(QListWidgetItem* item) { - CaptureButton::ButtonType bType = m_buttonTypeByName[item->text()]; + CaptureToolButton::ButtonType bType = m_buttonTypeByName[item->text()]; if (item->checkState() == Qt::Checked) { m_listButtons.append(bType); // TODO refactor so we don't need external sorts - using bt = CaptureButton::ButtonType; + using bt = CaptureToolButton::ButtonType; std::sort(m_listButtons.begin(), m_listButtons.end(), [](bt a, bt b) { - return CaptureButton::getPriorityByButton(a) < - CaptureButton::getPriorityByButton(b); + return CaptureToolButton::getPriorityByButton(a) < + CaptureToolButton::getPriorityByButton(b); }); } else { m_listButtons.remove(m_listButtons.indexOf(bType)); @@ -104,10 +104,10 @@ void ButtonListView::updateComponents() { m_listButtons = ConfigHandler().getButtons(); - auto listTypes = CaptureButton::getIterableButtonTypes(); + auto listTypes = CaptureToolButton::getIterableButtonTypes(); for (int i = 0; i < this->count(); ++i) { QListWidgetItem* item = this->item(i); - auto elem = static_cast(listTypes.at(i)); + auto elem = static_cast(listTypes.at(i)); if (m_listButtons.contains(elem)) { item->setCheckState(Qt::Checked); } else { diff --git a/src/config/buttonlistview.h b/src/config/buttonlistview.h index a80944df97..779957fc03 100644 --- a/src/config/buttonlistview.h +++ b/src/config/buttonlistview.h @@ -17,7 +17,7 @@ #pragma once -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include class ButtonListView : public QListWidget @@ -36,8 +36,8 @@ private slots: void initButtonList(); private: - QVector m_listButtons; - QMap m_buttonTypeByName; + QVector m_listButtons; + QMap m_buttonTypeByName; void updateActiveButtons(QListWidgetItem*); }; diff --git a/src/config/configwindow.cpp b/src/config/configwindow.cpp index a5ee86ad51..e6591f36fb 100644 --- a/src/config/configwindow.cpp +++ b/src/config/configwindow.cpp @@ -24,7 +24,7 @@ #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" #include "src/utils/pathinfo.h" -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include #include #include diff --git a/src/config/uicoloreditor.cpp b/src/config/uicoloreditor.cpp index 7c00863a83..8acb0ba126 100644 --- a/src/config/uicoloreditor.cpp +++ b/src/config/uicoloreditor.cpp @@ -121,7 +121,7 @@ UIcolorEditor::initButtons() QGroupBox* frame = new QGroupBox(); frame->setFixedSize(frameSize, frameSize); - m_buttonMainColor = new CaptureButton(m_buttonIconType, frame); + m_buttonMainColor = new CaptureToolButton(m_buttonIconType, frame); m_buttonMainColor->move(m_buttonMainColor->x() + extraSize / 2, m_buttonMainColor->y() + extraSize / 2); QHBoxLayout* h1 = new QHBoxLayout(); @@ -134,7 +134,7 @@ UIcolorEditor::initButtons() " mode of the main color.")); QGroupBox* frame2 = new QGroupBox(); - m_buttonContrast = new CaptureButton(m_buttonIconType, frame2); + m_buttonContrast = new CaptureToolButton(m_buttonIconType, frame2); m_buttonContrast->move(m_buttonContrast->x() + extraSize / 2, m_buttonContrast->y() + extraSize / 2); @@ -150,11 +150,11 @@ UIcolorEditor::initButtons() " mode of the contrast color.")); connect(m_buttonMainColor, - &CaptureButton::pressedButton, + &CaptureToolButton::pressedButton, this, &UIcolorEditor::changeLastButton); connect(m_buttonContrast, - &CaptureButton::pressedButton, + &CaptureToolButton::pressedButton, this, &UIcolorEditor::changeLastButton); // clicking the labels changes the button too @@ -169,7 +169,7 @@ UIcolorEditor::initButtons() // visual update for the selected button void -UIcolorEditor::changeLastButton(CaptureButton* b) +UIcolorEditor::changeLastButton(CaptureToolButton* b) { if (m_lastButtonPressed != b) { m_lastButtonPressed = b; diff --git a/src/config/uicoloreditor.h b/src/config/uicoloreditor.h index 5b362142fe..46e382392a 100644 --- a/src/config/uicoloreditor.h +++ b/src/config/uicoloreditor.h @@ -18,12 +18,12 @@ #pragma once #include "color_wheel.hpp" -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include class QVBoxLayout; class QHBoxLayout; -class CaptureButton; +class CaptureToolButton; class ClickableLabel; class UIcolorEditor : public QGroupBox @@ -38,19 +38,19 @@ public slots: private slots: void updateUIcolor(); void updateLocalColor(const QColor); - void changeLastButton(CaptureButton*); + void changeLastButton(CaptureToolButton*); private: QColor m_uiColor, m_contrastColor; - CaptureButton* m_buttonMainColor; + CaptureToolButton* m_buttonMainColor; ClickableLabel* m_labelMain; - CaptureButton* m_buttonContrast; + CaptureToolButton* m_buttonContrast; ClickableLabel* m_labelContrast; - CaptureButton* m_lastButtonPressed; + CaptureToolButton* m_lastButtonPressed; color_widgets::ColorWheel* m_colorWheel; - static const CaptureButton::ButtonType m_buttonIconType = - CaptureButton::TYPE_CIRCLE; + static const CaptureToolButton::ButtonType m_buttonIconType = + CaptureToolButton::TYPE_CIRCLE; QHBoxLayout* m_hLayout; QVBoxLayout* m_vLayout; diff --git a/src/core/controller.cpp b/src/core/controller.cpp index e8ec5bf62b..f04ce2a71a 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -20,7 +20,7 @@ #include "src/utils/confighandler.h" #include "src/utils/screengrabber.h" #include "src/utils/systemnotification.h" -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include "src/widgets/capture/capturewidget.h" #include "src/widgets/capturelauncher.h" #include "src/widgets/infowindow.h" diff --git a/src/tools/toolfactory.cpp b/src/tools/toolfactory.cpp index b63c56bdbf..1ee86496e1 100644 --- a/src/tools/toolfactory.cpp +++ b/src/tools/toolfactory.cpp @@ -42,68 +42,68 @@ ToolFactory::ToolFactory(QObject* parent) {} CaptureTool* -ToolFactory::CreateTool(CaptureButton::ButtonType t, QObject* parent) +ToolFactory::CreateTool(CaptureToolButton::ButtonType t, QObject* parent) { CaptureTool* tool; switch (t) { - case CaptureButton::TYPE_ARROW: + case CaptureToolButton::TYPE_ARROW: tool = new ArrowTool(parent); break; - case CaptureButton::TYPE_CIRCLE: + case CaptureToolButton::TYPE_CIRCLE: tool = new CircleTool(parent); break; - case CaptureButton::TYPE_COPY: + case CaptureToolButton::TYPE_COPY: tool = new CopyTool(parent); break; - case CaptureButton::TYPE_EXIT: + case CaptureToolButton::TYPE_EXIT: tool = new ExitTool(parent); break; - case CaptureButton::TYPE_IMAGEUPLOADER: + case CaptureToolButton::TYPE_IMAGEUPLOADER: tool = new ImgurUploaderTool(parent); break; - case CaptureButton::TYPE_DRAWER: + case CaptureToolButton::TYPE_DRAWER: tool = new LineTool(parent); break; - case CaptureButton::TYPE_MARKER: + case CaptureToolButton::TYPE_MARKER: tool = new MarkerTool(parent); break; - case CaptureButton::TYPE_MOVESELECTION: + case CaptureToolButton::TYPE_MOVESELECTION: tool = new MoveTool(parent); break; - case CaptureButton::TYPE_PENCIL: + case CaptureToolButton::TYPE_PENCIL: tool = new PencilTool(parent); break; - case CaptureButton::TYPE_RECTANGLE: + case CaptureToolButton::TYPE_RECTANGLE: tool = new RectangleTool(parent); break; - case CaptureButton::TYPE_SAVE: + case CaptureToolButton::TYPE_SAVE: tool = new SaveTool(parent); break; - case CaptureButton::TYPE_SELECTION: + case CaptureToolButton::TYPE_SELECTION: tool = new SelectionTool(parent); break; - case CaptureButton::TYPE_SELECTIONINDICATOR: + case CaptureToolButton::TYPE_SELECTIONINDICATOR: tool = new SizeIndicatorTool(parent); break; - case CaptureButton::TYPE_UNDO: + case CaptureToolButton::TYPE_UNDO: tool = new UndoTool(parent); break; - case CaptureButton::TYPE_REDO: + case CaptureToolButton::TYPE_REDO: tool = new RedoTool(parent); break; - case CaptureButton::TYPE_OPEN_APP: + case CaptureToolButton::TYPE_OPEN_APP: tool = new AppLauncher(parent); break; - case CaptureButton::TYPE_PIXELATE: + case CaptureToolButton::TYPE_PIXELATE: tool = new PixelateTool(parent); break; - case CaptureButton::TYPE_PIN: + case CaptureToolButton::TYPE_PIN: tool = new PinTool(parent); break; - case CaptureButton::TYPE_TEXT: + case CaptureToolButton::TYPE_TEXT: tool = new TextTool(parent); break; - case CaptureButton::TYPE_CIRCLECOUNT: + case CaptureToolButton::TYPE_CIRCLECOUNT: tool = new CircleCountTool(parent); break; diff --git a/src/tools/toolfactory.h b/src/tools/toolfactory.h index 6ccff1e197..84cf7244e9 100644 --- a/src/tools/toolfactory.h +++ b/src/tools/toolfactory.h @@ -18,7 +18,7 @@ #pragma once #include "src/tools/capturetool.h" -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include class CaptureTool; @@ -33,6 +33,6 @@ class ToolFactory : public QObject ToolFactory(const ToolFactory&) = delete; ToolFactory& operator=(const ToolFactory&) = delete; - CaptureTool* CreateTool(CaptureButton::ButtonType t, + CaptureTool* CreateTool(CaptureToolButton::ButtonType t, QObject* parent = nullptr); }; diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index a77efe7b59..38341e5572 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -26,10 +26,10 @@ ConfigHandler::ConfigHandler() m_settings.setDefaultFormat(QSettings::IniFormat); } -QVector +QVector ConfigHandler::getButtons() { - QVector buttons; + QVector buttons; if (m_settings.contains(QStringLiteral("buttons"))) { // TODO: remove toList in v1.0 QVector buttonsInt = m_settings.value(QStringLiteral("buttons")) @@ -43,29 +43,33 @@ ConfigHandler::getButtons() buttons = fromIntToButton(buttonsInt); } else { // Default tools - buttons << CaptureButton::TYPE_PENCIL << CaptureButton::TYPE_DRAWER - << CaptureButton::TYPE_ARROW << CaptureButton::TYPE_SELECTION - << CaptureButton::TYPE_RECTANGLE << CaptureButton::TYPE_CIRCLE - << CaptureButton::TYPE_MARKER << CaptureButton::TYPE_PIXELATE - << CaptureButton::TYPE_SELECTIONINDICATOR - << CaptureButton::TYPE_MOVESELECTION << CaptureButton::TYPE_UNDO - << CaptureButton::TYPE_REDO << CaptureButton::TYPE_COPY - << CaptureButton::TYPE_SAVE << CaptureButton::TYPE_EXIT - << CaptureButton::TYPE_IMAGEUPLOADER << CaptureButton::TYPE_OPEN_APP - << CaptureButton::TYPE_PIN << CaptureButton::TYPE_TEXT - << CaptureButton::TYPE_CIRCLECOUNT; + buttons << CaptureToolButton::TYPE_PENCIL << CaptureToolButton::TYPE_DRAWER + << CaptureToolButton::TYPE_ARROW + << CaptureToolButton::TYPE_SELECTION + << CaptureToolButton::TYPE_RECTANGLE + << CaptureToolButton::TYPE_CIRCLE << CaptureToolButton::TYPE_MARKER + << CaptureToolButton::TYPE_PIXELATE + << CaptureToolButton::TYPE_SELECTIONINDICATOR + << CaptureToolButton::TYPE_MOVESELECTION + << CaptureToolButton::TYPE_UNDO << CaptureToolButton::TYPE_REDO + << CaptureToolButton::TYPE_COPY << CaptureToolButton::TYPE_SAVE + << CaptureToolButton::TYPE_EXIT + << CaptureToolButton::TYPE_IMAGEUPLOADER + << CaptureToolButton::TYPE_OPEN_APP << CaptureToolButton::TYPE_PIN + << CaptureToolButton::TYPE_TEXT + << CaptureToolButton::TYPE_CIRCLECOUNT; } - using bt = CaptureButton::ButtonType; + using bt = CaptureToolButton::ButtonType; std::sort(buttons.begin(), buttons.end(), [](bt a, bt b) { - return CaptureButton::getPriorityByButton(a) < - CaptureButton::getPriorityByButton(b); + return CaptureToolButton::getPriorityByButton(a) < + CaptureToolButton::getPriorityByButton(b); }); return buttons; } void -ConfigHandler::setButtons(const QVector& buttons) +ConfigHandler::setButtons(const QVector& buttons) { QVector l = fromButtonToInt(buttons); normalizeButtons(l); @@ -438,8 +442,8 @@ void ConfigHandler::setAllTheButtons() { QVector buttons; - auto listTypes = CaptureButton::getIterableButtonTypes(); - for (const CaptureButton::ButtonType t : listTypes) { + auto listTypes = CaptureToolButton::getIterableButtonTypes(); + for (const CaptureToolButton::ButtonType t : listTypes) { buttons << static_cast(t); } // TODO: remove toList in v1.0 @@ -456,7 +460,7 @@ ConfigHandler::configFilePath() const bool ConfigHandler::normalizeButtons(QVector& buttons) { - auto listTypes = CaptureButton::getIterableButtonTypes(); + auto listTypes = CaptureToolButton::getIterableButtonTypes(); QVector listTypesInt; for (auto i : listTypes) listTypesInt << static_cast(i); @@ -471,17 +475,17 @@ ConfigHandler::normalizeButtons(QVector& buttons) return hasChanged; } -QVector +QVector ConfigHandler::fromIntToButton(const QVector& l) { - QVector buttons; + QVector buttons; for (auto const i : l) - buttons << static_cast(i); + buttons << static_cast(i); return buttons; } QVector -ConfigHandler::fromButtonToInt(const QVector& l) +ConfigHandler::fromButtonToInt(const QVector& l) { QVector buttons; for (auto const i : l) diff --git a/src/utils/confighandler.h b/src/utils/confighandler.h index 81951f47ee..46cfb06fae 100644 --- a/src/utils/confighandler.h +++ b/src/utils/confighandler.h @@ -17,7 +17,7 @@ #pragma once -#include "src/widgets/capture/capturebutton.h" +#include "src/widgets/capture/capturetoolbutton.h" #include #include @@ -26,8 +26,8 @@ class ConfigHandler public: explicit ConfigHandler(); - QVector getButtons(); - void setButtons(const QVector&); + QVector getButtons(); + void setButtons(const QVector&); QVector getUserColors(); void setUserColors(const QVector&); @@ -93,6 +93,6 @@ class ConfigHandler bool normalizeButtons(QVector&); - QVector fromIntToButton(const QVector& l); - QVector fromButtonToInt(const QVector& l); + QVector fromIntToButton(const QVector& l); + QVector fromButtonToInt(const QVector& l); }; diff --git a/src/widgets/capture/CMakeLists.txt b/src/widgets/capture/CMakeLists.txt index 24945708fe..fe94aa998c 100644 --- a/src/widgets/capture/CMakeLists.txt +++ b/src/widgets/capture/CMakeLists.txt @@ -3,6 +3,7 @@ target_sources( flameshot PRIVATE buttonhandler.h capturebutton.h + capturetoolbutton.h capturewidget.h colorpicker.h hovereventfilter.h @@ -13,6 +14,7 @@ target_sources( flameshot PRIVATE buttonhandler.cpp capturebutton.cpp + capturetoolbutton.cpp capturewidget.cpp colorpicker.cpp hovereventfilter.cpp diff --git a/src/widgets/capture/buttonhandler.cpp b/src/widgets/capture/buttonhandler.cpp index 916e029a81..e5ebb36671 100644 --- a/src/widgets/capture/buttonhandler.cpp +++ b/src/widgets/capture/buttonhandler.cpp @@ -24,7 +24,8 @@ // ButtonHandler is a habdler for every active button. It makes easier to // manipulate the buttons as a unit. -ButtonHandler::ButtonHandler(const QVector& v, QObject* parent) +ButtonHandler::ButtonHandler(const QVector& v, + QObject* parent) : QObject(parent) { setButtons(v); @@ -40,7 +41,7 @@ ButtonHandler::ButtonHandler(QObject* parent) void ButtonHandler::hide() { - for (CaptureButton* b : m_vectorButtons) + for (CaptureToolButton* b : m_vectorButtons) b->hide(); } @@ -50,7 +51,7 @@ ButtonHandler::show() if (m_vectorButtons.isEmpty() || m_vectorButtons.first()->isVisible()) { return; } - for (CaptureButton* b : m_vectorButtons) + for (CaptureToolButton* b : m_vectorButtons) b->animatedShow(); } @@ -58,7 +59,7 @@ bool ButtonHandler::isVisible() const { bool ret = true; - for (const CaptureButton* b : m_vectorButtons) { + for (const CaptureToolButton* b : m_vectorButtons) { if (!b->isVisible()) { ret = false; break; @@ -370,12 +371,12 @@ ButtonHandler::adjustHorizontalCenter(QPoint& center) // setButtons redefines the buttons of the button handler void -ButtonHandler::setButtons(const QVector v) +ButtonHandler::setButtons(const QVector v) { if (v.isEmpty()) return; - for (CaptureButton* b : m_vectorButtons) + for (CaptureToolButton* b : m_vectorButtons) delete (b); m_vectorButtons = v; m_buttonBaseSize = GlobalValues::buttonBaseSize(); diff --git a/src/widgets/capture/buttonhandler.h b/src/widgets/capture/buttonhandler.h index 48c15e06e3..be40b9b4bb 100644 --- a/src/widgets/capture/buttonhandler.h +++ b/src/widgets/capture/buttonhandler.h @@ -17,12 +17,12 @@ #pragma once -#include "capturebutton.h" +#include "capturetoolbutton.h" #include #include #include -class CaptureButton; +class CaptureToolButton; class QRect; class QPoint; @@ -30,7 +30,7 @@ class ButtonHandler : public QObject { Q_OBJECT public: - ButtonHandler(const QVector&, QObject* parent = nullptr); + ButtonHandler(const QVector&, QObject* parent = nullptr); explicit ButtonHandler(QObject* parent = nullptr); void hideSectionUnderMouse(const QPoint& p); @@ -39,7 +39,7 @@ class ButtonHandler : public QObject bool buttonsAreInside() const; size_t size() const; - void setButtons(const QVector); + void setButtons(const QVector); bool contains(const QPoint& p) const; void updateScreenRegions(const QVector& rects); void updateScreenRegions(const QRect& rect); @@ -59,7 +59,7 @@ public slots: QRect intersectWithAreas(const QRect& rect); - QVector m_vectorButtons; + QVector m_vectorButtons; QRegion m_screenRegions; diff --git a/src/widgets/capture/capturebutton.cpp b/src/widgets/capture/capturebutton.cpp index 6e65772afd..f6d9b6f0dc 100644 --- a/src/widgets/capture/capturebutton.cpp +++ b/src/widgets/capture/capturebutton.cpp @@ -16,57 +16,36 @@ // along with Flameshot. If not, see . #include "capturebutton.h" -#include "src/tools/capturetool.h" -#include "src/tools/toolfactory.h" #include "src/utils/colorutils.h" #include "src/utils/confighandler.h" #include "src/utils/globalvalues.h" -#include "src/widgets/capture/capturewidget.h" -#include #include -#include -#include -#include -#include -// Button represents a single button of the capture widget, it can enable -// multiple functionality. - -CaptureButton::CaptureButton(const ButtonType t, QWidget* parent) +CaptureButton::CaptureButton(QWidget* parent) : QPushButton(parent) - , m_buttonType(t) { - initButton(); - if (t == TYPE_SELECTIONINDICATOR) { - QFont f = this->font(); - setFont(QFont(f.family(), 7, QFont::Bold)); - } else { - updateIcon(); - } - setCursor(Qt::ArrowCursor); + init(); } -void -CaptureButton::initButton() +CaptureButton::CaptureButton(const QString& text, QWidget* parent) + : QPushButton(text, parent) { - m_tool = ToolFactory().CreateTool(m_buttonType, this); - - setFocusPolicy(Qt::NoFocus); - resize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize()); - setMask(QRegion(QRect(-1, - -1, - GlobalValues::buttonBaseSize() + 2, - GlobalValues::buttonBaseSize() + 2), - QRegion::Ellipse)); + init(); +} - setToolTip(m_tool->description()); +CaptureButton::CaptureButton(const QIcon& icon, + const QString& text, + QWidget* parent) + : QPushButton(icon, text, parent) +{ + init(); +} - m_emergeAnimation = new QPropertyAnimation(this, "size", this); - m_emergeAnimation->setEasingCurve(QEasingCurve::InOutQuad); - m_emergeAnimation->setDuration(80); - m_emergeAnimation->setStartValue(QSize(0, 0)); - m_emergeAnimation->setEndValue( - QSize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize())); +void +CaptureButton::init() +{ + setCursor(Qt::ArrowCursor); + setFocusPolicy(Qt::NoFocus); auto dsEffect = new QGraphicsDropShadowEffect(this); dsEffect->setBlurRadius(5); @@ -76,89 +55,32 @@ CaptureButton::initButton() setGraphicsEffect(dsEffect); } -void -CaptureButton::updateIcon() -{ - setIcon(icon()); - setIconSize(size() * 0.6); -} - -QVector -CaptureButton::getIterableButtonTypes() -{ - return iterableButtonTypes; -} - QString CaptureButton::globalStyleSheet() { - QColor mainColor = ConfigHandler().uiMainColorValue(); - QString baseSheet = "CaptureButton { border-radius: %3;" - "background-color: %1; color: %4 }" - "CaptureButton:hover { background-color: %2; }" - "CaptureButton:pressed:!hover { " - "background-color: %1; }"; - // define color when mouse is hovering - QColor contrast = ColorUtils::contrastColor(m_mainColor); - - // foreground color - QString color = ColorUtils::colorIsDark(mainColor) ? "white" : "black"; - - return baseSheet.arg(mainColor.name()) - .arg(contrast.name()) - .arg(GlobalValues::buttonBaseSize() / 2) - .arg(color); + return CaptureButton(nullptr).styleSheet(); } QString CaptureButton::styleSheet() const { - QString baseSheet = "CaptureButton { border-radius: %3;" + QString baseSheet = "CaptureButton { border: none;" + "padding: 3px 8px;" "background-color: %1; color: %4 }" + "CaptureToolButton { border-radius: %3;" + "padding: 0; }" "CaptureButton:hover { background-color: %2; }" "CaptureButton:pressed:!hover { " "background-color: %1; }"; // define color when mouse is hovering QColor contrast = ColorUtils::contrastColor(m_mainColor); // foreground color - QString color = ColorUtils::colorIsDark(m_mainColor) ? "white" : "black"; + QColor color = ColorUtils::colorIsDark(m_mainColor) ? Qt::white : Qt::black; return baseSheet.arg(m_mainColor.name()) .arg(contrast.name()) .arg(GlobalValues::buttonBaseSize() / 2) - .arg(color); -} - -// get icon returns the icon for the type of button -QIcon -CaptureButton::icon() const -{ - return m_tool->icon(m_mainColor, true); -} - -void -CaptureButton::mousePressEvent(QMouseEvent* e) -{ - if (e->button() == Qt::LeftButton) { - emit pressedButton(this); - emit pressed(); - } -} - -void -CaptureButton::animatedShow() -{ - if (!isVisible()) { - show(); - m_emergeAnimation->start(); - connect(m_emergeAnimation, &QPropertyAnimation::finished, this, []() {}); - } -} - -CaptureTool* -CaptureButton::tool() const -{ - return m_tool; + .arg(color.name()); } void @@ -166,51 +88,6 @@ CaptureButton::setColor(const QColor& c) { m_mainColor = c; setStyleSheet(styleSheet()); - updateIcon(); } QColor CaptureButton::m_mainColor = ConfigHandler().uiMainColorValue(); - -static std::map buttonTypeOrder{ - { CaptureButton::TYPE_PENCIL, 0 }, - { CaptureButton::TYPE_DRAWER, 1 }, - { CaptureButton::TYPE_ARROW, 2 }, - { CaptureButton::TYPE_SELECTION, 3 }, - { CaptureButton::TYPE_RECTANGLE, 4 }, - { CaptureButton::TYPE_CIRCLE, 5 }, - { CaptureButton::TYPE_MARKER, 6 }, - { CaptureButton::TYPE_TEXT, 7 }, - { CaptureButton::TYPE_PIXELATE, 8 }, - { CaptureButton::TYPE_SELECTIONINDICATOR, 9 }, - { CaptureButton::TYPE_MOVESELECTION, 10 }, - { CaptureButton::TYPE_UNDO, 11 }, - { CaptureButton::TYPE_REDO, 12 }, - { CaptureButton::TYPE_COPY, 13 }, - { CaptureButton::TYPE_SAVE, 14 }, - { CaptureButton::TYPE_EXIT, 15 }, - { CaptureButton::TYPE_IMAGEUPLOADER, 16 }, - { CaptureButton::TYPE_OPEN_APP, 17 }, - { CaptureButton::TYPE_PIN, 18 }, - { CaptureButton::TYPE_CIRCLECOUNT, 19 }, -}; - -int -CaptureButton::getPriorityByButton(CaptureButton::ButtonType b) -{ - auto it = buttonTypeOrder.find(b); - return it == buttonTypeOrder.cend() ? (int)buttonTypeOrder.size() - : it->second; -} - -QVector CaptureButton::iterableButtonTypes = { - CaptureButton::TYPE_PENCIL, CaptureButton::TYPE_DRAWER, - CaptureButton::TYPE_ARROW, CaptureButton::TYPE_SELECTION, - CaptureButton::TYPE_RECTANGLE, CaptureButton::TYPE_CIRCLE, - CaptureButton::TYPE_MARKER, CaptureButton::TYPE_TEXT, - CaptureButton::TYPE_PIXELATE, CaptureButton::TYPE_SELECTIONINDICATOR, - CaptureButton::TYPE_MOVESELECTION, CaptureButton::TYPE_UNDO, - CaptureButton::TYPE_REDO, CaptureButton::TYPE_COPY, - CaptureButton::TYPE_SAVE, CaptureButton::TYPE_EXIT, - CaptureButton::TYPE_IMAGEUPLOADER, CaptureButton::TYPE_OPEN_APP, - CaptureButton::TYPE_PIN, CaptureButton::TYPE_CIRCLECOUNT, -}; diff --git a/src/widgets/capture/capturebutton.h b/src/widgets/capture/capturebutton.h index 2ae357c9f0..b549617641 100644 --- a/src/widgets/capture/capturebutton.h +++ b/src/widgets/capture/capturebutton.h @@ -17,85 +17,28 @@ #pragma once -#include #include -#include - -class QWidget; -class QPropertyAnimation; -class CaptureTool; class CaptureButton : public QPushButton { Q_OBJECT public: - // Don't forget to add the new types to CaptureButton::iterableButtonTypes - // in the .cpp and the order value in the private array buttonTypeOrder - enum ButtonType - { - TYPE_PENCIL = 0, - TYPE_DRAWER = 1, - TYPE_ARROW = 2, - TYPE_SELECTION = 3, - TYPE_RECTANGLE = 4, - TYPE_CIRCLE = 5, - TYPE_MARKER = 6, - TYPE_SELECTIONINDICATOR = 7, - TYPE_MOVESELECTION = 8, - TYPE_UNDO = 9, - TYPE_COPY = 10, - TYPE_SAVE = 11, - TYPE_EXIT = 12, - TYPE_IMAGEUPLOADER = 13, - TYPE_OPEN_APP = 14, - TYPE_PIXELATE = 15, - TYPE_REDO = 16, - TYPE_PIN = 17, - TYPE_TEXT = 18, - TYPE_CIRCLECOUNT = 19, - - }; - -#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) - Q_ENUMS(ButtonType) -#else - Q_ENUM(ButtonType) -#endif - CaptureButton() = delete; - explicit CaptureButton(const ButtonType, QWidget* parent = nullptr); + CaptureButton(QWidget* parent = nullptr); + CaptureButton(const QString& text, QWidget* parent = nullptr); + CaptureButton(const QIcon& icon, + const QString& text, + QWidget* parent = nullptr); static QString globalStyleSheet(); - static QVector getIterableButtonTypes(); - static int getPriorityByButton(CaptureButton::ButtonType); - QString name() const; - QString description() const; - QIcon icon() const; QString styleSheet() const; - CaptureTool* tool() const; void setColor(const QColor& c); - void animatedShow(); - -protected: - virtual void mousePressEvent(QMouseEvent*); - static QVector iterableButtonTypes; - - CaptureTool* m_tool; - -signals: - void pressedButton(CaptureButton*); private: - CaptureButton(QWidget* parent = nullptr); - ButtonType m_buttonType; - - QPropertyAnimation* m_emergeAnimation; - static QColor m_mainColor; - void initButton(); - void updateIcon(); + void init(); }; diff --git a/src/widgets/capture/capturetoolbutton.cpp b/src/widgets/capture/capturetoolbutton.cpp new file mode 100644 index 0000000000..9ccc6038a6 --- /dev/null +++ b/src/widgets/capture/capturetoolbutton.cpp @@ -0,0 +1,176 @@ +// Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors +// +// This file is part of Flameshot. +// +// Flameshot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Flameshot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Flameshot. If not, see . + +#include "capturetoolbutton.h" +#include "src/tools/capturetool.h" +#include "src/tools/toolfactory.h" +#include "src/utils/colorutils.h" +#include "src/utils/confighandler.h" +#include "src/utils/globalvalues.h" +#include "src/widgets/capture/capturewidget.h" +#include +#include +#include +#include +#include + +// Button represents a single button of the capture widget, it can enable +// multiple functionality. + +CaptureToolButton::CaptureToolButton(const ButtonType t, QWidget* parent) + : CaptureButton(parent) + , m_buttonType(t) +{ + initButton(); + if (t == TYPE_SELECTIONINDICATOR) { + QFont f = this->font(); + setFont(QFont(f.family(), 7, QFont::Bold)); + } else { + updateIcon(); + } +} + +void +CaptureToolButton::initButton() +{ + m_tool = ToolFactory().CreateTool(m_buttonType, this); + + resize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize()); + setMask(QRegion(QRect(-1, + -1, + GlobalValues::buttonBaseSize() + 2, + GlobalValues::buttonBaseSize() + 2), + QRegion::Ellipse)); + + setToolTip(m_tool->description()); + + m_emergeAnimation = new QPropertyAnimation(this, "size", this); + m_emergeAnimation->setEasingCurve(QEasingCurve::InOutQuad); + m_emergeAnimation->setDuration(80); + m_emergeAnimation->setStartValue(QSize(0, 0)); + m_emergeAnimation->setEndValue( + QSize(GlobalValues::buttonBaseSize(), GlobalValues::buttonBaseSize())); +} + +void +CaptureToolButton::updateIcon() +{ + setIcon(icon()); + setIconSize(size() * 0.6); +} + +QVector +CaptureToolButton::getIterableButtonTypes() +{ + return iterableButtonTypes; +} + +// get icon returns the icon for the type of button +QIcon +CaptureToolButton::icon() const +{ + return m_tool->icon(m_mainColor, true); +} + +void +CaptureToolButton::mousePressEvent(QMouseEvent* e) +{ + if (e->button() == Qt::LeftButton) { + emit pressedButton(this); + emit pressed(); + } +} + +void +CaptureToolButton::animatedShow() +{ + if (!isVisible()) { + show(); + m_emergeAnimation->start(); + connect(m_emergeAnimation, &QPropertyAnimation::finished, this, []() {}); + } +} + +CaptureTool* +CaptureToolButton::tool() const +{ + return m_tool; +} + +void +CaptureToolButton::setColor(const QColor& c) +{ + CaptureButton::setColor(c); + updateIcon(); +} + +QColor CaptureToolButton::m_mainColor = ConfigHandler().uiMainColorValue(); + +static std::map 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_SELECTIONINDICATOR, 9 }, + { CaptureToolButton::TYPE_MOVESELECTION, 10 }, + { CaptureToolButton::TYPE_UNDO, 11 }, + { CaptureToolButton::TYPE_REDO, 12 }, + { CaptureToolButton::TYPE_COPY, 13 }, + { CaptureToolButton::TYPE_SAVE, 14 }, + { CaptureToolButton::TYPE_EXIT, 15 }, + { CaptureToolButton::TYPE_IMAGEUPLOADER, 16 }, + { CaptureToolButton::TYPE_OPEN_APP, 17 }, + { CaptureToolButton::TYPE_PIN, 18 }, + { CaptureToolButton::TYPE_CIRCLECOUNT, 19 }, +}; + +int +CaptureToolButton::getPriorityByButton(CaptureToolButton::ButtonType b) +{ + auto it = buttonTypeOrder.find(b); + return it == buttonTypeOrder.cend() ? (int)buttonTypeOrder.size() + : it->second; +} + +QVector + 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_SELECTIONINDICATOR, + CaptureToolButton::TYPE_MOVESELECTION, + CaptureToolButton::TYPE_UNDO, + CaptureToolButton::TYPE_REDO, + CaptureToolButton::TYPE_COPY, + CaptureToolButton::TYPE_SAVE, + CaptureToolButton::TYPE_EXIT, + CaptureToolButton::TYPE_IMAGEUPLOADER, + CaptureToolButton::TYPE_OPEN_APP, + CaptureToolButton::TYPE_PIN, + CaptureToolButton::TYPE_CIRCLECOUNT, + }; diff --git a/src/widgets/capture/capturetoolbutton.h b/src/widgets/capture/capturetoolbutton.h new file mode 100644 index 0000000000..bb5a3aabcb --- /dev/null +++ b/src/widgets/capture/capturetoolbutton.h @@ -0,0 +1,93 @@ +// Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors +// +// This file is part of Flameshot. +// +// Flameshot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Flameshot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Flameshot. If not, see . + +#pragma once + +#include "capturebutton.h" +#include +#include + +class QWidget; +class QPropertyAnimation; +class CaptureTool; + +class CaptureToolButton : public CaptureButton +{ + Q_OBJECT + +public: + // Don't forget to add the new types to CaptureButton::iterableButtonTypes + // in the .cpp and the order value in the private array buttonTypeOrder + enum ButtonType + { + TYPE_PENCIL = 0, + TYPE_DRAWER = 1, + TYPE_ARROW = 2, + TYPE_SELECTION = 3, + TYPE_RECTANGLE = 4, + TYPE_CIRCLE = 5, + TYPE_MARKER = 6, + TYPE_SELECTIONINDICATOR = 7, + TYPE_MOVESELECTION = 8, + TYPE_UNDO = 9, + TYPE_COPY = 10, + TYPE_SAVE = 11, + TYPE_EXIT = 12, + TYPE_IMAGEUPLOADER = 13, + TYPE_OPEN_APP = 14, + TYPE_PIXELATE = 15, + TYPE_REDO = 16, + TYPE_PIN = 17, + TYPE_TEXT = 18, + TYPE_CIRCLECOUNT = 19, + + }; + Q_ENUM(ButtonType) + + explicit CaptureToolButton(const ButtonType, QWidget* parent = nullptr); + + static QVector getIterableButtonTypes(); + static int getPriorityByButton(CaptureToolButton::ButtonType); + + QString name() const; + QString description() const; + QIcon icon() const; + CaptureTool* tool() const; + + void setColor(const QColor& c); + void animatedShow(); + +protected: + void mousePressEvent(QMouseEvent* e) override; + static QVector iterableButtonTypes; + + CaptureTool* m_tool; + +signals: + void pressedButton(CaptureToolButton*); + +private: + CaptureToolButton(QWidget* parent = nullptr); + ButtonType m_buttonType; + + QPropertyAnimation* m_emergeAnimation; + + static QColor m_mainColor; + + void initButton(); + void updateIcon(); +}; diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 76307d85df..fae24a97a8 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -176,17 +176,18 @@ CaptureWidget::updateButtons() m_contrastUiColor = m_config.uiContrastColorValue(); auto buttons = m_config.getButtons(); - QVector vectorButtons; + QVector vectorButtons; - for (const CaptureButton::ButtonType& t : buttons) { - CaptureButton* b = new CaptureButton(t, this); - if (t == CaptureButton::TYPE_SELECTIONINDICATOR) { + for (const CaptureToolButton::ButtonType& t : buttons) { + CaptureToolButton* b = new CaptureToolButton(t, this); + if (t == CaptureToolButton::TYPE_SELECTIONINDICATOR) { m_sizeIndButton = b; } b->setColor(m_uiColor); makeChild(b); - connect(b, &CaptureButton::pressedButton, this, &CaptureWidget::setState); + connect( + b, &CaptureToolButton::pressedButton, this, &CaptureWidget::setState); connect(b->tool(), &CaptureTool::requestAction, this, @@ -626,16 +627,6 @@ CaptureWidget::initPanel() &QPushButton::clicked, this, &CaptureWidget::togglePanel); - - QColor mainColor = config.uiMainColorValue(); - QColor textColor = - ColorUtils::colorIsDark(mainColor) ? Qt::white : Qt::black; - QPalette palette = panelToggleButton->palette(); - palette.setColor(QPalette::Button, mainColor); - palette.setColor(QPalette::ButtonText, textColor); - panelToggleButton->setAutoFillBackground(true); - panelToggleButton->setPalette(palette); - panelToggleButton->update(); } m_panel = new UtilityPanel(this); @@ -681,7 +672,7 @@ CaptureWidget::initSelection() } void -CaptureWidget::setState(CaptureButton* b) +CaptureWidget::setState(CaptureToolButton* b) { if (!b) { return; diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index 20e7f08a4b..a7afee4aca 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -26,7 +26,7 @@ #pragma once #include "buttonhandler.h" -#include "capturebutton.h" +#include "capturetoolbutton.h" #include "src/tools/capturecontext.h" #include "src/tools/capturetool.h" #include "src/utils/confighandler.h" @@ -86,7 +86,7 @@ private slots: void upResize(); void downResize(); - void setState(CaptureButton* b); + void setState(CaptureToolButton* b); void processTool(CaptureTool* t); void handleButtonSignal(CaptureTool::Request r); void setDrawColor(const QColor& c); @@ -140,9 +140,9 @@ private slots: QRect extendedRect(QRect* r) const; QUndoStack m_undoStack; - QPointer m_sizeIndButton; + QPointer m_sizeIndButton; // Last pressed button - QPointer m_activeButton; + QPointer m_activeButton; QPointer m_activeTool; QPointer m_toolWidget; diff --git a/src/widgets/orientablepushbutton.cpp b/src/widgets/orientablepushbutton.cpp index dd37d1bf30..ba9d70ef61 100644 --- a/src/widgets/orientablepushbutton.cpp +++ b/src/widgets/orientablepushbutton.cpp @@ -24,17 +24,17 @@ #include OrientablePushButton::OrientablePushButton(QWidget* parent) - : QPushButton(parent) + : CaptureButton(parent) {} OrientablePushButton::OrientablePushButton(const QString& text, QWidget* parent) - : QPushButton(text, parent) + : CaptureButton(text, parent) {} OrientablePushButton::OrientablePushButton(const QIcon& icon, const QString& text, QWidget* parent) - : QPushButton(icon, text, parent) + : CaptureButton(icon, text, parent) {} QSize diff --git a/src/widgets/orientablepushbutton.h b/src/widgets/orientablepushbutton.h index 2dbe9fcda8..499e4cb7a0 100644 --- a/src/widgets/orientablepushbutton.h +++ b/src/widgets/orientablepushbutton.h @@ -19,9 +19,10 @@ #pragma once +#include "capture/capturebutton.h" #include -class OrientablePushButton : public QPushButton +class OrientablePushButton : public CaptureButton { Q_OBJECT public: