[qet] [2419] element editor: improve the drag of the scene with wheel click

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 2419
Author:   blacksun
Date:     2013-08-08 21:58:15 +0200 (Thu, 08 Aug 2013)
Log Message:
-----------
element editor: improve the drag of the scene with wheel click

Modified Paths:
--------------
    trunk/sources/editor/editorcommands.cpp
    trunk/sources/editor/elementscene.cpp
    trunk/sources/editor/elementscene.h
    trunk/sources/editor/elementview.cpp
    trunk/sources/editor/elementview.h

Modified: trunk/sources/editor/editorcommands.cpp
===================================================================
--- trunk/sources/editor/editorcommands.cpp	2013-08-07 12:01:05 UTC (rev 2418)
+++ trunk/sources/editor/editorcommands.cpp	2013-08-08 19:58:15 UTC (rev 2419)
@@ -157,7 +157,7 @@
 		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 @@
 		}
 	}
 	editor_scene_ -> slot_select(content_);
-	editor_view_ -> adjustSceneRect();
+	editor_view_ -> zoomFit();
 }
 
 /**

Modified: trunk/sources/editor/elementscene.cpp
===================================================================
--- trunk/sources/editor/elementscene.cpp	2013-08-07 12:01:05 UTC (rev 2418)
+++ trunk/sources/editor/elementscene.cpp	2013-08-08 19:58:15 UTC (rev 2419)
@@ -497,24 +497,6 @@
 }
 
 /**
-	@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
 	to imply any margin.
@@ -532,15 +514,6 @@
 }
 
 /**
-	@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.
 */

Modified: trunk/sources/editor/elementscene.h
===================================================================
--- trunk/sources/editor/elementscene.h	2013-08-07 12:01:05 UTC (rev 2418)
+++ trunk/sources/editor/elementscene.h	2013-08-08 19:58:15 UTC (rev 2419)
@@ -129,10 +129,7 @@
 	virtual QList<QGraphicsItem *> 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();

Modified: trunk/sources/editor/elementview.cpp
===================================================================
--- trunk/sources/editor/elementview.cpp	2013-08-07 12:01:05 UTC (rev 2418)
+++ trunk/sources/editor/elementview.cpp	2013-08-08 19:58:15 UTC (rev 2419)
@@ -114,7 +114,7 @@
 	le zoom est reinitialise
 */
 void ElementView::zoomFit() {
-	adjustSceneRect();
+	resetSceneRect();
 	fitInView(sceneRect(), Qt::KeepAspectRatio);
 }
 
@@ -122,26 +122,33 @@
 	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());
+}
+
+/**
 	Gere le fait de couper la selection = l'exporter en XML dans le
 	presse-papier puis la supprimer.
 */
@@ -353,6 +360,7 @@
 		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);

Modified: trunk/sources/editor/elementview.h
===================================================================
--- trunk/sources/editor/elementview.h	2013-08-07 12:01:05 UTC (rev 2418)
+++ trunk/sources/editor/elementview.h	2013-08-08 19:58:15 UTC (rev 2419)
@@ -59,6 +59,7 @@
 	void zoomFit();
 	void zoomReset();
 	void adjustSceneRect();
+	void resetSceneRect ();
 	void cut();
 	void copy();
 	void paste();


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/