| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
Much of the time in drawText() is used on text layouting, which is
wasted time when the text is not updated every frame. QStaticText is
meant to cache the relevant parts of this work. It currently uses
a copy-paste of the layout code in QPainter::drawText() and 99% of the
time in QPainter::drawStaticText() is spent in drawTextItem(). We can
use QTextLayout here instead without losing much.
|
|
|
|
|
|
|
| |
Make sure we always use the absolute path to the pro file so it will
just work from either source or build dir.
This fixes the usecase where qmake generated a relative path starting
with '..'
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Using renderPixmap() with scenes that contained textures might not work
due to the wrong texture format being used under certain circumstances.
Task-number: QTBUG-7213
Reviewed-by: Gunnar
|
| |\
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
4.6-integration
* '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2:
Fix rules for recreating the Makefile in a subdir
Disable some tests that require high floating point precision.
Replace the truncate function with fuzzierCompare().
Rework how Qt handles GL extensions.
More changelog additions for QtWebKit
Make compile on symbian/Linux
Removed pointless image comparison in raster colorize filter.
Improved performance of translating device coordinate graphics effects.
|
| | |\
| | | |
| | | |
| | | |
| | | | |
Conflicts:
dist/changes-4.6.1
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The code generated would always create the Makefile in the sourcedir, even
if you had src!=build
Reviewed-By: Thiago
|
| | | |
| | | |
| | | |
| | | | |
Disable them if sizeof(qreal)==4
|
| | |\ \ |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Qt used to store the GL extensions a particular implementation supported
in a global cache, which was initialized once and never updated.
This could cause problems because different types of context might
support different kinds of extensions (e.g. the difference between
sw and hw contexts). With this patch, the GL extensions are cached
and updated within each QGLContext. It also makes the extension
initialization lazy, which saves application initialization costs for
embedded platforms.
The patch introduces a internal cross platform QGLTemporaryContext
class that is used to create a light-weight GL context without going
via QGLWidget and friends (QWS and WinCE still have QGLWidget fallbacks
for now).
Reviewed-by: Kim
Reviewed-by: Samuel
|