diff --git a/src/config/shortcutswidget.cpp b/src/config/shortcutswidget.cpp index b50cbded..069ea84d 100644 --- a/src/config/shortcutswidget.cpp +++ b/src/config/shortcutswidget.cpp @@ -212,9 +212,8 @@ void ShortcutsWidget::initShortcuts() #endif m_shortcuts << (QStringList() << "" << QObject::tr("Show color picker") << "Right Click"); - m_shortcuts << (QStringList() - << "" << QObject::tr("Change the tool's thickness") - << "Mouse Wheel"); + m_shortcuts << (QStringList() << "" << QObject::tr("Change the tool's size") + << "Mouse Wheel"); } void ShortcutsWidget::appendShortcut(const QString& shortcutName, diff --git a/src/tools/abstractactiontool.cpp b/src/tools/abstractactiontool.cpp index e172cebe..0a61b380 100644 --- a/src/tools/abstractactiontool.cpp +++ b/src/tools/abstractactiontool.cpp @@ -60,7 +60,7 @@ void AbstractActionTool::onColorChanged(const QColor& c) Q_UNUSED(c) } -void AbstractActionTool::onThicknessChanged(int th) +void AbstractActionTool::onSizeChanged(int size) { - Q_UNUSED(th) + Q_UNUSED(size) } diff --git a/src/tools/abstractactiontool.h b/src/tools/abstractactiontool.h index 9721f2f7..18b90fba 100644 --- a/src/tools/abstractactiontool.h +++ b/src/tools/abstractactiontool.h @@ -25,5 +25,5 @@ public slots: void drawMove(const QPoint& p) override; void drawStart(const CaptureContext& context) override; void onColorChanged(const QColor& c) override; - void onThicknessChanged(int th) override; + void onSizeChanged(int size) override; }; diff --git a/src/tools/abstractpathtool.cpp b/src/tools/abstractpathtool.cpp index 3b6079a0..761ce968 100644 --- a/src/tools/abstractpathtool.cpp +++ b/src/tools/abstractpathtool.cpp @@ -46,7 +46,7 @@ bool AbstractPathTool::showMousePreview() const QRect AbstractPathTool::mousePreviewRect(const CaptureContext& context) const { - QRect rect(0, 0, context.thickness + 2, context.thickness + 2); + QRect rect(0, 0, context.toolSize + 2, context.toolSize + 2); rect.moveCenter(context.mousePos); return rect; } @@ -99,9 +99,9 @@ void AbstractPathTool::onColorChanged(const QColor& c) m_color = c; } -void AbstractPathTool::onThicknessChanged(int th) +void AbstractPathTool::onSizeChanged(int size) { - m_thickness = th; + m_thickness = size; } void AbstractPathTool::addPoint(const QPoint& point) diff --git a/src/tools/abstractpathtool.h b/src/tools/abstractpathtool.h index dea2f26b..831cd9bb 100644 --- a/src/tools/abstractpathtool.h +++ b/src/tools/abstractpathtool.h @@ -19,13 +19,13 @@ public: QRect boundingRect() const override; void move(const QPoint& mousePos) override; const QPoint* pos() override; - int thickness() const override { return m_thickness; }; + int size() const override { return m_thickness; }; public slots: void drawEnd(const QPoint& p) override; void drawMove(const QPoint& p) override; void onColorChanged(const QColor& c) override; - void onThicknessChanged(int th) override; + void onSizeChanged(int size) override; protected: void copyParams(const AbstractPathTool* from, AbstractPathTool* to); diff --git a/src/tools/abstracttwopointtool.cpp b/src/tools/abstracttwopointtool.cpp index aae95bf2..58dfa7f1 100644 --- a/src/tools/abstracttwopointtool.cpp +++ b/src/tools/abstracttwopointtool.cpp @@ -70,7 +70,7 @@ bool AbstractTwoPointTool::showMousePreview() const QRect AbstractTwoPointTool::mousePreviewRect( const CaptureContext& context) const { - QRect rect(0, 0, context.thickness + 2, context.thickness + 2); + QRect rect(0, 0, context.toolSize + 2, context.toolSize + 2); rect.moveCenter(context.mousePos); return rect; } @@ -111,15 +111,15 @@ void AbstractTwoPointTool::onColorChanged(const QColor& c) m_color = c; } -void AbstractTwoPointTool::onThicknessChanged(int th) +void AbstractTwoPointTool::onSizeChanged(int size) { - m_thickness = th; + m_thickness = size; } void AbstractTwoPointTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { - painter.setPen(QPen(context.color, context.thickness)); + painter.setPen(QPen(context.color, context.toolSize)); painter.drawLine(context.mousePos, context.mousePos); } @@ -128,7 +128,7 @@ void AbstractTwoPointTool::drawStart(const CaptureContext& context) onColorChanged(context.color); m_points.first = context.mousePos; m_points.second = context.mousePos; - onThicknessChanged(context.thickness); + onSizeChanged(context.toolSize); } QPoint AbstractTwoPointTool::adjustedVector(QPoint v) const diff --git a/src/tools/abstracttwopointtool.h b/src/tools/abstracttwopointtool.h index ba22f44f..c6656b0a 100644 --- a/src/tools/abstracttwopointtool.h +++ b/src/tools/abstracttwopointtool.h @@ -19,7 +19,7 @@ public: QRect boundingRect() const override; void move(const QPoint& pos) override; const QPoint* pos() override; - int thickness() const override { return m_thickness; }; + int size() const override { return m_thickness; }; const QColor& color() { return m_color; }; const QPair points() const { return m_points; }; void paintMousePreview(QPainter& painter, @@ -30,7 +30,7 @@ public slots: void drawMove(const QPoint& p) override; void drawMoveWithAdjustment(const QPoint& p) override; void onColorChanged(const QColor& c) override; - void onThicknessChanged(int th) override; + void onSizeChanged(int size) override; virtual void drawStart(const CaptureContext& context) override; private: diff --git a/src/tools/arrow/arrowtool.cpp b/src/tools/arrow/arrowtool.cpp index 707a3c81..89b61d0b 100644 --- a/src/tools/arrow/arrowtool.cpp +++ b/src/tools/arrow/arrowtool.cpp @@ -88,8 +88,7 @@ QRect ArrowTool::boundingRect() const return {}; } - int offset = - thickness() <= 1 ? 1 : static_cast(round(thickness() / 2 + 0.5)); + int offset = size() <= 1 ? 1 : static_cast(round(size() / 2 + 0.5)); // get min and max arrow pos int min_x = points().first.x(); @@ -146,10 +145,9 @@ void ArrowTool::copyParams(const ArrowTool* from, ArrowTool* to) void ArrowTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) - painter.setPen(QPen(color(), thickness())); - painter.drawLine( - getShorterLine(points().first, points().second, thickness())); - m_arrowPath = getArrowHead(points().first, points().second, thickness()); + painter.setPen(QPen(color(), size())); + painter.drawLine(getShorterLine(points().first, points().second, size())); + m_arrowPath = getArrowHead(points().first, points().second, size()); painter.fillPath(m_arrowPath, QBrush(color())); } diff --git a/src/tools/capturecontext.h b/src/tools/capturecontext.h index 6e145e6a..23231d2e 100644 --- a/src/tools/capturecontext.h +++ b/src/tools/capturecontext.h @@ -25,8 +25,8 @@ struct CaptureContext QPoint widgetOffset; // Mouse position inside the widget QPoint mousePos; - // Value of the desired thickness - int thickness; + // Size of the active tool + int toolSize; // Mode of the capture widget bool fullscreen; uint requestId; diff --git a/src/tools/capturetool.h b/src/tools/capturetool.h index dba239e5..0dfe26fa 100644 --- a/src/tools/capturetool.h +++ b/src/tools/capturetool.h @@ -193,9 +193,9 @@ public slots: virtual void pressed(CaptureContext& context) = 0; // Called when the color is changed in the editor. virtual void onColorChanged(const QColor& c) = 0; - // Called when the thickness of the tool is updated in the editor. - virtual void onThicknessChanged(int th) = 0; - virtual int thickness() const { return -1; }; + // Called when the size the tool size is changed by the user. + virtual void onSizeChanged(int size) = 0; + virtual int size() const { return -1; }; private: unsigned int m_count; diff --git a/src/tools/circle/circletool.cpp b/src/tools/circle/circletool.cpp index c0514fed..a9182680 100644 --- a/src/tools/circle/circletool.cpp +++ b/src/tools/circle/circletool.cpp @@ -40,7 +40,7 @@ CaptureTool* CircleTool::copy(QObject* parent) void CircleTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) - painter.setPen(QPen(color(), thickness())); + painter.setPen(QPen(color(), size())); painter.drawEllipse(QRect(points().first, points().second)); } diff --git a/src/tools/circlecount/circlecounttool.cpp b/src/tools/circlecount/circlecounttool.cpp index 79b4afd2..97c83cd4 100644 --- a/src/tools/circlecount/circlecounttool.cpp +++ b/src/tools/circlecount/circlecounttool.cpp @@ -36,7 +36,7 @@ bool CircleCountTool::isValid() const QRect CircleCountTool::mousePreviewRect(const CaptureContext& context) const { - int width = (context.thickness + THICKNESS_OFFSET) * 2; + int width = (context.toolSize + THICKNESS_OFFSET) * 2; QRect rect(0, 0, width, width); rect.moveCenter(context.mousePos); return rect; @@ -47,7 +47,7 @@ QRect CircleCountTool::boundingRect() const if (!isValid()) { return {}; } - int bubble_size = thickness() + THICKNESS_OFFSET + PADDING_VALUE; + int bubble_size = size() + THICKNESS_OFFSET + PADDING_VALUE; return QRect(points().first.x() - bubble_size, points().first.y() - bubble_size, bubble_size * 2, @@ -97,7 +97,7 @@ void CircleCountTool::process(QPainter& painter, const QPixmap& pixmap) QColor antiContrastColor = ColorUtils::colorIsDark(color()) ? Qt::black : Qt::white; - int bubble_size = thickness() + THICKNESS_OFFSET; + int bubble_size = size() + THICKNESS_OFFSET; painter.setPen(contrastColor); painter.setBrush(antiContrastColor); painter.drawEllipse( @@ -143,7 +143,7 @@ void CircleCountTool::process(QPainter& painter, const QPixmap& pixmap) void CircleCountTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { - onThicknessChanged(context.thickness + PADDING_VALUE); + onSizeChanged(context.toolSize + PADDING_VALUE); // Thickness for pen is *2 to range from radius to diameter to match the // ellipse draw function @@ -151,7 +151,7 @@ void CircleCountTool::paintMousePreview(QPainter& painter, auto orig_opacity = painter.opacity(); painter.setOpacity(0.35); painter.setPen(QPen(context.color, - (thickness() + THICKNESS_OFFSET) * 2, + (size() + THICKNESS_OFFSET) * 2, Qt::SolidLine, Qt::RoundCap)); painter.drawLine(context.mousePos, diff --git a/src/tools/line/linetool.cpp b/src/tools/line/linetool.cpp index ea115abd..10b0f24f 100644 --- a/src/tools/line/linetool.cpp +++ b/src/tools/line/linetool.cpp @@ -42,7 +42,7 @@ CaptureTool* LineTool::copy(QObject* parent) void LineTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) - painter.setPen(QPen(color(), thickness())); + painter.setPen(QPen(color(), size())); painter.drawLine(points().first, points().second); } diff --git a/src/tools/marker/markertool.cpp b/src/tools/marker/markertool.cpp index e569add1..e2b41092 100644 --- a/src/tools/marker/markertool.cpp +++ b/src/tools/marker/markertool.cpp @@ -35,7 +35,7 @@ QString MarkerTool::description() const QRect MarkerTool::mousePreviewRect(const CaptureContext& context) const { - int width = PADDING_VALUE + context.thickness; + int width = PADDING_VALUE + context.toolSize; QRect rect(0, 0, width + 2, width + 2); rect.moveCenter(context.mousePos); return rect; @@ -56,7 +56,7 @@ void MarkerTool::process(QPainter& painter, const QPixmap& pixmap) auto pen = painter.pen(); painter.setCompositionMode(QPainter::CompositionMode_Multiply); painter.setOpacity(0.35); - painter.setPen(QPen(color(), thickness())); + painter.setPen(QPen(color(), size())); painter.drawLine(points().first, points().second); painter.setPen(pen); painter.setOpacity(opacity); @@ -71,7 +71,7 @@ void MarkerTool::paintMousePreview(QPainter& painter, auto pen = painter.pen(); painter.setCompositionMode(QPainter::CompositionMode_Multiply); painter.setOpacity(0.35); - painter.setPen(QPen(context.color, PADDING_VALUE + context.thickness)); + painter.setPen(QPen(context.color, PADDING_VALUE + context.toolSize)); painter.drawLine(context.mousePos, context.mousePos); painter.setPen(pen); painter.setOpacity(opacity); @@ -81,7 +81,7 @@ void MarkerTool::paintMousePreview(QPainter& painter, void MarkerTool::drawStart(const CaptureContext& context) { AbstractTwoPointTool::drawStart(context); - onThicknessChanged(context.thickness + PADDING_VALUE); + onSizeChanged(context.toolSize + PADDING_VALUE); } void MarkerTool::pressed(CaptureContext& context) diff --git a/src/tools/pencil/penciltool.cpp b/src/tools/pencil/penciltool.cpp index a20d3ac7..8e29aaa3 100644 --- a/src/tools/pencil/penciltool.cpp +++ b/src/tools/pencil/penciltool.cpp @@ -38,21 +38,21 @@ CaptureTool* PencilTool::copy(QObject* parent) void PencilTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) - painter.setPen(QPen(m_color, thickness())); + painter.setPen(QPen(m_color, size())); painter.drawPolyline(m_points.data(), m_points.size()); } void PencilTool::paintMousePreview(QPainter& painter, const CaptureContext& context) { - painter.setPen(QPen(context.color, context.thickness + 2)); + painter.setPen(QPen(context.color, context.toolSize + 2)); painter.drawLine(context.mousePos, context.mousePos); } void PencilTool::drawStart(const CaptureContext& context) { m_color = context.color; - onThicknessChanged(context.thickness); + onSizeChanged(context.toolSize); m_points.append(context.mousePos); m_pathArea.setTopLeft(context.mousePos); m_pathArea.setBottomRight(context.mousePos); diff --git a/src/tools/pixelate/pixelatetool.cpp b/src/tools/pixelate/pixelatetool.cpp index cb944d43..e4261ec6 100644 --- a/src/tools/pixelate/pixelatetool.cpp +++ b/src/tools/pixelate/pixelatetool.cpp @@ -54,7 +54,7 @@ void PixelateTool::process(QPainter& painter, const QPixmap& pixmap) selection.bottomRight() * pixelRatio); // If thickness is less than 1, use old blur process - if (thickness() <= 1) { + if (size() <= 1) { QGraphicsBlurEffect* blur = new QGraphicsBlurEffect; blur->setBlurRadius(10); QGraphicsPixmapItem* item = @@ -70,10 +70,10 @@ void PixelateTool::process(QPainter& painter, const QPixmap& pixmap) scene.render(&painter, selection, QRectF()); } else { - int width = static_cast(selection.width() * - (0.5 / qMax(1, thickness() + 1))); - int height = static_cast(selection.height() * - (0.5 / qMax(1, thickness() + 1))); + int width = + static_cast(selection.width() * (0.5 / qMax(1, size() + 1))); + int height = + static_cast(selection.height() * (0.5 / qMax(1, size() + 1))); QSize size = QSize(qMax(width, 1), qMax(height, 1)); QPixmap t = pixmap.copy(selectionScaled); diff --git a/src/tools/rectangle/rectangletool.cpp b/src/tools/rectangle/rectangletool.cpp index 64f712b2..ce56aaa4 100644 --- a/src/tools/rectangle/rectangletool.cpp +++ b/src/tools/rectangle/rectangletool.cpp @@ -45,22 +45,22 @@ void RectangleTool::process(QPainter& painter, const QPixmap& pixmap) QPen orig_pen = painter.pen(); QBrush orig_brush = painter.brush(); painter.setPen( - QPen(color(), thickness(), Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin)); + QPen(color(), size(), Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin)); painter.setBrush(QBrush(color())); - if (thickness() == 0) { + if (size() == 0) { painter.drawRect(QRect(points().first, points().second)); } else { QPainterPath path; int offset = - thickness() <= 1 ? 1 : static_cast(round(thickness() / 2 + 0.5)); + size() <= 1 ? 1 : static_cast(round(size() / 2 + 0.5)); path.addRoundedRect( QRectF( std::min(points().first.x(), points().second.x()) - offset, std::min(points().first.y(), points().second.y()) - offset, std::abs(points().first.x() - points().second.x()) + offset * 2, std::abs(points().first.y() - points().second.y()) + offset * 2), - thickness(), - thickness()); + size(), + size()); painter.fillPath(path, color()); } painter.setPen(orig_pen); @@ -70,7 +70,7 @@ void RectangleTool::process(QPainter& painter, const QPixmap& pixmap) void RectangleTool::drawStart(const CaptureContext& context) { AbstractTwoPointTool::drawStart(context); - onThicknessChanged(context.thickness); + onSizeChanged(context.toolSize); } void RectangleTool::pressed(CaptureContext& context) diff --git a/src/tools/selection/selectiontool.cpp b/src/tools/selection/selectiontool.cpp index f6e96290..7ca38e8a 100644 --- a/src/tools/selection/selectiontool.cpp +++ b/src/tools/selection/selectiontool.cpp @@ -46,7 +46,7 @@ void SelectionTool::process(QPainter& painter, const QPixmap& pixmap) { Q_UNUSED(pixmap) painter.setPen( - QPen(color(), thickness(), Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); + QPen(color(), size(), Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); painter.drawRect(QRect(points().first, points().second)); } diff --git a/src/tools/text/texttool.cpp b/src/tools/text/texttool.cpp index 03aa4905..5f8ca688 100644 --- a/src/tools/text/texttool.cpp +++ b/src/tools/text/texttool.cpp @@ -248,7 +248,7 @@ void TextTool::drawMove(const QPoint& p) void TextTool::drawStart(const CaptureContext& context) { m_color = context.color; - m_size = context.thickness; + m_size = context.toolSize; emit requestAction(REQ_ADD_CHILD_WIDGET); } @@ -265,9 +265,9 @@ void TextTool::onColorChanged(const QColor& c) } } -void TextTool::onThicknessChanged(int th) +void TextTool::onSizeChanged(int size) { - m_size = th; + m_size = size; m_font.setPointSize(m_size + BASE_POINT_SIZE); if (m_widget) { m_widget->setFont(m_font); diff --git a/src/tools/text/texttool.h b/src/tools/text/texttool.h index 2444c437..feb1b675 100644 --- a/src/tools/text/texttool.h +++ b/src/tools/text/texttool.h @@ -52,8 +52,8 @@ public slots: void drawStart(const CaptureContext& context) override; void pressed(CaptureContext& context) override; void onColorChanged(const QColor& c) override; - void onThicknessChanged(int th) override; - virtual int thickness() const override { return m_size; }; + void onSizeChanged(int size) override; + virtual int size() const override { return m_size; }; private slots: void updateText(const QString& s); diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index 93298574..07338d23 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -104,13 +104,15 @@ static QMap> OPTION("filenamePattern" ,FilenamePattern ( {} )), // Others OPTION("drawThickness" ,LowerBoundedInt(1 , 3 )), + OPTION("drawFontSize" ,LowerBoundedInt(1 , 8 )), OPTION("drawColor" ,Color ( Qt::red )), OPTION("userColors" ,UserColors ( )), - OPTION("drawFontSize" ,LowerBoundedInt(1 , 8 )), OPTION("ignoreUpdateToVersion" ,String ( "" )), OPTION("keepOpenAppLauncher" ,Bool ( false )), OPTION("fontFamily" ,String ( "" )), OPTION("setSaveAsFileExtension" ,String ( "" )), + // NOTE: If another tool size is added besides drawThickness and + // drawFontSize, remember to update ConfigHandler::toolSize }; static QMap> recognizedShortcuts = { @@ -316,6 +318,24 @@ void ConfigHandler::setAllTheButtons() setValue(QStringLiteral("buttons"), QVariant::fromValue(buttons)); } +void ConfigHandler::setToolSize(CaptureTool::Type toolType, int size) +{ + if (toolType == CaptureTool::TYPE_TEXT) { + setDrawFontSize(size); + } else if (toolType != CaptureTool::NONE) { + setDrawThickness(size); + } +} + +int ConfigHandler::toolSize(CaptureTool::Type toolType) +{ + if (toolType == CaptureTool::TYPE_TEXT) { + return drawFontSize(); + } else { + return drawThickness(); + } +} + // DEFAULTS QString ConfigHandler::filenamePatternDefault() diff --git a/src/utils/confighandler.h b/src/utils/confighandler.h index 94ab33b7..f9504cdb 100644 --- a/src/utils/confighandler.h +++ b/src/utils/confighandler.h @@ -101,6 +101,8 @@ public: QString saveAsFileExtension(); CONFIG_SETTER(setSaveAsFileExtension, setSaveAsFileExtension, QString) void setAllTheButtons(); + void setToolSize(CaptureTool::Type toolType, int size); + int toolSize(CaptureTool::Type toolType); // DEFAULTS QString filenamePatternDefault(); diff --git a/src/widgets/capture/capturetoolbutton.cpp b/src/widgets/capture/capturetoolbutton.cpp index 9c17e6e7..bc6f376f 100644 --- a/src/widgets/capture/capturetoolbutton.cpp +++ b/src/widgets/capture/capturetoolbutton.cpp @@ -163,30 +163,19 @@ int CaptureToolButton::getPriorityByButton(CaptureTool::Type b) } QList 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_PENCIL, CaptureTool::TYPE_DRAWER, + CaptureTool::TYPE_ARROW, CaptureTool::TYPE_SELECTION, + CaptureTool::TYPE_RECTANGLE, CaptureTool::TYPE_CIRCLE, + CaptureTool::TYPE_MARKER, CaptureTool::TYPE_TEXT, + CaptureTool::TYPE_CIRCLECOUNT, 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) CaptureTool::TYPE_OPEN_APP, #endif - CaptureTool::TYPE_PIN, - CaptureTool::TYPE_CIRCLECOUNT, - CaptureTool::TYPE_SIZEINCREASE, - CaptureTool::TYPE_SIZEDECREASE, - CaptureTool::TYPE_ACCEPT, + CaptureTool::TYPE_PIN, CaptureTool::TYPE_SIZEINCREASE, + CaptureTool::TYPE_SIZEDECREASE, CaptureTool::TYPE_ACCEPT, }; diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 9d44f5a4..6663136c 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -71,7 +71,7 @@ CaptureWidget::CaptureWidget(uint id, , m_selection(nullptr) , m_existingObjectIsChanged(false) , m_startMove(false) - , m_thicknessByKeyboard(0) + , m_toolSizeByKeyboard(0) { m_undoStack.setUndoLimit(ConfigHandler().undoLimit()); @@ -190,14 +190,21 @@ CaptureWidget::CaptureWidget(uint id, }); m_colorPicker->hide(); + // Init tool size sigslots + connect(this, + &CaptureWidget::toolSizeChanged, + this, + &CaptureWidget::onToolSizeChanged); + // Init notification widget m_notifierBox = new NotifierBox(this); m_notifierBox->hide(); connect(m_notifierBox, &NotifierBox::hidden, this, [this]() { - // Show cursor if it was hidden while adjusting tool thickness + // Show cursor if it was hidden while adjusting tool size updateCursor(); - m_thicknessByKeyboard = 0; - setDrawThickness(m_context.thickness); + m_toolSizeByKeyboard = 0; + onToolSizeChanged(m_context.toolSize); + onToolSizeSettled(m_context.toolSize); }); initPanel(); @@ -498,9 +505,9 @@ bool CaptureWidget::startDrawObjectTool(const QPoint& pos) m_activeTool, &CaptureTool::onColorChanged); connect(this, - &CaptureWidget::thicknessChanged, + &CaptureWidget::toolSizeChanged, m_activeTool, - &CaptureTool::onThicknessChanged); + &CaptureTool::onSizeChanged); connect(m_activeTool, &CaptureTool::requestAction, this, @@ -544,11 +551,11 @@ int CaptureWidget::selectToolItemAtPos(const QPoint& pos) if (!toolItem || (toolItem && !toolItem->boundingRect().contains(pos))) { activeLayerIndex = m_captureToolObjects.find(pos, size()); - int thickness_old = m_context.thickness; + int oldToolSize = m_context.toolSize; m_panel->setActiveLayer(activeLayerIndex); drawObjectSelection(); - if (thickness_old != m_context.thickness) { - emit thicknessChanged(m_context.thickness); + if (oldToolSize != m_context.toolSize) { + emit toolSizeChanged(m_context.toolSize); } } } @@ -732,50 +739,43 @@ void CaptureWidget::mouseReleaseEvent(QMouseEvent* e) updateCursor(); } -void CaptureWidget::updateThickness(int thickness) +/** + * Was updateThickness. + * - Update tool mouse preview + * - Show notifier box displaying the new thickness + * - Update selected object thickness + */ +void CaptureWidget::setToolSize(int size) { - auto tool = activeButtonTool(); - updateTool(tool); - m_context.thickness = qBound(1, thickness, maxDrawThickness); + int oldSize = m_context.toolSize; + m_context.toolSize = qBound(1, size, maxToolSize); + updateTool(activeButtonTool()); QPoint topLeft = QGuiAppCurrentScreen().currentScreen()->geometry().topLeft(); int offset = m_notifierBox->width() / 4; m_notifierBox->move(mapFromGlobal(topLeft) + QPoint(offset, offset)); - m_notifierBox->showMessage(QString::number(m_context.thickness)); + m_notifierBox->showMessage(QString::number(m_context.toolSize)); - if (tool && tool->showMousePreview()) { - setCursor(Qt::BlankCursor); - updateTool(tool); + if (m_context.toolSize != oldSize) { + emit toolSizeChanged(m_context.toolSize); } - - // update selected object thickness - auto toolItem = activeToolObject(); - if (toolItem) { - toolItem->onThicknessChanged(m_context.thickness); - if (!m_existingObjectIsChanged) { - m_captureToolObjectsBackup = m_captureToolObjects; - m_existingObjectIsChanged = true; - } - setDrawThickness(m_context.thickness); - } - emit thicknessChanged(m_context.thickness); } void CaptureWidget::keyPressEvent(QKeyEvent* e) { - // If the key is a digit, change the thickness + // If the key is a digit, change the tool size bool ok; int digit = e->text().toInt(&ok); if (ok && e->modifiers() == Qt::NoModifier) { // digit received - m_thicknessByKeyboard = 10 * m_thicknessByKeyboard + digit; - updateThickness(m_thicknessByKeyboard); - if (m_context.thickness != m_thicknessByKeyboard) { - // The thickness was out of range and was clipped by updateThickness - m_thicknessByKeyboard = 0; + m_toolSizeByKeyboard = 10 * m_toolSizeByKeyboard + digit; + setToolSize(m_toolSizeByKeyboard); + if (m_context.toolSize != m_toolSizeByKeyboard) { + // The tool size was out of range and was clipped by setToolSize + m_toolSizeByKeyboard = 0; } } else { - m_thicknessByKeyboard = 0; + m_toolSizeByKeyboard = 0; } if (!m_selection->isVisible()) { @@ -808,21 +808,21 @@ void CaptureWidget::wheelEvent(QWheelEvent* e) * impossible to scroll. It's easier to calculate number of requests and do * not accept events faster that one in 200ms. * */ - int thicknessOffset = 0; + int toolSizeOffset = 0; if (e->angleDelta().y() >= 60) { // mouse scroll (wheel) increment - thicknessOffset = 1; + toolSizeOffset = 1; } else if (e->angleDelta().y() <= -60) { // mouse scroll (wheel) decrement - thicknessOffset = -1; + toolSizeOffset = -1; } else { // touchpad scroll qint64 current = QDateTime::currentMSecsSinceEpoch(); if ((current - m_lastMouseWheel) > 200) { if (e->angleDelta().y() > 0) { - thicknessOffset = 1; + toolSizeOffset = 1; } else if (e->angleDelta().y() < 0) { - thicknessOffset = -1; + toolSizeOffset = -1; } m_lastMouseWheel = current; } else { @@ -830,7 +830,7 @@ void CaptureWidget::wheelEvent(QWheelEvent* e) } } - updateThickness(m_context.thickness + thicknessOffset); + setToolSize(m_context.toolSize + toolSizeOffset); } void CaptureWidget::resizeEvent(QResizeEvent* e) @@ -864,7 +864,7 @@ void CaptureWidget::initContext(bool fullscreen, uint requestId) m_context.color = m_config.drawColor(); m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); m_context.mousePos = mapFromGlobal(QCursor::pos()); - m_context.thickness = m_config.drawThickness(); + m_context.toolSize = m_config.drawThickness(); m_context.fullscreen = fullscreen; // initialize m_context.request @@ -947,23 +947,24 @@ void CaptureWidget::initPanel() this, &CaptureWidget::setDrawColor); connect(m_sidePanel, - &SidePanelWidget::thicknessChanged, + &SidePanelWidget::toolSizeChanged, this, - &CaptureWidget::setDrawThickness); + &CaptureWidget::onToolSizeChanged); connect(this, &CaptureWidget::colorChanged, m_sidePanel, &SidePanelWidget::onColorChanged); connect(this, - &CaptureWidget::thicknessChanged, + &CaptureWidget::toolSizeChanged, m_sidePanel, - &SidePanelWidget::updateThickness); + &SidePanelWidget::onToolSizeChanged); connect(m_sidePanel, &SidePanelWidget::togglePanel, m_panel, &UtilityPanel::toggle); + // TODO replace with a CaptureWidget signal emit m_sidePanel->colorChanged(m_context.color); - emit m_sidePanel->thicknessChanged(m_context.thickness); + emit toolSizeChanged(m_context.toolSize); m_panel->pushWidget(m_sidePanel); // Fill undo/redo/history list widget @@ -1070,24 +1071,14 @@ void CaptureWidget::setState(CaptureToolButton* b) m_activeButton->setColor(m_uiColor); m_activeButton = nullptr; } - loadDrawThickness(); + m_context.toolSize = ConfigHandler().toolSize(activeButtonToolType()); + emit toolSizeChanged(m_context.toolSize); updateCursor(); updateSelectionState(); updateTool(b->tool()); } } -void CaptureWidget::loadDrawThickness() -{ - if ((activeButtonToolType() == CaptureTool::TYPE_TEXT) || - (m_activeTool && m_activeTool->type() == CaptureTool::TYPE_TEXT)) { - m_context.thickness = m_config.drawFontSize(); - } else { - m_context.thickness = m_config.drawThickness(); - } - emit m_sidePanel->thicknessChanged(m_context.thickness); -} - void CaptureWidget::handleToolSignal(CaptureTool::Request r) { switch (r) { @@ -1137,16 +1128,52 @@ void CaptureWidget::handleToolSignal(CaptureTool::Request r) } break; case CaptureTool::REQ_INCREASE_TOOL_SIZE: - updateThickness(m_context.thickness + 1); + setToolSize(m_context.toolSize + 1); break; case CaptureTool::REQ_DECREASE_TOOL_SIZE: - updateThickness(m_context.thickness - 1); + setToolSize(m_context.toolSize - 1); break; default: break; } } +/** + * Was setDrawThickness + * - Update config options + * - Update tool object thickness + */ +void CaptureWidget::onToolSizeChanged(int t) +{ + CaptureTool* tool = activeButtonTool(); + if (tool && tool->showMousePreview()) { + setCursor(Qt::BlankCursor); + } + + // update tool size of object being drawn + if (m_activeTool != nullptr) { + updateTool(m_activeTool); + } + + // update tool size of selected object + auto toolItem = activeToolObject(); + if (toolItem) { + // Change thickness + toolItem->onSizeChanged(t); + if (!m_existingObjectIsChanged) { + m_captureToolObjectsBackup = m_captureToolObjects; + m_existingObjectIsChanged = true; + } + drawToolsData(); + updateTool(toolItem); + } +} + +void CaptureWidget::onToolSizeSettled(int size) +{ + m_config.setToolSize(activeButtonToolType(), size); +} + void CaptureWidget::setDrawColor(const QColor& c) { m_context.color = c; @@ -1228,30 +1255,6 @@ void CaptureWidget::removeToolObject(int index) } } -void CaptureWidget::setDrawThickness(int t) -{ - m_context.thickness = qBound(1, t, maxDrawThickness); - // save draw thickness for text and other tool separately - if (m_activeButton) { - if (activeButtonToolType() == CaptureTool::TYPE_TEXT) { - m_config.setDrawFontSize(m_context.thickness); - } else { - m_config.setDrawThickness(m_context.thickness); - } - } - - auto toolItem = activeToolObject(); - if (toolItem) { - // Change thickness - toolItem->onThicknessChanged(t); - drawToolsData(); - drawObjectSelection(); - updateTool(toolItem); - } else { - emit thicknessChanged(m_context.thickness); - } -} - void CaptureWidget::initShortcuts() { new QShortcut( @@ -1309,11 +1312,11 @@ void CaptureWidget::initShortcuts() void CaptureWidget::deleteCurrentTool() { - int thickness_old = m_context.thickness; + int oldToolSize = m_context.toolSize; m_panel->slotButtonDelete(true); drawObjectSelection(); - if (thickness_old != m_context.thickness) { - emit thicknessChanged(m_context.thickness); + if (oldToolSize != m_context.toolSize) { + emit toolSizeChanged(m_context.toolSize); } } @@ -1400,9 +1403,9 @@ void CaptureWidget::pushToolToStack() m_activeTool, &CaptureTool::onColorChanged); disconnect(this, - &CaptureWidget::thicknessChanged, + &CaptureWidget::toolSizeChanged, m_activeTool, - &CaptureTool::onThicknessChanged); + &CaptureTool::onSizeChanged); if (m_panel->toolWidget()) { disconnect(m_panel->toolWidget(), nullptr, m_activeTool, nullptr); } @@ -1447,9 +1450,9 @@ void CaptureWidget::drawObjectSelection() if (toolItem && !toolItem->editMode()) { QPainter painter(&m_context.screenshot); toolItem->drawObjectSelection(painter); - if (m_context.thickness != toolItem->thickness()) { - m_context.thickness = - toolItem->thickness() <= 0 ? 0 : toolItem->thickness(); + // TODO move this elsewhere + if (m_context.toolSize != toolItem->size()) { + m_context.toolSize = toolItem->size(); } if (activeToolObject() && m_activeButton) { uncheckActiveTool(); diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index a3d444f2..01852733 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -59,7 +59,7 @@ signals: void captureTaken(uint id, QPixmap p, QRect selection); void captureFailed(uint id); void colorChanged(const QColor& c); - void thicknessChanged(int thickness); + void toolSizeChanged(int size); private slots: void undo(); @@ -73,7 +73,8 @@ private slots: void setState(CaptureToolButton* b); void handleToolSignal(CaptureTool::Request r); void setDrawColor(const QColor& c); - void setDrawThickness(int t); + void onToolSizeChanged(int size); + void onToolSizeSettled(int size); void updateActiveLayer(int layer); void selectAll(); @@ -94,7 +95,6 @@ protected: void changeEvent(QEvent* changeEvent) override; private: - void loadDrawThickness(); void pushObjectsStateToUndoStack(); void releaseActiveTool(); void uncheckActiveTool(); @@ -116,7 +116,7 @@ private: void pushToolToStack(); void makeChild(QWidget* w); - void updateThickness(int thicknessOffset); + void setToolSize(int size); QRect extendedSelection() const; QRect extendedRect(const QRect& r) const; @@ -144,7 +144,7 @@ private: // Outside selection opacity int m_opacity; - int m_thicknessByKeyboard; + int m_toolSizeByKeyboard; // utility flags bool m_mouseIsClicked; diff --git a/src/widgets/panel/sidepanelwidget.cpp b/src/widgets/panel/sidepanelwidget.cpp index 8ea11775..eb1ced78 100644 --- a/src/widgets/panel/sidepanelwidget.cpp +++ b/src/widgets/panel/sidepanelwidget.cpp @@ -31,12 +31,12 @@ SidePanelWidget::SidePanelWidget(QPixmap* p, QWidget* parent) } QFormLayout* colorForm = new QFormLayout(); - m_thicknessSlider = new QSlider(Qt::Horizontal); - m_thicknessSlider->setRange(1, maxDrawThickness); - m_thicknessSlider->setValue(m_thickness); + m_toolSizeSlider = new QSlider(Qt::Horizontal); + m_toolSizeSlider->setRange(1, maxToolSize); + m_toolSizeSlider->setValue(m_toolSize); m_colorLabel = new QLabel(); m_colorLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - colorForm->addRow(tr("Active thickness:"), m_thicknessSlider); + colorForm->addRow(tr("Active tool size:"), m_toolSizeSlider); colorForm->addRow(tr("Active color:"), m_colorLabel); m_layout->addLayout(colorForm); @@ -56,15 +56,15 @@ SidePanelWidget::SidePanelWidget(QPixmap* p, QWidget* parent) m_layout->addWidget(m_colorWheel); m_layout->addWidget(m_colorHex); - // thickness sigslots - connect(m_thicknessSlider, + // tool size sigslots + connect(m_toolSizeSlider, &QSlider::sliderMoved, this, - &SidePanelWidget::thicknessChanged); + &SidePanelWidget::toolSizeChanged); connect(this, - &SidePanelWidget::thicknessChanged, + &SidePanelWidget::toolSizeChanged, this, - &SidePanelWidget::updateThickness); + &SidePanelWidget::onToolSizeChanged); // color hex editor sigslots connect(m_colorHex, &QLineEdit::editingFinished, this, [=]() { if (!QColor::isValidColor(m_colorHex->text())) { @@ -93,10 +93,10 @@ void SidePanelWidget::onColorChanged(const QColor& c) m_colorWheel->setColor(c); } -void SidePanelWidget::updateThickness(const int& t) +void SidePanelWidget::onToolSizeChanged(const int& t) { - m_thickness = qBound(0, t, maxDrawThickness); - m_thicknessSlider->setValue(m_thickness); + m_toolSize = qBound(0, t, maxToolSize); + m_toolSizeSlider->setValue(m_toolSize); } void SidePanelWidget::startColorGrab() diff --git a/src/widgets/panel/sidepanelwidget.h b/src/widgets/panel/sidepanelwidget.h index 6f156e6c..76a6b5de 100644 --- a/src/widgets/panel/sidepanelwidget.h +++ b/src/widgets/panel/sidepanelwidget.h @@ -14,7 +14,7 @@ class ColorGrabWidget; class QColorPickingEventFilter; class QSlider; -constexpr int maxDrawThickness = 50; +constexpr int maxToolSize = 50; class SidePanelWidget : public QWidget { @@ -27,12 +27,12 @@ public: signals: void colorChanged(const QColor& c); - void thicknessChanged(int t); + void toolSizeChanged(int t); void togglePanel(); public slots: + void onToolSizeChanged(const int& t); void onColorChanged(const QColor& c); - void updateThickness(const int& t); private slots: void startColorGrab(); @@ -56,6 +56,6 @@ private: QPixmap* m_pixmap; QColor m_color; QColor m_revertColor; - QSlider* m_thicknessSlider; - int m_thickness; + QSlider* m_toolSizeSlider; + int m_toolSize; };