• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • krita API Reference
  • KDE Home
  • Contact Us
 

KritaWidgets

  • sources
  • kfour-appscomplete
  • krita
  • libs
  • widgets
KisVisualTriangleSelectorShape.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Wolthera van Hovell tot Westerflier <[email protected]>, (C) 2016
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 #include "KisVisualTriangleSelectorShape.h"
7 
8 #include <QColor>
9 #include <QPainter>
10 #include <QRect>
11 #include <QtMath>
12 
13 #include "kis_debug.h"
14 #include "kis_global.h"
15 
16 KisVisualTriangleSelectorShape::KisVisualTriangleSelectorShape(QWidget *parent,
17  Dimensions dimension,
18  const KoColorSpace *cs,
19  int channel1, int channel2,
20  const KoColorDisplayRendererInterface *displayRenderer,
21  int margin)
22  : KisVisualColorSelectorShape(parent, dimension, cs, channel1, channel2, displayRenderer),
23  m_margin(margin)
24 {
25  //qDebug() << "creating KisVisualTriangleSelectorShape" << this;
26 }
27 
28 KisVisualTriangleSelectorShape::~KisVisualTriangleSelectorShape()
29 {
30  //qDebug() << "deleting KisVisualTriangleSelectorShape" << this;
31 }
32 
33 void KisVisualTriangleSelectorShape::setBorderWidth(int /*width*/)
34 {
35  // triangle doesn't have a 1-dimensional mode
36 }
37 
38 QRect KisVisualTriangleSelectorShape::getSpaceForSquare(QRect geom)
39 {
40  return geom;
41 }
42 
43 QRect KisVisualTriangleSelectorShape::getSpaceForCircle(QRect geom)
44 {
45  return geom;
46 }
47 
48 QRect KisVisualTriangleSelectorShape::getSpaceForTriangle(QRect geom)
49 {
50  return geom;
51 }
52 
53 QPointF KisVisualTriangleSelectorShape::convertShapeCoordinateToWidgetCoordinate(QPointF coordinate) const
54 {
55  // margin serves to render the cursor, and triangle is rendered 1px larger than its active area
56  qreal offset = m_margin + 1.0;
57 
58  qreal y = (coordinate.y() * (height() - 1 - 2 * offset)) + offset;
59 
60  qreal triWidth = width() - 1 - 2 * offset;
61  qreal horizontalLineLength = coordinate.y() * triWidth;
62  qreal horizontalLineStart = offset + 0.5 * (triWidth - horizontalLineLength);
63 
64  qreal x = coordinate.x() * horizontalLineLength + horizontalLineStart;
65 
66  return QPointF(x, y);
67 }
68 
69 QPointF KisVisualTriangleSelectorShape::convertWidgetCoordinateToShapeCoordinate(QPointF coordinate) const
70 {
71  // margin serves to render the cursor, and triangle is rendered 1px larger than its active area
72  qreal offset = m_margin + 1.0;
73 
74  qreal x = 0.5;
75  qreal y = qBound(0.0, (coordinate.y() - offset)/(height() - 1 - 2 * offset), 1.0);
76 
77  if (y > 0) {
78  qreal triWidth = width() - 1 - 2 * offset;
79  qreal horizontalLineLength = y * triWidth;
80  qreal horizontalLineStart = offset + 0.5 * (triWidth - horizontalLineLength);
81 
82  x = qBound(0.0, (coordinate.x() - horizontalLineStart) / horizontalLineLength, 1.0);
83  }
84 
85  return QPointF(x, y);
86 }
87 
88 QRegion KisVisualTriangleSelectorShape::getMaskMap()
89 {
90  const int cursorWidth = qMax(2 * m_margin, 2);
91  QPolygon maskPoly;
92  maskPoly << QPoint(qFloor(0.5 * (width() - cursorWidth)), 0)
93  << QPoint(qCeil(0.5 * (width() + cursorWidth)), 0)
94  << QPoint(width(), height() - cursorWidth)
95  << QPoint(width(), height())
96  << QPoint(0, height())
97  << QPoint(0, height() - cursorWidth);
98 
99  return QRegion(maskPoly);
100 }
101 
102 QImage KisVisualTriangleSelectorShape::renderAlphaMask() const
103 {
104  // Hi-DPI aware rendering requires that we determine the device pixel dimension;
105  // actual widget size in device pixels is not accessible unfortunately, it might be 1px smaller...
106  const int deviceWidth = qCeil(width() * devicePixelRatioF());
107  const int deviceHeight = qCeil(height() * devicePixelRatioF());
108 
109  QImage alphaMask(deviceWidth, deviceHeight, QImage::Format_Alpha8);
110  alphaMask.fill(0);
111  alphaMask.setDevicePixelRatio(devicePixelRatioF());
112  QPainter painter(&alphaMask);
113  painter.setRenderHint(QPainter::Antialiasing);
114  painter.setBrush(Qt::white);
115  painter.setPen(Qt::NoPen);
116  QPointF triangle[3] = {
117  QPointF(0.5 * width(), m_margin),
118  QPointF(m_margin, height() - m_margin),
119  QPointF(width() - m_margin, height() - m_margin),
120  };
121  painter.drawConvexPolygon(triangle, 3);
122 
123  return alphaMask;
124 }
125 
126 void KisVisualTriangleSelectorShape::drawCursor()
127 {
128  //qDebug() << this << "KisVisualTriangleSelectorShape::drawCursor: image needs update" << imagesNeedUpdate();
129  QPointF cursorPoint = convertShapeCoordinateToWidgetCoordinate(getCursorPosition());
130  QImage fullSelector = getImageMap();
131  QColor col = getColorFromConverter(getCurrentColor());
132  QPainter painter(&fullSelector);
133  painter.setRenderHint(QPainter::Antialiasing);
134 
135  QBrush fill(Qt::SolidPattern);
136 
137  int cursorwidth = 5;
138 
139  painter.setPen(Qt::white);
140  fill.setColor(Qt::white);
141  painter.setBrush(fill);
142  painter.drawEllipse(cursorPoint, cursorwidth, cursorwidth);
143  fill.setColor(col);
144  painter.setPen(Qt::black);
145  painter.setBrush(fill);
146  painter.drawEllipse(cursorPoint, cursorwidth-1.0, cursorwidth-1.0);
147 
148  painter.end();
149  setFullImage(fullSelector);
150 }
QColor
QWidget::y
int y() const
QPainter::setPen
void setPen(const QColor &color)
QPainter::drawConvexPolygon
void drawConvexPolygon(const QPointF *points, int pointCount)
QRegion
QImage::fill
void fill(uint pixelValue)
QRect
KisVisualColorSelectorShape::getCurrentColor
KoColor getCurrentColor()
getCurrentColor
Definition: KisVisualColorSelectorShape.cpp:354
KisVisualColorSelectorShape::Dimensions
Dimensions
The Dimensions enum Whether or not the shape is single or two dimensional.
Definition: KisVisualColorSelectorShape.h:45
KisVisualTriangleSelectorShape::getSpaceForTriangle
QRect getSpaceForTriangle(QRect geom) override
Definition: KisVisualTriangleSelectorShape.cpp:48
KisVisualTriangleSelectorShape::getSpaceForSquare
QRect getSpaceForSquare(QRect geom) override
getSpaceForSquare
Definition: KisVisualTriangleSelectorShape.cpp:38
QWidget
KisVisualColorSelectorShape::getImageMap
QImage getImageMap()
Definition: KisVisualColorSelectorShape.cpp:156
KisVisualTriangleSelectorShape::getSpaceForCircle
QRect getSpaceForCircle(QRect geom) override
Definition: KisVisualTriangleSelectorShape.cpp:43
QWidget::x
int x() const
QPolygon
KisVisualColorSelectorShape::setFullImage
void setFullImage(QImage full)
setFullImage Set the full widget image to be painted.
Definition: KisVisualColorSelectorShape.cpp:350
QPainter
QPointF
KisVisualTriangleSelectorShape::setBorderWidth
void setBorderWidth(int) override
setBorderWidth set the border of the single dimensional selector.
Definition: KisVisualTriangleSelectorShape.cpp:33
KisVisualTriangleSelectorShape.h
KisVisualTriangleSelectorShape::~KisVisualTriangleSelectorShape
~KisVisualTriangleSelectorShape() override
Definition: KisVisualTriangleSelectorShape.cpp:28
KisVisualColorSelectorShape::getCursorPosition
QPointF getCursorPosition()
getCursorPosition
Definition: KisVisualColorSelectorShape.cpp:67
KisVisualTriangleSelectorShape::KisVisualTriangleSelectorShape
KisVisualTriangleSelectorShape(QWidget *parent, Dimensions dimension, const KoColorSpace *cs, int channel1, int channel2, const KoColorDisplayRendererInterface *displayRenderer=KoDumbColorDisplayRenderer::instance(), int margin=5)
Definition: KisVisualTriangleSelectorShape.cpp:16
QBrush
QPainter::setBrush
void setBrush(const QBrush &brush)
KisVisualColorSelectorShape
The KisVisualColorSelectorShape class A 2d widget can represent at maximum 2 coordinates.
Definition: KisVisualColorSelectorShape.h:37
QWidget::height
int height() const
QPointF::x
qreal x() const
QPointF::y
qreal y() const
QPainter::setRenderHint
void setRenderHint(RenderHint hint, bool on)
QWidget::width
int width() const
QImage
KisVisualTriangleSelectorShape::renderAlphaMask
QImage renderAlphaMask() const override
render the alpha mask for the widget background the returned image is expected to be QImage::Format_A...
Definition: KisVisualTriangleSelectorShape.cpp:102
QPoint
KisVisualColorSelectorShape::getColorFromConverter
QColor getColorFromConverter(KoColor c)
getColorFromConverter
Definition: KisVisualColorSelectorShape.cpp:129
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Tue Jan 19 2021 23:44:00 by doxygen 1.8.16 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KritaWidgets

Skip menu "KritaWidgets"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

krita API Reference

Skip menu "krita API Reference"
  • libs
  •   KritaBasicFlakes
  •   brush
  •   KritaUndo2
  •   KritaFlake
  •   image
  •   KritaPlugin
  •   Krita
  •   KritaPigment
  •   KritaResources
  •   KritaStore
  •   ui
  •   KritaWidgets
  •   KritaWidgetUtils
  • plugins
  •   Assitants
  •   Extensions
  •   Filters
  •   Generators
  •   Formats
  •           src
  •   PaintOps
  •     libpaintop

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal