The LAYER_PAD_HOLEWALLS shape needs a rebuild only when the zoom level changes.
So keep trace of the last GAL zoom level to rebuild the shape, and only rebuild
the view when needed
(cherry picked from commit 3e51b2c647e44bb313345bf978dee40c4c39b525)
(and from commit 3dfd164e2b50167c02536f064ec4b1f3464a0087)
- Utilize scoped deletion for individual git_*_free() calls
- Protect against multiple usage when updating icons
- Reduce frequency of git update calls
(cherry picked from commit 26c331a83704bcc1f221e67fe6757a07dc9e920b)
When updating the footprint, we may encounter a missing footprint. We
should still modify the netlist against the existing footprint (if one
does exist) to match the netlist. This matches the behavior of updating
the netlist when fp are not selected for update
Fixes https://gitlab.com/kicad/code/kicad/-/issues/18249
(cherry picked from commit 72411af9de07e159845e22a322759ed134ce0159)
When solder mask min web is not 0, PlotSolderMaskLayer() uses GenerateLayerPoly(),
that skipped tracks (not updated since tracks can be on a mask layer)
(cherry picked from commit 7f1b412203e73a4275c8aa9a389926451e1e2171)
Also cleans up a misconception about table header borders,
and renames the getter/setter to be clearer.
Also makes sure that table cells are updated when the table
layer changes.
And another bug where we were writing the grey color value
back to the cell for hidden cells.
The Board layerset (because BOARD is a BOARD_ITEM) should return the
layers that the board contains instead of just the F.Cu. This assigns
the common function to map to the board-specific functions
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20317
(cherry picked from commit 96794e94e3fd233481f162fbebb3f18798afbf86)
When re-running the DRC creepage check, we need to ensure that the
element-element hittest set is cleared to report the same errors again
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20048
(cherry picked from commit 1c245ad01eb0b5b2f72360741559e0bb9e948803)
When a teardrop is the first zone (or the only one) in list (i.e. last tested)
it was ignored, and therefore not removed.
(cherry picked from commit ccc396a6c24e3339adff804db64ffedf327aeb70)
This heuristic seems to make the algorithm reject non-isomorphic mappings much earlier on and converges faster on a solution for typical circuits.
(cherry picked from commit 8192ba73d97d1909649d2b21da3cfb1a230ab90d)
This improves cloning of circuits with numerous of matching component mappings (e.g. LED matrices) by
taking preference for mappings with same order of net connections.
(cherry picked from commit 91ee987cfebce4478442adeac6906f57d3a9f424)
Note to self: we keep track of the formerly pushed vias in the line stack, but pruning one from the optimizer queue should not prune the lines attached to it.
(cherry picked from commit 78fc95fd6df04e61a2eb2982d2eabc7451458cf8)
Note to self: move-endpoints fallback mode must check for vias connected at the obstacle LINE's ends - fallback is only applicable for unconnected ends.
(cherry picked from commit 29a4ec0fde1fc3b978a43b3bbd32f1da9e787f81)
Note to self: managing the shove stack is quite challenging and there were a few corner cases
where reverse via/segment collisions would cause a head segment (or a via) to have multiple clones in the stack.
As SHOVE::removeHeads() took only complete head lines, sometimes it resulted with stray vias/segments.
Fixes https://gitlab.com/kicad/code/kicad/issues/19045
(cherry picked from commit bfbdfcf872bfcbca5431f5429807425268492ac8)
With this change, "A.Component_Class == 'SOME_CLASS'" will return
true if either SOME_CLASS exists in the list of component classes
attached o the footprint, or if SOME_CLASS is the full component
class name.
(cherry picked from commit 85e6978aa271528952427812bbc404d2341c4ff6)
The export SVG dialog was removed some time ago (merged with plot svg).
But some settings of this removed dialogs were not removed.
(cherry picked from commit 9a1cf81ca655374cbeee031a7e41d8200826b91d)
When A references B and B references A, the shared pointer reference
count will never go to zero by just removing the parent container. We
need to explicitly clear the shared pointer references when we are done
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20272
(cherry picked from commit 641e06e67c4358283eb35de7ffa269246e01d1a2)
This reverts previous behaviour whereby 'A.Netclass == x' compared
the full name of an effective netclass (e.g. 'Class1,Default'). This
was found to be unexpected behaviour to users, who were expecting
the equality to compare single netclasses. The equality check now
first checks for a constituent class with the given name, and then
falls back to a check of the full class name.
Inequality requires the netclass name being tested to not be a
constituent netclass and to not be the full class name.
(cherry picked from commit f0e287a87b070c29d7467b911d1280ebdabaefe6)
(Some of these items don't currently get printed, but
there's no sense in leaving a latent bug around in case
we ever change our minds.)
(cherry picked from commit 877c6bce8938e9ca6e3d3c6381a5dd5d9acfb9a4)
This can happen when running standalone, where component classes
have not been resolved.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20235
(cherry picked from commit 54540f9e827968a35ab44aef79e3d005ece8c916)
Since it is effectively infinite resolution, pass the vectors to the
printer and let it decide if there should be a dot there or not. Hiding
based on perspective is a screen optimization
Fixes https://gitlab.com/kicad/code/kicad/-/issues/20226
(cherry picked from commit 8e048d0c42a85add48470c3eb0ad6acbaf3ab283)