mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-06 03:04:13 +02:00
Fix bugtracker #112: no snap in the symbol editor below 100 % zoom
Below 100 % ElementView::drawBackground() hid the grid and also set the snap step to 1 unit, so anything dragged while zoomed out landed off the grid with nothing on screen to show it. A large symbol opens fitted to the window below 100 %, which is why the report also says "when the selection is big". Keep hiding the grid below 100 % (its dots would merge into a grey wash), but snap every 10 units, as at 100 %. The zoom-to-grid rule moves into a header-only ElementViewGrid so it can be tested without an editor window, like textgrid.h. Checked in the editor: a one-rectangle symbol zoomed out to about 0.6x, its edge dragged by (15, 10) px and saved: master moves it by (28, 18), this branch by (30, 20). tst_elementviewgrid fails with the old step 1 and passes now; ctest 45/45. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
#include "elementview.h"
|
||||
|
||||
#include "elementviewgrid.h"
|
||||
|
||||
#include "../qetapp.h"
|
||||
#include "UndoCommand/pastepartscommand.h"
|
||||
#include "ui/qetelementeditor.h"
|
||||
@@ -535,27 +537,11 @@ void ElementView::drawBackground(QPainter *p, const QRectF &r) {
|
||||
|
||||
// choisit la granularite de la grille en fonction du zoom en cours
|
||||
// selects the grid granularity according to the current zoom level
|
||||
int drawn_x_grid = 1;//scene_ -> xGrid();
|
||||
int drawn_y_grid = 1;//scene_ -> yGrid();
|
||||
bool draw_grid = true;
|
||||
bool draw_cross = false;
|
||||
|
||||
if (zoom_factor < 1.0) { //< no grid
|
||||
draw_grid = false;
|
||||
} else if (zoom_factor < 4.0) { //< grid 10*10
|
||||
drawn_x_grid *= 10;
|
||||
drawn_y_grid *= 10;
|
||||
}else if (zoom_factor < 8.0) { //< grid 5*5
|
||||
drawn_x_grid *= 5;
|
||||
drawn_y_grid *= 5;
|
||||
draw_cross = true;
|
||||
} else if (zoom_factor < 10.0) { //< grid 2*2
|
||||
drawn_x_grid *= 2;
|
||||
drawn_y_grid *= 2;
|
||||
draw_cross = true;
|
||||
} else { //< grid 1*1
|
||||
draw_cross = true;
|
||||
}
|
||||
const ElementViewGrid grid = ElementViewGrid::forZoom(zoom_factor);
|
||||
const int drawn_x_grid = grid.step;
|
||||
const int drawn_y_grid = grid.step;
|
||||
const bool draw_grid = grid.draw_grid;
|
||||
const bool draw_cross = grid.draw_cross;
|
||||
|
||||
m_scene->setGrid(drawn_x_grid, drawn_y_grid);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user