Преглед изворни кода

POC: Pause selection rendering while mouse is down.

Maciej Gołaszewski пре 7 година
родитељ
комит
d8cc3b5ecd

+ 1 - 1
packages/ckeditor5-engine/src/view/observer/mouseobserver.js

@@ -22,7 +22,7 @@ export default class MouseObserver extends DomEventObserver {
 		super( view );
 
 		// TODO: either enhance or new classes
-		this.domEventType = [ 'mousedown', 'mousemove', 'mouseup' ];
+		this.domEventType = [ 'mousedown', 'mousemove', 'mouseup', 'mouseleave' ];
 	}
 
 	onDomEvent( domEvent ) {

+ 42 - 0
packages/ckeditor5-engine/src/view/observer/selectionrendererobserver.js

@@ -0,0 +1,42 @@
+/**
+ * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/**
+ * @module engine/view/observer/selectionrendererobserver
+ */
+
+import Observer from './observer';
+
+/**
+ * @extends module:engine/view/observer/domeventobserver~DomEventObserver
+ */
+export default class SelectionRendererObserver extends Observer {
+	constructor( view ) {
+		super( view );
+
+		const document = this.document;
+
+		// TODO: althought this works it lacks the RENDERER API (or view API as renderer is _private).
+		document.on( 'blur', () => {
+			view._renderer.renderSelection = false;
+		} );
+
+		document.on( 'mousemove', ( evt, domEvt ) => {
+			view._renderer.renderSelection = domEvt.domEvent.buttons != 1;
+		} );
+
+		document.on( 'mouseup', () => {
+			view._renderer.renderSelection = true;
+		} );
+
+		document.on( 'mouseleave', () => {
+			view._renderer.renderSelection = false;
+		} );
+	}
+
+	observe() {
+		// TODO: dummy method - might need better solution.
+	}
+}

+ 7 - 2
packages/ckeditor5-engine/src/view/renderer.js

@@ -113,6 +113,8 @@ export default class Renderer {
 		 * @type {null|HTMLElement}
 		 */
 		this._fakeSelectionContainer = null;
+
+		this.renderSelection = true;
 	}
 
 	/**
@@ -228,8 +230,11 @@ export default class Renderer {
 			this._inlineFiller = null;
 		}
 
-		this._updateSelection();
-		this._updateFocus();
+		// TODO: Add temporary solution to pausing selection rendering.
+		if ( this.renderSelection ) {
+			this._updateSelection();
+			this._updateFocus();
+		}
 
 		this.markedTexts.clear();
 		this.markedAttributes.clear();

+ 2 - 0
packages/ckeditor5-engine/src/view/view.js

@@ -18,6 +18,7 @@ import FakeSelectionObserver from './observer/fakeselectionobserver';
 import SelectionObserver from './observer/selectionobserver';
 import FocusObserver from './observer/focusobserver';
 import CompositionObserver from './observer/compositionobserver';
+import SelectionRendererObserver from './observer/selectionrendererobserver';
 
 import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
 import log from '@ckeditor/ckeditor5-utils/src/log';
@@ -141,6 +142,7 @@ export default class View {
 		this.addObserver( KeyObserver );
 		this.addObserver( FakeSelectionObserver );
 		this.addObserver( CompositionObserver );
+		this.addObserver( SelectionRendererObserver );
 
 		// Inject quirks handlers.
 		injectQuirksHandling( this );