fixes: https://gitlab.com/kicad/code/kicad/-/issues/19047
(note: it would trigger only in shove mode when the head overlaps exactly an existing trace - removeHeads() would consider the segments already present in the PCB
as belonging to the current head, erasing them for good from subsequent shove iterations)
- allow small modifications for LINE's ends as a fallback scenario in case of shove failure
- make sure unwindLineStack() won't remove tadpole vias with pending collisions on layer other than the current head line
fixes: https://gitlab.com/kicad/code/kicad/-/issues/19082
fixes: https://gitlab.com/kicad/code/kicad/-/issues/19045
(note to self: it often happens on boards imported from foreign tools of when the clearance has been subtly changed, the router would fail
if the start/end of a LINE is inside a hull of another LINE).
The GL context lock needs to be shared across kifaces. Otherwise, we
can end up blocking the lock from one kiface. Unfortunately, I can't
find the issue in GitLab right now for where the footprint viewer shows
a blank screen after opening too many contexts. But that's what this
fixes.
Having thread pool as its own singleton in the library meant that each
kiface had its own threadpool, leading to many multiples of the threads
being started. Placing a singleton class in PGM_BASE ensures that all
kifaces use the same thread pool.
The singleton class can be extended to provide single instance
guarantee for any element across kifaces
Make the VIEW* parameter const. Since PCB_TEXT does a null-check,
it's not very clear if this can ever be null (and if it is,
why don't the other VIEW_ITEMs check?), so don't make them
all references too at this time.
Also dereference a few pointers a bit earlier to make non-null
promises sooner rather than later.
Saves a mishmash of local HIDE/SHOW defs along with various literals.
Also provide a function that computes the scale at which a given
IU size becomes (notionally) a certain size on screen. While this
is a simple division, it's a bit opaque in terms of meaning.
Also it means the divide by zero case can be more universally
defended-against, which has traditionally been a bug opportunity.
* Don't hide the annular rings control - makes confusing UI
* Always show annular rings control - all boards must have >2 layers
anyway
* Move into single column of choice boxes to be cleaner and take less
monitor space
https://gitlab.com/kicad/code/kicad/-/issues/19457
Recommendation is to avoid using the year nomenclature as this
information is already encoded in the git repo. Avoids needing to
repeatly update.
Also updates AUTHORS.txt from current repo with contributor names