X-Git-Url: https://git.r.bdr.sh/rbdr/canvas/blobdiff_plain/d7cea96940ddeb764c7343e05526f611863019d8..e4e4b5202bf0039127f591941fddc1ff5ca09897:/src/lib/components/widget.svelte diff --git a/src/lib/components/widget.svelte b/src/lib/components/widget.svelte index 7d587b5..907a016 100644 --- a/src/lib/components/widget.svelte +++ b/src/lib/components/widget.svelte @@ -7,24 +7,74 @@ const width = widget.box.right - widget.box.left; const height = widget.box.bottom - widget.box.top; - $: renderX = widget.box.left - modulo($topLeft.x, maxSize); - $: renderY = widget.box.top - modulo($topLeft.y, maxSize); + // Coordinates in canvas space are (p,q) + // Coordinates in screen space are (x,y) - console.log('Max', maxSize, - 'Widget Actual', widget.box.left, widget.box.top, - 'Top Left', $topLeft.x, $topLeft.y, - 'Mod Top Left', modulo($topLeft.x, maxSize), modulo($topLeft.y, maxSize), - 'Calculated', - modulo(widget.box.left - modulo($topLeft.x, maxSize), maxSize), - modulo(widget.box.top - modulo($topLeft.y, maxSize), maxSize)) + $: xWidget = 0; + $: yWidget = 0; + + $: { + + const pCanvas = modulo($topLeft.x, maxSize); + const qCanvas = modulo($topLeft.y, maxSize); + + const pBoundary = pCanvas + Math.abs($topLeft.x - $bottomRight.x); + const qBoundary = qCanvas + Math.abs($topLeft.y - $bottomRight.y); + + const pWidget = widget.box.left; + const qWidget = widget.box.top; + + xWidget = pWidget - pCanvas; + yWidget = qWidget - qCanvas; + + // Case 1: Boundary jump happens inside the box + if (pWidget < pCanvas + && pBoundary > maxSize + && pWidget < pBoundary - maxSize) { + xWidget = xWidget + maxSize; + } + // Case 2: Boundary jump happens to the left of the box + else if (pWidget > pCanvas + && pBoundary < maxSize + && pWidget > pBoundary) { + xWidget = xWidget - maxSize; + } + + // Case 1: Boundary jump happens inside the box + if (qWidget < qCanvas + && qBoundary > maxSize + && qWidget < qBoundary - maxSize) { + yWidget = yWidget + maxSize; + } + // Case 2: Boundary jump happens above the top of the box + else if (qWidget > qCanvas + && qBoundary < maxSize + && qWidget > qBoundary) { + yWidget = yWidget - maxSize; + } + + + console.log('Max', maxSize, + 'Widget Actual', widget.box.left, widget.box.top, + 'Canvas WH', Math.abs($topLeft.x - $bottomRight.x), Math.abs($topLeft.y - $bottomRight.y), + 'Canvas XY', $topLeft.x, $topLeft.y, + 'Canvas PQ', pCanvas, qCanvas, + 'Boundary XY', $bottomRight.x, $bottomRight.y, + 'Boundary PQ', pBoundary, qBoundary, + 'Widget Rendered', xWidget, yWidget, + 'Calculated', + modulo(pWidget - pCanvas, maxSize), + modulo(qWidget - qCanvas, maxSize)) + + }