[Pkg-javascript-commits] [pdf.js] 126/174: Non/less flashing text layer during selection.
David Prévot
taffit at moszumanska.debian.org
Thu Nov 19 18:45:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository pdf.js.
commit b8ad68af2591d56ec37fc082ad1af425ad4eb66d
Author: Yury Delendik <ydelendik at mozilla.com>
Date: Tue Nov 3 14:20:34 2015 -0600
Non/less flashing text layer during selection.
---
web/text_layer_builder.css | 18 +++++++++++++++++
web/text_layer_builder.js | 49 +++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/web/text_layer_builder.css b/web/text_layer_builder.css
index f5a55df..dd62aa6 100644
--- a/web/text_layer_builder.css
+++ b/web/text_layer_builder.css
@@ -61,3 +61,21 @@
.textLayer ::selection { background: rgb(0,0,255); }
.textLayer ::-moz-selection { background: rgb(0,0,255); }
+
+.textLayer .endOfContent {
+ display: block;
+ position: absolute;
+ left: 0px;
+ top: 100%;
+ right: 0px;
+ bottom: 0px;
+ z-index: -1;
+ cursor: default;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ -moz-user-select: none;
+}
+
+.textLayer .endOfContent.active {
+ top: 0px;
+}
diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js
index afb8430..1986e7c 100644
--- a/web/text_layer_builder.js
+++ b/web/text_layer_builder.js
@@ -51,12 +51,17 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
this.viewport = options.viewport;
this.textDivs = [];
this.findController = options.findController || null;
+ this._bindMouse();
}
TextLayerBuilder.prototype = {
_finishRendering: function TextLayerBuilder_finishRendering() {
this.renderingDone = true;
+ var endOfContent = document.createElement('div');
+ endOfContent.className = 'endOfContent';
+ this.textLayerDiv.appendChild(endOfContent);
+
var event = document.createEvent('CustomEvent');
event.initCustomEvent('textlayerrendered', true, true, {
pageNumber: this.pageNumber
@@ -392,7 +397,49 @@ var TextLayerBuilder = (function TextLayerBuilderClosure() {
this.matches = this.convertMatches(this.findController === null ?
[] : (this.findController.pageMatches[this.pageIdx] || []));
this.renderMatches(this.matches);
- }
+ },
+
+ /**
+ * Fixes text selection: adds additional div where mouse was clicked.
+ * This reduces flickering of the content if mouse slowly dragged down/up.
+ * @private
+ */
+ _bindMouse: function TextLayerBuilder_bindMouse() {
+ var div = this.textLayerDiv;
+ div.addEventListener('mousedown', function (e) {
+ var end = div.querySelector('.endOfContent');
+ if (!end) {
+ return;
+ }
+//#if !(MOZCENTRAL || FIREFOX)
+ // On non-Firefox browsers, the selection will feel better if the height
+ // of the endOfContent div will be adjusted to start at mouse click
+ // location -- this will avoid flickering when selections moves up.
+ // However it does not work when selection started on empty space.
+ var adjustTop = e.target !== div;
+//#if GENERIC
+ adjustTop = adjustTop && window.getComputedStyle(end).
+ getPropertyValue('-moz-user-select') !== 'none';
+//#endif
+ if (adjustTop) {
+ var divBounds = div.getBoundingClientRect();
+ var r = Math.max(0, (e.pageY - divBounds.top) / divBounds.height);
+ end.style.top = (r * 100).toFixed(2) + '%';
+ }
+//#endif
+ end.classList.add('active');
+ });
+ div.addEventListener('mouseup', function (e) {
+ var end = div.querySelector('.endOfContent');
+ if (!end) {
+ return;
+ }
+//#if !(MOZCENTRAL || FIREFOX)
+ end.style.top = '';
+//#endif
+ end.classList.remove('active');
+ });
+ },
};
return TextLayerBuilder;
})();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git
More information about the Pkg-javascript-commits
mailing list