diff --git a/docs/todo/core.md b/docs/todo/core.md index c07d1d6..d3d24bc 100644 --- a/docs/todo/core.md +++ b/docs/todo/core.md @@ -1,10 +1,10 @@ # @idraw/core -* [] BUG: Select area calculate elements error * [] Support gradient color -* [] Move elements that in selected-area * [] Listen keyboard action * [] Keep all num two decimals +* [x] BUG: Select area calculate elements error +* [x] Move elements that in selected-area * [x] Area select * [x] Lock Element * [x] FireFox's Compatibility Question (And Safair Browser) diff --git a/packages/board/__tests__/point.test.ts b/packages/board/__tests__/point.test.ts index 1c24bdf..ae8cc61 100644 --- a/packages/board/__tests__/point.test.ts +++ b/packages/board/__tests__/point.test.ts @@ -2,7 +2,6 @@ import Board from '../src'; describe('@idraw/board', () => { - document.body.innerHTML = `
`; @@ -22,20 +21,21 @@ describe('@idraw/board', () => { const mount = document.querySelector('#mount') as HTMLDivElement; const board = new Board(mount, opts); - test('scroll', async () => { - - board.scale(transform.scale); - board.scrollX(transform.scrollX); - board.scrollY(transform.scrollY); - board.draw(); + board.scale(transform.scale); + board.scrollX(transform.scrollX); + board.scrollY(transform.scrollY); + board.draw(); - const p1 = {x: 400, y: 300}; - const p2 = {x: 300, y: 200}; + const p1 = {x: 400, y: 300}; + const p2 = {x: 300, y: 200}; + test('pointScreenToContext', async () => { expect(board.pointScreenToContext(p1)).toStrictEqual(p2); + }); + + test('pointContextToScreen', async () => { expect(board.pointContextToScreen(p2)).toStrictEqual(p1); }); - }); diff --git a/packages/core/__tests__/lib/point.test.ts b/packages/core/__tests__/lib/point.test.ts new file mode 100644 index 0000000..5436e85 --- /dev/null +++ b/packages/core/__tests__/lib/point.test.ts @@ -0,0 +1,41 @@ +import IDraw from '../../src'; + +describe('@idraw/core', () => { + + document.body.innerHTML = ` +
+ `; + const opts = { + width: 800, + height: 600, + contextWidth: 600, + contextHeight: 400, + devicePixelRatio: 4, + canScroll: true, + }; + const transform = { + scale: 2, + scrollX: -200, + scrollY: -100, + }; + const mount = document.querySelector('#mount') as HTMLDivElement; + const idraw = new IDraw(mount, opts); + + idraw.scale(transform.scale); + idraw.scrollX(transform.scrollX); + idraw.scrollY(transform.scrollY); + idraw.draw(); + + const p1 = {x: 400, y: 300}; + const p2 = {x: 300, y: 200}; + + test('pointScreenToContext', async () => { + expect(idraw.pointScreenToContext(p1)).toStrictEqual(p2); + }); + + test('pointContextToScreen', async () => { + expect(idraw.pointContextToScreen(p2)).toStrictEqual(p1); + }); + +}); + diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 2fb4675..5a53ca3 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -224,6 +224,14 @@ class Core { this[_coreEvent].off(key, callback); } + pointScreenToContext(p: TypePoint) { + return this[_board].pointScreenToContext(p); + } + + pointContextToScreen(p: TypePoint) { + return this[_board].pointContextToScreen(p); + } + __getBoardContext(): TypeContext { return this[_board].getContext(); } diff --git a/packages/core/src/lib/helper.ts b/packages/core/src/lib/helper.ts index 0580400..c1bb8f8 100644 --- a/packages/core/src/lib/helper.ts +++ b/packages/core/src/lib/helper.ts @@ -21,8 +21,8 @@ export class Helper implements TypeHelper { private _coreConfig: TypeConfigStrict; private _ctx: TypeContext; private _board: Board; - private _areaStart: TypePoint = { x: 0, y: 0}; - private _areaEnd: TypePoint = { x: 0, y: 0}; + private _areaStart: TypePoint = { x: 0, y: 0 }; + private _areaEnd: TypePoint = { x: 0, y: 0 }; constructor(board: Board, config: TypeConfigStrict) { this._board = board;