The border around the selection overlaps the line rect, so in order to
correctly repaint the selection when scrolling we need to widen the
prefiltering of painted selection.
Change-Id: I953749571e3e9ae412bf05f47ab3c4c3bfb8861e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This prevents calculating the block bounding rect for blocks outside of
the cliprect.
Change-Id: I4a7311c3f41cab329098f6dfc122d60bd89d215d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
QTextLayout::lineForTextPosition can return invalid lines,
which when accessed may crash. To workaround we add
QTC_ASSERT to guard against this (see linked issue crash report)
Fixes: QTCREATORBUG-28837
Change-Id: I66d8d8a46e766caa492ec2178b1fa88e35211333
Reviewed-by: David Schulz <david.schulz@qt.io>
Especially targets the painting of empty snippet replacement placeholder
like in the default "if" snippet.
Change-Id: I42d9fb901c66cddf4eab9dd7275b42a8f4e81282
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Since we also license under GPL-3.0 WITH Qt-GPL-exception-1.0,
this applies only to a hypothetical newer version of GPL, that doesn't
exist yet. If such a version emerges, we can still decide to relicense...
While at it, replace (deprecated) GPL-3.0 with more explicit GPL-3.0-only
Change was done by running
find . -type f -exec perl -pi -e "s/LicenseRef-Qt-Commercial OR GPL-3.0\+ OR GPL-3.0 WITH Qt-GPL-exception-1.0/LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0/g" {} \;
Change-Id: I5097e6ce8d10233993ee30d7e25120e2659eb10b
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Calculating and optimizing a painter path with rounded corners can
freeze or under certain circumstances even crash Qt Creator. Since we
are using a less rounded design nowadays anyways we can also cut this
overhead.
Fixes: QTCREATORBUG-21056
Change-Id: I9cd5eaea00ab040d529f51ea6d2f337dd0a1f6b8
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Task-number: QTBUG-67283
Change-Id: I708fd1f9f2b73d60f57cc3568646929117825813
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Only calculate a painter path if it is inside the paint event rect.
Task-number: QTCREATORBUG-26812
Change-Id: I9e7026b70251347fe8c38fc5b9278de943786956
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Parsed snippets are now reported in chunks of texts and variables. A
variable has a index that can be used to identify matching variables and
maybe a mangler that can be used to modify the variable when applying
the snippet.
This effictively moves the variable matching logic from the overlay to
the parser of the snippet, which is needed to implement the LSP snippet
parser.
Task-number: QTCREATORBUG-22406
Change-Id: I6999554c6c6d0f1887c98bf732473f01aa1f230c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Split out the snippet functionality into a new derived
overlay implementation.
Change-Id: I2d7fffabe16ce6348ed067eb52ff221420a23285
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
QMap::iterator::operator+() was removed in 14090760a8, necessitating
extra code using std::next/prev to workaround.
QMap::unite is gone, the replacement QMap::insert was only introduced
in 5.15.
QMap key values need to have an operator==() available.
Task-number: QTCREATORBUG-24098
Change-Id: Ic4cf429ab18cad58b1218180de40eb65586afd77
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Some include of QPainterPath was removed in Qt, causing errors like:
easingpane\easinggraph.cpp(258): error C2079: 'path' uses undefined class 'QPainterPath'
easingpane\easinggraph.cpp(275): error C2027: use of undefined type 'QPainterPath'
easingpane\easinggraph.cpp(305): error C2664: 'void QPainter::drawPath(const QPainterPath &)': cannot convert argument 1 from 'int'
to 'const QPainterPath &'
easingpane\easinggraph.cpp(305): note: Reason: cannot convert from 'int' to 'const QPainterPath'
easingpane\easinggraph.cpp(305): note: use of undefined type 'QPainterPath'
...
Add the missing include statements.
Change-Id: I4f3383cbcec891a52480a683c9c76ed5deee2b2a
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
For some reason, Q_UNUSED includes already a semicolon, adding one
on the user side creates an additional empty statement.
Change-Id: I9c5e8fac381345a60792cb75e2938fd53958d3b0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Makes it possible to turn of specific overlays by unsetting the color.
Such color resulted in a black overlay until now, which is also kind of
unexpected.
Change-Id: I90732ae496af62b573b2e3b8d8c7fe56632ca8d9
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
The algorithm that creates the overlay selection path adds many
redundant curve elements. That is quite ineffecient when painting and it
also creates visual gaps.
This patch simplifies the path and therefore substantially reduces the
elements and removes the gaps.
Task-number: QTCREATORBUG-18518
Change-Id: If3558e226825426ca6b143eeba4239e6f0061df0
Reviewed-by: David Schulz <david.schulz@qt.io>
The public constructors in QTextCursor that were private API are no
longer public.
Task-number: QTCREATORBUG-15238
Change-Id: I3bc59670b62d4afaa645ffff1411b76029249840
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This avoids unnecessary detaches of the Qt container data.
The mismatches where detected by defining QT_STRICT_ITERATORS;
however, this define violates the ODR (causing linker errors),
and therefore is not added permanently.
Change-Id: Idd336a9c8b394214a820437ef1b92d2101f6101c
GPush-Base: 62b0848b9c
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
... and some of the related implementation details
Change-Id: I1f03aa5acf2d3fb2cfc2a6a7845f3d3578b0408d
Reviewed-by: David Schulz <david.schulz@digia.com>
Broken in 739795ce8c
This is a revert of the non-trivial parts of this commit.
Task-number: QTCREATORBUG-12661
Change-Id: Iad58750e03464605e6fcc6eff8262f3d7473b07e
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Use the same syntax already used in the custom wizard to denote
variables that are modified to be lower-/title-/uppercase:
$tESt:u$ will become TEST
$tESt:c$ will become TESt
$tESt:l$ will become test
The snippet will be inserted without any name mangling happening.
Once the editing is done the name mangling is applied to all fields.
Change-Id: I7c1f5a1ad2bb5acf1b88b54de51bb39391c64763
Reviewed-by: David Schulz <david.schulz@digia.com>
Reduce the padding in some often-used structs for 64bit machines.
32bit machines should also profit from most changes, but to a
lesser degree.
Change-Id: Ic4c67b94e962731de4f31164c52a372d78944ccc
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
#!/usr/bin/env ruby
Dir.glob('**/*.cpp') { |file|
# skip ast (excluding paste, astpath, and canv'ast'imer)
next if file =~ /ast[^eip]|keywords\.|qualifiers|preprocessor|names.cpp/i
s = File.read(file)
next if s.include?('qlalr')
orig = s.dup
s.gsub!(/\n *if [^\n]*{\n[^\n]*\n\s+}(\s+else if [^\n]* {\n[^\n]*\n\s+})*(\s+else {\n[^\n]*\n\s+})?\n/m) { |m|
res = $&
if res =~ /^\s*(\/\/|[A-Z_]{3,})/ # C++ comment or macro (Q_UNUSED, SDEBUG), do not touch braces
res
else
res.gsub!('} else', 'else')
res.gsub!(/\n +} *\n/m, "\n")
res.gsub(/ *{$/, '')
end
}
s.gsub!(/ *$/, '')
File.open(file, 'wb').write(s) if s != orig
}
Change-Id: I3b30ee60df0986f66c02132c65fc38a3fbb6bbdc
Reviewed-by: hjk <qthjk@ovi.com>
Problem was that typing into overlay selection of the snippet
parameter with no name ended the snippet editing. For example,
"do {$$} while ($confition$);" was unusable.
Change-Id: Ife0e68340de328a3492e242ce861f7c9dd225d7e
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
Getting the #include directives ready for Qt5. This includes the
new-project wizards.
Change-Id: Ia9261f1e8faec06b9285b694d2b7e9a095978d2b
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>