diff options
Diffstat (limited to 'src/client/documents/Documents.ts')
| -rw-r--r-- | src/client/documents/Documents.ts | 27 | 
1 files changed, 16 insertions, 11 deletions
| diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts index 49e53a214..a19530c92 100644 --- a/src/client/documents/Documents.ts +++ b/src/client/documents/Documents.ts @@ -14,7 +14,7 @@ import { Cast, NumCast, StrCast } from "../../fields/Types";  import { AudioField, ImageField, MapField, PdfField, VideoField, WebField, YoutubeField } from "../../fields/URLField";  import { SharingPermissions } from "../../fields/util";  import { Upload } from "../../server/SharedMediaTypes"; -import { OmitKeys, Utils } from "../../Utils"; +import { OmitKeys, Utils, aggregateBounds } from "../../Utils";  import { YoutubeBox } from "../apis/youtube/YoutubeBox";  import { DocServer } from "../DocServer";  import { Networking } from "../Network"; @@ -1352,26 +1352,31 @@ export namespace DocUtils {          if (layoutKey && layoutKey !== "layout" && layoutKey !== "layout_icon") doc.deiconifyLayout = layoutKey.replace("layout_", "");      } -    export function pileup(docList: Doc[], x?: number, y?: number, create: boolean = true) { +    export function pileup(docList: Doc[], x?: number, y?: number, size: number = 55, create: boolean = true) {          let w = 0, h = 0;          runInAction(() => {              docList.forEach(d => {                  DocUtils.iconify(d); -                w = Math.max(d[WidthSym](), w); -                h = Math.max(d[HeightSym](), h); +                w = Math.max(NumCast(d._width), w); +                h = Math.max(NumCast(d._height), h);              }); -            h = Math.max(h, w * 4 / 3); // converting to an icon does not update the height right away.  so this is a fallback hack to try to do something reasonable              docList.forEach((d, i) => { -                d.x = Math.cos(Math.PI * 2 * i / docList.length) * 10 - w / 2; -                d.y = Math.sin(Math.PI * 2 * i / docList.length) * 10 - h / 2; +                d.x = Math.cos(Math.PI * 2 * i / docList.length) * size; +                d.y = Math.sin(Math.PI * 2 * i / docList.length) * size; +                d._timecodeToShow = undefined;  // bcz: this should be automatic somehow.. along with any other properties that were logically associated with the original collection +            }); +            const aggBounds = aggregateBounds(docList.map(d => ({ x: NumCast(d.x), y: NumCast(d.y), width: NumCast(d._width), height: NumCast(d._height) })), 0, 0); +            docList.forEach((d, i) => { +                d.x = NumCast(d.x) - ((aggBounds.r + aggBounds.x) / 2); +                d.y = NumCast(d.y) - ((aggBounds.b + aggBounds.y) / 2);                  d._timecodeToShow = undefined;  // bcz: this should be automatic somehow.. along with any other properties that were logically associated with the original collection              });          });          if (create) { -            const newCollection = Docs.Create.PileDocument(docList, { title: "pileup", x: (x || 0) - 55, y: (y || 0) - 55, _width: 110, _height: 100, }); -            newCollection.x = NumCast(newCollection.x) + NumCast(newCollection._width) / 2 - 55; -            newCollection.y = NumCast(newCollection.y) + NumCast(newCollection._height) / 2 - 55; -            newCollection._width = newCollection._height = 110; +            const newCollection = Docs.Create.PileDocument(docList, { title: "pileup", x: (x || 0) - size, y: (y || 0) - size, _width: size * 2, _height: size * 2, }); +            newCollection.x = NumCast(newCollection.x) + NumCast(newCollection._width) / 2 - size; +            newCollection.y = NumCast(newCollection.y) + NumCast(newCollection._height) / 2 - size; +            newCollection._width = newCollection._height = size * 2;              newCollection._jitterRotation = 10;              return newCollection;          } | 
