diff --git a/sources/editor/editorcommands.cpp b/sources/editor/editorcommands.cpp index 8f3a5c68e..60f70fb7d 100644 --- a/sources/editor/editorcommands.cpp +++ b/sources/editor/editorcommands.cpp @@ -157,7 +157,7 @@ void PastePartsCommand::undo() { editor_view_ -> offset_paste_count_ = old_offset_paste_count_; editor_view_ -> start_top_left_corner_ = old_start_top_left_corner_; } - editor_view_ -> adjustSceneRect(); + editor_view_ -> zoomFit(); } /// refait le coller @@ -176,7 +176,7 @@ void PastePartsCommand::redo() { } } editor_scene_ -> slot_select(content_); - editor_view_ -> adjustSceneRect(); + editor_view_ -> zoomFit(); } /** diff --git a/sources/editor/elementscene.cpp b/sources/editor/elementscene.cpp index d8c7aa99d..08ba8f32e 100644 --- a/sources/editor/elementscene.cpp +++ b/sources/editor/elementscene.cpp @@ -496,24 +496,6 @@ void ElementScene::fromXml( } } -/** - @return le rectangle representant les limites de l'element. - Ce rectangle a pour dimensions la taille de l'element et pour coin - superieur gauche les coordonnees opposees du hotspot. -*/ -QRectF ElementScene::borderRect() const { - return(QRectF(-elementSceneGeometricRect().topLeft(), QSizeF(width(), height()))); -} - -/** - @return un rectangle englobant toutes les parties ainsi que le - "bounding rect" de l'element -*/ -QRectF ElementScene::sceneContent() const { - qreal adjustment = 5.0; - return(elementContentBoundingRect(items()).unite(borderRect()).adjusted(-adjustment, -adjustment, adjustment, adjustment)); -} - /** @return the minimum, margin-less rectangle the element can fit into, in scene coordinates. It is different from itemsBoundingRect() because it is not supposed @@ -531,15 +513,6 @@ QRectF ElementScene::elementSceneGeometricRect() const{ return (esgr); } -/** - @return true si toutes les parties graphiques composant l'element sont - integralement contenues dans le rectangle representant les limites de - l'element. -*/ -bool ElementScene::borderContainsEveryParts() const { - return(borderRect().contains(elementContentBoundingRect(items()))); -} - /** @return true si l'element comporte au moins une borne, false s'il n'en a aucune. diff --git a/sources/editor/elementscene.h b/sources/editor/elementscene.h index 606f67198..86e5fd4a9 100644 --- a/sources/editor/elementscene.h +++ b/sources/editor/elementscene.h @@ -129,10 +129,7 @@ class ElementScene : public QGraphicsScene { virtual QList zItems(ItemOptions options = ItemOptions(SortByZValue | IncludeTerminals | SelectedOrNot)) const; virtual ElementContent selectedContent() const; virtual void getPasteArea(const QRectF &); - QRectF borderRect() const; - QRectF sceneContent() const; QRectF elementSceneGeometricRect () const; - bool borderContainsEveryParts() const; bool containsTerminals() const; QUndoStack &undoStack(); QGIManager &qgiManager(); diff --git a/sources/editor/elementview.cpp b/sources/editor/elementview.cpp index 7d1a99318..30a1f5779 100644 --- a/sources/editor/elementview.cpp +++ b/sources/editor/elementview.cpp @@ -114,7 +114,7 @@ void ElementView::zoomOut() { le zoom est reinitialise */ void ElementView::zoomFit() { - adjustSceneRect(); + resetSceneRect(); fitInView(sceneRect(), Qt::KeepAspectRatio); } @@ -122,23 +122,30 @@ void ElementView::zoomFit() { Reinitialise le zoom */ void ElementView::zoomReset() { - adjustSceneRect(); + resetSceneRect(); resetMatrix(); scale(4.0, 4.0); } /** - Ajuste le sceneRect (zone du schema visualisee par l'ElementView) afin que - celui inclut a la fois les parties dans et en dehors du cadre et le cadre - lui-meme. + Ajuste le sceneRect (zone du schéma visualisée par l'ElementView) afin que + celui-ci inclut à la fois les primitives de l'élément ainsi que le viewport + de la scène avec une marge de 1/4 d'elle-même. */ void ElementView::adjustSceneRect() { - QRectF old_scene_rect = scene_ -> sceneRect(); - QRectF new_scene_rect = scene_ -> sceneContent(); - setSceneRect(new_scene_rect); - - // met a jour la scene - scene_ -> update(old_scene_rect.united(new_scene_rect)); + QRectF esgr = scene_ -> elementSceneGeometricRect(); + QRectF vpbr = mapToScene(this -> viewport() -> rect()).boundingRect(); + QRectF new_scene_rect = vpbr.adjusted(-vpbr.height()/4, -vpbr.width()/4, vpbr.height()/4, vpbr.width()/4); + setSceneRect(new_scene_rect.united(esgr)); +} + +/** + * @brief ElementView::resetSceneRect + * reset le sceneRect (zone du schéma visualisée par l'ElementView) afin que + * celui-ci inclut uniquement les primitives de l'élément dessiné. + */ +void ElementView::resetSceneRect() { + setSceneRect(scene_ -> elementSceneGeometricRect()); } /** @@ -353,6 +360,7 @@ void ElementView::mouseMoveEvent(QMouseEvent *e) { QPointF move = reference_view_ - mapToScene(e -> pos()); this -> centerOn(center_view_ + move); center_view_ = mapToScene(this -> viewport() -> rect()).boundingRect().center(); + adjustSceneRect(); return; } QGraphicsView::mouseMoveEvent(e); diff --git a/sources/editor/elementview.h b/sources/editor/elementview.h index 7ae8d9cf6..ac3d15662 100644 --- a/sources/editor/elementview.h +++ b/sources/editor/elementview.h @@ -59,6 +59,7 @@ class ElementView : public QGraphicsView { void zoomFit(); void zoomReset(); void adjustSceneRect(); + void resetSceneRect (); void cut(); void copy(); void paste();