[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [krita/krita-testing-wolthera] libs/ui/widgets: Make drawing the image slightly faster.
From: Wolthera van Hovell tot Westerflier <griffinvalley () gmail ! com>
Date: 2016-08-20 14:49:16
Message-ID: E1bb7aG-0007ze-7Z () code ! kde ! org
[Download RAW message or body]
Git commit 541b596e74547fcbd8e14857e08685e88e9450cd by Wolthera van Hovell tot \
Westerflier. Committed on 20/08/2016 at 14:47.
Pushed by woltherav into branch 'krita-testing-wolthera'.
Make drawing the image slightly faster.
But it's not fast enough yet. Also using QImage everywhere now, it's a bit more \
sensible...
Ref T2438
M +25 -27 libs/ui/widgets/kis_visual_color_selector.cpp
M +2 -2 libs/ui/widgets/kis_visual_color_selector.h
http://commits.kde.org/krita/541b596e74547fcbd8e14857e08685e88e9450cd
diff --git a/libs/ui/widgets/kis_visual_color_selector.cpp \
b/libs/ui/widgets/kis_visual_color_selector.cpp index ab98f84..e7d6a46 100644
--- a/libs/ui/widgets/kis_visual_color_selector.cpp
+++ b/libs/ui/widgets/kis_visual_color_selector.cpp
@@ -194,9 +194,9 @@ void KisVisualColorSelector::leaveEvent(QEvent *)
/*------------Selector shape------------*/
struct KisVisualColorSelectorShape::Private
{
- QPixmap gradient;
- QPixmap fullSelector;
- bool pixmapsNeedUpdate = true;
+ QImage gradient;
+ QImage fullSelector;
+ bool imagesNeedUpdate= true;
QPointF currentCoordinates;
Dimensions dimension;
ColorModel model;
@@ -261,7 +261,7 @@ void KisVisualColorSelectorShape::setColor(KoColor c)
m_d->currentColor = c;
updateCursor();
convertShapeCoordinateToKoColor(getCursorPosition(), true);
- m_d->pixmapsNeedUpdate = true;
+ m_d->imagesNeedUpdate = true;
update();
}
@@ -272,7 +272,7 @@ void KisVisualColorSelectorShape::setColorFromSibling(KoColor c)
}
m_d->currentColor = c;
Q_EMIT sigNewColor(c);
- m_d->pixmapsNeedUpdate = true;
+ m_d->imagesNeedUpdate = true;
update();
}
@@ -294,7 +294,7 @@ void KisVisualColorSelectorShape::setDisplayRenderer (const \
KoColorDisplayRender void \
KisVisualColorSelectorShape::updateFromChangedDisplayRenderer() {
qDebug()<<"update from changed display renderer";
- m_d->pixmapsNeedUpdate = true;
+ m_d->imagesNeedUpdate = true;
updateCursor();
//m_d->currentColor = convertShapeCoordinateToKoColor(getCursorPosition());
update();
@@ -315,30 +315,30 @@ void KisVisualColorSelectorShape::slotSetActiveChannels(int \
channel1, int channe int maxchannel = m_d->cs->colorChannelCount()-1;
m_d->channel1 = qBound(0, channel1, maxchannel);
m_d->channel2 = qBound(0, channel2, maxchannel);
- m_d->pixmapsNeedUpdate = true;
+ m_d->imagesNeedUpdate = true;
update();
}
-QPixmap KisVisualColorSelectorShape::getPixmap()
+QImage KisVisualColorSelectorShape::getImageMap()
{
- if (m_d->pixmapsNeedUpdate == true) {
- m_d->pixmapsNeedUpdate = false;
- m_d->gradient = QPixmap(width(), height());
+ if (m_d->imagesNeedUpdate == true) {
+ m_d->imagesNeedUpdate = false;
+ m_d->gradient = QImage(width(), height(), QImage::Format_ARGB32);
m_d->gradient.fill(Qt::transparent);
- QImage img(width(), height(), QImage::Format_RGB32);
- img.fill(Qt::transparent);;
-
+ QImage img(width(), height(), QImage::Format_ARGB32);
+ img.fill(Qt::transparent);
for (int y = 0; y<img.height(); y++) {
- for (int x=0; x<img.width(); x++) {
+ uint* data = reinterpret_cast<uint*>(img.scanLine(y));
+ for (int x=0; x<img.width(); x++, ++data) {
QPoint widgetPoint(x,y);
QPointF newcoordinate = \
convertWidgetCoordinateToShapeCoordinate(widgetPoint);
KoColor c = convertShapeCoordinateToKoColor(newcoordinate);
QColor col = getColorFromConverter(c);
- img.setPixel(widgetPoint, col.rgb());
+ *data = col.rgba();
}
}
- m_d->gradient = QPixmap::fromImage(img, Qt::AvoidDither);
+ m_d->gradient = img;
}
return m_d->gradient;
}
@@ -574,11 +574,11 @@ void KisVisualColorSelectorShape::paintEvent(QPaintEvent*)
//check if old and new colors differ.
- if (m_d->pixmapsNeedUpdate) {
+ if (m_d->imagesNeedUpdate) {
setMask(getMaskMap());
}
drawCursor();
- painter.drawPixmap(0,0,m_d->fullSelector);
+ painter.drawImage(0,0,m_d->fullSelector);
}
KisVisualColorSelectorShape::Dimensions KisVisualColorSelectorShape::getDimensions()
@@ -591,7 +591,7 @@ KisVisualColorSelectorShape::ColorModel \
KisVisualColorSelectorShape::getColorMod return m_d->model;
}
-void KisVisualColorSelectorShape::setFullImage(QPixmap full)
+void KisVisualColorSelectorShape::setFullImage(QImage full)
{
m_d->fullSelector = full;
}
@@ -836,7 +836,7 @@ QRegion KisVisualRectangleSelectorShape::getMaskMap()
void KisVisualRectangleSelectorShape::drawCursor()
{
QPointF cursorPoint = \
convertShapeCoordinateToWidgetCoordinate(getCursorPosition());
- QPixmap fullSelector = getPixmap();
+ QImage fullSelector = getImageMap();
QColor col = getColorFromConverter(getCurrentColor());
QPainter painter;
painter.begin(&fullSelector);
@@ -984,16 +984,15 @@ QRegion KisVisualEllipticalSelectorShape::getMaskMap()
void KisVisualEllipticalSelectorShape::drawCursor()
{
QPointF cursorPoint = \
convertShapeCoordinateToWidgetCoordinate(getCursorPosition());
- QPixmap fullSelector = getPixmap();
+ QImage fullSelector = getImageMap();
QColor col = getColorFromConverter(getCurrentColor());
QPainter painter;
painter.begin(&fullSelector);
painter.setRenderHint(QPainter::Antialiasing);
painter.save();
- //painter.setCompositionMode(QPainter::CompositionMode_Clear);
+ painter.setCompositionMode(QPainter::CompositionMode_Clear);
QPen pen;
- pen.setColor(this->palette().background().color());
pen.setWidth(5);
painter.setPen(pen);
painter.drawEllipse(this->geometry());
@@ -1135,16 +1134,15 @@ QRegion KisVisualTriangleSelectorShape::getMaskMap()
void KisVisualTriangleSelectorShape::drawCursor()
{
QPointF cursorPoint = \
convertShapeCoordinateToWidgetCoordinate(getCursorPosition());
- QPixmap fullSelector = getPixmap();
+ QImage fullSelector = getImageMap();
QColor col = getColorFromConverter(getCurrentColor());
QPainter painter;
painter.begin(&fullSelector);
painter.setRenderHint(QPainter::Antialiasing);
painter.save();
- //painter.setCompositionMode(QPainter::CompositionMode_Clear);
+ painter.setCompositionMode(QPainter::CompositionMode_Clear);
QPen pen;
- pen.setColor(this->palette().background().color());
pen.setWidth(5);
painter.setPen(pen);
painter.drawPolygon(m_triangle);
diff --git a/libs/ui/widgets/kis_visual_color_selector.h \
b/libs/ui/widgets/kis_visual_color_selector.h index 19929a6..30d15cd 100644
--- a/libs/ui/widgets/kis_visual_color_selector.h
+++ b/libs/ui/widgets/kis_visual_color_selector.h
@@ -120,13 +120,13 @@ public:
* the pixmap will not change unless 'm_d->setPixmap=true' which is toggled by
* refresh and update functions.
*/
- QPixmap getPixmap();
+ QImage getImageMap();
/**
* @brief setFullImage
* Set the full widget image to be painted.
* @param full this should be the full image.
*/
- void setFullImage(QPixmap full);
+ void setFullImage(QImage full);
/**
* @brief getCurrentColor
* @return the current kocolor
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic