| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Compile QStaticText and also use font object in QPaintBuffer since it's
now available
|
|
|
|
| |
This will be needed by OpenVG paint engine, and is useful elsewhere.
|
|
|
|
| |
Optimization for drawStaticText()
|
|
|
|
|
|
|
| |
This function is the main performance hog when using QStaticText with
the OpenGL engine, so I've improved on it a little by removing the
conversion from (qreal,qreal) -> QPointF -> QGLPoint. Since the function
is called so often, it has an impact on drawStaticText().
|
|
|
|
|
|
| |
Make QPaintEngineEx::drawStaticTextItem() pure virtual to make sure
it's implemented in all engines, and implement the paint buffer version
to make gui compile.
|
| |
|
|
|
|
|
| |
Projected text always has to go via paths, so we use the fall back for
this.
|
|
|
|
|
|
|
| |
Using QImage would only let us test the raster engine. Substitute
QPixmap, so we can test different graphics systems. Also initialize the
memory in the pixmaps (this was missed because memory is initialized by
default in debug builds.)
|
|
|
|
|
| |
This is more suited to be a benchmark, as it doesn't cover the
functionality of the class.
|
| |
|
|
|
|
|
|
|
|
| |
The two runs (counting the number of items and then storing the
information) needs to be identical, so they need to have the same text
flags set. Otherwise we would count more items than we actually
generated and crash later when we tried to access an uninitialized
item.
|
|
|
|
| |
The pointers are included in the per item overhead.
|
|
|
|
| |
Some errors introduced by merges.
|
|
|
|
|
| |
I've added a flag char, so the size of the static text is now one byte
greater.
|
|
|
|
|
|
|
| |
In order to be feature consistent with drawText(), we have to clip the
text whenever the text expands beyond its borders. This is a
performance hit, but luckily we can detect the cases where it's
necessary before-hand.
|
|
|
|
|
|
| |
Allow the QStaticText layout to be completely defined prior to painting
by introducing a function for setting the font and transform on the
object ahead of using it with a QPainter.
|
|
|
|
| |
Update the code to compile with merged changes.
|
|
|
|
|
|
|
|
|
|
|
|
| |
The OpenGL and OpenGL2 engines now have support for static text, as
well as the QEmulationPaintEngine.
Also contains an optimization: Instead of passing both the position and
glyph positions to drawStaticTextItem() we add the position into the
glyph position and update it only when it changes. Otherwise we would
have to do this work in all engines for every call. This means we have
to cache the position in QStaticTextPrivate as well, but it seems like
a small price to pay, since it's a per-text overhead and only 16 bytes.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
painter
1. The font property in QStaticText has been removed. Rather than set a
font on the text explicitly, it picks up the font from the painter. If
you change the font on the painter, the text layout will have to be
updated, like with a matrix.
2. The translation might not be the only transformation on the painter,
so rather than translate back to origo, we explicitly set dx and dy
on the transform to 0.0 for the duration of the function.
3. Update test to reflect changes
|
|
|
|
|
|
| |
Combining rotations and translations will cause minor differences
between drawText() and drawStaticText(). This is not what the function
is testing, so it has been massaged to pass.
|
|
|
|
| |
Don't save images by default.
|
|
|
|
|
|
|
|
| |
There are tiny rounding errors in the matrix rotations which cause tiny
differences in drawText() and drawStaticText(). I've chosen to ignore
these. Instead of having a threshold on the comparison between the two
images, I've chosen to take the easy way out and avoid the problem by
not passing in any position for the text.
|
|
|
|
|
|
| |
Instead of translating each position manually afterwards, just have
the matrix do it when calculating the positions inside
getGlyphPositions().
|
|
|
|
|
|
| |
We need to transform the position of the text in accordance with the
painter's matrix. Also, use state->matrix directly instead of calling
a function to get it.
|
|
|
|
|
| |
Most of these tests currently fail revealing som offset bugs in the
painting code.
|
|
|
|
|
| |
Remove a private include which was unresolvable in autotests (because
it indirectly included a 3rdparty header) and add Q_AUTOTEST_EXPORT.
|
|
|
|
| |
Clarify the use of transformations combined with static texts.
|
|
|
|
|
|
|
|
|
|
| |
1. Support transformations on the painter in drawStaticText().
Transforming the painter will cause the text layout to be recalculated,
except for translations, which are handled by shifting the position of
the text items.
2. Make const length arrays of the internal data in QStaticTextItem in
order to minimize the memory consumption.
|
|
|
|
|
|
|
|
|
|
|
| |
By caching the results of getGlyphPositions() we can make a code path
in the critical paint engines which is optimal both in space and speed.
The engines where speed is of less importance (pdf engine etc.) which
may need more information, we choose the slower code path of drawText()
which lays out the text again. We should have optimal paths in raster,
vg and GL2 paint engines. The others are less important. Memory
consumption of static text is now 14 bytes per glyph, 8 bytes per item
and a static overhead of 40 bytes per QStaticText object.
|
|
|
|
|
|
|
| |
The const-specifier on the char format was unecessary, and made the
operator= implementation ugly, so it has been removed.
Reviewed-by: Simon Hausmann
|
|
|
|
|
|
|
| |
drawText() that renders into a QRect will clip the text (unless
otherwise set by the text flags passed to the function.) In
drawStaticText() we should do the same for identical behavior. We also
need to respect the font set on the QStaticText object.
|
|
|
|
|
| |
Tests that QStaticText rendering is identical to the same operations
done with regular QPainter::drawText()
|
|
|
|
|
|
|
| |
Put back maximumSize property in QStaticText to allow matching calls
to drawText with a target rectangle. Implementation is done by
having a dummy paint engine which records the calls to drawTextItem()
and storing these, then replaying them later.
|
|
|
|
|
|
|
| |
Don't use QVector to store the text items, but put them in a regular
array for quick access.
drawStaticText() is now about 2.7 times the speed of drawText().
|
|
|
|
| |
Also clone the offsets structure into the new QGlyphLayout.
|
|
|
|
|
|
|
| |
The engine.layoutData's glyph count is the number allocated, which may
be larger than the actual number of glyphs. To minimize the space needed
we base allocation on "used" which contains the number of glyphs
actually used to represent the text.
|
|
|
|
|
|
|
| |
QTextLayout takes a lot of memory. We can get a bigger speed-up and
a more reasonable memory consumption by only supporting the single
line static texts and caching the text items. We need to copy some
structs from the text engine, since this is on the stack.
|
| |
|
| |
|
|
|
|
| |
Q_DECLARE_PRIVATE requires d_ptr to be a QFooPointer<>-object.
|
|
|
|
|
| |
Adds copy constructor, operator==, operator= and operator!= to
QStaticText. Implemented using an implicitly shared private object.
|
|
|
|
|
| |
The QStaticText(QString) constructor has been replaced by a constructor
with defaults for the additional arguments
|
|
|
|
|
|
| |
People should be able to initialize the QStaticText lazily, or change
its data after instantiation. Each of the setters will recalculate the
layout to make sure it's always in sync.
|
| |
|
|
|
|
|
| |
Adds the integer based overloads as inline functions, same as for
QPainter::drawText().
|
|
|
|
|
| |
The rectangle should clip the text vertically and break lines
horizontally, to mirror behavior of QPainter::drawText().
|
|
|
|
|
| |
Support to mirror drawText(QRectF, QString). Instead of a rect you give
the text a static size and then paint it to an arbitrary point later on.
|
|
|
|
| |
Trailing spaces and an extra line of whitespace.
|
|
|
|
|
| |
To mirror the behavior of drawText() the y-position origin should be the
baseline of the text.
|
|
|
|
|
| |
Not much to gain by going directly to the QTextEngine, and the code
is a lot simpler if we just use the QTextLayout instead.
|