[calligra] krita: Fixed a crash in the text brush

Dmitry Kazakov dimula73 at gmail.com
Sat Mar 10 07:44:31 UTC 2012


Git commit 3433d436dee9b1ad6b29a3b1215abd5daa0b6cb7 by Dmitry Kazakov.
Committed on 10/03/2012 at 09:40.
Pushed by dkazakov into branch 'master'.

Fixed a crash in the text brush

Now the brushes are running in a separate thread, so no QPixmap's
are available for work.

Also removes excessive includes of <QPixmap> everywhere

Please review for backporting to 2.4

CCMAIL:kimageshop at kde.org

M  +0    -1    krita/image/brushengine/kis_paintop_registry.cc
M  +0    -1    krita/image/kis_convolution_painter.cc
M  +0    -1    krita/image/kis_fill_painter.cc
M  +0    -1    krita/image/kis_gradient_painter.cc
M  +0    -1    krita/plugins/extensions/colorrange/dlg_colorrange.cc
M  +0    -1    krita/plugins/extensions/histogram/dlg_histogram.cc
M  +0    -1    krita/plugins/extensions/histogram/kis_histogram_widget.cc
M  +0    -2    krita/plugins/filters/levelfilter/kgradientslider.cpp
M  +11   -11   krita/plugins/paintops/libbrush/kis_text_brush.cpp
M  +0    -1    krita/ui/canvas/kis_qpainter_canvas.cpp
M  +0    -1    krita/ui/dialogs/kis_dlg_preferences.cc
M  +0    -1    krita/ui/kis_bookmarked_filter_configurations_model.cc
M  +0    -1    krita/ui/ko_favorite_resource_manager.h

http://commits.kde.org/calligra/3433d436dee9b1ad6b29a3b1215abd5daa0b6cb7

diff --git a/krita/image/brushengine/kis_paintop_registry.cc b/krita/image/brushengine/kis_paintop_registry.cc
index ffe695e..fc88b08 100644
--- a/krita/image/brushengine/kis_paintop_registry.cc
+++ b/krita/image/brushengine/kis_paintop_registry.cc
@@ -17,7 +17,6 @@
  */
 
 #include "kis_paintop_registry.h"
-#include <QPixmap>
 
 #include <kglobal.h>
 #include <klocale.h>
diff --git a/krita/image/kis_convolution_painter.cc b/krita/image/kis_convolution_painter.cc
index ec8320f..318d188 100644
--- a/krita/image/kis_convolution_painter.cc
+++ b/krita/image/kis_convolution_painter.cc
@@ -32,7 +32,6 @@
 #include <QImage>
 #include <QMap>
 #include <QPainter>
-#include <QPixmap>
 #include <QRect>
 #include <QString>
 #include <QVector>
diff --git a/krita/image/kis_fill_painter.cc b/krita/image/kis_fill_painter.cc
index 54734c9..f241585 100644
--- a/krita/image/kis_fill_painter.cc
+++ b/krita/image/kis_fill_painter.cc
@@ -33,7 +33,6 @@
 #include <QImage>
 #include <QMap>
 #include <QPainter>
-#include <QPixmap>
 #include <QRect>
 #include <QString>
 
diff --git a/krita/image/kis_gradient_painter.cc b/krita/image/kis_gradient_painter.cc
index f3af3ef..b110998 100644
--- a/krita/image/kis_gradient_painter.cc
+++ b/krita/image/kis_gradient_painter.cc
@@ -32,7 +32,6 @@
 #include <QImage>
 #include <QMap>
 #include <QPainter>
-#include <QPixmap>
 #include <QRect>
 #include <QString>
 
diff --git a/krita/plugins/extensions/colorrange/dlg_colorrange.cc b/krita/plugins/extensions/colorrange/dlg_colorrange.cc
index 59cd9cf..3ab6832 100644
--- a/krita/plugins/extensions/colorrange/dlg_colorrange.cc
+++ b/krita/plugins/extensions/colorrange/dlg_colorrange.cc
@@ -24,7 +24,6 @@
 #include <QCheckBox>
 #include <QSlider>
 #include <QComboBox>
-#include <QPixmap>
 #include <QImage>
 #include <QLabel>
 #include <QColor>
diff --git a/krita/plugins/extensions/histogram/dlg_histogram.cc b/krita/plugins/extensions/histogram/dlg_histogram.cc
index 7d06166..388c807 100644
--- a/krita/plugins/extensions/histogram/dlg_histogram.cc
+++ b/krita/plugins/extensions/histogram/dlg_histogram.cc
@@ -24,7 +24,6 @@
 #include <QCheckBox>
 #include <QSlider>
 #include <QComboBox>
-#include <QPixmap>
 #include <QImage>
 #include <QLabel>
 
diff --git a/krita/plugins/extensions/histogram/kis_histogram_widget.cc b/krita/plugins/extensions/histogram/kis_histogram_widget.cc
index 764fdca..58dad2a 100644
--- a/krita/plugins/extensions/histogram/kis_histogram_widget.cc
+++ b/krita/plugins/extensions/histogram/kis_histogram_widget.cc
@@ -20,7 +20,6 @@
 #include "kis_histogram_widget.h"
 
 #include <QPainter>
-#include <QPixmap>
 #include <QLabel>
 #include <QComboBox>
 #include <QPushButton>
diff --git a/krita/plugins/filters/levelfilter/kgradientslider.cpp b/krita/plugins/filters/levelfilter/kgradientslider.cpp
index 955199c..d0290bc 100644
--- a/krita/plugins/filters/levelfilter/kgradientslider.cpp
+++ b/krita/plugins/filters/levelfilter/kgradientslider.cpp
@@ -28,7 +28,6 @@
 
 // Qt includes.
 
-#include <QPixmap>
 #include <QPainter>
 #include <QPoint>
 #include <QPen>
@@ -60,7 +59,6 @@ void KGradientSlider::paintEvent(QPaintEvent *)
 
     const int gradientHeight = (int)round((double)wHeight / 7.0 * 2);
 
-    // A QPixmap is used for enable the double buffering.
     QPainter p1(this);
 
     // Draw first gradient
diff --git a/krita/plugins/paintops/libbrush/kis_text_brush.cpp b/krita/plugins/paintops/libbrush/kis_text_brush.cpp
index 9725fd0..36bcd38 100644
--- a/krita/plugins/paintops/libbrush/kis_text_brush.cpp
+++ b/krita/plugins/paintops/libbrush/kis_text_brush.cpp
@@ -23,7 +23,6 @@
 #include <QDomElement>
 #include <QFontMetrics>
 #include <QPainter>
-#include <QPixmap>
 #include "kis_gbr_brush.h"
 
 KisTextBrush::KisTextBrush()
@@ -114,22 +113,23 @@ void KisTextBrush::updateBrush()
 QImage KisTextBrush::renderChar(const QString& text)
 {
     QFontMetrics metric(m_font);
-    int w = metric.width(text);
-    int h = metric.height();
+    QRect rect = metric.boundingRect(text);
 
-    // don't crash, if there is no text
-    if (w==0) w=1;
-    if (h==0) h=1;
+    if (rect.isEmpty()) {
+        rect = QRect(0, 0, 1, 1); // paint at least something
+    }
+
+    QRect paintingRect = rect.translated(-rect.x(), -rect.y());
 
-    QPixmap px(w, h);
+    QImage renderedChar(paintingRect.size(), QImage::Format_ARGB32);
     QPainter p;
-    p.begin(&px);
+    p.begin(&renderedChar);
     p.setFont(m_font);
-    p.fillRect(0, 0, w, h, Qt::white);
+    p.fillRect(paintingRect, Qt::white);
     p.setPen(Qt::black);
-    p.drawText(0, metric.ascent(), text);
+    p.drawText(-rect.x(), -rect.y(), text);
     p.end();
-    return px.toImage();
+    return renderedChar;
 }
 
 
diff --git a/krita/ui/canvas/kis_qpainter_canvas.cpp b/krita/ui/canvas/kis_qpainter_canvas.cpp
index a318a33..ab1073a 100644
--- a/krita/ui/canvas/kis_qpainter_canvas.cpp
+++ b/krita/ui/canvas/kis_qpainter_canvas.cpp
@@ -30,7 +30,6 @@
 #include <QString>
 #include <QTime>
 #include <QTimer>
-#include <QPixmap>
 #include <QApplication>
 #include <QMenu>
 
diff --git a/krita/ui/dialogs/kis_dlg_preferences.cc b/krita/ui/dialogs/kis_dlg_preferences.cc
index 840f454..f51138b 100644
--- a/krita/ui/dialogs/kis_dlg_preferences.cc
+++ b/krita/ui/dialogs/kis_dlg_preferences.cc
@@ -29,7 +29,6 @@
 #include <QLabel>
 #include <QLayout>
 #include <QLineEdit>
-#include <QPixmap>
 #include <QPushButton>
 #include <QSlider>
 #include <QToolButton>
diff --git a/krita/ui/kis_bookmarked_filter_configurations_model.cc b/krita/ui/kis_bookmarked_filter_configurations_model.cc
index c74f7f0..777627b 100644
--- a/krita/ui/kis_bookmarked_filter_configurations_model.cc
+++ b/krita/ui/kis_bookmarked_filter_configurations_model.cc
@@ -19,7 +19,6 @@
 #include "kis_bookmarked_filter_configurations_model.h"
 
 #include <QFutureWatcher>
-#include <QPixmap>
 #include <QSignalMapper>
 #include <QtConcurrentRun>
 
diff --git a/krita/ui/ko_favorite_resource_manager.h b/krita/ui/ko_favorite_resource_manager.h
index d3605b8..4db70be 100644
--- a/krita/ui/ko_favorite_resource_manager.h
+++ b/krita/ui/ko_favorite_resource_manager.h
@@ -24,7 +24,6 @@
 #include "kis_color_data_list.h"
 #include <QQueue>
 #include <QList>
-#include <QPixmap>
 #include "KoResourceServerObserver.h"
 
 class QString;


More information about the kimageshop mailing list