Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1068)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js

Issue 2451033002: DevTools: Allow several drag handlers running simultaneously. (Closed)
Patch Set: rebaseline Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js b/third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js
index 6320c16a6666fcf251bd90051cff2fe2176bba7d..f52714f6c8e90cd2da5c711a1d177663e873d159 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/UIUtils.js
@@ -48,7 +48,8 @@ WebInspector.installDragHandle = function(element, elementDragStart, elementDrag
*/
function onMouseDown(event)
{
- var dragStart = WebInspector.elementDragStart.bind(null, element, elementDragStart, elementDrag, elementDragEnd, cursor, event);
+ var dragHandler = new WebInspector.DragHandler();
+ var dragStart = dragHandler.elementDragStart.bind(dragHandler, element, elementDragStart, elementDrag, elementDragEnd, cursor, event);
if (startDelay)
startTimer = setTimeout(dragStart, startDelay);
else
@@ -80,118 +81,159 @@ WebInspector.installDragHandle = function(element, elementDragStart, elementDrag
*/
WebInspector.elementDragStart = function(targetElement, elementDragStart, elementDrag, elementDragEnd, cursor, event)
{
+ var dragHandler = new WebInspector.DragHandler();
+ dragHandler.elementDragStart(targetElement, elementDragStart, elementDrag, elementDragEnd, cursor, event);
+};
+
+/**
+ * @constructor
+ */
+WebInspector.DragHandler = function()
+{
+ this._elementDragMove = this._elementDragMove.bind(this);
+ this._elementDragEnd = this._elementDragEnd.bind(this);
+ this._mouseOutWhileDragging = this._mouseOutWhileDragging.bind(this);
+}
+
+WebInspector.DragHandler._glassPaneUsageCount = 0;
+
+WebInspector.DragHandler.prototype = {
+ _createGlassPane: function()
+ {
+ this._glassPaneInUse = true;
+ if (!WebInspector.DragHandler._glassPaneUsageCount++)
+ WebInspector.DragHandler._glassPane = new WebInspector.GlassPane(this._mouseOutWhileDraggingTargetDocument);
pfeldman 2016/10/26 19:30:07 _documentForMouseOut, also this will break on simu
+ },
+
+ _disposeGlassPane: function()
+ {
+ if (!this._glassPaneInUse)
+ return;
+ this._glassPaneInUse = false;
+ if (--WebInspector.DragHandler._glassPaneUsageCount)
+ return;
+ WebInspector.DragHandler._glassPane.dispose();
+ delete WebInspector.DragHandler._glassPane;
+ }
+};
+
+/**
+ * @param {!Element} targetElement
+ * @param {?function(!MouseEvent):boolean} elementDragStart
+ * @param {function(!MouseEvent)} elementDrag
+ * @param {?function(!MouseEvent)} elementDragEnd
+ * @param {string} cursor
+ * @param {!Event} event
+ */
+WebInspector.DragHandler.prototype.elementDragStart = function(targetElement, elementDragStart, elementDrag, elementDragEnd, cursor, event)
+{
// Only drag upon left button. Right will likely cause a context menu. So will ctrl-click on mac.
if (event.button || (WebInspector.isMac() && event.ctrlKey))
return;
- if (WebInspector._elementDraggingEventListener)
+ if (this._elementDraggingEventListener)
return;
if (elementDragStart && !elementDragStart(/** @type {!MouseEvent} */ (event)))
return;
- if (WebInspector._elementDraggingGlassPane) {
- WebInspector._elementDraggingGlassPane.dispose();
- delete WebInspector._elementDraggingGlassPane;
- }
+ this._disposeGlassPane();
var targetDocument = event.target.ownerDocument;
- WebInspector._elementDraggingEventListener = elementDrag;
- WebInspector._elementEndDraggingEventListener = elementDragEnd;
- WebInspector._mouseOutWhileDraggingTargetDocument = targetDocument;
- WebInspector._dragEventsTargetDocument = targetDocument;
- WebInspector._dragEventsTargetDocumentTop = targetDocument.defaultView.top.document;
+ this._elementDraggingEventListener = elementDrag;
+ this._elementEndDraggingEventListener = elementDragEnd;
+ this._mouseOutWhileDraggingTargetDocument = targetDocument;
+ this._dragEventsTargetDocument = targetDocument;
+ this._dragEventsTargetDocumentTop = targetDocument.defaultView.top.document;
- targetDocument.addEventListener("mousemove", WebInspector._elementDragMove, true);
- targetDocument.addEventListener("mouseup", WebInspector._elementDragEnd, true);
- targetDocument.addEventListener("mouseout", WebInspector._mouseOutWhileDragging, true);
- if (targetDocument !== WebInspector._dragEventsTargetDocumentTop)
- WebInspector._dragEventsTargetDocumentTop.addEventListener("mouseup", WebInspector._elementDragEnd, true);
+ targetDocument.addEventListener("mousemove", this._elementDragMove, true);
+ targetDocument.addEventListener("mouseup", this._elementDragEnd, true);
+ targetDocument.addEventListener("mouseout", this._mouseOutWhileDragging, true);
+ if (targetDocument !== this._dragEventsTargetDocumentTop)
+ this._dragEventsTargetDocumentTop.addEventListener("mouseup", this._elementDragEnd, true);
if (typeof cursor === "string") {
- WebInspector._restoreCursorAfterDrag = restoreCursor.bind(null, targetElement.style.cursor);
+ this._restoreCursorAfterDrag = restoreCursor.bind(this, targetElement.style.cursor);
targetElement.style.cursor = cursor;
targetDocument.body.style.cursor = cursor;
}
+ /**
+ * @param {string} oldCursor
+ * @this {WebInspector.DragHandler}
+ */
function restoreCursor(oldCursor)
{
targetDocument.body.style.removeProperty("cursor");
targetElement.style.cursor = oldCursor;
- WebInspector._restoreCursorAfterDrag = null;
+ this._restoreCursorAfterDrag = null;
}
event.preventDefault();
};
-WebInspector._mouseOutWhileDragging = function()
+WebInspector.DragHandler.prototype._mouseOutWhileDragging = function()
{
- var document = WebInspector._mouseOutWhileDraggingTargetDocument;
- WebInspector._unregisterMouseOutWhileDragging();
- WebInspector._elementDraggingGlassPane = new WebInspector.GlassPane(document);
+ this._unregisterMouseOutWhileDragging();
+ this._createGlassPane();
};
-WebInspector._unregisterMouseOutWhileDragging = function()
+WebInspector.DragHandler.prototype._unregisterMouseOutWhileDragging = function()
{
- if (!WebInspector._mouseOutWhileDraggingTargetDocument)
+ if (!this._mouseOutWhileDraggingTargetDocument)
return;
- WebInspector._mouseOutWhileDraggingTargetDocument.removeEventListener("mouseout", WebInspector._mouseOutWhileDragging, true);
- delete WebInspector._mouseOutWhileDraggingTargetDocument;
+ this._mouseOutWhileDraggingTargetDocument.removeEventListener("mouseout", this._mouseOutWhileDragging, true);
+ delete this._mouseOutWhileDraggingTargetDocument;
};
-WebInspector._unregisterDragEvents = function()
+WebInspector.DragHandler.prototype._unregisterDragEvents = function()
{
- if (!WebInspector._dragEventsTargetDocument)
+ if (!this._dragEventsTargetDocument)
return;
- WebInspector._dragEventsTargetDocument.removeEventListener("mousemove", WebInspector._elementDragMove, true);
- WebInspector._dragEventsTargetDocument.removeEventListener("mouseup", WebInspector._elementDragEnd, true);
- if (WebInspector._dragEventsTargetDocument !== WebInspector._dragEventsTargetDocumentTop)
- WebInspector._dragEventsTargetDocumentTop.removeEventListener("mouseup", WebInspector._elementDragEnd, true);
- delete WebInspector._dragEventsTargetDocument;
- delete WebInspector._dragEventsTargetDocumentTop;
+ this._dragEventsTargetDocument.removeEventListener("mousemove", this._elementDragMove, true);
+ this._dragEventsTargetDocument.removeEventListener("mouseup", this._elementDragEnd, true);
+ if (this._dragEventsTargetDocument !== this._dragEventsTargetDocumentTop)
+ this._dragEventsTargetDocumentTop.removeEventListener("mouseup", this._elementDragEnd, true);
+ delete this._dragEventsTargetDocument;
+ delete this._dragEventsTargetDocumentTop;
};
/**
* @param {!Event} event
*/
-WebInspector._elementDragMove = function(event)
+WebInspector.DragHandler.prototype._elementDragMove = function(event)
{
if (event.buttons !== 1) {
- WebInspector._elementDragEnd(event);
+ this._elementDragEnd(event);
return;
}
-
- if (WebInspector._elementDraggingEventListener(/** @type {!MouseEvent} */ (event)))
- WebInspector._cancelDragEvents(event);
+ if (this._elementDraggingEventListener(/** @type {!MouseEvent} */ (event)))
+ this._cancelDragEvents(event);
};
/**
* @param {!Event} event
*/
-WebInspector._cancelDragEvents = function(event)
+WebInspector.DragHandler.prototype._cancelDragEvents = function(event)
{
- WebInspector._unregisterDragEvents();
- WebInspector._unregisterMouseOutWhileDragging();
+ this._unregisterDragEvents();
+ this._unregisterMouseOutWhileDragging();
- if (WebInspector._restoreCursorAfterDrag)
- WebInspector._restoreCursorAfterDrag();
+ if (this._restoreCursorAfterDrag)
+ this._restoreCursorAfterDrag();
- if (WebInspector._elementDraggingGlassPane)
- WebInspector._elementDraggingGlassPane.dispose();
+ this._disposeGlassPane();
- delete WebInspector._elementDraggingGlassPane;
- delete WebInspector._elementDraggingEventListener;
- delete WebInspector._elementEndDraggingEventListener;
+ delete this._elementDraggingEventListener;
+ delete this._elementEndDraggingEventListener;
};
/**
* @param {!Event} event
*/
-WebInspector._elementDragEnd = function(event)
+WebInspector.DragHandler.prototype._elementDragEnd = function(event)
{
- var elementDragEnd = WebInspector._elementEndDraggingEventListener;
-
- WebInspector._cancelDragEvents(/** @type {!MouseEvent} */ (event));
-
+ var elementDragEnd = this._elementEndDraggingEventListener;
+ this._cancelDragEvents(/** @type {!MouseEvent} */ (event));
event.preventDefault();
if (elementDragEnd)
elementDragEnd(/** @type {!MouseEvent} */ (event));
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698