@netless/app-presentation 0.1.9-beta.6 → 0.1.9-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/app-presentation",
3
- "version": "0.1.9-beta.6",
3
+ "version": "0.1.9-beta.8",
4
4
  "description": "Netless App for presentation slides (images)",
5
5
  "author": "netless",
6
6
  "license": "MIT",
@@ -454,15 +454,6 @@ export const NetlessAppPresentation: NetlessApp<{}, {}, PresentationAppOptions,
454
454
  }
455
455
  }
456
456
 
457
- const moveCamera = (camera: { centerX: number, centerY: number, scale: number }) => {
458
- if (context.getIsWritable()) {
459
- view.moveCamera({...camera, animationMode: 'immediately' as AnimationMode});
460
- syncView();
461
- return;
462
- }
463
- throw new Error('[Presentation]: moveCamera must be called in writable room')
464
- }
465
-
466
457
  let scrollbar:Scrollbar | undefined;
467
458
  if (options.useScrollbar) {
468
459
  dispose.make(() => {
@@ -478,6 +469,17 @@ export const NetlessAppPresentation: NetlessApp<{}, {}, PresentationAppOptions,
478
469
  })
479
470
  }
480
471
 
472
+ const moveCamera = (camera: { centerX: number, centerY: number, scale: number }) => {
473
+ if (context.getIsWritable() && scrollbar) {
474
+ if (!scrollbar) {
475
+ throw new Error('[Presentation]: moveCamera must be called when appOptions: useScrollbar is true')
476
+ }
477
+ scrollbar.moveCamera(camera);
478
+ return;
479
+ }
480
+ throw new Error('[Presentation]: moveCamera must be called in writable room')
481
+ }
482
+
481
483
  context.emitter.on('destroy', () => dispose())
482
484
 
483
485
  const reportProgress = (progress: number, result: { pdf: ArrayBuffer, title: string } | null) => {
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./presentation"
2
2
  export * from "./app-presentation"
3
+ export * from "./scrollbar"
3
4
  export { NetlessAppPresentation as default } from "./app-presentation"
4
5
 
5
6
  export const version = __VERSION__
@@ -1,7 +1,7 @@
1
1
  import './style.scss?inline';
2
2
  import type { View, AnimationMode } from "@netless/window-manager";
3
3
  import { makeDraggable } from "./Draggable";
4
- import { debounce } from 'lodash';
4
+ import { debounce, isNumber } from 'lodash';
5
5
 
6
6
  export interface ScrollbarOption {
7
7
  appId: string;
@@ -256,4 +256,43 @@ export class Scrollbar {
256
256
 
257
257
  }
258
258
 
259
+ moveCamera = (camera: { centerX: number, centerY: number, scale: number }) => {
260
+ const { centerX, centerY, scale } = camera;
261
+ const cacheCamera = this.view.camera;
262
+ const _camera: { centerX?: number, centerY?: number, scale?: number} = {};
263
+ if(isNumber(centerX)) {
264
+ const { minX, maxX } = this.getScrollXRange(cacheCamera);
265
+ let newCenterX = centerX;
266
+ if (centerX < minX) {
267
+ newCenterX = minX;
268
+ } else if (centerX > maxX) {
269
+ newCenterX = maxX;
270
+ }
271
+ _camera.centerX = newCenterX;
272
+ }
273
+ if(isNumber(centerY)) {
274
+ const { minY, maxY } = this.getScrollYRange(cacheCamera);
275
+ let newCenterY = centerY;
276
+ if (centerY < minY) {
277
+ newCenterY = minY;
278
+ } else if (centerY > maxY) {
279
+ newCenterY = maxY;
280
+ }
281
+ _camera.centerY = newCenterY;
282
+ }
283
+ if(isNumber(scale)) {
284
+ let newScale = scale;
285
+ const originScale = this.option.getOriginScale();
286
+ if (scale < originScale) {
287
+ newScale = originScale;
288
+ }
289
+ _camera.scale = newScale;
290
+ }
291
+ this.view.moveCamera({
292
+ ..._camera,
293
+ animationMode: 'immediately' as AnimationMode
294
+ })
295
+ this.option.syncView();
296
+ }
297
+
259
298
  }