[go: nahoru, domu]

Skip to content

Commit

Permalink
Move trimming control to viewer menu
Browse files Browse the repository at this point in the history
  • Loading branch information
James-Yu committed Jun 19, 2024
1 parent 4815664 commit 14002a1
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 11 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -1565,7 +1565,7 @@
"scope": "window",
"type": "number",
"default": 0,
"markdownDescription": "The trim percentage of the PDF viewer. This should be a number between 0 and 1, indicating the portion of PDF to be trimmed. For example, setting the value to `0.1` means that 10% of the height and width of PDF pages are trimmed off."
"markdownDescription": "The default trim percentage of the PDF viewer. This should be an integer between 0 and 99, indicating the portion of PDF to be trimmed. For example, setting the value to `10` means that 10% of the height and width of PDF pages are trimmed off."
},
"latex-workshop.view.pdf.scrollMode": {
"scope": "window",
Expand Down
2 changes: 1 addition & 1 deletion src/preview/viewer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ lw.watcher.pdf.onChange(pdfPath => {
refresh(pdfPath)
}
})
lw.onConfigChange(['view.pdf.trim', 'view.pdf.invert', 'view.pdf.invertMode', 'view.pdf.color', 'view.pdf.internal'], () => {
lw.onConfigChange(['view.pdf.invert', 'view.pdf.invertMode', 'view.pdf.color', 'view.pdf.internal'], () => {
reload()
})

Expand Down
1 change: 1 addition & 0 deletions types/latex-workshop-protocol-types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ export type PdfViewerState = {
scrollTop?: number,
scrollLeft?: number,
sidebarView?: number,
trim?: number,
scrollMode?: number,
spreadMode?: number,
synctexEnabled?: boolean,
Expand Down
11 changes: 8 additions & 3 deletions viewer/components/htmleditor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ export function editHTML() {

const template = document.createElement('template')
template.innerHTML =
`<button id="synctexOffButton" class="secondaryToolbarButton" title="Disable forward SyncTeX" tabindex="70">
`<button id="TrimButton" class="secondaryToolbarButton" title="Trim margin" tabindex="70">
<label for="trimPct">Trim margin by </label>
<input type="number" id="trimPct" name="trimPct" min="0" max="99" value="0">
<label for="trimPct">%</label>
</button>
<button id="synctexOffButton" class="secondaryToolbarButton" title="Disable forward SyncTeX" tabindex="71">
<input id="synctexOff" type="checkbox"><span>Stop SyncTeX</span>
</button>
<button id="autoReloadOffButton" class="secondaryToolbarButton" title="Disable auto reload" tabindex="71">
<input id="autoReloadOff" type="checkbox"><span>Auto Reload</span>
<button id="autoReloadOffButton" class="secondaryToolbarButton" title="Disable auto reload" tabindex="72">
<input id="autoReloadOff" type="checkbox"><span>Disable auto-reload</span>
</button>
<div class="horizontalToolbarSeparator"></div>`
let anchor: HTMLElement | Element | null | undefined = document.getElementById('documentProperties')
Expand Down
14 changes: 12 additions & 2 deletions viewer/components/trimming.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ declare const PDFViewerApplication: IPDFViewerApplication
let viewerTrim = 0
;(globalThis as any).viewerTrim = viewerTrim

export function changePDFViewerTrim(trim: number) {
export function changePDFViewerTrim(trim: number, eventBus: { dispatch: (eventName: string, payload: any) => void }) {
viewerTrim = Math.min(1, Math.max(0, trim))
;(globalThis as any).viewerTrim = viewerTrim
const select = document.getElementById('scaleSelect') as HTMLInputElement
eventBus.dispatch('scalechanged', { source: select, value: select.value })
const trimPct = document.getElementById('trimPct') as HTMLInputElement
trimPct.value = (trim * 100).toString()
}

export function registerPDFViewerTrim() {
export function registerPDFViewerTrim(eventBus: { dispatch: (eventName: string, payload: any) => void }) {
document.getElementById('viewer')!.style.setProperty('--trim-factor', viewerTrim.toString())
const { pageHeight, pageWidth } = PDFViewerApplication.pdfViewer._pages[0].viewport.rawDims
const css = document.styleSheets[document.styleSheets.length - 1]
Expand All @@ -28,4 +32,10 @@ export function registerPDFViewerTrim() {
margin-left: calc(var(--scale-factor) * ${pageWidth}px * var(--trim-factor) / -2) !important;
margin-top: calc(var(--scale-factor) * ${pageHeight}px * var(--trim-factor) / -2) !important;
}`, css.cssRules.length)
const trimPct = document.getElementById('trimPct') as HTMLInputElement
trimPct.onchange = _ => {
viewerTrim = Number.parseFloat(trimPct.value) / 100
document.getElementById('viewer')!.style.setProperty('--trim-factor', viewerTrim.toString())
changePDFViewerTrim(viewerTrim, eventBus)
}
}
5 changes: 5 additions & 0 deletions viewer/latexworkshop.css
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ html[dir='rtl'] .findbar {
mask-image: var(--findbarButton-next-icon);
}

#TrimButton::before{
-webkit-mask-image:var(--secondaryToolbarButton-spreadNone-icon);
mask-image:var(--secondaryToolbarButton-spreadNone-icon);
}

.pdfViewer.removePageBorders .page {
border: none;
overflow: hidden;
Expand Down
8 changes: 4 additions & 4 deletions viewer/latexworkshop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer {

private async applyParamsOnStart() {
const params = await this.fetchParams()
this.applyNonStatefulParams(params)
await this.applyNonStatefulParams(params)
const restoredState = await this.restoredState
if (restoredState) {
await this.restorePdfViewerState(restoredState)
Expand Down Expand Up @@ -435,7 +435,7 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer {
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
}

private applyNonStatefulParams(params: PdfViewerParams) {
private async applyNonStatefulParams(params: PdfViewerParams) {
PDFViewerApplication.pdfCursorTools.switchTool(params.hand ? 1 : 0)
if (params.invertMode.enabled) {
const { brightness, grayscale, hueRotate, invert, sepia } = params.invertMode
Expand Down Expand Up @@ -463,7 +463,7 @@ class LateXWorkshopPdfViewer implements ILatexWorkshopPdfViewer {
this.synctex.registerListenerOnEachPage()
}

changePDFViewerTrim(params.trim)
changePDFViewerTrim(params.trim / 100, await getPDFViewerEventBus())
}

private async setupConnectionPort() {
Expand Down Expand Up @@ -816,7 +816,7 @@ async function sleep(timeout: number) {

const extension = new LateXWorkshopPdfViewer()
await extension.waitSetupAppOptionsFinished()
onPDFViewerEvent('pagesloaded', registerPDFViewerTrim)
onPDFViewerEvent('pagesloaded', async () => registerPDFViewerTrim(await getPDFViewerEventBus()))

// @ts-expect-error Must import viewer.mjs here, otherwise some config won't work. #4096
await import('../../viewer/viewer.mjs')

0 comments on commit 14002a1

Please sign in to comment.