Matrix stack could overflow in a very special case when beginShape() was
called while strokeWeight=1 and then strokeWeight was changed before
endShape(). This PR makes sure matrix is popped correctly even when user
changes strokeWeight in the beginShape()/endShape() block.
Decided to bug user only when necessary and not show warining when user
changes strokeWeight in the beginShape()/endShape() block, same as in
JAVA2D. Otherwise we could add checks for all the other things which are
mentioned in the docs, but it would be hell to maintain and use.
Fixes#4206
OPENGL and FX renderers will now correctly report button which triggered
this pressed/released event (same as JAVA2D).
Previously:
- OPENGL would report currently pressed buttons in order LEFT, CENTER,
RIGHT regardless of which button triggered the event. E.g. when holding
LEFT and presing RIGHT, LEFT would be reported. When holding CENTER and
pressing LEFT, LEFT would be reported
- FX would report only first button which is down, so in RELEASE event
button would be missing
Now:
- event contains only button which triggred this event (button just
pressed or just released)
Fixes#4748
Libraries imported in opened sketches will be still locked by latest
preprocessed CompilationUnit. Otherwise we would have to copy library
jars somewhere else so they can be available to CompilationUnit while
Contribution Manager updates original unlocked jars.
Remove weird unused thread-spawning constructor
Accept IProblem instead of whole JavaProblem
Move fallback process() from JavaProblem to EMSimplifier as a default
case
Add debug switch and move debug logging into if blocks
TokenMarker now serves as a holder for keyword list and to provide
marking logic. I extracted the rest into TokenMarkerState. Each tab now
has its own state, preventing bugs by leaking TokenMarker state between
tabs amd Editor instances.
There is no need to recompile any Modes, however TokenMarker should be
redesigned in the next major version and Modes updated accordingly.
For more details read TokenMarkerState header.
Replace non-capturing groups by positive lookahead and lookbehind,
because they don't consume the source String and allow for first and
last group to overlap when two constructors are directly nested.
Fixes#4652