Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDynamicSensorFactoryDrawingAngle.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <QCheckBox>
9#include <QLabel>
10#include <QHBoxLayout>
11#include <kis_slider_spin_box.h>
12#include <KisAngleSelector.h>
13
16#include "KisKritaSensorPack.h"
17
18namespace {
19 auto safeDereferenceDrawingAngleSensor = lager::lenses::getset(
21 const KisKritaSensorPack *pack = dynamic_cast<const KisKritaSensorPack*>(data.sensorData.constData());
22 if (pack) {
24 } else {
25 qWarning() << "safeDereferenceDrawingAngleSensor(get): failed to get a Krita sensor data";
27 }
28 },
30 KisKritaSensorPack *pack = dynamic_cast<KisKritaSensorPack*>(data.sensorData.data());
31 if (pack) {
32 pack->sensorsStruct().sensorDrawingAngle = sensor;
33 } else {
34 qWarning() << "safeDereferenceDrawingAngleSensor(set): failed to get a Krita sensor data";
35 }
36 return data;
37 });
38}
39
45
46QWidget *KisDynamicSensorFactoryDrawingAngle::createConfigWidget(lager::cursor<KisCurveOptionDataCommon> data, QWidget *parent)
47{
48 QWidget *widget = new QWidget(parent);
49
51 new KisDrawingAngleSensorModel(data.zoom(safeDereferenceDrawingAngleSensor), widget);
52
53 using namespace KisWidgetConnectionUtils;
54
55 QCheckBox *chkLockedMode = new QCheckBox(i18nc("Lock Drawing angle at start of each stroke", "Lock"), widget);
56 connectControl(chkLockedMode, model, "lockedAngleMode");
57
58 QCheckBox *chkFanCorners = new QCheckBox(i18nc("Smoothing Drawing angle when a stroke is making a sharp turn", "Fan Corners"), widget);
59 connectControl(chkFanCorners, model, "fanCornersEnabled");
60
61 KisSliderSpinBox *intFanCornersStep = new KisSliderSpinBox(widget);
62 intFanCornersStep->setRange(5, 90);
63 intFanCornersStep->setSingleStep(1);
64 intFanCornersStep->setSuffix(i18n("°"));
65 connectControl(intFanCornersStep, model, "fanCornersStep");
66
67 KisAngleSelector *angleOffset = new KisAngleSelector(widget);
68 angleOffset->setDecimals(0);
69 angleOffset->setRange(-180, 180);
71 connectControl(angleOffset, model, "angleOffsetInverted");
72
73 QVBoxLayout *layout = new QVBoxLayout(widget);
74 layout->addWidget(chkLockedMode);
75 layout->addWidget(chkFanCorners);
76 layout->addWidget(intFanCornersStep);
77 layout->addWidget(new QLabel(i18n("Angle Offset")));
78 layout->addWidget(angleOffset);
79
80 return widget;
81}
82
const KoID DrawingAngleId("drawingangle", ki18nc("Context: dynamic sensors", "Drawing angle"))
number depending on the angle
A widget with several options to select an angle.
@ FlipOptionsMode_MenuButton
The flip options are shown as a menu accessible via a options button.
void setFlipOptionsMode(FlipOptionsMode newMode)
Sets the mode in which the flip options should be shown.
void setRange(qreal newMinimum, qreal newMaximum)
Sets the minimum and maximum values for the angle.
void setDecimals(int newNumberOfDecimals)
Sets the number of decimals (precision) used by the angle.
QWidget * createConfigWidget(lager::cursor< KisCurveOptionDataCommon > data, QWidget *parent) override
const KisKritaSensorData & constSensorsStruct() const
KisKritaSensorData & sensorsStruct()
This class is a spinbox in which you can click and drag to set the value. A slider like bar is displa...
void setRange(int newMinimum, int newMaximum, bool computeNewFastSliderStep=true)
Set the minimum and the maximum values of the range, computing a new "fast slider step" based on the ...
QSharedDataPointer< KisSensorPackInterface > sensorData
KisDrawingAngleSensorData sensorDrawingAngle