Skip to content

Commit

Permalink
[GENERIC viewer] Re-initialize the viewer-toolbar ColorPicker for e…
Browse files Browse the repository at this point in the history
…ach PDF document

Steps to reproduce this in `master`:
 1. Open https://mozilla.github.io/pdf.js/web/viewer.html
 2. Use the "Open"-button (in the secondaryToolbar), or drag-and-drop, to load another PDF document.
 3. Enable the highlight-editor.
 4. Try to pick a new colour.

Note how it's no longer possible to change the default highlight-colour.
The reason for this is that we're only initializing the viewer-toolbar `ColorPicker` *once*, which doesn't work since every PDF document gets its own `AnnotationEditorUIManager`-instance. To address this we simply need to re-initialize the viewer-toolbar `ColorPicker`, and note that this patch won't affect the Firefox PDF Viewer.
  • Loading branch information
Snuffleupagus committed Jan 23, 2025
1 parent 2132552 commit dd31967
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 19 deletions.
2 changes: 2 additions & 0 deletions src/display/editor/tools.js
Original file line number Diff line number Diff line change
Expand Up @@ -907,6 +907,8 @@ class AnnotationEditorUIManager {
this.#altTextManager?.destroy();
this.#highlightToolbar?.hide();
this.#highlightToolbar = null;
this.#mainHighlightColorPicker?.destroy();
this.#mainHighlightColorPicker = null;
if (this.#focusMainContainerTimeoutId) {
clearTimeout(this.#focusMainContainerTimeoutId);
this.#focusMainContainerTimeoutId = null;
Expand Down
12 changes: 10 additions & 2 deletions web/annotation_editor_params.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ class AnnotationEditorParams {
editorFreeHighlightThickness,
editorHighlightShowAll,
}) {
const { eventBus } = this;

const dispatchEvent = (typeStr, value) => {
this.eventBus.dispatch("switchannotationeditorparams", {
eventBus.dispatch("switchannotationeditorparams", {
source: this,
type: AnnotationEditorParamsType[typeStr],
value,
Expand Down Expand Up @@ -93,7 +95,7 @@ class AnnotationEditorParams {
dispatchEvent("HIGHLIGHT_SHOW_ALL", !checked);
});

this.eventBus._on("annotationeditorparamschanged", evt => {
eventBus._on("annotationeditorparamschanged", evt => {
for (const [type, value] of evt.details) {
switch (type) {
case AnnotationEditorParamsType.FREETEXT_SIZE:
Expand All @@ -111,6 +113,12 @@ class AnnotationEditorParams {
case AnnotationEditorParamsType.INK_OPACITY:
editorInkOpacity.value = value;
break;
case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:
eventBus.dispatch("mainhighlightcolorpickerupdatecolor", {
source: this,
value,
});
break;
case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:
editorFreeHighlightThickness.value = value;
break;
Expand Down
29 changes: 12 additions & 17 deletions web/toolbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ import {
*/

class Toolbar {
#colorPicker = null;

#opts;

/**
Expand Down Expand Up @@ -139,12 +141,6 @@ class Toolbar {
document.documentElement.setAttribute("data-toolbar-density", name);
}

#setAnnotationEditorUIManager(uiManager, parentContainer) {
const colorPicker = new ColorPicker({ uiManager });
uiManager.setMainHighlightColorPicker(colorPicker);
parentContainer.append(colorPicker.renderMainDropdown());
}

setPageNumber(pageNumber, pageLabel) {
this.pageNumber = pageNumber;
this.pageLabel = pageLabel;
Expand All @@ -164,6 +160,7 @@ class Toolbar {
}

reset() {
this.#colorPicker = null;
this.pageNumber = 0;
this.pageLabel = null;
this.hasPageLabels = false;
Expand Down Expand Up @@ -255,17 +252,15 @@ class Toolbar {
eventBus._on("toolbardensity", this.#updateToolbarDensity.bind(this));

if (editorHighlightColorPicker) {
eventBus._on(
"annotationeditoruimanager",
({ uiManager }) => {
this.#setAnnotationEditorUIManager(
uiManager,
editorHighlightColorPicker
);
},
// Once the color picker has been added, we don't want to add it again.
{ once: true }
);
eventBus._on("annotationeditoruimanager", ({ uiManager }) => {
const cp = (this.#colorPicker = new ColorPicker({ uiManager }));
uiManager.setMainHighlightColorPicker(cp);
editorHighlightColorPicker.append(cp.renderMainDropdown());
});

eventBus._on("mainhighlightcolorpickerupdatecolor", ({ value }) => {
this.#colorPicker?.updateColor(value);
});
}
}

Expand Down

0 comments on commit dd31967

Please sign in to comment.