summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2009-05-06 07:43:32 (GMT)
committerSamuel Rødal <sroedal@trolltech.com>2009-05-06 08:01:58 (GMT)
commitffbb3c1a2aee4134dce80cd144a26bf32865b698 (patch)
tree3f633a0cd4911d355d84c6109c44a4c71734f7c4
parenta1d2c3c589a03cc427dcc22d109003576add9500 (diff)
downloadQt-ffbb3c1a2aee4134dce80cd144a26bf32865b698.zip
Qt-ffbb3c1a2aee4134dce80cd144a26bf32865b698.tar.gz
Qt-ffbb3c1a2aee4134dce80cd144a26bf32865b698.tar.bz2
Fixed some inconsistencies for image drawing on non-integer coords.
Don't use aliased coordinate delta for image drawing. Related to change fde7475bcf9c10522a8170e6eb8fb9a8fadc21cd. Task-number: 251561 Reviewed-by: Trond
-rw-r--r--src/gui/painting/qblendfunctions.cpp12
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp6
-rw-r--r--tests/arthur/data/qps/borderimage.qps20
-rw-r--r--tests/arthur/data/qps/borderimage_qps.pngbin88788 -> 90704 bytes
4 files changed, 27 insertions, 11 deletions
diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp
index dd7b016..93f11e1 100644
--- a/src/gui/painting/qblendfunctions.cpp
+++ b/src/gui/painting/qblendfunctions.cpp
@@ -44,8 +44,6 @@
QT_BEGIN_NAMESPACE
-static const qreal aliasedCoordinateDelta = 0.5 - 0.015625;
-
struct SourceOnlyAlpha
{
inline uchar alpha(uchar src) const { return src; }
@@ -140,14 +138,11 @@ struct Blend_ARGB32_on_RGB16_SourceAndConstAlpha {
template <typename SRC, typename T>
void qt_scale_image_16bit(uchar *destPixels, int dbpl,
const uchar *srcPixels, int sbpl,
- const QRectF &target,
+ const QRectF &targetRect,
const QRectF &srcRect,
const QRect &clip,
T blender)
{
- const QRectF targetRect = target.translated(aliasedCoordinateDelta,
- aliasedCoordinateDelta);
-
qreal sx = targetRect.width() / (qreal) srcRect.width();
qreal sy = targetRect.height() / (qreal) srcRect.height();
@@ -618,14 +613,11 @@ struct Blend_ARGB32_on_ARGB32_SourceAndConstAlpha {
template <typename T> void qt_scale_image_32bit(uchar *destPixels, int dbpl,
const uchar *srcPixels, int sbpl,
- const QRectF &target,
+ const QRectF &targetRect,
const QRectF &srcRect,
const QRect &clip,
T blender)
{
- const QRectF targetRect = target.translated(aliasedCoordinateDelta,
- aliasedCoordinateDelta);
-
qreal sx = targetRect.width() / (qreal) srcRect.width();
qreal sy = targetRect.height() / (qreal) srcRect.height();
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 788b722..cbfd5e3 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -2573,7 +2573,11 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
QRasterPaintEngineState *s = state();
const bool aa = s->flags.antialiased || s->flags.bilinear;
if (!aa && sr.size() == QSize(1, 1)) {
- fillRect(r, QColor::fromRgba(img.pixel(sr.x(), sr.y())));
+ // as fillRect will apply the aliased coordinate delta we need to
+ // subtract it here as we don't use it for image drawing
+ const QRectF targetRect = r.translated(-aliasedCoordinateDelta,
+ -aliasedCoordinateDelta);
+ fillRect(targetRect, QColor::fromRgba(img.pixel(sr.x(), sr.y())));
return;
}
diff --git a/tests/arthur/data/qps/borderimage.qps b/tests/arthur/data/qps/borderimage.qps
index 747a74d..14073fe 100644
--- a/tests/arthur/data/qps/borderimage.qps
+++ b/tests/arthur/data/qps/borderimage.qps
@@ -106,6 +106,23 @@ repeat_block draw_column
resetMatrix
setRenderHint Antialiasing off
+translate 200.1 520.1
+
+begin_block one_pixel_border
+drawImage borderimage 0 0 16 16 0 0 16 16
+drawImage borderimage 16 0 64 16 16 0 1 1
+drawImage borderimage 80 0 16 16 48 0 16 16
+
+drawImage borderimage 0 16 16 64 16 0 1 1
+drawImage borderimage 80 16 16 64 16 0 1 1
+
+drawImage borderimage 0 80 16 16 0 48 16 16
+drawImage borderimage 16 80 64 16 16 0 1 1
+drawImage borderimage 80 80 16 16 48 48 16 16
+end_block one_pixel_border
+
+resetMatrix
+
setPen red
drawRect 0 0 70 680
@@ -127,3 +144,6 @@ drawText 174 114 "smoothpixmaptransform off"
drawRect 164 128 224 134
drawText 174 252 "smoothpixmaptransform on"
+
+drawRect 200 520 97 128
+drawText 210 638 "1x1 edges"
diff --git a/tests/arthur/data/qps/borderimage_qps.png b/tests/arthur/data/qps/borderimage_qps.png
index 89a8eba..a4ec6cb 100644
--- a/tests/arthur/data/qps/borderimage_qps.png
+++ b/tests/arthur/data/qps/borderimage_qps.png
Binary files differ