From 39a6db082afa3a357f7dc5ff1830ea74cc169f73 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Tue, 27 Oct 2020 17:05:48 +0530 Subject: [PATCH 01/11] =?UTF-8?q?=F0=9F=97=92=EF=B8=8F=20figma=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ src/svg/README.md | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a7652e..6289cd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [unreleased] +### Added + +- Figma file added in **src/svg/README.md** + ## [v1.0.0] - 27 Oct 2020 ### Added diff --git a/src/svg/README.md b/src/svg/README.md index e3d6153..6a5f490 100644 --- a/src/svg/README.md +++ b/src/svg/README.md @@ -47,6 +47,6 @@ | | zoom_in.svg | `None` | | | | zoom_out.svg | `None` | | - +## Figma File - +[![Figma File](https://imgur.com/RjoqfTo.png)](https://www.figma.com/file/i7nfGDWCTWlNJlnhmvHDfh/Google-Cursor?node-id=0%3A1) From 35bbade090fc144801d6bd835fe5124236be7a0d Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Sun, 14 Feb 2021 17:06:09 +0530 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=93=82=20Organized=20source=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 10 +- bitmapper/Makefile | 18 + bitmapper/package.json | 32 ++ bitmapper/src/config.ts | 23 ++ bitmapper/src/index.ts | 127 ++++++ bitmapper/src/utils/frameNumber.ts | 7 + bitmapper/src/utils/matchImages.ts | 11 + .../src/utils/toHTML.ts | 6 +- bitmapper/tsconfig.json | 12 + yarn.lock => bitmapper/yarn.lock | 376 ++++++------------ build.py | 16 - builder/Makefile | 35 ++ builder/build.py | 114 ++++++ builder/gbpkg/__init__.py | 0 builder/gbpkg/configure.py | 96 +++++ builder/gbpkg/constants.py | 97 +++++ builder/gbpkg/generator.py | 116 ++++++ builder/gbpkg/symlinks.py | 167 ++++++++ builder/setup.py | 22 + config.py | 46 --- helper.py | 71 ---- log.py | 10 - nodemon.json | 13 - package.json | 33 -- requirements.txt | 2 - scripts/windows.inf | 52 --- src/config.ts | 31 -- src/index.ts | 124 ------ src/svg/static/center_ptr.svg | 14 - src/svg/static/cross.svg | 9 - src/svg/static/crossed_circle.svg | 22 - src/svg/static/crosshair.svg | 15 - src/svg/static/left_side.svg | 11 - src/svg/static/right_ptr.svg | 13 - src/svg/static/top_side.svg | 11 - src/utils/getFrameName.ts | 14 - src/utils/matchImages.ts | 19 - src/utils/saveFrames.ts | 16 - {src/svg => svg}/README.md | 0 {src/svg => svg}/animated/left_ptr_watch.svg | 0 {src/svg => svg}/animated/wait.svg | 0 {src/svg => svg}/static/all_scroll.svg | 0 {src/svg => svg}/static/bd_double_arrow.svg | 0 .../svg => svg}/static/bottom_left_corner.svg | 0 .../static/bottom_right_corner.svg | 0 {src/svg => svg}/static/bottom_side.svg | 0 {src/svg => svg}/static/bottom_tee.svg | 0 svg/static/center_ptr.svg | 1 + {src/svg => svg}/static/circle.svg | 0 {src/svg => svg}/static/context_menu.svg | 0 {src/svg => svg}/static/copy.svg | 0 svg/static/cross.svg | 1 + svg/static/crossed_circle.svg | 1 + svg/static/crosshair.svg | 1 + {src/svg => svg}/static/dnd_ask.svg | 0 {src/svg => svg}/static/dnd_copy.svg | 0 {src/svg => svg}/static/dnd_link.svg | 0 {src/svg => svg}/static/dnd_move.svg | 0 {src/svg => svg}/static/dnd_no_drop.svg | 0 {src/svg => svg}/static/dnd_none.svg | 0 {src/svg => svg}/static/dotbox.svg | 0 {src/svg => svg}/static/fd_double_arrow.svg | 0 {src/svg => svg}/static/grabbing.svg | 0 {src/svg => svg}/static/hand1.svg | 0 {src/svg => svg}/static/hand2.svg | 0 {src/svg => svg}/static/left_ptr.svg | 0 svg/static/left_side.svg | 1 + {src/svg => svg}/static/left_tee.svg | 0 {src/svg => svg}/static/link.svg | 0 {src/svg => svg}/static/ll_angle.svg | 0 {src/svg => svg}/static/lr_angle.svg | 0 {src/svg => svg}/static/move.svg | 0 {src/svg => svg}/static/pencil.svg | 0 {src/svg => svg}/static/plus.svg | 0 {src/svg => svg}/static/pointer_move.svg | 0 {src/svg => svg}/static/question_arrow.svg | 0 svg/static/right_ptr.svg | 1 + {src/svg => svg}/static/right_side.svg | 0 {src/svg => svg}/static/right_tee.svg | 0 {src/svg => svg}/static/sb_down_arrow.svg | 0 {src/svg => svg}/static/sb_h_double_arrow.svg | 0 {src/svg => svg}/static/sb_left_arrow.svg | 0 {src/svg => svg}/static/sb_right_arrow.svg | 0 {src/svg => svg}/static/sb_up_arrow.svg | 0 {src/svg => svg}/static/sb_v_double_arrow.svg | 0 {src/svg => svg}/static/tcross.svg | 0 {src/svg => svg}/static/top_left_corner.svg | 0 {src/svg => svg}/static/top_right_corner.svg | 0 svg/static/top_side.svg | 1 + {src/svg => svg}/static/top_tee.svg | 0 {src/svg => svg}/static/ul_angle.svg | 0 {src/svg => svg}/static/ur_angle.svg | 0 {src/svg => svg}/static/vertical_text.svg | 0 {src/svg => svg}/static/wayland_cursor.svg | 0 {src/svg => svg}/static/x_cursor.svg | 0 {src/svg => svg}/static/xterm.svg | 0 {src/svg => svg}/static/zoom_in.svg | 0 {src/svg => svg}/static/zoom_out.svg | 0 tsconfig.json | 18 - 99 files changed, 1010 insertions(+), 826 deletions(-) create mode 100644 bitmapper/Makefile create mode 100644 bitmapper/package.json create mode 100644 bitmapper/src/config.ts create mode 100644 bitmapper/src/index.ts create mode 100644 bitmapper/src/utils/frameNumber.ts create mode 100644 bitmapper/src/utils/matchImages.ts rename src/utils/htmlTemplate.ts => bitmapper/src/utils/toHTML.ts (68%) create mode 100644 bitmapper/tsconfig.json rename yarn.lock => bitmapper/yarn.lock (78%) delete mode 100644 build.py create mode 100644 builder/Makefile create mode 100644 builder/build.py create mode 100644 builder/gbpkg/__init__.py create mode 100644 builder/gbpkg/configure.py create mode 100644 builder/gbpkg/constants.py create mode 100644 builder/gbpkg/generator.py create mode 100644 builder/gbpkg/symlinks.py create mode 100644 builder/setup.py delete mode 100644 config.py delete mode 100644 helper.py delete mode 100644 log.py delete mode 100644 nodemon.json delete mode 100644 package.json delete mode 100644 requirements.txt delete mode 100644 scripts/windows.inf delete mode 100644 src/config.ts delete mode 100644 src/index.ts delete mode 100644 src/svg/static/center_ptr.svg delete mode 100644 src/svg/static/cross.svg delete mode 100644 src/svg/static/crossed_circle.svg delete mode 100644 src/svg/static/crosshair.svg delete mode 100644 src/svg/static/left_side.svg delete mode 100644 src/svg/static/right_ptr.svg delete mode 100644 src/svg/static/top_side.svg delete mode 100644 src/utils/getFrameName.ts delete mode 100644 src/utils/matchImages.ts delete mode 100644 src/utils/saveFrames.ts rename {src/svg => svg}/README.md (100%) rename {src/svg => svg}/animated/left_ptr_watch.svg (100%) rename {src/svg => svg}/animated/wait.svg (100%) rename {src/svg => svg}/static/all_scroll.svg (100%) rename {src/svg => svg}/static/bd_double_arrow.svg (100%) rename {src/svg => svg}/static/bottom_left_corner.svg (100%) rename {src/svg => svg}/static/bottom_right_corner.svg (100%) rename {src/svg => svg}/static/bottom_side.svg (100%) rename {src/svg => svg}/static/bottom_tee.svg (100%) create mode 120000 svg/static/center_ptr.svg rename {src/svg => svg}/static/circle.svg (100%) rename {src/svg => svg}/static/context_menu.svg (100%) rename {src/svg => svg}/static/copy.svg (100%) create mode 120000 svg/static/cross.svg create mode 120000 svg/static/crossed_circle.svg create mode 120000 svg/static/crosshair.svg rename {src/svg => svg}/static/dnd_ask.svg (100%) rename {src/svg => svg}/static/dnd_copy.svg (100%) rename {src/svg => svg}/static/dnd_link.svg (100%) rename {src/svg => svg}/static/dnd_move.svg (100%) rename {src/svg => svg}/static/dnd_no_drop.svg (100%) rename {src/svg => svg}/static/dnd_none.svg (100%) rename {src/svg => svg}/static/dotbox.svg (100%) rename {src/svg => svg}/static/fd_double_arrow.svg (100%) rename {src/svg => svg}/static/grabbing.svg (100%) rename {src/svg => svg}/static/hand1.svg (100%) rename {src/svg => svg}/static/hand2.svg (100%) rename {src/svg => svg}/static/left_ptr.svg (100%) create mode 120000 svg/static/left_side.svg rename {src/svg => svg}/static/left_tee.svg (100%) rename {src/svg => svg}/static/link.svg (100%) rename {src/svg => svg}/static/ll_angle.svg (100%) rename {src/svg => svg}/static/lr_angle.svg (100%) rename {src/svg => svg}/static/move.svg (100%) rename {src/svg => svg}/static/pencil.svg (100%) rename {src/svg => svg}/static/plus.svg (100%) rename {src/svg => svg}/static/pointer_move.svg (100%) rename {src/svg => svg}/static/question_arrow.svg (100%) create mode 120000 svg/static/right_ptr.svg rename {src/svg => svg}/static/right_side.svg (100%) rename {src/svg => svg}/static/right_tee.svg (100%) rename {src/svg => svg}/static/sb_down_arrow.svg (100%) rename {src/svg => svg}/static/sb_h_double_arrow.svg (100%) rename {src/svg => svg}/static/sb_left_arrow.svg (100%) rename {src/svg => svg}/static/sb_right_arrow.svg (100%) rename {src/svg => svg}/static/sb_up_arrow.svg (100%) rename {src/svg => svg}/static/sb_v_double_arrow.svg (100%) rename {src/svg => svg}/static/tcross.svg (100%) rename {src/svg => svg}/static/top_left_corner.svg (100%) rename {src/svg => svg}/static/top_right_corner.svg (100%) create mode 120000 svg/static/top_side.svg rename {src/svg => svg}/static/top_tee.svg (100%) rename {src/svg => svg}/static/ul_angle.svg (100%) rename {src/svg => svg}/static/ur_angle.svg (100%) rename {src/svg => svg}/static/vertical_text.svg (100%) rename {src/svg => svg}/static/wayland_cursor.svg (100%) rename {src/svg => svg}/static/x_cursor.svg (100%) rename {src/svg => svg}/static/xterm.svg (100%) rename {src/svg => svg}/static/zoom_in.svg (100%) rename {src/svg => svg}/static/zoom_out.svg (100%) delete mode 100644 tsconfig.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 6289cd9..122efb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,15 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Figma file added in **src/svg/README.md** +- Figma file added inide **README.md** +- Organized build & bitmaps source code +- Add **Make** compatibility ## [v1.0.0] - 27 Oct 2020 ### Added -- Initial release 🎊 -- Logo and badges -- CI/CD Pipelines +- Initial release 🎊 +- Logo and badges +- CI/CD Pipelines [unreleased]: https://github.com/ful1e5/Google_Cursor/compare/v1.0.0...main [v1.0.0]: https://github.com/ful1e5/Google_Cursor/tree/v1.0.0 diff --git a/bitmapper/Makefile b/bitmapper/Makefile new file mode 100644 index 0000000..cd1d300 --- /dev/null +++ b/bitmapper/Makefile @@ -0,0 +1,18 @@ +all: install render + +.PHONY: all + +install: node_modules package.json + @yarn install + +render: + @yarn render + +watch: + @yarn watch + +node_modules: + @mkdir -p $@ + +clean: + @rm -rf node_modules yarn.lock \ No newline at end of file diff --git a/bitmapper/package.json b/bitmapper/package.json new file mode 100644 index 0000000..530e9d4 --- /dev/null +++ b/bitmapper/package.json @@ -0,0 +1,32 @@ +{ + "name": "google_cursor", + "version": "1.0.0", + "description": "🍭 Cursor theme inspired on Google", + "main": "index.js", + "repository": "git@github.com:ful1e5/Google_Cursor.git", + "author": "Kaiz Khatri", + "license": "GPL-3.0", + "private": true, + "scripts": { + "clean": "rm -rf bitmaps themes", + "dev": "nodemon src/index.ts", + "watch": "nodemon --inspect src/index.ts", + "py_install": "pip install -r requirements.txt", + "render": "npx ts-node src/index.ts", + "build": "python build.py", + "compile": "yarn clean && yarn render && yarn build" + }, + "devDependencies": { + "@types/pixelmatch": "^5.2.2", + "@types/pngjs": "^3.4.2", + "@types/puppeteer": "^5.4.2", + "nodemon": "^2.0.7", + "ts-node": "^9.1.1", + "typescript": "^4.1.3" + }, + "dependencies": { + "pixelmatch": "^5.2.1", + "pngjs": "^6.0.0", + "puppeteer": "^5.5.0" + } +} diff --git a/bitmapper/src/config.ts b/bitmapper/src/config.ts new file mode 100644 index 0000000..6ab4744 --- /dev/null +++ b/bitmapper/src/config.ts @@ -0,0 +1,23 @@ +import path from "path"; +import { readdirSync, existsSync } from "fs"; + +// Directory resolve +const projectRoot = path.resolve(__dirname, "../../"); + +const outDir = path.resolve(projectRoot, "bitmaps"); +const staticSvgDir = path.resolve(projectRoot, "svg", "static"); +const animatedSvgDir = path.resolve(projectRoot, "svg", "animated"); + +// Generate a svg list +if (!existsSync(staticSvgDir) || !existsSync(animatedSvgDir)) { + throw new Error("svg directory not found"); +} + +const staticCursors = readdirSync(staticSvgDir).map((f) => + path.resolve(staticSvgDir, f) +); +const animatedCursors = readdirSync(animatedSvgDir).map((f) => + path.resolve(animatedSvgDir, f) +); + +export { staticCursors, animatedCursors, outDir }; diff --git a/bitmapper/src/index.ts b/bitmapper/src/index.ts new file mode 100644 index 0000000..9cff291 --- /dev/null +++ b/bitmapper/src/index.ts @@ -0,0 +1,127 @@ +import fs from "fs"; +import path from "path"; +import puppeteer, { ElementHandle, Page } from "puppeteer"; + +import { animatedCursors, outDir, staticCursors } from "./config"; +import { frameNumber } from "./utils/frameNumber"; +import { matchImages } from "./utils/matchImages"; +import { toHTML } from "./utils/toHTML"; + +const getSVGElement = async (page: Page) => { + const svg = await page.$("#container svg"); + + if (!svg) { + throw new Error("svg element not found!"); + } + return svg; +}; + +const screenshot = async (element: ElementHandle): Promise => { + return element.screenshot({ + omitBackground: true, + encoding: "binary", + }); +}; + +const stopAnimation = async (page: Page) => { + // @ts-ignore + await page._client.send("Animation.setPlaybackRate", { + playbackRate: 0, + }); +}; + +const resumeAnimation = async (page: Page, playbackRate: number = 0.1) => { + // @ts-ignore + await page._client.send("Animation.setPlaybackRate", { + playbackRate, + }); +}; + +const saveFrameImage = (key: string, frame: Buffer) => { + const out_path = path.resolve(outDir, key); + fs.writeFileSync(out_path, frame, { encoding: "binary" }); +}; + +const main = async () => { + const browser = await puppeteer.launch({ + ignoreDefaultArgs: ["--single-process", "--no-sandbox"], + headless: true, + }); + + if (!fs.existsSync(outDir)) { + fs.mkdirSync(outDir); + } else { + throw new Error(`out directory '${outDir}' already exists.`); + } + + for (const svgFilePath of staticCursors) { + const svgData = fs.readFileSync(svgFilePath, "utf-8"); + if (!svgData) { + throw new Error(`${svgFilePath} File Read error`); + } + + const page = await browser.newPage(); + const html = toHTML(svgData); + + await page.setContent(html); + const svg = await getSVGElement(page); + + const key = `${path.basename(svgFilePath, ".svg")}.png`; + const out = path.join(outDir, key); + + console.log("Saving", key, "..."); + await svg.screenshot({ omitBackground: true, path: out }); + await page.close(); + } + + for (const svgFilePath of animatedCursors) { + const svgData = fs.readFileSync(svgFilePath, "utf8"); + if (!svgData) { + throw new Error(`${svgFilePath} File Read error`); + } + + const page = await browser.newPage(); + const html = toHTML(svgData); + + await page.setContent(html); + const svg = await getSVGElement(page); + await stopAnimation(page); + + let index = 1; + const frameLimit = 300; + let breakRendering = false; + let prevImg: Buffer; + + // Rendering frames till `imgN` matched to `imgN-1` (When Animation is done) + while (!breakRendering) { + if (index > frameLimit) { + throw new Error("Reached the frame limit."); + } + + resumeAnimation(page); + const img = await screenshot(svg); + stopAnimation(page); + + if (index > 1) { + // @ts-ignore + const diff = matchImages(prevImg, img); + if (diff <= 100) { + breakRendering = !breakRendering; + } + } + const frame = frameNumber(index, 3); + const key = `${path.basename(svgFilePath, ".svg")}-${frame}.png`; + + console.log("Saving", key, "..."); + saveFrameImage(key, img); + + prevImg = img; + ++index; + } + + await page.close(); + } + await browser.close(); +}; + +main(); diff --git a/bitmapper/src/utils/frameNumber.ts b/bitmapper/src/utils/frameNumber.ts new file mode 100644 index 0000000..76d1165 --- /dev/null +++ b/bitmapper/src/utils/frameNumber.ts @@ -0,0 +1,7 @@ +export const frameNumber = (index: number, padding: number) => { + let result = "" + index; + while (result.length < padding) { + result = "0" + result; + } + return result; +}; diff --git a/bitmapper/src/utils/matchImages.ts b/bitmapper/src/utils/matchImages.ts new file mode 100644 index 0000000..6d09a95 --- /dev/null +++ b/bitmapper/src/utils/matchImages.ts @@ -0,0 +1,11 @@ +import Pixelmatch from "pixelmatch"; +import { PNG } from "pngjs"; + +export const matchImages = (img1: Buffer, img2: Buffer): number => { + const { data: img1Data, width, height } = PNG.sync.read(img1); + const { data: imgNData } = PNG.sync.read(img2); + + return Pixelmatch(img1Data, imgNData, null, width, height, { + threshold: 0.1, + }); +}; diff --git a/src/utils/htmlTemplate.ts b/bitmapper/src/utils/toHTML.ts similarity index 68% rename from src/utils/htmlTemplate.ts rename to bitmapper/src/utils/toHTML.ts index 05ea0cb..36fbbf4 100644 --- a/src/utils/htmlTemplate.ts +++ b/bitmapper/src/utils/toHTML.ts @@ -4,7 +4,7 @@ export const template = ` - Eggy Render Template + Render Template @@ -15,5 +15,5 @@ export const template = ` `; -export const generateRenderTemplate = (svg: string) => - template.replace("", svg); +export const toHTML = (svgData: string): string => + template.replace("", svgData); diff --git a/bitmapper/tsconfig.json b/bitmapper/tsconfig.json new file mode 100644 index 0000000..9bb0cc5 --- /dev/null +++ b/bitmapper/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "strict": true, + "noUnusedLocals": true, + "strictNullChecks": true, + "esModuleInterop": true, + "target": "ES2015", + "module": "commonjs", + "lib": ["es2015", "dom"], + "noUnusedParameters": true + } +} diff --git a/yarn.lock b/bitmapper/yarn.lock similarity index 78% rename from yarn.lock rename to bitmapper/yarn.lock index 866df31..df97966 100644 --- a/yarn.lock +++ b/bitmapper/yarn.lock @@ -2,27 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -36,9 +15,9 @@ defer-to-connect "^1.0.1" "@types/node@*": - version "14.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.2.tgz#d25295f9e4ca5989a2c610754dc02a9721235eeb" - integrity sha512-jeYJU2kl7hL9U5xuI/BhKPZ4vqGM/OmK6whiFAXVhlstzZhVamWhDSmHyGLIp+RVyuF9/d0dqr2P85aFj4BvJg== + version "14.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== "@types/pixelmatch@^5.2.2": version "5.2.2" @@ -54,10 +33,10 @@ dependencies: "@types/node" "*" -"@types/puppeteer@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/puppeteer/-/puppeteer-3.0.2.tgz#20085220593b560c7332b6d46aecaf81ae263540" - integrity sha512-JRuHPSbHZBadOxxFwpyZPeRlpPTTeMbQneMdpFd8LXdyNfFSiX950CGewdm69g/ipzEAXAmMyFF1WOWJOL/nKw== +"@types/puppeteer@^5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@types/puppeteer/-/puppeteer-5.4.2.tgz#80f3a1f54dedbbf750779716de81401549062072" + integrity sha512-yjbHoKjZFOGqA6bIEI2dfBE5UPqU0YGWzP+ipDVP1iGzmlhksVKTBVZfT3Aj3wnvmcJ2PQ9zcncwOwyavmafBw== dependencies: "@types/node" "*" @@ -95,13 +74,6 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -122,27 +94,20 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3: version "4.0.3" @@ -193,17 +158,12 @@ buffer-from@^1.0.0: integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer@^5.2.1, buffer@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + base64-js "^1.3.1" + ieee754 "^1.1.13" cacheable-request@^6.0.0: version "6.1.0" @@ -223,15 +183,6 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chalk@^2.0.0, chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -241,9 +192,9 @@ chalk@^3.0.0: supports-color "^7.1.0" chokidar@^3.2.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -253,7 +204,7 @@ chokidar@^3.2.2: normalize-path "~3.0.0" readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" chownr@^1.1.1: version "1.1.4" @@ -277,13 +228,6 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -291,21 +235,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -323,15 +257,20 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== debug@4, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" @@ -343,9 +282,9 @@ debug@^2.2.0: ms "2.0.0" debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -366,10 +305,10 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -devtools-protocol@0.0.799653: - version "0.0.799653" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.799653.tgz#86fc95ce5bf4fdf4b77a58047ba9d2301078f119" - integrity sha512-t1CcaZbvm8pOlikqrsIM9GOa7Ipp07+4h/q9u0JXBWjPCjHdBl9KkddX87Vv9vBHoBGtwV79sYQNGnQM6iS5gg== +devtools-protocol@0.0.818844: + version "0.0.818844" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" + integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== diff@^4.0.1: version "4.0.2" @@ -410,16 +349,6 @@ escape-goat@^2.0.0: resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - extract-zip@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -463,15 +392,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== get-stream@^4.1.0: version "4.1.0" @@ -494,7 +418,7 @@ glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.1.1, glob@^7.1.3: +glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -507,11 +431,11 @@ glob@^7.1.1, glob@^7.1.3: path-is-absolute "^1.0.0" global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== dependencies: - ini "^1.3.5" + ini "1.3.7" got@^9.6.0: version "9.6.0" @@ -550,13 +474,6 @@ has-yarn@^2.1.0: resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -570,10 +487,10 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" @@ -603,10 +520,15 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== is-binary-path@~2.1.0: version "2.1.0" @@ -622,13 +544,6 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d" - integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== - dependencies: - has "^1.0.3" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -689,19 +604,6 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -762,7 +664,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -772,27 +674,30 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.3: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nodemon@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.6.tgz#1abe1937b463aaf62f0d52e2b7eaadf28cc2240d" - integrity sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== dependencies: chokidar "^3.2.2" debug "^3.2.6" @@ -873,11 +778,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -907,10 +807,10 @@ pngjs@^4.0.1: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe" integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg== -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== +pngjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" + integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== prepend-http@^2.0.0: version "2.0.0" @@ -941,21 +841,22 @@ pump@^3.0.0: once "^1.3.1" pupa@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.0.tgz#9e4ec587952b5e4f2c06fe577b0e7db97e8ef721" - integrity sha512-Pj8EhJzFiPwnf4dEXpuUWwH8M/Yl4vpl4cN2RX1i3R77DWvbY5ZPKni7CCKkOYxz+XKt2fieemsV+WTZbIlYzg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: escape-goat "^2.0.0" -puppeteer@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.3.1.tgz#324e190d89f25ac33dba539f57b82a18553f8646" - integrity sha512-YTM1RaBeYrj6n7IlRXRYLqJHF+GM7tasbvrNFx6w1S16G76NrPq7oYFKLDO+BQsXNtS8kW2GxWCXjIMPvfDyaQ== +puppeteer@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00" + integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg== dependencies: debug "^4.1.0" - devtools-protocol "0.0.799653" + devtools-protocol "0.0.818844" extract-zip "^2.0.0" https-proxy-agent "^4.0.0" + node-fetch "^2.6.1" pkg-dir "^4.2.0" progress "^2.0.1" proxy-from-env "^1.0.0" @@ -991,9 +892,9 @@ readdirp@~3.5.0: picomatch "^2.2.1" registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== dependencies: rc "^1.2.8" @@ -1004,14 +905,6 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -resolve@^1.3.2: - version "1.18.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" - integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== - dependencies: - is-core-module "^2.0.0" - path-parse "^1.0.6" - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -1038,7 +931,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver@^5.3.0, semver@^5.7.1: +semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1066,11 +959,6 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -1115,7 +1003,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -1130,19 +1018,19 @@ supports-color@^7.1.0: has-flag "^4.0.0" tar-fs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" - integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" pump "^3.0.0" - tar-stream "^2.0.0" + tar-stream "^2.1.4" -tar-stream@^2.0.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" - integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" end-of-stream "^1.4.1" @@ -1151,9 +1039,9 @@ tar-stream@^2.0.0: readable-stream "^3.1.1" term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== through@^2.3.8: version "2.3.8" @@ -1179,48 +1067,18 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -ts-node@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3" - integrity sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== dependencies: arg "^4.1.0" + create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" source-map-support "^0.5.17" yn "3.1.1" -tslib@^1.13.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslint@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.3" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.13.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -1233,10 +1091,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" - integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== +typescript@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== unbzip2-stream@^1.3.3: version "1.4.3" @@ -1314,9 +1172,9 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== xdg-basedir@^4.0.0: version "4.0.0" diff --git a/build.py b/build.py deleted file mode 100644 index 2382e1a..0000000 --- a/build.py +++ /dev/null @@ -1,16 +0,0 @@ -import log -from clickgen import build_cursor_theme - -from config import name, sizes, delay, bitmaps_dir, temp_folder -from helper import init_build, pack_it - - -def build() -> None: - init_build() - build_cursor_theme(name, image_dir=bitmaps_dir, - cursor_sizes=sizes, out_path=temp_folder, hotspots=None, archive=False, delay=delay) - pack_it() - - -if __name__ == "__main__": - build() diff --git a/builder/Makefile b/builder/Makefile new file mode 100644 index 0000000..96eade2 --- /dev/null +++ b/builder/Makefile @@ -0,0 +1,35 @@ + +all: clean setup build + +.PHONY: all + +.ONESHELL: +SHELL:=/bin/bash + +X_SIZES ?=22 24 28 32 40 48 56 64 72 80 88 96 +WIN_CANVAS_SIZE ?= 32 +WIN_SIZE ?= 24 + +clean: + @rm -rf gbpkg.egg-info build dist + @find -iname "*.pyc" -delete + + # Removing setup.py package files if installed + @if [ -f "files.txt" ]; then + @xargs rm -rf < files.txt + @rm -rf files.txt + @fi + +setup: setup.py + @test -d venv || virtualenv venv + @. venv/bin/activate; python3 setup.py install --record files.txt + +build: setup build.py + @. venv/bin/activate; python3 build.py --xsizes $(X_SIZES) --win-size $(WIN_SIZE) --win-canvas-size $(WIN_CANVAS_SIZE) + +build_unix: setup build.py + @. venv/bin/activate; python3 build.py unix --xsizes $(X_SIZES) + +build_windows: setup build.py + @. venv/bin/activate; python3 build.py windows --win-size $(WIN_SIZE) --win-canvas-size $(WIN_CANVAS_SIZE) + diff --git a/builder/build.py b/builder/build.py new file mode 100644 index 0000000..90c2b80 --- /dev/null +++ b/builder/build.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import argparse +from pathlib import Path + +from xbpkg.configure import get_config +from xbpkg.generator import xbuild, wbuild, build + +parser = argparse.ArgumentParser( + prog="xcursor_pro_builder", + description="'XCursor-Pro' cursor build python script.", +) + +# Positional Args. +parser.add_argument( + "platform", + choices=("windows", "unix", "all"), + default="all", + const="all", + nargs="?", + help="Set package type, Which you want to build. (default: '%(default)s')", +) + + +# Optional Args. +parser.add_argument( + "-p", + "--png-dir", + dest="png_dir", + metavar="PNG", + type=str, + default="../bitmaps", + help="To change pngs directory. (default: %(default)s)", +) + +parser.add_argument( + "-o", + "--out-dir", + dest="out_dir", + metavar="OUT", + type=str, + default="../themes", + help="To change output directory. (default: %(default)s)", +) + + +parser.add_argument( + "-xs", + "--xsizes", + dest="xsizes", + metavar="INT", + nargs="+", + default=[ + 22, + 24, + 28, + 32, + 40, + 48, + 56, + 64, + 72, + 80, + 88, + 96, + ], + type=int, + help="Set pixel-size for xcursor. (default: %(default)s)", +) + + +parser.add_argument( + "-ws", + "--win-size", + dest="win_size", + metavar="INT", + default=24, + type=int, + help="Set pixel-size for Windows cursors. (default: %(default)s)", +) + + +parser.add_argument( + "-wcs", + "--win-canvas-size", + dest="win_canvas_size", + metavar="INT", + default=32, + type=int, + help="Set pixel-size for Windows cursor's canvas. (default: %(default)s)", +) + +# Preparing build +args = parser.parse_args() + +bitmaps_dir = Path(args.png_dir) + +x_out_dir = Path(args.out_dir) / "XCursor-Pro" +win_out_dir = Path(args.out_dir) / "XCursor-Pro_Windows" + +config = get_config( + bitmaps_dir, + x_sizes=args.xsizes, + win_canvas_size=args.win_canvas_size, + win_size=args.win_size, +) + +if args.platform == "unix": + xbuild(config, x_out_dir) +elif args.platform == "windows": + wbuild(config, win_out_dir) +else: + build(config, x_out_dir, win_out_dir) diff --git a/builder/gbpkg/__init__.py b/builder/gbpkg/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/builder/gbpkg/configure.py b/builder/gbpkg/configure.py new file mode 100644 index 0000000..88265c9 --- /dev/null +++ b/builder/gbpkg/configure.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pathlib import Path +from typing import Any, Dict, List, Tuple, TypeVar, Union + +from clickgen.util import LikePath, PNGProvider + +from xbpkg.constants import WIN_CURSORS_CFG, WIN_DELAY, X_CURSORS_CFG, X_DELAY + + +X = TypeVar("X") + + +def to_tuple(x: X) -> Tuple[X, X]: + return (x, x) + + +def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: + """Return configuration of `macOSBigSur` pointers. + + Args: + + :bitmaps_dir: (str | Path) Path to .png file's directory. + + + Keywords Args: + + :x_sizes: (List[int]) List of pixel-sizes for xcursors. + + :win_canvas_size: (int) Windows cursor's canvas pixel-size. + + :win_size: (int) Pixel-size for Windows cursor. + + + Example: + + ```python + get_config("./bitmaps", x_sizes=[(24, 24), (32, 32)], win_canvas_size=(32, 32), win_size=(24, 24)) + ``` + """ + + w_size = to_tuple(kwargs.pop("win_size")) + w_canvas_size = to_tuple(kwargs.pop("win_canvas_size")) + x = kwargs.pop("x_sizes") + + x_sizes = [] + for s in x: + x_sizes.append(to_tuple(s)) + + png = PNGProvider(bitmaps_dir) + config: Dict[str, Any] = {} + + for key, item in X_CURSORS_CFG.items(): + x_hot: int = item.get("xhot", 0) + y_hot: int = item.get("yhot", 0) + hotspot: Tuple[int, int] = (x_hot, y_hot) + + delay: int = item.get("delay", X_DELAY) + p: Union[List[Path], Path] = png.get(key) + + data = { + "png": p, + "x_sizes": x_sizes, + "hotspot": hotspot, + "delay": delay, + } + + win_data = WIN_CURSORS_CFG.get(key) + + if win_data: + win_key = win_data.get("to") + + position = win_data.get("position", "center") + win_delay: int = win_data.get("delay", WIN_DELAY) + + canvas_size: Tuple[int, int] = win_data.get("canvas_size", w_canvas_size) + win_size: Tuple[int, int] = win_data.get("size", w_size) + + # Because provided cursor size is bigger than cursor's canvas. + # Also, "position" settings will not effect on cursor because the cursor's canvas and cursor sizes are equals. + if (win_size[0] > canvas_size[0]) or (win_size[1] > canvas_size[1]): + canvas_size = win_size + + config[key] = { + **data, + "win_key": win_key, + "position": position, + "canvas_size": canvas_size, + "win_size": win_size, + "win_delay": win_delay, + } + else: + config[key] = data + + return config diff --git a/builder/gbpkg/constants.py b/builder/gbpkg/constants.py new file mode 100644 index 0000000..5a52018 --- /dev/null +++ b/builder/gbpkg/constants.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from typing import Dict, List, Tuple + +# Info +THEME_NAME = "GoogleDot" +COMMENT = "Cursor theme inspired on Google" +AUTHOR = "Kaiz Khatri" +URL = "https://github.com/ful1e5/Google_Cursor" + +# XCursor +X_DELAY: int = 25 + + +# Windows Cursor +WIN_DELAY = 1 + +X_CURSORS_CFG: Dict[str, Dict[str, int]] = { + ########## + # Static # + ########## + "all-scroll.png": {"xhot": 100, "yhot": 100}, + "bottom_left_corner.png": {"xhot": 100, "yhot": 100}, + "bottom_right_corner.png": {"xhot": 100, "yhot": 100}, + "bottom_tee.png": {"xhot": 98, "yhot": 137}, + "center_ptr.png": {"xhot": 99, "yhot": 29}, + "context-menu.png": {"xhot": 51, "yhot": 24}, + "copy.png": {"xhot": 51, "yhot": 24}, + "cross.png": {"xhot": 100, "yhot": 100}, + "crossed_circle.png": {"xhot": 51, "yhot": 24}, + "crosshair.png": {"xhot": 100, "yhot": 100}, + "dnd_no_drop.png": {"xhot": 100, "yhot": 100}, + "dotbox.png": {"xhot": 100, "yhot": 100}, + "hand1.png": {"xhot": 103, "yhot": 56}, + "hand2.png": {"xhot": 78, "yhot": 26}, + "left_ptr.png": {"xhot": 51, "yhot": 24}, + "left_side.png": {"xhot": 100, "yhot": 100}, + "left_tee.png": {"xhot": 100, "yhot": 100}, + "link.png": {"xhot": 120, "yhot": 55}, + "ll_angle.png": {"xhot": 100, "yhot": 100}, + "lr_angle.png": {"xhot": 100, "yhot": 100}, + "move.png": {"xhot": 102, "yhot": 73}, + "pencil.png": {"xhot": 81, "yhot": 117}, + "plus.png": {"xhot": 98, "yhot": 100}, + "question_arrow.png": {"xhot": 51, "yhot": 24}, + "right_ptr.png": {"xhot": 143, "yhot": 24}, + "right_tee.png": {"xhot": 98, "yhot": 99}, + "sb_down_arrow.png": {"xhot": 100, "yhot": 100}, + "sb_h_double_arrow.png": {"xhot": 100, "yhot": 100}, + "sb_left_arrow.png": {"xhot": 100, "yhot": 100}, + "sb_right_arrow.png": {"xhot": 100, "yhot": 100}, + "sb_up_arrow.png": {"xhot": 100, "yhot": 100}, + "sb_v_double_arrow.png": {"xhot": 100, "yhot": 100}, + "top_side.png": {"xhot": 100, "yhot": 100}, + "top_tee.png": {"xhot": 100, "yhot": 100}, + "ul_angle.png": {"xhot": 100, "yhot": 100}, + "ur_angle.png": {"xhot": 100, "yhot": 100}, + "vertical-text.png": {"xhot": 96, "yhot": 99}, + "wayland-cursor.png": {"xhot": 100, "yhot": 100}, + "X_cursor.png": {"xhot": 100, "yhot": 100}, + "xterm.png": {"xhot": 100, "yhot": 89}, + # + "zoom-in.png": {"xhot": 89, "yhot": 87}, + "zoom-out.png": {"xhot": 89, "yhot": 87}, + ############ + # Animated # + ############ + # Note: Animated cursors don't need an extension and frame numbers. + "left_ptr_watch": {"xhot": 51, "yhot": 24}, + "wait": {"xhot": 100, "yhot": 100}, +} + +WIN_CURSORS_CFG: Dict[str, Dict[str, str]] = { + ########## + # Static # + ########## + "right_ptr.png": {"to": "Alternate", "position": "top_right"}, + "cross.png": {"to": "Cross"}, + "left_ptr.png": {"to": "Default", "position": "top_left"}, + "bottom_left_corner.png": {"to": "Diagonal_1"}, + "bottom_right_corner.png": {"to": "Diagonal_2"}, + "pencil.png": {"to": "Handwriting"}, + "question_arrow.png": {"to": "Help", "position.png": "top_left"}, + "sb_h_double_arrow.png": {"to": "Horizontal"}, + "xterm.png": {"to": "IBeam", "position": "top_left"}, + "hand2.png": {"to": "Link", "position": "top_left"}, + "hand1.png": {"to": "Move"}, + "crossed_circle.png": {"to": "Unavailiable", "position": "top_left"}, + "sb_v_double_arrow.png": {"to": "Vertical"}, + ############ + # Animated # + ############ + # Note: Animated cursors don't need frame numbers. + "left_ptr_watch": {"to": "Work", "position": "top_left"}, + "wait": {"to": "Busy"}, +} diff --git a/builder/gbpkg/generator.py b/builder/gbpkg/generator.py new file mode 100644 index 0000000..242e8b1 --- /dev/null +++ b/builder/gbpkg/generator.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from pathlib import Path +from typing import Any, Dict + +from clickgen.builders import WindowsCursor, XCursor +from clickgen.core import CursorAlias +from clickgen.packagers import WindowsPackager, XPackager + +from xbpkg.constants import AUTHOR, COMMENT, THEME_NAME, URL +from xbpkg.symlinks import add_missing_xcursor + + +def xbuild( + config: Dict[str, Dict[str, Any]], + x_out_dir: Path, +) -> None: + """Build `macOSBigSur` cursor theme for only `X11`(UNIX) platform. + + :config: (Dict) `macOSBigSur` configuration. + + :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. + """ + + for _, item in config.items(): + png = item.get("png") + hotspot = item.get("hotspot") + x_sizes = item.get("x_sizes") + delay = item.get("delay") + + with CursorAlias.from_bitmap(png, hotspot) as alias: + x_cfg = alias.create(x_sizes, delay) + print(f"Building '{x_cfg.stem}' XCursor...") + XCursor.create(x_cfg, x_out_dir) + + add_missing_xcursor(x_out_dir / "cursors") + XPackager(x_out_dir, THEME_NAME, COMMENT) + + +def wbuild(config: Dict[str, Dict[str, Any]], win_out_dir: Path) -> None: + """Build `macOSBigSur` cursor theme for only `Windows` platforms. + + :config: (Dict) `macOSBigSur` configuration. + + :win_out_dir: (Path) Path to the output directory, Where the `Windows` cursor theme package will generate. It also creates a directory if not exists. + """ + + for _, item in config.items(): + png = item.get("png") + hotspot = item.get("hotspot") + x_sizes = item.get("x_sizes") + delay = item.get("delay") + + with CursorAlias.from_bitmap(png, hotspot) as alias: + alias.create(x_sizes, delay) + + if item.get("win_key"): + position = item.get("position") + win_size = item.get("win_size") + win_key = item.get("win_key") + canvas_size = item.get("canvas_size") + win_delay = item.get("win_delay") + + win_cfg = alias.reproduce( + win_size, canvas_size, position, delay=win_delay + ).rename(win_key) + print(f"Building '{win_cfg.stem}' Windows Cursor...") + WindowsCursor.create(win_cfg, win_out_dir) + + WindowsPackager(win_out_dir, THEME_NAME, COMMENT, AUTHOR, URL) + + +def build( + config: Dict[str, Dict[str, Any]], x_out_dir: Path, win_out_dir: Path +) -> None: + """Build `macOSBigSur` cursor theme for `X11` & `Windows` platforms. + + :config: (Dict) `macOSBigSur` configuration. + + :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. + + :win_out_dir: (Path) Path to the output directory, Where the `Windows` cursor theme package will generate. It also creates a directory if not exists. + """ + + def win_build(item: Dict[str, Any], alias: CursorAlias) -> None: + position = item.get("position") + win_size = item.get("win_size") + win_key = item.get("win_key") + canvas_size = item.get("canvas_size") + win_delay = item.get("win_delay") + + win_cfg = alias.reproduce( + win_size, canvas_size, position, delay=win_delay + ).rename(win_key) + print(f"Building '{win_cfg.stem}' Windows Cursor...") + WindowsCursor.create(win_cfg, win_out_dir) + + for _, item in config.items(): + png = item.get("png") + hotspot = item.get("hotspot") + x_sizes = item.get("x_sizes") + delay = item.get("delay") + + with CursorAlias.from_bitmap(png, hotspot) as alias: + x_cfg = alias.create(x_sizes, delay) + print(f"Building '{x_cfg.stem}' XCursor...") + XCursor.create(x_cfg, x_out_dir) + + if item.get("win_key"): + win_build(item, alias) + + add_missing_xcursor(x_out_dir / "cursors") + XPackager(x_out_dir, THEME_NAME, COMMENT) + + WindowsPackager(win_out_dir, THEME_NAME, COMMENT, AUTHOR, URL) diff --git a/builder/gbpkg/symlinks.py b/builder/gbpkg/symlinks.py new file mode 100644 index 0000000..a1df604 --- /dev/null +++ b/builder/gbpkg/symlinks.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os +from pathlib import Path +from typing import Dict, List, Union + +from clickgen.util import LikePath, chdir + + +def add_missing_xcursor(directory: Union[str, Path]) -> None: + """Add missing `XCursor` to the Unix cursor package. + + :directory: (Path|str) directory where XCursors are available. + """ + + symlinks: List[Dict[str, Union[str, List[str]]]] = [ + {"src": "all-scroll", "links": ["fleur", "size_all"]}, + { + "src": "bottom_left_corner", + "links": [ + "fcf1c3c7cd4491d801f1e1c78f100000", + "sw-resize", + "ne-resize", + "size_bdiag", + "nesw-resize", + "top_right_corner", + "fd_double_arrow", + ], + }, + { + "src": "bottom_right_corner", + "links": [ + "c7088f0f3e6c8088236ef8e1e3e70000", + "top_left_corner", + "se-resize", + "nw-resize", + "size_fdiag", + "nwse-resize", + "bd_double_arrow", + ], + }, + { + "src": "copy", + "links": [ + "1081e37283d90000800003c07f3ef6bf", + "6407b0e94181790501fd1e167b474872", + "b66166c04f8c3109214a4fbd64a50fc8", + "dnd-copy", + ], + }, + { + "src": "cross", + "links": ["cross_reverse", "diamond_cross", "tcross", "color-picker"], + }, + { + "src": "crossed_circle", + "links": [ + "03b6e0fcb3499374a867c041f52298f0", + "not-allowed", + "forbidden", + "circle", + ], + }, + {"src": "dnd_no_drop", "links": ["no-drop"]}, + {"src": "dotbox", "links": ["dot_box_mask", "draped_box", "icon", "target"]}, + {"src": "hand1", "links": ["grab", "openhand"]}, + { + "src": "hand2", + "links": [ + "9d800788f1b08800ae810202380a0822", + "e29285e634086352946a0e7090d73106", + "pointer", + "pointing_hand", + ], + }, + {"src": "left_ptr", "links": ["arrow", "default"]}, + { + "src": "left_ptr_watch", + "links": [ + "00000000000000020006000e7e9ffc3f", + "08e8e1c95fe2fc01f976f1e063a24ccd", + "3ecb610c1bf2410f44200f48c40d3599", + "progress", + ], + }, + {"src": "left_side", "links": ["w-resize", "right_side", "e-resize"]}, + { + "src": "link", + "links": [ + "3085a0e285430894940527032f8b26df", + "640fb0e74195791501fd1ed57b41487f", + "a2a266d0498c3104214a47bd64ab0fc8", + "alias", + "dnd-link", + ], + }, + { + "src": "move", + "links": [ + "4498f0e0c1937ffe01fd06f973665830", + "9081237383d90e509aa00f00170e968f", + "fcf21c00b30f7e3f83fe0dfd12e71cff", + "grabbing", + "pointer_move", + "dnd-move", + "closedhand", + "dnd-none", + ], + }, + {"src": "pencil", "links": ["draft"]}, + {"src": "plus", "links": ["cell"]}, + { + "src": "question_arrow", + "links": [ + "5c6cd98b3f3ebcb1f9c7f1c204630408", + "d9ce0ab605698f320427677b458ad60b", + "help", + "left_ptr_help", + "whats_this", + "dnd-ask", + ], + }, + {"src": "right_ptr", "links": ["draft_large", "draft_small"]}, + {"src": "sb_down_arrow", "links": ["down-arrow"]}, + { + "src": "sb_h_double_arrow", + "links": [ + "028006030e0e7ebffc7f7070c0600140", + "14fef782d02440884392942c1120523", + "col-resize", + "ew-resize", + "h_double_arrow", + "size-hor", + "size_hor", + "split_h", + ], + }, + {"src": "sb_left_arrow", "links": ["left-arrow"]}, + {"src": "sb_right_arrow", "links": ["right-arrow"]}, + {"src": "sb_up_arrow", "links": ["up-arrow"]}, + { + "src": "sb_v_double_arrow", + "links": [ + "00008160000006810000408080010102", + "2870a09082c103050810ffdffffe0204", + "double_arrow", + "ns-resize", + "row-resize", + "size-ver", + "size_ver", + "split_v", + "v_double_arrow", + ], + }, + {"src": "top_side", "links": ["s-resize", "n-resize", "bottom_side"]}, + {"src": "wait", "links": ["watch"]}, + {"src": "X_cursor", "links": ["pirate", "x-cursor"]}, + {"src": "xterm", "links": ["ibeam", "text"]}, + ] + + with chdir(directory): + for item in symlinks: + src = item.get("src") + for link in item.get("links"): + print(f"Creating symlink {src} -> {link}") + os.symlink(src, link) diff --git a/builder/setup.py b/builder/setup.py new file mode 100644 index 0000000..b0e6efb --- /dev/null +++ b/builder/setup.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from setuptools import setup + +setup( + name="gbpkg", + version="1.1.0", + description="Generate 'GoogleDot' cursor theme from PNGs file", + url="https://github.com/ful1e5/Google_Cursor", + packages=["gbpkg"], + package_dir={"gbpkg": "gbpkg"}, + author="Kaiz Khatri", + author_email="kaizmandhu@gamil.com", + install_requires=["clickgen==1.1.8"], + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + ], + python_requires=">=3.8", + zip_safe=True, +) diff --git a/config.py b/config.py deleted file mode 100644 index fe475cb..0000000 --- a/config.py +++ /dev/null @@ -1,46 +0,0 @@ -import tempfile -import json - -# Build Config -delay = 50 -name = "GoogleDot" -sizes = [22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96] - -bitmaps_dir = "./bitmaps" -package_dir = "./themes" -temp_folder = tempfile.mkdtemp() - -# Cleanup Configs -x11_out = name -win_out = name + "-Windows" - -# getting author name -with open("./package.json") as f: - data = json.loads(f.read()) - author = data["author"] - -# Windows Cursors Config -windows_cursors = { - "left_ptr_watch.ani": "AppStarting.ani", - "left_ptr.cur": "Arrow.cur", - "crosshair.cur": "Cross.cur", - "hand2.cur": "Hand.cur", - "pencil.cur": "Handwriting.cur", - "dnd-ask.cur": "Help.cur", - "xterm.cur": "IBeam.cur", - "circle.cur": "NO.cur", - "all-scroll.cur": "SizeAll.cur", - "bd_double_arrow.cur": "SizeNWSE.cur", - "sb_v_double_arrow.cur": "SizeNS.cur", - "fd_double_arrow.cur": "SizeNESW.cur", - "sb_h_double_arrow.cur": "SizeWE.cur", - "sb_up_arrow.cur": "UpArrow.cur", - "wait.ani": "Wait.ani", -} - -# Windows install.inf file content -with open("./scripts/windows.inf") as f: - data = f.read() - window_install_inf_content = data.replace( - "", name + " Cursors" - ).replace("", author) diff --git a/helper.py b/helper.py deleted file mode 100644 index cc88968..0000000 --- a/helper.py +++ /dev/null @@ -1,71 +0,0 @@ -import shutil -import json -import sys - -from config import ( - name, - temp_folder, - bitmaps_dir, - win_out, - x11_out, - window_install_inf_content, - windows_cursors, - package_dir, -) -from os import path, listdir, rename, remove - - -x11_out_dir = path.join(package_dir, x11_out) -win_out_dir = path.join(package_dir, win_out) - - -def window_bundle() -> None: - # Remove & Rename cursors - # If Key found => Rename else Remove - for cursor in listdir(win_out_dir): - old_path = path.join(win_out_dir, cursor) - - try: - new_path = path.join(win_out_dir, windows_cursors[cursor]) - rename(old_path, new_path) - except KeyError: - remove(old_path) - - # creating install.inf file - install_inf_path = path.join(win_out_dir, "install.inf") - with open(install_inf_path, "w") as file: - file.write(window_install_inf_content) - - -def init_build() -> None: - """ - Print build version. - Remove previously built packages && Check Bitmaps. - """ - with open("./package.json", "r") as package_file: - data = json.loads(package_file.read()) - version = data["version"] - print("⚡ GoogleDot Builder v%s" % version) - - # cleanup old packages - if path.exists(package_dir): - shutil.rmtree(package_dir) - - # Checking Bitmaps directory - if not path.exists(bitmaps_dir): - print( - "⚠ BITMAPS NOT FOUND.\n\n`yarn install && yarn render` to Generates Bitmaps" - ) - sys.exit(1) - - -def pack_it() -> None: - """ - Create Crisp 📦 Packages for Windows & X11 Cursor Theme. - """ - # Rename directory - shutil.move(path.join(temp_folder, name, "x11"), x11_out_dir) - shutil.move(path.join(temp_folder, name, "win"), win_out_dir) - - # create install.inf file in Windows Theme - window_bundle() diff --git a/log.py b/log.py deleted file mode 100644 index 0e8767e..0000000 --- a/log.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python - -import logging - -logging.basicConfig( - filename="build.log", - filemode="w", - format="%(name)s - %(levelname)s - %(message)s", - level=logging.DEBUG, -) diff --git a/nodemon.json b/nodemon.json deleted file mode 100644 index cde9605..0000000 --- a/nodemon.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "restartable": "rs", - "ignore": [".git", "node_modules/**/node_modules"], - "verbose": true, - "execMap": { - "ts": "node --require ts-node/register" - }, - "watch": ["src/"], - "env": { - "NODE_ENV": "development" - }, - "ext": "js,json,ts" -} diff --git a/package.json b/package.json deleted file mode 100644 index a1e9bef..0000000 --- a/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "google_cursor", - "version": "1.0.0", - "description": "🍭 Cursor theme inspired on Google", - "main": "index.js", - "repository": "git@github.com:ful1e5/Google_Cursor.git", - "author": "Kaiz Khatri", - "license": "GPL-3.0", - "private": true, - "scripts": { - "clean": "rm -rf bitmaps themes", - "dev": "nodemon src/index.ts", - "watch": "nodemon --inspect src/index.ts", - "py_install": "pip install -r requirements.txt", - "render": "npx ts-node src/index.ts", - "build": "python build.py", - "compile": "yarn clean && yarn render && yarn build" - }, - "devDependencies": { - "@types/pixelmatch": "^5.2.2", - "@types/pngjs": "^3.4.2", - "@types/puppeteer": "^3.0.2", - "nodemon": "^2.0.6", - "ts-node": "^9.0.0", - "tslint": "^6.1.3", - "typescript": "^4.0.3" - }, - "dependencies": { - "pixelmatch": "^5.2.1", - "pngjs": "^5.0.0", - "puppeteer": "^5.3.1" - } -} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index dbfa3c9..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -clickgen==1.1.7 -Pillow<=8.0.1 diff --git a/scripts/windows.inf b/scripts/windows.inf deleted file mode 100644 index 0586241..0000000 --- a/scripts/windows.inf +++ /dev/null @@ -1,52 +0,0 @@ -[Version] -signature="$CHICAGO$" - By Kaiz Khatri -https://github.com/ful1e5/apple_cursor - -[DefaultInstall] -CopyFiles = Scheme.Cur -AddReg = Scheme.Reg - -[DestinationDirs] -Scheme.Cur = 10,"%CUR_DIR%" - -[Scheme.Reg] -HKCU,"Control Panel\Cursors\Schemes","%SCHEME_NAME%",,"%10%\%CUR_DIR%\%pointer%,%10%\%CUR_DIR%\%help%,%10%\%CUR_DIR%\%work%,%10%\%CUR_DIR%\%busy%,%10%\%CUR_DIR%\%Cross%,%10%\%CUR_DIR%\%Text%,%10%\%CUR_DIR%\%Hand%,%10%\%CUR_DIR%\%Unavailiable%,%10%\%CUR_DIR%\%Vert%,%10%\%CUR_DIR%\%Horz%,%10%\%CUR_DIR%\%Dgn1%,%10%\%CUR_DIR%\%Dgn2%,%10%\%CUR_DIR%\%move%,%10%\%CUR_DIR%\%alternate%,%10%\%CUR_DIR%\%link%" - -; -- Installed files - -[Scheme.Cur] -"Arrow.cur" -"Help.cur" -"AppStarting.ani" -"Wait.ani" -"Cross.cur" -"IBeam.cur" -"Handwriting.cur" -"NO.cur" -"SizeNS.cur" -"SizeWE.cur" -"SizeNWSE.cur" -"SizeNESW.cur" -"SizeAll.cur" -"UpArrow.cur" -"Hand.cur" - -[Strings] -CUR_DIR = "Cursors\" -SCHEME_NAME = "" -pointer = "Arrow.cur" -help = "Help.cur" -work = "AppStarting.ani" -busy = "Wait.ani" -cross = "Cross.cur" -text = "IBeam.cur" -hand = "Handwriting.cur" -unavailiable = "NO.cur" -vert = "SizeNS.cur" -horz = "SizeWE.cur" -dgn1 = "SizeNWSE.cur" -dgn2 = "SizeNESW.cur" -move = "SizeAll.cur" -alternate = "UpArrow.cur" -link = "Hand.cur" \ No newline at end of file diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index 843b7b5..0000000 --- a/src/config.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { resolve } from "path"; -import { readdirSync, existsSync } from "fs"; - -// Source Directory -const svgsDir = resolve(__dirname, "svg"); -if (!existsSync(svgsDir)) { - console.log("Source .svg files not found"); -} - -const staticCursorsDir = resolve(svgsDir, "static"); -const animatedCursorsDir = resolve(svgsDir, "animated"); - -// Out Directory -const bitmapsDir = resolve(__dirname, "../", "bitmaps"); - -// Cursors -const staticCursors = readdirSync(staticCursorsDir).map((f) => - resolve(staticCursorsDir, f) -); -const animatedCursors = readdirSync(animatedCursorsDir).map((f) => - resolve(animatedCursorsDir, f) -); - -// Animated Config -const animatedClip = { - x: 4, - y: 4, - width: 200, - height: 200, -}; -export { staticCursors, animatedCursors, bitmapsDir, animatedClip }; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 5007114..0000000 --- a/src/index.ts +++ /dev/null @@ -1,124 +0,0 @@ -import fs from "fs"; -import path from "path"; -import puppeteer from "puppeteer"; - -import { generateRenderTemplate } from "./utils/htmlTemplate"; -import { - staticCursors, - bitmapsDir, - animatedCursors, - animatedClip, -} from "./config"; -import { matchImages } from "./utils/matchImages"; -import { saveFrames, Frames } from "./utils/saveFrames"; -import { getFrameName } from "./utils/getFrameName"; - -const main = async () => { - const browser = await puppeteer.launch({ - ignoreDefaultArgs: [" --single-process ", "--no-sandbox"], - headless: true, - }); - - if (!fs.existsSync(bitmapsDir)) { - fs.mkdirSync(bitmapsDir); - } - - try { - console.log("📸 Rendering Static Cursors..."); - - for (let svgPath of staticCursors) { - const buffer = fs.readFileSync(path.resolve(svgPath), "utf8"); - if (!buffer) throw new Error(`${svgPath} File Read error`); - - // Generating HTML Template - const data = buffer.toString(); - const template = generateRenderTemplate(data); - - // config - const bitmapName = `${path.basename(svgPath, ".svg")}.png`; - const out = path.resolve(bitmapsDir, bitmapName); - - // Render - const page = await browser.newPage(); - await page.setContent(template); - - await page.waitForSelector("#container"); - const svgElement = await page.$("#container svg"); - if (!svgElement) throw new Error("svg element not found"); - await svgElement.screenshot({ omitBackground: true, path: out }); - - await page.close(); - } - - console.log("🎥 Rendering Animated Cursors..."); - - for (let svgPath of animatedCursors) { - const buffer = fs.readFileSync(svgPath, "utf8"); - if (!buffer) throw new Error(`${svgPath} File Read error`); - - // Generating HTML Template - const data = buffer.toString(); - const template = generateRenderTemplate(data); - - const page = await browser.newPage(); - await page.setContent(template, { waitUntil: "networkidle2" }); - - await page.waitForSelector("#container"); - const svgElement = await page.$("#container svg"); - if (!svgElement) throw new Error("svg element not found"); - - // Render Config - let index = 1; - let breakRendering = false; - const frames: Frames = {}; - const firstKey = getFrameName(index, svgPath); - - console.log("Rendering", path.basename(svgPath), "..."); - console.log(firstKey); - - // 1st Frame - frames[firstKey] = { - buffer: await svgElement.screenshot({ - omitBackground: true, - clip: animatedClip, - encoding: "binary", - }), - }; - - // Pushing frames until it match to 1st frame - index++; - while (!breakRendering) { - const newFrame = await svgElement.screenshot({ - omitBackground: true, - clip: animatedClip, - encoding: "binary", - }); - const key = getFrameName(index, svgPath); - console.log(key); - const diff = matchImages({ - img1Buff: frames[firstKey].buffer, - img2Buff: newFrame, - }); - - if (!(diff < 700)) { - frames[key] = { buffer: newFrame }; - } else { - breakRendering = true; - } - index++; - } - - saveFrames(frames); - - await page.close(); - } - - console.log(`\nBitmaps stored at ${bitmapsDir}\n\n🎉 Render Done.`); - process.exit(0); - } catch (error) { - console.error(error); - process.exit(1); - } -}; - -main(); diff --git a/src/svg/static/center_ptr.svg b/src/svg/static/center_ptr.svg deleted file mode 100644 index 304f6ef..0000000 --- a/src/svg/static/center_ptr.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/svg/static/cross.svg b/src/svg/static/cross.svg deleted file mode 100644 index d894d8d..0000000 --- a/src/svg/static/cross.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/svg/static/crossed_circle.svg b/src/svg/static/crossed_circle.svg deleted file mode 100644 index 8535691..0000000 --- a/src/svg/static/crossed_circle.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/svg/static/crosshair.svg b/src/svg/static/crosshair.svg deleted file mode 100644 index 09f696f..0000000 --- a/src/svg/static/crosshair.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/svg/static/left_side.svg b/src/svg/static/left_side.svg deleted file mode 100644 index 0982847..0000000 --- a/src/svg/static/left_side.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/svg/static/right_ptr.svg b/src/svg/static/right_ptr.svg deleted file mode 100644 index 8dcbe1e..0000000 --- a/src/svg/static/right_ptr.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/src/svg/static/top_side.svg b/src/svg/static/top_side.svg deleted file mode 100644 index b8666bc..0000000 --- a/src/svg/static/top_side.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/utils/getFrameName.ts b/src/utils/getFrameName.ts deleted file mode 100644 index 5b3dfff..0000000 --- a/src/utils/getFrameName.ts +++ /dev/null @@ -1,14 +0,0 @@ -import path from "path"; - -export const frameNumber = (index: number, endIndex: number) => { - let result = "" + index; - while (result.length < endIndex) { - result = "0" + result; - } - return result; -}; - -export const getFrameName = (index: number, fileName: string) => { - const frame = frameNumber(index, 2); - return `${path.basename(fileName, ".svg")}-${frame}.png`; -}; diff --git a/src/utils/matchImages.ts b/src/utils/matchImages.ts deleted file mode 100644 index aceffa8..0000000 --- a/src/utils/matchImages.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { PNG } from "pngjs"; -import pixelmatch from "pixelmatch"; - -interface MatchImagesArgs { - img1Buff: Buffer; - img2Buff: Buffer; -} - -export const matchImages = ({ img1Buff, img2Buff }: MatchImagesArgs) => { - const img1 = PNG.sync.read(img1Buff); - const img2 = PNG.sync.read(img2Buff); - const { width, height } = img1; - - const diff = new PNG({ width, height }); - - return pixelmatch(img1.data, img2.data, diff.data, width, height, { - threshold: 0.25, - }); -}; diff --git a/src/utils/saveFrames.ts b/src/utils/saveFrames.ts deleted file mode 100644 index f3be527..0000000 --- a/src/utils/saveFrames.ts +++ /dev/null @@ -1,16 +0,0 @@ -import fs from "fs"; -import path from "path"; -import { bitmapsDir } from "../config"; - -export interface Frames { - [fileName: string]: { - buffer: Buffer; - }; -} - -export const saveFrames = (frames: Frames) => { - for (let [fileName, { buffer }] of Object.entries(frames)) { - const out_path = path.resolve(bitmapsDir, fileName); - fs.writeFileSync(out_path, buffer, { encoding: "binary" }); - } -}; diff --git a/src/svg/README.md b/svg/README.md similarity index 100% rename from src/svg/README.md rename to svg/README.md diff --git a/src/svg/animated/left_ptr_watch.svg b/svg/animated/left_ptr_watch.svg similarity index 100% rename from src/svg/animated/left_ptr_watch.svg rename to svg/animated/left_ptr_watch.svg diff --git a/src/svg/animated/wait.svg b/svg/animated/wait.svg similarity index 100% rename from src/svg/animated/wait.svg rename to svg/animated/wait.svg diff --git a/src/svg/static/all_scroll.svg b/svg/static/all_scroll.svg similarity index 100% rename from src/svg/static/all_scroll.svg rename to svg/static/all_scroll.svg diff --git a/src/svg/static/bd_double_arrow.svg b/svg/static/bd_double_arrow.svg similarity index 100% rename from src/svg/static/bd_double_arrow.svg rename to svg/static/bd_double_arrow.svg diff --git a/src/svg/static/bottom_left_corner.svg b/svg/static/bottom_left_corner.svg similarity index 100% rename from src/svg/static/bottom_left_corner.svg rename to svg/static/bottom_left_corner.svg diff --git a/src/svg/static/bottom_right_corner.svg b/svg/static/bottom_right_corner.svg similarity index 100% rename from src/svg/static/bottom_right_corner.svg rename to svg/static/bottom_right_corner.svg diff --git a/src/svg/static/bottom_side.svg b/svg/static/bottom_side.svg similarity index 100% rename from src/svg/static/bottom_side.svg rename to svg/static/bottom_side.svg diff --git a/src/svg/static/bottom_tee.svg b/svg/static/bottom_tee.svg similarity index 100% rename from src/svg/static/bottom_tee.svg rename to svg/static/bottom_tee.svg diff --git a/svg/static/center_ptr.svg b/svg/static/center_ptr.svg new file mode 120000 index 0000000..e94216c --- /dev/null +++ b/svg/static/center_ptr.svg @@ -0,0 +1 @@ +left_ptr.svg \ No newline at end of file diff --git a/src/svg/static/circle.svg b/svg/static/circle.svg similarity index 100% rename from src/svg/static/circle.svg rename to svg/static/circle.svg diff --git a/src/svg/static/context_menu.svg b/svg/static/context_menu.svg similarity index 100% rename from src/svg/static/context_menu.svg rename to svg/static/context_menu.svg diff --git a/src/svg/static/copy.svg b/svg/static/copy.svg similarity index 100% rename from src/svg/static/copy.svg rename to svg/static/copy.svg diff --git a/svg/static/cross.svg b/svg/static/cross.svg new file mode 120000 index 0000000..e089419 --- /dev/null +++ b/svg/static/cross.svg @@ -0,0 +1 @@ +pencil.svg \ No newline at end of file diff --git a/svg/static/crossed_circle.svg b/svg/static/crossed_circle.svg new file mode 120000 index 0000000..fee1a88 --- /dev/null +++ b/svg/static/crossed_circle.svg @@ -0,0 +1 @@ +circle.svg \ No newline at end of file diff --git a/svg/static/crosshair.svg b/svg/static/crosshair.svg new file mode 120000 index 0000000..e089419 --- /dev/null +++ b/svg/static/crosshair.svg @@ -0,0 +1 @@ +pencil.svg \ No newline at end of file diff --git a/src/svg/static/dnd_ask.svg b/svg/static/dnd_ask.svg similarity index 100% rename from src/svg/static/dnd_ask.svg rename to svg/static/dnd_ask.svg diff --git a/src/svg/static/dnd_copy.svg b/svg/static/dnd_copy.svg similarity index 100% rename from src/svg/static/dnd_copy.svg rename to svg/static/dnd_copy.svg diff --git a/src/svg/static/dnd_link.svg b/svg/static/dnd_link.svg similarity index 100% rename from src/svg/static/dnd_link.svg rename to svg/static/dnd_link.svg diff --git a/src/svg/static/dnd_move.svg b/svg/static/dnd_move.svg similarity index 100% rename from src/svg/static/dnd_move.svg rename to svg/static/dnd_move.svg diff --git a/src/svg/static/dnd_no_drop.svg b/svg/static/dnd_no_drop.svg similarity index 100% rename from src/svg/static/dnd_no_drop.svg rename to svg/static/dnd_no_drop.svg diff --git a/src/svg/static/dnd_none.svg b/svg/static/dnd_none.svg similarity index 100% rename from src/svg/static/dnd_none.svg rename to svg/static/dnd_none.svg diff --git a/src/svg/static/dotbox.svg b/svg/static/dotbox.svg similarity index 100% rename from src/svg/static/dotbox.svg rename to svg/static/dotbox.svg diff --git a/src/svg/static/fd_double_arrow.svg b/svg/static/fd_double_arrow.svg similarity index 100% rename from src/svg/static/fd_double_arrow.svg rename to svg/static/fd_double_arrow.svg diff --git a/src/svg/static/grabbing.svg b/svg/static/grabbing.svg similarity index 100% rename from src/svg/static/grabbing.svg rename to svg/static/grabbing.svg diff --git a/src/svg/static/hand1.svg b/svg/static/hand1.svg similarity index 100% rename from src/svg/static/hand1.svg rename to svg/static/hand1.svg diff --git a/src/svg/static/hand2.svg b/svg/static/hand2.svg similarity index 100% rename from src/svg/static/hand2.svg rename to svg/static/hand2.svg diff --git a/src/svg/static/left_ptr.svg b/svg/static/left_ptr.svg similarity index 100% rename from src/svg/static/left_ptr.svg rename to svg/static/left_ptr.svg diff --git a/svg/static/left_side.svg b/svg/static/left_side.svg new file mode 120000 index 0000000..1d2bc24 --- /dev/null +++ b/svg/static/left_side.svg @@ -0,0 +1 @@ +sb_h_double_arrow.svg \ No newline at end of file diff --git a/src/svg/static/left_tee.svg b/svg/static/left_tee.svg similarity index 100% rename from src/svg/static/left_tee.svg rename to svg/static/left_tee.svg diff --git a/src/svg/static/link.svg b/svg/static/link.svg similarity index 100% rename from src/svg/static/link.svg rename to svg/static/link.svg diff --git a/src/svg/static/ll_angle.svg b/svg/static/ll_angle.svg similarity index 100% rename from src/svg/static/ll_angle.svg rename to svg/static/ll_angle.svg diff --git a/src/svg/static/lr_angle.svg b/svg/static/lr_angle.svg similarity index 100% rename from src/svg/static/lr_angle.svg rename to svg/static/lr_angle.svg diff --git a/src/svg/static/move.svg b/svg/static/move.svg similarity index 100% rename from src/svg/static/move.svg rename to svg/static/move.svg diff --git a/src/svg/static/pencil.svg b/svg/static/pencil.svg similarity index 100% rename from src/svg/static/pencil.svg rename to svg/static/pencil.svg diff --git a/src/svg/static/plus.svg b/svg/static/plus.svg similarity index 100% rename from src/svg/static/plus.svg rename to svg/static/plus.svg diff --git a/src/svg/static/pointer_move.svg b/svg/static/pointer_move.svg similarity index 100% rename from src/svg/static/pointer_move.svg rename to svg/static/pointer_move.svg diff --git a/src/svg/static/question_arrow.svg b/svg/static/question_arrow.svg similarity index 100% rename from src/svg/static/question_arrow.svg rename to svg/static/question_arrow.svg diff --git a/svg/static/right_ptr.svg b/svg/static/right_ptr.svg new file mode 120000 index 0000000..e94216c --- /dev/null +++ b/svg/static/right_ptr.svg @@ -0,0 +1 @@ +left_ptr.svg \ No newline at end of file diff --git a/src/svg/static/right_side.svg b/svg/static/right_side.svg similarity index 100% rename from src/svg/static/right_side.svg rename to svg/static/right_side.svg diff --git a/src/svg/static/right_tee.svg b/svg/static/right_tee.svg similarity index 100% rename from src/svg/static/right_tee.svg rename to svg/static/right_tee.svg diff --git a/src/svg/static/sb_down_arrow.svg b/svg/static/sb_down_arrow.svg similarity index 100% rename from src/svg/static/sb_down_arrow.svg rename to svg/static/sb_down_arrow.svg diff --git a/src/svg/static/sb_h_double_arrow.svg b/svg/static/sb_h_double_arrow.svg similarity index 100% rename from src/svg/static/sb_h_double_arrow.svg rename to svg/static/sb_h_double_arrow.svg diff --git a/src/svg/static/sb_left_arrow.svg b/svg/static/sb_left_arrow.svg similarity index 100% rename from src/svg/static/sb_left_arrow.svg rename to svg/static/sb_left_arrow.svg diff --git a/src/svg/static/sb_right_arrow.svg b/svg/static/sb_right_arrow.svg similarity index 100% rename from src/svg/static/sb_right_arrow.svg rename to svg/static/sb_right_arrow.svg diff --git a/src/svg/static/sb_up_arrow.svg b/svg/static/sb_up_arrow.svg similarity index 100% rename from src/svg/static/sb_up_arrow.svg rename to svg/static/sb_up_arrow.svg diff --git a/src/svg/static/sb_v_double_arrow.svg b/svg/static/sb_v_double_arrow.svg similarity index 100% rename from src/svg/static/sb_v_double_arrow.svg rename to svg/static/sb_v_double_arrow.svg diff --git a/src/svg/static/tcross.svg b/svg/static/tcross.svg similarity index 100% rename from src/svg/static/tcross.svg rename to svg/static/tcross.svg diff --git a/src/svg/static/top_left_corner.svg b/svg/static/top_left_corner.svg similarity index 100% rename from src/svg/static/top_left_corner.svg rename to svg/static/top_left_corner.svg diff --git a/src/svg/static/top_right_corner.svg b/svg/static/top_right_corner.svg similarity index 100% rename from src/svg/static/top_right_corner.svg rename to svg/static/top_right_corner.svg diff --git a/svg/static/top_side.svg b/svg/static/top_side.svg new file mode 120000 index 0000000..42a403a --- /dev/null +++ b/svg/static/top_side.svg @@ -0,0 +1 @@ +sb_v_double_arrow.svg \ No newline at end of file diff --git a/src/svg/static/top_tee.svg b/svg/static/top_tee.svg similarity index 100% rename from src/svg/static/top_tee.svg rename to svg/static/top_tee.svg diff --git a/src/svg/static/ul_angle.svg b/svg/static/ul_angle.svg similarity index 100% rename from src/svg/static/ul_angle.svg rename to svg/static/ul_angle.svg diff --git a/src/svg/static/ur_angle.svg b/svg/static/ur_angle.svg similarity index 100% rename from src/svg/static/ur_angle.svg rename to svg/static/ur_angle.svg diff --git a/src/svg/static/vertical_text.svg b/svg/static/vertical_text.svg similarity index 100% rename from src/svg/static/vertical_text.svg rename to svg/static/vertical_text.svg diff --git a/src/svg/static/wayland_cursor.svg b/svg/static/wayland_cursor.svg similarity index 100% rename from src/svg/static/wayland_cursor.svg rename to svg/static/wayland_cursor.svg diff --git a/src/svg/static/x_cursor.svg b/svg/static/x_cursor.svg similarity index 100% rename from src/svg/static/x_cursor.svg rename to svg/static/x_cursor.svg diff --git a/src/svg/static/xterm.svg b/svg/static/xterm.svg similarity index 100% rename from src/svg/static/xterm.svg rename to svg/static/xterm.svg diff --git a/src/svg/static/zoom_in.svg b/svg/static/zoom_in.svg similarity index 100% rename from src/svg/static/zoom_in.svg rename to svg/static/zoom_in.svg diff --git a/src/svg/static/zoom_out.svg b/svg/static/zoom_out.svg similarity index 100% rename from src/svg/static/zoom_out.svg rename to svg/static/zoom_out.svg diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index a26a563..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "target": "es2017", - "module": "commonjs", - "lib": ["es2015", "dom"], - "outDir": "dist", - "typeRoots": ["node_modules/@types"], - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "resolveJsonModule": true, - "noFallthroughCasesInSwitch": true, - "esModuleInterop": true - }, - "include": ["src/**/*", "node_modules/@types/puppeteer/index.d.ts"], - "exclude": ["node_modules", "**/*.test.ts"] -} From 3174b088fe3953bb9ce4e236419b5171898b5202 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Sun, 14 Feb 2021 17:42:51 +0530 Subject: [PATCH 03/11] =?UTF-8?q?=F0=9F=8E=AF=20Hotspots=20&=20Build=20scr?= =?UTF-8?q?ipt=20fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 53 ++++++++++++++++++++++++++++++++++++++ bitmapper/Makefile | 2 +- builder/gbpkg/constants.py | 39 ++++++++++++++-------------- 3 files changed, 73 insertions(+), 21 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2d64842 --- /dev/null +++ b/Makefile @@ -0,0 +1,53 @@ +theme := GoogleDot +src := ./themes/$(theme) + +local := ~/.icons +local_dest := $(local)/$(theme) + +root := /usr/share/icons +root_dest := $(root)/$(theme) + +all: clean render build + +unix: clean render bitmaps + @cd builder && make build_unix + +windows: clean render bitmaps + @cd builder && make build_windows + +.PHONY: all + +clean: + @rm -rf bitmaps themes + +render: bitmapper svg + @cd bitmapper && $(MAKE) + +build: bitmaps + @cd builder && $(MAKE) + +.ONESHELL: +SHELL:=/bin/bash + + +install: $(src) + @if [[ $EUID -ne 0 ]]; then + @echo "> Installing '$(theme)' cursors inside $(local)/..." + @mkdir -p $(local) + @cp -r $(src) $(local_dest) && echo "> Installed!" + @else + @echo "> Installing '$(theme)' cursors inside $(root)/..." + @mkdir -p $(root) + @sudo cp -r $(src) $(root_dest) && echo "> Installed!" + @fi + +uninstall: + @if [[ $EUID -ne 0 ]]; then + @echo "> Removing '$(local_dest)'..." + @rm -rf $(local_dest) + @else + @echo "> Removing '$(root_dest)'..." + @sudo rm -rf $(root_dest) + @fi + +reinstall: uninstall install diff --git a/bitmapper/Makefile b/bitmapper/Makefile index cd1d300..bcb0df7 100644 --- a/bitmapper/Makefile +++ b/bitmapper/Makefile @@ -15,4 +15,4 @@ node_modules: @mkdir -p $@ clean: - @rm -rf node_modules yarn.lock \ No newline at end of file + @rm -rf node_modules yarn.lock diff --git a/builder/gbpkg/constants.py b/builder/gbpkg/constants.py index 5a52018..2582a7a 100644 --- a/builder/gbpkg/constants.py +++ b/builder/gbpkg/constants.py @@ -23,29 +23,29 @@ "all-scroll.png": {"xhot": 100, "yhot": 100}, "bottom_left_corner.png": {"xhot": 100, "yhot": 100}, "bottom_right_corner.png": {"xhot": 100, "yhot": 100}, - "bottom_tee.png": {"xhot": 98, "yhot": 137}, - "center_ptr.png": {"xhot": 99, "yhot": 29}, - "context-menu.png": {"xhot": 51, "yhot": 24}, - "copy.png": {"xhot": 51, "yhot": 24}, + "bottom_tee.png": {"xhot": 100, "yhot": 100}, + "center_ptr.png": {"xhot": 100, "yhot": 100}, + "context-menu.png": {"xhot": 100, "yhot": 100}, + "copy.png": {"xhot": 100, "yhot": 100}, "cross.png": {"xhot": 100, "yhot": 100}, - "crossed_circle.png": {"xhot": 51, "yhot": 24}, + "crossed_circle.png": {"xhot": 100, "yhot": 100}, "crosshair.png": {"xhot": 100, "yhot": 100}, "dnd_no_drop.png": {"xhot": 100, "yhot": 100}, "dotbox.png": {"xhot": 100, "yhot": 100}, - "hand1.png": {"xhot": 103, "yhot": 56}, - "hand2.png": {"xhot": 78, "yhot": 26}, - "left_ptr.png": {"xhot": 51, "yhot": 24}, + "hand1.png": {"xhot": 100, "yhot": 100}, + "hand2.png": {"xhot": 100, "yhot": 100}, + "left_ptr.png": {"xhot": 100, "yhot": 100}, "left_side.png": {"xhot": 100, "yhot": 100}, "left_tee.png": {"xhot": 100, "yhot": 100}, - "link.png": {"xhot": 120, "yhot": 55}, + "link.png": {"xhot": 100, "yhot": 100}, "ll_angle.png": {"xhot": 100, "yhot": 100}, "lr_angle.png": {"xhot": 100, "yhot": 100}, - "move.png": {"xhot": 102, "yhot": 73}, - "pencil.png": {"xhot": 81, "yhot": 117}, - "plus.png": {"xhot": 98, "yhot": 100}, - "question_arrow.png": {"xhot": 51, "yhot": 24}, - "right_ptr.png": {"xhot": 143, "yhot": 24}, - "right_tee.png": {"xhot": 98, "yhot": 99}, + "move.png": {"xhot": 100, "yhot": 100}, + "pencil.png": {"xhot": 100, "yhot": 100}, + "plus.png": {"xhot": 100, "yhot": 100}, + "question_arrow.png": {"xhot": 100, "yhot": 100}, + "right_ptr.png": {"xhot": 100, "yhot": 100}, + "right_tee.png": {"xhot": 100, "yhot": 100}, "sb_down_arrow.png": {"xhot": 100, "yhot": 100}, "sb_h_double_arrow.png": {"xhot": 100, "yhot": 100}, "sb_left_arrow.png": {"xhot": 100, "yhot": 100}, @@ -56,18 +56,17 @@ "top_tee.png": {"xhot": 100, "yhot": 100}, "ul_angle.png": {"xhot": 100, "yhot": 100}, "ur_angle.png": {"xhot": 100, "yhot": 100}, - "vertical-text.png": {"xhot": 96, "yhot": 99}, + "vertical-text.png": {"xhot": 100, "yhot": 100}, "wayland-cursor.png": {"xhot": 100, "yhot": 100}, "X_cursor.png": {"xhot": 100, "yhot": 100}, "xterm.png": {"xhot": 100, "yhot": 89}, - # - "zoom-in.png": {"xhot": 89, "yhot": 87}, - "zoom-out.png": {"xhot": 89, "yhot": 87}, + "zoom-in.png": {"xhot": 100, "yhot": 100}, + "zoom-out.png": {"xhot": 100, "yhot": 100}, ############ # Animated # ############ # Note: Animated cursors don't need an extension and frame numbers. - "left_ptr_watch": {"xhot": 51, "yhot": 24}, + "left_ptr_watch": {"xhot": 100, "yhot": 100}, "wait": {"xhot": 100, "yhot": 100}, } From 0d577d30557a3db0bb082469637afec13a03fa70 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Mon, 15 Feb 2021 18:00:19 +0530 Subject: [PATCH 04/11] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Builder=20imports?= =?UTF-8?q?=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- builder/Makefile | 2 +- builder/build.py | 4 ++-- builder/gbpkg/configure.py | 4 ++-- builder/gbpkg/generator.py | 16 ++++++++-------- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 0c12ae6..991c5b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ ########## Custom bitmaps themes +builder/files.txt ########## Python @@ -252,4 +253,4 @@ dist .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz -.pnp.* \ No newline at end of file +.pnp.* diff --git a/builder/Makefile b/builder/Makefile index 96eade2..4ee31b6 100644 --- a/builder/Makefile +++ b/builder/Makefile @@ -21,7 +21,7 @@ clean: @fi setup: setup.py - @test -d venv || virtualenv venv + @test -d venv || python3 -m venv venv @. venv/bin/activate; python3 setup.py install --record files.txt build: setup build.py diff --git a/builder/build.py b/builder/build.py index 90c2b80..b69a22a 100644 --- a/builder/build.py +++ b/builder/build.py @@ -4,8 +4,8 @@ import argparse from pathlib import Path -from xbpkg.configure import get_config -from xbpkg.generator import xbuild, wbuild, build +from gbpkg.configure import get_config +from gbpkg.generator import xbuild, wbuild, build parser = argparse.ArgumentParser( prog="xcursor_pro_builder", diff --git a/builder/gbpkg/configure.py b/builder/gbpkg/configure.py index 88265c9..da15113 100644 --- a/builder/gbpkg/configure.py +++ b/builder/gbpkg/configure.py @@ -6,7 +6,7 @@ from clickgen.util import LikePath, PNGProvider -from xbpkg.constants import WIN_CURSORS_CFG, WIN_DELAY, X_CURSORS_CFG, X_DELAY +from gbpkg.constants import WIN_CURSORS_CFG, WIN_DELAY, X_CURSORS_CFG, X_DELAY X = TypeVar("X") @@ -17,7 +17,7 @@ def to_tuple(x: X) -> Tuple[X, X]: def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: - """Return configuration of `macOSBigSur` pointers. + """Return configuration of `GoogleDot` pointers. Args: diff --git a/builder/gbpkg/generator.py b/builder/gbpkg/generator.py index 242e8b1..67266fa 100644 --- a/builder/gbpkg/generator.py +++ b/builder/gbpkg/generator.py @@ -8,17 +8,17 @@ from clickgen.core import CursorAlias from clickgen.packagers import WindowsPackager, XPackager -from xbpkg.constants import AUTHOR, COMMENT, THEME_NAME, URL -from xbpkg.symlinks import add_missing_xcursor +from gbpkg.constants import AUTHOR, COMMENT, THEME_NAME, URL +from gbpkg.symlinks import add_missing_xcursor def xbuild( config: Dict[str, Dict[str, Any]], x_out_dir: Path, ) -> None: - """Build `macOSBigSur` cursor theme for only `X11`(UNIX) platform. + """Build `GoogleDot` cursor theme for only `X11`(UNIX) platform. - :config: (Dict) `macOSBigSur` configuration. + :config: (Dict) `GoogleDot` configuration. :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. """ @@ -39,9 +39,9 @@ def xbuild( def wbuild(config: Dict[str, Dict[str, Any]], win_out_dir: Path) -> None: - """Build `macOSBigSur` cursor theme for only `Windows` platforms. + """Build `GoogleDot` cursor theme for only `Windows` platforms. - :config: (Dict) `macOSBigSur` configuration. + :config: (Dict) `GoogleDot` configuration. :win_out_dir: (Path) Path to the output directory, Where the `Windows` cursor theme package will generate. It also creates a directory if not exists. """ @@ -74,9 +74,9 @@ def wbuild(config: Dict[str, Dict[str, Any]], win_out_dir: Path) -> None: def build( config: Dict[str, Dict[str, Any]], x_out_dir: Path, win_out_dir: Path ) -> None: - """Build `macOSBigSur` cursor theme for `X11` & `Windows` platforms. + """Build `GoogleDot` cursor theme for `X11` & `Windows` platforms. - :config: (Dict) `macOSBigSur` configuration. + :config: (Dict) `GoogleDot` configuration. :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. From e35d2ea667b3faac4f71765e8ec83da841b736ec Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Mon, 15 Feb 2021 19:25:52 +0530 Subject: [PATCH 05/11] =?UTF-8?q?=E2=9A=A1=20Linting=20&=20format=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- builder/gbpkg/configure.py | 41 ++++++++++++----------- builder/gbpkg/generator.py | 66 +++++++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 44 deletions(-) diff --git a/builder/gbpkg/configure.py b/builder/gbpkg/configure.py index da15113..e60b012 100644 --- a/builder/gbpkg/configure.py +++ b/builder/gbpkg/configure.py @@ -1,11 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from pathlib import Path -from typing import Any, Dict, List, Tuple, TypeVar, Union - -from clickgen.util import LikePath, PNGProvider - +from typing import Any, Dict, Tuple, TypeVar +from clickgen.util import PNGProvider from gbpkg.constants import WIN_CURSORS_CFG, WIN_DELAY, X_CURSORS_CFG, X_DELAY @@ -16,9 +13,10 @@ def to_tuple(x: X) -> Tuple[X, X]: return (x, x) -def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: +def get_config(bitmaps_dir, **kwargs) -> Dict[str, Any]: """Return configuration of `GoogleDot` pointers. + ``` Args: :bitmaps_dir: (str | Path) Path to .png file's directory. @@ -32,23 +30,29 @@ def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: :win_size: (int) Pixel-size for Windows cursor. + ``` Example: ```python - get_config("./bitmaps", x_sizes=[(24, 24), (32, 32)], win_canvas_size=(32, 32), win_size=(24, 24)) + get_config( + "./bitmaps", + x_sizes=[(24, 24), (32, 32)], + win_canvas_size=(32, 32), + win_size=(24, 24), + ) ``` """ w_size = to_tuple(kwargs.pop("win_size")) w_canvas_size = to_tuple(kwargs.pop("win_canvas_size")) - x = kwargs.pop("x_sizes") + raw_x_sizes = kwargs.pop("x_sizes") x_sizes = [] - for s in x: - x_sizes.append(to_tuple(s)) + for size in raw_x_sizes: + x_sizes.append(to_tuple(size)) - png = PNGProvider(bitmaps_dir) + png_provider = PNGProvider(bitmaps_dir) config: Dict[str, Any] = {} for key, item in X_CURSORS_CFG.items(): @@ -57,10 +61,10 @@ def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: hotspot: Tuple[int, int] = (x_hot, y_hot) delay: int = item.get("delay", X_DELAY) - p: Union[List[Path], Path] = png.get(key) + png = png_provider.get(key) data = { - "png": p, + "png": png, "x_sizes": x_sizes, "hotspot": hotspot, "delay": delay, @@ -72,14 +76,15 @@ def get_config(bitmaps_dir: Union[str, Path], **kwargs) -> Dict[str, Any]: win_key = win_data.get("to") position = win_data.get("position", "center") - win_delay: int = win_data.get("delay", WIN_DELAY) + win_delay = win_data.get("delay", WIN_DELAY) - canvas_size: Tuple[int, int] = win_data.get("canvas_size", w_canvas_size) - win_size: Tuple[int, int] = win_data.get("size", w_size) + canvas_size = win_data.get("canvas_size", w_canvas_size) + win_size = win_data.get("size", w_size) # Because provided cursor size is bigger than cursor's canvas. - # Also, "position" settings will not effect on cursor because the cursor's canvas and cursor sizes are equals. - if (win_size[0] > canvas_size[0]) or (win_size[1] > canvas_size[1]): + # Also, "position" settings will not effect on cursor because the + # cursor's canvas and cursor sizes are equals. + if (win_size[0] > canvas_size[0]) | (win_size[1] > canvas_size[1]): canvas_size = win_size config[key] = { diff --git a/builder/gbpkg/generator.py b/builder/gbpkg/generator.py index 67266fa..c5fd773 100644 --- a/builder/gbpkg/generator.py +++ b/builder/gbpkg/generator.py @@ -18,16 +18,20 @@ def xbuild( ) -> None: """Build `GoogleDot` cursor theme for only `X11`(UNIX) platform. + ``` :config: (Dict) `GoogleDot` configuration. - :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. + :x_out_dir: (Path) Path to the output directory, + Where the `X11` cursor theme package will generate. + It also creates a directory if not exists. + ``` """ for _, item in config.items(): - png = item.get("png") - hotspot = item.get("hotspot") - x_sizes = item.get("x_sizes") - delay = item.get("delay") + png = item["png"] + hotspot = item["hotspot"] + x_sizes = item["x_sizes"] + delay = item["delay"] with CursorAlias.from_bitmap(png, hotspot) as alias: x_cfg = alias.create(x_sizes, delay) @@ -41,26 +45,30 @@ def xbuild( def wbuild(config: Dict[str, Dict[str, Any]], win_out_dir: Path) -> None: """Build `GoogleDot` cursor theme for only `Windows` platforms. + ``` :config: (Dict) `GoogleDot` configuration. - :win_out_dir: (Path) Path to the output directory, Where the `Windows` cursor theme package will generate. It also creates a directory if not exists. + :win_out_dir: (Path) Path to the output directory, + Where the `Windows` cursor theme package will generate. + It also creates a directory if not exists. + ``` """ for _, item in config.items(): - png = item.get("png") - hotspot = item.get("hotspot") - x_sizes = item.get("x_sizes") - delay = item.get("delay") + png = item["png"] + hotspot = item["hotspot"] + x_sizes = item["x_sizes"] + delay = item["delay"] with CursorAlias.from_bitmap(png, hotspot) as alias: alias.create(x_sizes, delay) if item.get("win_key"): - position = item.get("position") - win_size = item.get("win_size") - win_key = item.get("win_key") - canvas_size = item.get("canvas_size") - win_delay = item.get("win_delay") + position = item["position"] + win_size = item["win_size"] + win_key = item["win_key"] + canvas_size = item["canvas_size"] + win_delay = item["win_delay"] win_cfg = alias.reproduce( win_size, canvas_size, position, delay=win_delay @@ -76,19 +84,25 @@ def build( ) -> None: """Build `GoogleDot` cursor theme for `X11` & `Windows` platforms. + ``` :config: (Dict) `GoogleDot` configuration. - :x_out_dir: (Path) Path to the output directory, Where the `X11` cursor theme package will generate. It also creates a directory if not exists. + :x_out_dir: (Path) Path to the output directory, + Where the `X11` cursor theme package will generate. + It also creates a directory if not exists. - :win_out_dir: (Path) Path to the output directory, Where the `Windows` cursor theme package will generate. It also creates a directory if not exists. + :win_out_dir: (Path) Path to the output directory, + Where the `Windows` cursor theme package will generate. + It also creates a directory if not exists. + ``` """ def win_build(item: Dict[str, Any], alias: CursorAlias) -> None: - position = item.get("position") - win_size = item.get("win_size") - win_key = item.get("win_key") - canvas_size = item.get("canvas_size") - win_delay = item.get("win_delay") + position = item["position"] + win_size = item["win_size"] + win_key = item["win_key"] + canvas_size = item["canvas_size"] + win_delay = item["win_delay"] win_cfg = alias.reproduce( win_size, canvas_size, position, delay=win_delay @@ -97,10 +111,10 @@ def win_build(item: Dict[str, Any], alias: CursorAlias) -> None: WindowsCursor.create(win_cfg, win_out_dir) for _, item in config.items(): - png = item.get("png") - hotspot = item.get("hotspot") - x_sizes = item.get("x_sizes") - delay = item.get("delay") + png = item["png"] + hotspot = item["hotspot"] + x_sizes = item["x_sizes"] + delay = item["delay"] with CursorAlias.from_bitmap(png, hotspot) as alias: x_cfg = alias.create(x_sizes, delay) From d3a86d0adf90c35f17d076a6b1823bb06da13c6b Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Tue, 16 Feb 2021 15:49:37 +0530 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=92=85=20Prettier=20&=20Relink=20sv?= =?UTF-8?q?gs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- svg/README.md | 52 -------- svg/animated/wait.svg | 115 ++++++++++++++---- svg/static/X_cursor.svg | 18 +++ svg/static/{all_scroll.svg => all-scroll.svg} | 0 svg/static/bd_double_arrow.svg | 1 - svg/static/bottom_left_corner.svg | 73 ++++++++--- svg/static/bottom_right_corner.svg | 73 ++++++++--- svg/static/bottom_side.svg | 1 - svg/static/bottom_tee.svg | 69 ++++++++--- svg/static/center_ptr.svg | 1 - svg/static/circle.svg | 24 ---- svg/static/context-menu.svg | 55 +++++++++ svg/static/context_menu.svg | 24 ---- svg/static/copy.svg | 111 +++++++++++++---- svg/static/cross.svg | 53 +++++++- svg/static/crossed_circle.svg | 1 - svg/static/crosshair.svg | 1 - svg/static/dnd_ask.svg | 1 - svg/static/dnd_copy.svg | 1 - svg/static/dnd_link.svg | 1 - svg/static/dnd_move.svg | 1 - svg/static/dnd_no_drop.svg | 62 +++++++--- svg/static/dnd_none.svg | 1 - svg/static/dotbox.svg | 65 +++++++--- svg/static/fd_double_arrow.svg | 1 - svg/static/grabbing.svg | 1 - svg/static/hand1.svg | 57 +++++++-- svg/static/hand2.svg | 57 +++++++-- svg/static/left_ptr.svg | 57 +++++++-- svg/static/left_side.svg | 1 - svg/static/left_tee.svg | 69 ++++++++--- svg/static/link.svg | 67 +++++++--- svg/static/ll_angle.svg | 63 ++++++++-- svg/static/lr_angle.svg | 63 ++++++++-- svg/static/move.svg | 69 +++++++++-- svg/static/pencil.svg | 22 +--- svg/static/plus.svg | 62 +++++++--- svg/static/pointer_move.svg | 1 - svg/static/question_arrow.svg | 62 +++++++--- svg/static/right_side.svg | 1 - svg/static/right_tee.svg | 71 ++++++++--- svg/static/sb_down_arrow.svg | 65 +++++++--- svg/static/sb_h_double_arrow.svg | 73 ++++++++--- svg/static/sb_left_arrow.svg | 65 +++++++--- svg/static/sb_right_arrow.svg | 65 +++++++--- svg/static/sb_up_arrow.svg | 65 +++++++--- svg/static/sb_v_double_arrow.svg | 73 ++++++++--- svg/static/tcross.svg | 1 - svg/static/top_left_corner.svg | 1 - svg/static/top_right_corner.svg | 1 - svg/static/top_side.svg | 1 - svg/static/top_tee.svg | 69 ++++++++--- svg/static/ul_angle.svg | 63 ++++++++-- svg/static/ur_angle.svg | 63 ++++++++-- svg/static/vertical-text.svg | 19 +++ svg/static/vertical_text.svg | 7 -- svg/static/wayland-cursor.svg | 19 +++ svg/static/wayland_cursor.svg | 7 -- svg/static/x_cursor.svg | 6 - svg/static/xterm.svg | 20 ++- svg/static/zoom-in.svg | 56 +++++++++ svg/static/zoom-out.svg | 56 +++++++++ svg/static/zoom_in.svg | 22 ---- svg/static/zoom_out.svg | 22 ---- 64 files changed, 1758 insertions(+), 609 deletions(-) delete mode 100644 svg/README.md create mode 100644 svg/static/X_cursor.svg rename svg/static/{all_scroll.svg => all-scroll.svg} (100%) delete mode 120000 svg/static/bd_double_arrow.svg delete mode 120000 svg/static/bottom_side.svg delete mode 120000 svg/static/center_ptr.svg delete mode 100644 svg/static/circle.svg create mode 100644 svg/static/context-menu.svg delete mode 100644 svg/static/context_menu.svg mode change 120000 => 100644 svg/static/cross.svg delete mode 120000 svg/static/crossed_circle.svg delete mode 120000 svg/static/crosshair.svg delete mode 120000 svg/static/dnd_ask.svg delete mode 120000 svg/static/dnd_copy.svg delete mode 120000 svg/static/dnd_link.svg delete mode 120000 svg/static/dnd_move.svg delete mode 120000 svg/static/dnd_none.svg delete mode 120000 svg/static/fd_double_arrow.svg delete mode 120000 svg/static/grabbing.svg delete mode 120000 svg/static/left_side.svg mode change 100644 => 120000 svg/static/pencil.svg delete mode 120000 svg/static/pointer_move.svg delete mode 120000 svg/static/right_side.svg delete mode 120000 svg/static/tcross.svg delete mode 120000 svg/static/top_left_corner.svg delete mode 120000 svg/static/top_right_corner.svg delete mode 120000 svg/static/top_side.svg create mode 100644 svg/static/vertical-text.svg delete mode 100644 svg/static/vertical_text.svg create mode 100644 svg/static/wayland-cursor.svg delete mode 100644 svg/static/wayland_cursor.svg delete mode 100644 svg/static/x_cursor.svg create mode 100644 svg/static/zoom-in.svg create mode 100644 svg/static/zoom-out.svg delete mode 100644 svg/static/zoom_in.svg delete mode 100644 svg/static/zoom_out.svg diff --git a/svg/README.md b/svg/README.md deleted file mode 100644 index 6a5f490..0000000 --- a/svg/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Cursor Source Info - -## Symbolic Cursors - -| Preview | Source | Symbolic links | Windows Cursor name | -| :-------------------------------------------------------: | :---------------------: | :-------------------------------------------------------------: | :--------------------------: | -| | all_scroll.svg | `None` | `SizeAll.cur` | -| | bottom_left_corner.svg | `fd_double_arrow.svg` `top_right_corner.svg` | `SizeNESW.cur` | -| | bottom_right_corner.svg | `bd_double_arrow.svg` `top_left_corner.svg` | `SizeNWSE.cur` | -| | bottom_tee.svg | `None` | | -| | center_ptr.svg | `None` | | -| | circle.svg | `crossed_circle.svg` `dnd_no_drop.svg` | `NO.cur` | -| | context_menu.svg | `None` | | -| | copy.svg | `dnd_copy.svg` | | -| | cross.svg | `tcross.svg` | | -| | crosshair.svg | `None` | `Cross.cur` | -| | dotbox.svg | `None` | | -| | hand1.svg | `None` | | -| | hand2.svg | `None` | `Hand.cur` | -| | left_ptr.svg | `None` | `Arrow.cur` | -| | left_side.svg | `right_side.svg` | | -| | left_tee.svg | `None` | | -| | link.svg | `dnd_link.svg` | | -| | ll_angle.svg | `None` | | -| | lr_angle.svg | `None` | | -| | move.svg | `dnd_move.svg` `dnd_none.svg` `grabbing.svg` `pointer_move.svg` | | -| | pencil.svg | `None` | `Handwriting.cur` | -| | plus.svg | `None` | | -| | question_arrow.svg | `dnd_ask.svg` | `Help.cur` | -| | right_ptr.svg | `None` | | -| | right_tee.svg | `None` | | -| | sb_down_arrow.svg | `None` | | -| | sb_h_double_arrow.svg | `None` | `SizeWE.cur` | -| | sb_left_arrow.svg | `None` | | -| | sb_right_arrow.svg | `None` | | -| | sb_up_arrow.svg | `None` | `UpArrow.cur` | -| | sb_v_double_arrow.svg | `None` | `SizeNS.cur` | -| | top_side.svg | `bottom_side.svg` | | -| | top_tee.svg | `None` | | -| | ul_angle.svg | `None` | | -| | ur_angle.svg | `None` | | -| | vertical_text.svg | `None` | | -| | wait.svg | `left_ptr_watch.svg` | `AppStarting.ani` `Wait.ani` | -| | wayland_cursor.svg | `None` | | -| | x_cursor.svg | `None` | | -| | xterm.svg | `None` | `IBeam.cur` | -| | zoom_in.svg | `None` | | -| | zoom_out.svg | `None` | | - -## Figma File - -[![Figma File](https://imgur.com/RjoqfTo.png)](https://www.figma.com/file/i7nfGDWCTWlNJlnhmvHDfh/Google-Cursor?node-id=0%3A1) diff --git a/svg/animated/wait.svg b/svg/animated/wait.svg index fb03daa..e6f5744 100644 --- a/svg/animated/wait.svg +++ b/svg/animated/wait.svg @@ -1,4 +1,10 @@ - + @@ -9,30 +15,61 @@ - + - + - + - + - - + + @@ -40,19 +77,47 @@ - + - - + + - - - + + + - \ No newline at end of file + diff --git a/svg/static/X_cursor.svg b/svg/static/X_cursor.svg new file mode 100644 index 0000000..055e57e --- /dev/null +++ b/svg/static/X_cursor.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/svg/static/all_scroll.svg b/svg/static/all-scroll.svg similarity index 100% rename from svg/static/all_scroll.svg rename to svg/static/all-scroll.svg diff --git a/svg/static/bd_double_arrow.svg b/svg/static/bd_double_arrow.svg deleted file mode 120000 index a3a3e2d..0000000 --- a/svg/static/bd_double_arrow.svg +++ /dev/null @@ -1 +0,0 @@ -bottom_right_corner.svg \ No newline at end of file diff --git a/svg/static/bottom_left_corner.svg b/svg/static/bottom_left_corner.svg index ecc4ea4..6c36adf 100644 --- a/svg/static/bottom_left_corner.svg +++ b/svg/static/bottom_left_corner.svg @@ -1,23 +1,66 @@ - + - + - - + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/bottom_right_corner.svg b/svg/static/bottom_right_corner.svg index 47603fa..1b7f868 100644 --- a/svg/static/bottom_right_corner.svg +++ b/svg/static/bottom_right_corner.svg @@ -1,23 +1,66 @@ - + - + - - + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/bottom_side.svg b/svg/static/bottom_side.svg deleted file mode 120000 index 9c7bb92..0000000 --- a/svg/static/bottom_side.svg +++ /dev/null @@ -1 +0,0 @@ -top_side.svg \ No newline at end of file diff --git a/svg/static/bottom_tee.svg b/svg/static/bottom_tee.svg index f6dc412..9c4fb6a 100644 --- a/svg/static/bottom_tee.svg +++ b/svg/static/bottom_tee.svg @@ -1,22 +1,63 @@ - + - + - - - + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/center_ptr.svg b/svg/static/center_ptr.svg deleted file mode 120000 index e94216c..0000000 --- a/svg/static/center_ptr.svg +++ /dev/null @@ -1 +0,0 @@ -left_ptr.svg \ No newline at end of file diff --git a/svg/static/circle.svg b/svg/static/circle.svg deleted file mode 100644 index 9392cf4..0000000 --- a/svg/static/circle.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/svg/static/context-menu.svg b/svg/static/context-menu.svg new file mode 100644 index 0000000..816edb3 --- /dev/null +++ b/svg/static/context-menu.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/svg/static/context_menu.svg b/svg/static/context_menu.svg deleted file mode 100644 index 43e14f9..0000000 --- a/svg/static/context_menu.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/svg/static/copy.svg b/svg/static/copy.svg index 1387ec4..09ab8f4 100644 --- a/svg/static/copy.svg +++ b/svg/static/copy.svg @@ -1,35 +1,98 @@ - + - + - + - - + + - + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/cross.svg b/svg/static/cross.svg deleted file mode 120000 index e089419..0000000 --- a/svg/static/cross.svg +++ /dev/null @@ -1 +0,0 @@ -pencil.svg \ No newline at end of file diff --git a/svg/static/cross.svg b/svg/static/cross.svg new file mode 100644 index 0000000..a584ef2 --- /dev/null +++ b/svg/static/cross.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/svg/static/crossed_circle.svg b/svg/static/crossed_circle.svg deleted file mode 120000 index fee1a88..0000000 --- a/svg/static/crossed_circle.svg +++ /dev/null @@ -1 +0,0 @@ -circle.svg \ No newline at end of file diff --git a/svg/static/crosshair.svg b/svg/static/crosshair.svg deleted file mode 120000 index e089419..0000000 --- a/svg/static/crosshair.svg +++ /dev/null @@ -1 +0,0 @@ -pencil.svg \ No newline at end of file diff --git a/svg/static/dnd_ask.svg b/svg/static/dnd_ask.svg deleted file mode 120000 index 14c57d2..0000000 --- a/svg/static/dnd_ask.svg +++ /dev/null @@ -1 +0,0 @@ -question_arrow.svg \ No newline at end of file diff --git a/svg/static/dnd_copy.svg b/svg/static/dnd_copy.svg deleted file mode 120000 index 4b1d7e7..0000000 --- a/svg/static/dnd_copy.svg +++ /dev/null @@ -1 +0,0 @@ -copy.svg \ No newline at end of file diff --git a/svg/static/dnd_link.svg b/svg/static/dnd_link.svg deleted file mode 120000 index 4abb12d..0000000 --- a/svg/static/dnd_link.svg +++ /dev/null @@ -1 +0,0 @@ -link.svg \ No newline at end of file diff --git a/svg/static/dnd_move.svg b/svg/static/dnd_move.svg deleted file mode 120000 index 37362fe..0000000 --- a/svg/static/dnd_move.svg +++ /dev/null @@ -1 +0,0 @@ -move.svg \ No newline at end of file diff --git a/svg/static/dnd_no_drop.svg b/svg/static/dnd_no_drop.svg index f636fbe..f1ea5b3 100644 --- a/svg/static/dnd_no_drop.svg +++ b/svg/static/dnd_no_drop.svg @@ -1,22 +1,56 @@ - + - + - + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/dnd_none.svg b/svg/static/dnd_none.svg deleted file mode 120000 index 37362fe..0000000 --- a/svg/static/dnd_none.svg +++ /dev/null @@ -1 +0,0 @@ -move.svg \ No newline at end of file diff --git a/svg/static/dotbox.svg b/svg/static/dotbox.svg index 32e58c9..3420bb1 100644 --- a/svg/static/dotbox.svg +++ b/svg/static/dotbox.svg @@ -1,25 +1,56 @@ - + - + - + - - - - - + + + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/fd_double_arrow.svg b/svg/static/fd_double_arrow.svg deleted file mode 120000 index acc15d0..0000000 --- a/svg/static/fd_double_arrow.svg +++ /dev/null @@ -1 +0,0 @@ -bottom_left_corner.svg \ No newline at end of file diff --git a/svg/static/grabbing.svg b/svg/static/grabbing.svg deleted file mode 120000 index 37362fe..0000000 --- a/svg/static/grabbing.svg +++ /dev/null @@ -1 +0,0 @@ -move.svg \ No newline at end of file diff --git a/svg/static/hand1.svg b/svg/static/hand1.svg index 1b65ca7..7386e1d 100644 --- a/svg/static/hand1.svg +++ b/svg/static/hand1.svg @@ -1,21 +1,52 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/hand2.svg b/svg/static/hand2.svg index 172f354..bbada2f 100644 --- a/svg/static/hand2.svg +++ b/svg/static/hand2.svg @@ -1,21 +1,52 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/left_ptr.svg b/svg/static/left_ptr.svg index bf8f500..a00f8ed 100644 --- a/svg/static/left_ptr.svg +++ b/svg/static/left_ptr.svg @@ -1,21 +1,52 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/left_side.svg b/svg/static/left_side.svg deleted file mode 120000 index 1d2bc24..0000000 --- a/svg/static/left_side.svg +++ /dev/null @@ -1 +0,0 @@ -sb_h_double_arrow.svg \ No newline at end of file diff --git a/svg/static/left_tee.svg b/svg/static/left_tee.svg index c14a78d..8b397e7 100644 --- a/svg/static/left_tee.svg +++ b/svg/static/left_tee.svg @@ -1,22 +1,63 @@ - + - + - - - + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/link.svg b/svg/static/link.svg index cb2e097..872bbd7 100644 --- a/svg/static/link.svg +++ b/svg/static/link.svg @@ -1,23 +1,60 @@ - + - + - + - - - + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/ll_angle.svg b/svg/static/ll_angle.svg index 78fc6a3..723060c 100644 --- a/svg/static/ll_angle.svg +++ b/svg/static/ll_angle.svg @@ -1,21 +1,58 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/lr_angle.svg b/svg/static/lr_angle.svg index 7184991..b7c2803 100644 --- a/svg/static/lr_angle.svg +++ b/svg/static/lr_angle.svg @@ -1,21 +1,58 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/move.svg b/svg/static/move.svg index 2cff4c2..6dc9c12 100644 --- a/svg/static/move.svg +++ b/svg/static/move.svg @@ -1,21 +1,64 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/pencil.svg b/svg/static/pencil.svg deleted file mode 100644 index baa6c99..0000000 --- a/svg/static/pencil.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/svg/static/pencil.svg b/svg/static/pencil.svg new file mode 120000 index 0000000..e0b26b0 --- /dev/null +++ b/svg/static/pencil.svg @@ -0,0 +1 @@ +cross.svg \ No newline at end of file diff --git a/svg/static/plus.svg b/svg/static/plus.svg index 10d4426..5b7e06d 100644 --- a/svg/static/plus.svg +++ b/svg/static/plus.svg @@ -1,22 +1,56 @@ - + - + - + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/pointer_move.svg b/svg/static/pointer_move.svg deleted file mode 120000 index 37362fe..0000000 --- a/svg/static/pointer_move.svg +++ /dev/null @@ -1 +0,0 @@ -move.svg \ No newline at end of file diff --git a/svg/static/question_arrow.svg b/svg/static/question_arrow.svg index 272e764..5a3d143 100644 --- a/svg/static/question_arrow.svg +++ b/svg/static/question_arrow.svg @@ -1,22 +1,56 @@ - + - + - + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/right_side.svg b/svg/static/right_side.svg deleted file mode 120000 index 36e195a..0000000 --- a/svg/static/right_side.svg +++ /dev/null @@ -1 +0,0 @@ -left_side.svg \ No newline at end of file diff --git a/svg/static/right_tee.svg b/svg/static/right_tee.svg index 8ba22f7..cc12c73 100644 --- a/svg/static/right_tee.svg +++ b/svg/static/right_tee.svg @@ -1,27 +1,68 @@ - + - + - - - + + + - - - - - - - - - + + + + + + + + + - + diff --git a/svg/static/sb_down_arrow.svg b/svg/static/sb_down_arrow.svg index 8f96717..b060888 100644 --- a/svg/static/sb_down_arrow.svg +++ b/svg/static/sb_down_arrow.svg @@ -1,26 +1,63 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + - + diff --git a/svg/static/sb_h_double_arrow.svg b/svg/static/sb_h_double_arrow.svg index 1a2f351..0f7fcda 100644 --- a/svg/static/sb_h_double_arrow.svg +++ b/svg/static/sb_h_double_arrow.svg @@ -1,23 +1,66 @@ - + - + - - + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/sb_left_arrow.svg b/svg/static/sb_left_arrow.svg index 6491106..e295161 100644 --- a/svg/static/sb_left_arrow.svg +++ b/svg/static/sb_left_arrow.svg @@ -1,26 +1,63 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + - + diff --git a/svg/static/sb_right_arrow.svg b/svg/static/sb_right_arrow.svg index 47f3f56..e6577ba 100644 --- a/svg/static/sb_right_arrow.svg +++ b/svg/static/sb_right_arrow.svg @@ -1,26 +1,63 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + - + diff --git a/svg/static/sb_up_arrow.svg b/svg/static/sb_up_arrow.svg index 627e252..9102a76 100644 --- a/svg/static/sb_up_arrow.svg +++ b/svg/static/sb_up_arrow.svg @@ -1,26 +1,63 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + - + diff --git a/svg/static/sb_v_double_arrow.svg b/svg/static/sb_v_double_arrow.svg index 0b3757f..348711c 100644 --- a/svg/static/sb_v_double_arrow.svg +++ b/svg/static/sb_v_double_arrow.svg @@ -1,23 +1,66 @@ - + - + - - + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/tcross.svg b/svg/static/tcross.svg deleted file mode 120000 index e0b26b0..0000000 --- a/svg/static/tcross.svg +++ /dev/null @@ -1 +0,0 @@ -cross.svg \ No newline at end of file diff --git a/svg/static/top_left_corner.svg b/svg/static/top_left_corner.svg deleted file mode 120000 index a3a3e2d..0000000 --- a/svg/static/top_left_corner.svg +++ /dev/null @@ -1 +0,0 @@ -bottom_right_corner.svg \ No newline at end of file diff --git a/svg/static/top_right_corner.svg b/svg/static/top_right_corner.svg deleted file mode 120000 index acc15d0..0000000 --- a/svg/static/top_right_corner.svg +++ /dev/null @@ -1 +0,0 @@ -bottom_left_corner.svg \ No newline at end of file diff --git a/svg/static/top_side.svg b/svg/static/top_side.svg deleted file mode 120000 index 42a403a..0000000 --- a/svg/static/top_side.svg +++ /dev/null @@ -1 +0,0 @@ -sb_v_double_arrow.svg \ No newline at end of file diff --git a/svg/static/top_tee.svg b/svg/static/top_tee.svg index ffd9248..6e18b7d 100644 --- a/svg/static/top_tee.svg +++ b/svg/static/top_tee.svg @@ -1,22 +1,63 @@ - + - + - - - + + + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/ul_angle.svg b/svg/static/ul_angle.svg index 60b1912..2933bae 100644 --- a/svg/static/ul_angle.svg +++ b/svg/static/ul_angle.svg @@ -1,21 +1,58 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/ur_angle.svg b/svg/static/ur_angle.svg index fdb9b82..f7811c8 100644 --- a/svg/static/ur_angle.svg +++ b/svg/static/ur_angle.svg @@ -1,21 +1,58 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/svg/static/vertical-text.svg b/svg/static/vertical-text.svg new file mode 100644 index 0000000..3d5f002 --- /dev/null +++ b/svg/static/vertical-text.svg @@ -0,0 +1,19 @@ + + + + + + + diff --git a/svg/static/vertical_text.svg b/svg/static/vertical_text.svg deleted file mode 100644 index afc487f..0000000 --- a/svg/static/vertical_text.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/svg/static/wayland-cursor.svg b/svg/static/wayland-cursor.svg new file mode 100644 index 0000000..4bdfce9 --- /dev/null +++ b/svg/static/wayland-cursor.svg @@ -0,0 +1,19 @@ + + + + + + + diff --git a/svg/static/wayland_cursor.svg b/svg/static/wayland_cursor.svg deleted file mode 100644 index 3114d5d..0000000 --- a/svg/static/wayland_cursor.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/svg/static/x_cursor.svg b/svg/static/x_cursor.svg deleted file mode 100644 index 45fa0a6..0000000 --- a/svg/static/x_cursor.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/svg/static/xterm.svg b/svg/static/xterm.svg index 73d7b47..d2d933d 100644 --- a/svg/static/xterm.svg +++ b/svg/static/xterm.svg @@ -1,7 +1,19 @@ - + - + - - + + diff --git a/svg/static/zoom-in.svg b/svg/static/zoom-in.svg new file mode 100644 index 0000000..6181608 --- /dev/null +++ b/svg/static/zoom-in.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/svg/static/zoom-out.svg b/svg/static/zoom-out.svg new file mode 100644 index 0000000..e9c39b3 --- /dev/null +++ b/svg/static/zoom-out.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/svg/static/zoom_in.svg b/svg/static/zoom_in.svg deleted file mode 100644 index 6a37c6d..0000000 --- a/svg/static/zoom_in.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/svg/static/zoom_out.svg b/svg/static/zoom_out.svg deleted file mode 100644 index da679da..0000000 --- a/svg/static/zoom_out.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - From b8091def2d03ef32bc130f1497a8d8f2e8f13718 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Tue, 16 Feb 2021 15:50:28 +0530 Subject: [PATCH 07/11] =?UTF-8?q?=E2=9A=A1=20Configure=20pointers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- builder/gbpkg/configure.py | 16 ++++++----- builder/gbpkg/constants.py | 9 ++----- builder/gbpkg/symlinks.py | 55 +++++++++++++++++++++++++++++++------- 3 files changed, 57 insertions(+), 23 deletions(-) diff --git a/builder/gbpkg/configure.py b/builder/gbpkg/configure.py index e60b012..f818382 100644 --- a/builder/gbpkg/configure.py +++ b/builder/gbpkg/configure.py @@ -2,7 +2,9 @@ # -*- coding: utf-8 -*- from typing import Any, Dict, Tuple, TypeVar + from clickgen.util import PNGProvider + from gbpkg.constants import WIN_CURSORS_CFG, WIN_DELAY, X_CURSORS_CFG, X_DELAY @@ -56,12 +58,14 @@ def get_config(bitmaps_dir, **kwargs) -> Dict[str, Any]: config: Dict[str, Any] = {} for key, item in X_CURSORS_CFG.items(): - x_hot: int = item.get("xhot", 0) - y_hot: int = item.get("yhot", 0) + x_hot: int = int(item.get("xhot", 0)) + y_hot: int = int(item.get("yhot", 0)) hotspot: Tuple[int, int] = (x_hot, y_hot) - delay: int = item.get("delay", X_DELAY) + delay: int = int(item.get("delay", X_DELAY)) png = png_provider.get(key) + if not png: + raise FileNotFoundError(f"{key} not found") data = { "png": png, @@ -73,10 +77,10 @@ def get_config(bitmaps_dir, **kwargs) -> Dict[str, Any]: win_data = WIN_CURSORS_CFG.get(key) if win_data: - win_key = win_data.get("to") + win_key: str = str(win_data.get("to")) - position = win_data.get("position", "center") - win_delay = win_data.get("delay", WIN_DELAY) + position: str = str(win_data.get("position", "center")) + win_delay: int = int(win_data.get("delay", WIN_DELAY)) canvas_size = win_data.get("canvas_size", w_canvas_size) win_size = win_data.get("size", w_size) diff --git a/builder/gbpkg/constants.py b/builder/gbpkg/constants.py index 2582a7a..7439dfc 100644 --- a/builder/gbpkg/constants.py +++ b/builder/gbpkg/constants.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from typing import Dict, List, Tuple +from typing import Any, Dict # Info THEME_NAME = "GoogleDot" @@ -24,18 +24,14 @@ "bottom_left_corner.png": {"xhot": 100, "yhot": 100}, "bottom_right_corner.png": {"xhot": 100, "yhot": 100}, "bottom_tee.png": {"xhot": 100, "yhot": 100}, - "center_ptr.png": {"xhot": 100, "yhot": 100}, "context-menu.png": {"xhot": 100, "yhot": 100}, "copy.png": {"xhot": 100, "yhot": 100}, "cross.png": {"xhot": 100, "yhot": 100}, - "crossed_circle.png": {"xhot": 100, "yhot": 100}, - "crosshair.png": {"xhot": 100, "yhot": 100}, "dnd_no_drop.png": {"xhot": 100, "yhot": 100}, "dotbox.png": {"xhot": 100, "yhot": 100}, "hand1.png": {"xhot": 100, "yhot": 100}, "hand2.png": {"xhot": 100, "yhot": 100}, "left_ptr.png": {"xhot": 100, "yhot": 100}, - "left_side.png": {"xhot": 100, "yhot": 100}, "left_tee.png": {"xhot": 100, "yhot": 100}, "link.png": {"xhot": 100, "yhot": 100}, "ll_angle.png": {"xhot": 100, "yhot": 100}, @@ -52,7 +48,6 @@ "sb_right_arrow.png": {"xhot": 100, "yhot": 100}, "sb_up_arrow.png": {"xhot": 100, "yhot": 100}, "sb_v_double_arrow.png": {"xhot": 100, "yhot": 100}, - "top_side.png": {"xhot": 100, "yhot": 100}, "top_tee.png": {"xhot": 100, "yhot": 100}, "ul_angle.png": {"xhot": 100, "yhot": 100}, "ur_angle.png": {"xhot": 100, "yhot": 100}, @@ -85,7 +80,7 @@ "xterm.png": {"to": "IBeam", "position": "top_left"}, "hand2.png": {"to": "Link", "position": "top_left"}, "hand1.png": {"to": "Move"}, - "crossed_circle.png": {"to": "Unavailiable", "position": "top_left"}, + "dnd_no_drop.png": {"to": "Unavailiable", "position": "top_left"}, "sb_v_double_arrow.png": {"to": "Vertical"}, ############ # Animated # diff --git a/builder/gbpkg/symlinks.py b/builder/gbpkg/symlinks.py index a1df604..e00a340 100644 --- a/builder/gbpkg/symlinks.py +++ b/builder/gbpkg/symlinks.py @@ -2,13 +2,12 @@ # -*- coding: utf-8 -*- import os -from pathlib import Path from typing import Dict, List, Union -from clickgen.util import LikePath, chdir +from clickgen.util import chdir -def add_missing_xcursor(directory: Union[str, Path]) -> None: +def add_missing_xcursor(directory) -> None: """Add missing `XCursor` to the Unix cursor package. :directory: (Path|str) directory where XCursors are available. @@ -51,18 +50,36 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: }, { "src": "cross", - "links": ["cross_reverse", "diamond_cross", "tcross", "color-picker"], + "links": [ + "cross_reverse", + "diamond_cross", + "tcross", + "color-picker", + # crosshair + "crosshair", + ], }, + # { + # "src": "crossed_circle", + # "links": [ + # "03b6e0fcb3499374a867c041f52298f0", + # "not-allowed", + # "forbidden", + # "circle", + # ], + # }, { - "src": "crossed_circle", + "src": "dnd_no_drop", "links": [ + "no-drop", + # crossed_circle symlinks + "crossed_circle", "03b6e0fcb3499374a867c041f52298f0", "not-allowed", "forbidden", "circle", ], }, - {"src": "dnd_no_drop", "links": ["no-drop"]}, {"src": "dotbox", "links": ["dot_box_mask", "draped_box", "icon", "target"]}, {"src": "hand1", "links": ["grab", "openhand"]}, { @@ -74,7 +91,15 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: "pointing_hand", ], }, - {"src": "left_ptr", "links": ["arrow", "default"]}, + { + "src": "left_ptr", + "links": [ + "arrow", + "default", + # center_ptr symlinks + "center_ptr", + ], + }, { "src": "left_ptr_watch", "links": [ @@ -84,7 +109,7 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: "progress", ], }, - {"src": "left_side", "links": ["w-resize", "right_side", "e-resize"]}, + # {"src": "left_side", "links": ["w-resize", "right_side", "e-resize"]}, { "src": "link", "links": [ @@ -121,7 +146,7 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: "dnd-ask", ], }, - {"src": "right_ptr", "links": ["draft_large", "draft_small"]}, + {"src": "right_ptr", "links": ["draft_large", "draft_small"]}, # required {"src": "sb_down_arrow", "links": ["down-arrow"]}, { "src": "sb_h_double_arrow", @@ -134,6 +159,11 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: "size-hor", "size_hor", "split_h", + # left_side symlinks + "left_side", + "w-resize", + "right_side", + "e-resize", ], }, {"src": "sb_left_arrow", "links": ["left-arrow"]}, @@ -151,9 +181,14 @@ def add_missing_xcursor(directory: Union[str, Path]) -> None: "size_ver", "split_v", "v_double_arrow", + # top_side symlinks + "top_side", + "s-resize", + "n-resize", + "bottom_side", ], }, - {"src": "top_side", "links": ["s-resize", "n-resize", "bottom_side"]}, + # {"src": "top_side", "links": ["s-resize", "n-resize", "bottom_side"]}, {"src": "wait", "links": ["watch"]}, {"src": "X_cursor", "links": ["pirate", "x-cursor"]}, {"src": "xterm", "links": ["ibeam", "text"]}, From 11f25c564db34496e1a1674bc81adf7d6753482f Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Tue, 16 Feb 2021 16:46:48 +0530 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=96=BC=EF=B8=8F=20Animated=20cursor?= =?UTF-8?q?'s=20smooth=20framing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bitmapper/src/index.ts | 196 ++++++++++++++--------------- bitmapper/src/utils/matchImages.ts | 10 +- svg/animated/wait.svg | 23 ++-- 3 files changed, 114 insertions(+), 115 deletions(-) diff --git a/bitmapper/src/index.ts b/bitmapper/src/index.ts index 9cff291..d51f0f5 100644 --- a/bitmapper/src/index.ts +++ b/bitmapper/src/index.ts @@ -8,120 +8,120 @@ import { matchImages } from "./utils/matchImages"; import { toHTML } from "./utils/toHTML"; const getSVGElement = async (page: Page) => { - const svg = await page.$("#container svg"); + const svg = await page.$("#container svg"); - if (!svg) { - throw new Error("svg element not found!"); - } - return svg; + if (!svg) { + throw new Error("svg element not found!"); + } + return svg; }; const screenshot = async (element: ElementHandle): Promise => { - return element.screenshot({ - omitBackground: true, - encoding: "binary", - }); + return element.screenshot({ + omitBackground: true, + encoding: "binary", + }); }; const stopAnimation = async (page: Page) => { - // @ts-ignore - await page._client.send("Animation.setPlaybackRate", { - playbackRate: 0, - }); + // @ts-ignore + await page._client.send("Animation.setPlaybackRate", { + playbackRate: 0, + }); }; const resumeAnimation = async (page: Page, playbackRate: number = 0.1) => { - // @ts-ignore - await page._client.send("Animation.setPlaybackRate", { - playbackRate, - }); + // @ts-ignore + await page._client.send("Animation.setPlaybackRate", { + playbackRate, + }); }; const saveFrameImage = (key: string, frame: Buffer) => { - const out_path = path.resolve(outDir, key); - fs.writeFileSync(out_path, frame, { encoding: "binary" }); + const out_path = path.resolve(outDir, key); + fs.writeFileSync(out_path, frame, { encoding: "binary" }); }; const main = async () => { - const browser = await puppeteer.launch({ - ignoreDefaultArgs: ["--single-process", "--no-sandbox"], - headless: true, - }); - - if (!fs.existsSync(outDir)) { - fs.mkdirSync(outDir); - } else { - throw new Error(`out directory '${outDir}' already exists.`); - } - - for (const svgFilePath of staticCursors) { - const svgData = fs.readFileSync(svgFilePath, "utf-8"); - if (!svgData) { - throw new Error(`${svgFilePath} File Read error`); - } - - const page = await browser.newPage(); - const html = toHTML(svgData); - - await page.setContent(html); - const svg = await getSVGElement(page); - - const key = `${path.basename(svgFilePath, ".svg")}.png`; - const out = path.join(outDir, key); - - console.log("Saving", key, "..."); - await svg.screenshot({ omitBackground: true, path: out }); - await page.close(); - } - - for (const svgFilePath of animatedCursors) { - const svgData = fs.readFileSync(svgFilePath, "utf8"); - if (!svgData) { - throw new Error(`${svgFilePath} File Read error`); - } - - const page = await browser.newPage(); - const html = toHTML(svgData); - - await page.setContent(html); - const svg = await getSVGElement(page); - await stopAnimation(page); - - let index = 1; - const frameLimit = 300; - let breakRendering = false; - let prevImg: Buffer; - - // Rendering frames till `imgN` matched to `imgN-1` (When Animation is done) - while (!breakRendering) { - if (index > frameLimit) { - throw new Error("Reached the frame limit."); - } - - resumeAnimation(page); - const img = await screenshot(svg); - stopAnimation(page); - - if (index > 1) { - // @ts-ignore - const diff = matchImages(prevImg, img); - if (diff <= 100) { - breakRendering = !breakRendering; - } - } - const frame = frameNumber(index, 3); - const key = `${path.basename(svgFilePath, ".svg")}-${frame}.png`; - - console.log("Saving", key, "..."); - saveFrameImage(key, img); - - prevImg = img; - ++index; - } - - await page.close(); - } - await browser.close(); + const browser = await puppeteer.launch({ + ignoreDefaultArgs: ["--single-process", "--no-sandbox"], + headless: true, + }); + + if (!fs.existsSync(outDir)) { + fs.mkdirSync(outDir); + } else { + throw new Error(`out directory '${outDir}' already exists.`); + } + + for (const svgFilePath of staticCursors) { + const svgData = fs.readFileSync(svgFilePath, "utf-8"); + if (!svgData) { + throw new Error(`${svgFilePath} File Read error`); + } + + const page = await browser.newPage(); + const html = toHTML(svgData); + + await page.setContent(html); + const svg = await getSVGElement(page); + + const key = `${path.basename(svgFilePath, ".svg")}.png`; + const out = path.join(outDir, key); + + console.log("Saving", key, "..."); + await svg.screenshot({ omitBackground: true, path: out }); + await page.close(); + } + + for (const svgFilePath of animatedCursors) { + const svgData = fs.readFileSync(svgFilePath, "utf8"); + if (!svgData) { + throw new Error(`${svgFilePath} File Read error`); + } + + const page = await browser.newPage(); + const html = toHTML(svgData); + + await page.setContent(html); + const svg = await getSVGElement(page); + await stopAnimation(page); + + let index = 1; + const frameLimit = 300; + let breakRendering = false; + let prevImg: Buffer; + + // Rendering frames till `imgN` matched to `imgN-1` (When Animation is done) + while (!breakRendering) { + if (index > frameLimit) { + throw new Error("Reached the frame limit."); + } + + resumeAnimation(page); + const img = await screenshot(svg); + stopAnimation(page); + + if (index > 1) { + // @ts-ignore + const diff = matchImages(prevImg, img); + if (diff <= 100) { + breakRendering = !breakRendering; + } + } + const frame = frameNumber(index, 3); + const key = `${path.basename(svgFilePath, ".svg")}-${frame}.png`; + + console.log("Saving", key, "..."); + saveFrameImage(key, img); + + prevImg = img; + ++index; + } + + await page.close(); + } + await browser.close(); }; main(); diff --git a/bitmapper/src/utils/matchImages.ts b/bitmapper/src/utils/matchImages.ts index 6d09a95..e1a2844 100644 --- a/bitmapper/src/utils/matchImages.ts +++ b/bitmapper/src/utils/matchImages.ts @@ -2,10 +2,10 @@ import Pixelmatch from "pixelmatch"; import { PNG } from "pngjs"; export const matchImages = (img1: Buffer, img2: Buffer): number => { - const { data: img1Data, width, height } = PNG.sync.read(img1); - const { data: imgNData } = PNG.sync.read(img2); + const { data: img1Data, width, height } = PNG.sync.read(img1); + const { data: imgNData } = PNG.sync.read(img2); - return Pixelmatch(img1Data, imgNData, null, width, height, { - threshold: 0.1, - }); + return Pixelmatch(img1Data, imgNData, null, width, height, { + threshold: 0.001, + }); }; diff --git a/svg/animated/wait.svg b/svg/animated/wait.svg index e6f5744..9e14168 100644 --- a/svg/animated/wait.svg +++ b/svg/animated/wait.svg @@ -21,8 +21,8 @@ calcMode="discrete" values="0;90;180;270;360" keyTimes="0;0.25;0.5;0.75;1" - dur="1.7241379310344827s" - repeatCount="indefinite" + dur="0.862068965517s" + repeatCount="1" /> @@ -40,8 +39,8 @@ calcMode="discrete" values="#f2b736;#499255;#1875e5;#c5523f;#f2b736" keyTimes="0;0.25;0.5;0.75;1" - dur="1.7241379310344827s" - repeatCount="indefinite" + dur="0.862068965517s" + repeatCount="1" /> @@ -49,8 +48,8 @@ attributeName="stroke" values="#c5523f;#8c382a;#c3890d;#f2b736;#c3890d;#33663c;#499255;#33663c;#1152a0;#1875e5;#1152a0;#8c382a;#c5523f" keyTimes="0;0.124;0.125;0.25;0.374;0.375;0.5;0.624;0.625;0.75;0.874;0.875;1" - dur="1.7241379310344827s" - repeatCount="indefinite" + dur="0.862068965517s" + repeatCount="1" /> @@ -59,16 +58,16 @@ attributeName="fill" values="#c5523f;#8c382a;#c3890d;#f2b736;#c3890d;#33663c;#499255;#33663c;#1152a0;#1875e5;#1152a0;#8c382a;#c5523f" keyTimes="0;0.124;0.125;0.25;0.374;0.375;0.5;0.624;0.625;0.75;0.874;0.875;1" - dur="1.7241379310344827s" - repeatCount="indefinite" + dur="0.862068965517s" + repeatCount="1" /> From 239103d9d7fe3f82b4a6d3939d62b13fcbf86299 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Wed, 17 Feb 2021 15:53:40 +0530 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Tweak=20animation?= =?UTF-8?q?=20&=20out=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- builder/build.py | 8 ++++---- builder/gbpkg/constants.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/builder/build.py b/builder/build.py index b69a22a..376e787 100644 --- a/builder/build.py +++ b/builder/build.py @@ -8,8 +8,8 @@ from gbpkg.generator import xbuild, wbuild, build parser = argparse.ArgumentParser( - prog="xcursor_pro_builder", - description="'XCursor-Pro' cursor build python script.", + prog="google_dot_builder", + description="'GoogleDot' cursor build python script.", ) # Positional Args. @@ -96,8 +96,8 @@ bitmaps_dir = Path(args.png_dir) -x_out_dir = Path(args.out_dir) / "XCursor-Pro" -win_out_dir = Path(args.out_dir) / "XCursor-Pro_Windows" +x_out_dir = Path(args.out_dir) / "GoogleDot" +win_out_dir = Path(args.out_dir) / "GoogleDot_Windows" config = get_config( bitmaps_dir, diff --git a/builder/gbpkg/constants.py b/builder/gbpkg/constants.py index 7439dfc..0c727c9 100644 --- a/builder/gbpkg/constants.py +++ b/builder/gbpkg/constants.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from typing import Any, Dict +from typing import Dict # Info THEME_NAME = "GoogleDot" @@ -10,7 +10,7 @@ URL = "https://github.com/ful1e5/Google_Cursor" # XCursor -X_DELAY: int = 25 +X_DELAY: int = 10 # Windows Cursor @@ -72,8 +72,8 @@ "right_ptr.png": {"to": "Alternate", "position": "top_right"}, "cross.png": {"to": "Cross"}, "left_ptr.png": {"to": "Default", "position": "top_left"}, - "bottom_left_corner.png": {"to": "Diagonal_1"}, - "bottom_right_corner.png": {"to": "Diagonal_2"}, + "bottom_right_corner.png": {"to": "Diagonal_1"}, + "bottom_left_corner.png": {"to": "Diagonal_2"}, "pencil.png": {"to": "Handwriting"}, "question_arrow.png": {"to": "Help", "position.png": "top_left"}, "sb_h_double_arrow.png": {"to": "Horizontal"}, From 63cfd220d7f5e66292a3d666543256853e888cd8 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Wed, 17 Feb 2021 16:50:26 +0530 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=93=9A=20Docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 12 +++++- README.md | 114 +++++++++++++++++++++++++++++---------------------- 2 files changed, 75 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 122efb7..9aebd07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Figma file added inide **README.md** +- Figma file added inside **README.md** - Organized build & bitmaps source code - Add **Make** compatibility +- Only build options added in `Makefile` +- Relinked few svg files for Windows cursors purpose +- New build docs + +### Changed + +- Fixed some linting problems of builder using `pylint` +- Reduced Package Size +- Customize sizes from `make` +- CI workflow `build` compatibility with `make` commands ## [v1.0.0] - 27 Oct 2020 diff --git a/README.md b/README.md index 6cba4ae..51e50c9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,8 @@ - Puppeteer version + Puppeteer version + @@ -100,7 +101,7 @@ Cursor theme inspired on **google material design** for `Windows` and `Linux` wi #### Preview: -> Detailed Cursors Informations inside [src/svgs/README.md](https://github.com/ful1e5/Google_Cursor/blob/main/src/svg/README.md) +> Check Figma file [here](https://www.figma.com/file/i7nfGDWCTWlNJlnhmvHDfh/Google-Cursor?node-id=0%3A1) @@ -110,7 +111,6 @@ Cursor theme inspired on **google material design** for `Windows` and `Linux` wi GoogleDot Cursors 🍭

- ### Manual Install #### Linux/X11 @@ -126,7 +126,6 @@ mv GoogleDot ~/.icons/ sudo mv GoogleDot /usr/share/icons/ ``` - #### Windows 1. unzip `GoogleDot_Windows.zip` file @@ -139,18 +138,19 @@ sudo mv GoogleDot /usr/share/icons/ # Dependencies -## Runtime Dependencies +## External Libraries -- libxcursor-dev -- libx11-dev -- libpng-dev (<=1.6) +- libxcursor +- libx11 +- libpng (<=1.6) -#### Install Runtime Dependencies +#### Install External Libraries ##### macOS ```bash -brew cask install xquartz libpng +brew install --cask xquartz +brew install libpng ``` ##### Debain/ubuntu @@ -168,26 +168,46 @@ sudo pacman -S libx11 libxcursor libpng ##### Fedora/Fedora Silverblue/CentOS/RHEL ```bash -sudo dnf install libx11-devel libxcursor-devel libpng-devel +sudo dnf install libX11-devel libXcursor-devel libpng-devel ``` ## Build Dependencies -- [nodejs](https://nodejs.org/en/) (<=12.x.x) -- [yarn](https://classic.yarnpkg.com/en/docs/install/) -- [python](https://www.python.org/downloads/) (<=3.6) -- [pip3](https://pip.pypa.io/en/stable/installing/) +- [gcc](https://gcc.gnu.org/install/) +- [make](https://www.gnu.org/software/make/) +- [nodejs](https://nodejs.org/en/) (<=12.x.x) +- [yarn](https://classic.yarnpkg.com/en/docs/install/) +- [python](https://www.python.org/downloads/) (<=3.8) +- [pip3](https://pip.pypa.io/en/stable/installing/) ### Node Packages -- [puppeteer](https://www.npmjs.com/package/puppeteer) -- [pngjs](https://www.npmjs.com/package/pngjs) -- [pixelmatch](https://www.npmjs.com/package/pixelmatch) +- [puppeteer](https://www.npmjs.com/package/puppeteer) +- [pngjs](https://www.npmjs.com/package/pngjs) +- [pixelmatch](https://www.npmjs.com/package/pixelmatch) ### PyPi Packages -- [clickgen](https://pypi.org/project/clickgen/s) -- [Pillow](https://pypi.org/project/Pillow/) +- [clickgen](https://pypi.org/project/clickgen/s) + +## Build Dependencies + +- [gcc](https://gcc.gnu.org/install/) +- [make](https://www.gnu.org/software/make/) +- [nodejs](https://nodejs.org/en/) (<=12.x.x) +- [yarn](https://classic.yarnpkg.com/en/docs/install/) +- [python](https://www.python.org/downloads/) (<=3.8) +- [pip3](https://pip.pypa.io/en/stable/installing/) + +### Node Packages + +- [puppeteer](https://www.npmjs.com/package/puppeteer) +- [pngjs](https://www.npmjs.com/package/pngjs) +- [pixelmatch](https://www.npmjs.com/package/pixelmatch) + +### PyPi Packages + +- [clickgen](https://pypi.org/project/clickgen/s) ## Build From Scratch @@ -197,50 +217,44 @@ GitHub Actions is automatically runs on every `push`(on **main** and **dev** bra ### Manual Build -#### Setup python environment - ```bash -python3 -m pip install --upgrade pip # Update pip to latest -python3 -m pip3 install virtualenv # Install python virtual environment -virtualenv venv # Create new virtualenv named `venv` -source venv/bin/activate # Activate virtualenv - -# For Deactivate virtualenv -deactivate +make ``` -#### Compile From Source - -> Make sure your [python environment](#setup-python-environment) setup and `virtualenv` is **active**. +#### Build `XCursor` theme ```bash -yarn install # Install all Node Packages -yarn py_install # Install all PyPi Packages -yarn compile # Compile the cursor theme +make unix ``` -After build `bitmaps` and `themes` directory are generated at project **root**. +#### Customize `XCursor` size -### Install Build Theme +```bash +make unix X_SIZES=22 # Only built '22px' pixel-size. +make unix X_SIZES=22 24 32 # Multiple sizes are provided with ' '(Space) +``` -All builded cursor themes are available inside `themes` directory. +#### Install `XCursor` theme + +```bash +make install # install as user + # OR +sudo make install # install as root +``` -#### Linux +#### Build `Windows` theme ```bash -cd ./themes -rm -rf ~/.icons/GoogleDot && cp GoogleDot ~/.icons/ # installing Theme to local user(recommend) +make windows ``` -#### Windows +#### Customize `Windows Cursor` size -1. unzip `GoogleDot_Windows.zip` file -2. Open the `settings` app. -3. **Goto** `Devices` -> `Mouse` -> `Additional Mouse Options`. -4. **Goto** the `pointers` tab. -5. Replace each cursor in the currently applied cursor set with the corresponding cursor in the `GoogleDot_Windows` folder. -6. Click "**save as**" and type in the desired name. -7. Click "**apply**" and "**ok**". +```bash +make windows WIN_SIZE=96 # Supports only one pixel-size +``` + +> For installation follow [these](#windows) steps. @@ -279,4 +293,4 @@ Give a **★** or Follow on [GitHub](https://github.com/ful1e5),That's work as *

I'm Using Katana -

\ No newline at end of file +

From d00499dbd08188e6d5e18800827c060eb66b2b71 Mon Sep 17 00:00:00 2001 From: ful1e5 <24286590+ful1e5@users.noreply.github.com> Date: Wed, 17 Feb 2021 17:26:20 +0530 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=9A=80=20Prepare=20v1.0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 158 ++++++++++++++++-------------------- CHANGELOG.md | 5 +- bitmapper/package.json | 2 +- builder/setup.py | 2 +- 4 files changed, 74 insertions(+), 93 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 53e5725..7938765 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,95 +1,73 @@ name: build on: - push: - paths-ignore: - - "**.md" - - "**.bbcode" - - LICENSE - branches: [main, dev] - - pull_request: - paths-ignore: - - "**.md" - - "**.bbcode" - - LICENSE - branches: [main] + push: + paths-ignore: + - "**.md" + - "**.bbcode" + - LICENSE + branches: [main, dev] + pull_request: + paths-ignore: + - "**.md" + - "**.bbcode" + - LICENSE + branches: [main] jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Install build dependencies (apt) - run: | - sudo apt install libx11-dev libxcursor-dev libpng-dev - continue-on-error: false - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - uses: actions/cache@v2 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - uses: actions/setup-node@v1 - with: - node-version: "12.x" - - run: yarn install - - run: yarn render - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: "3.x" - - - name: Cache pip dependencies - uses: actions/cache@v2 - with: - # This path is specific to Ubuntu - path: ~/.cache/pip - # Look to see if there is a cache hit for the corresponding requirements file - key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - ${{ runner.os }}- - - - name: Install pip dependencies - run: | - python -m pip install --upgrade pip - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - continue-on-error: false - - - name: Generating `GoogleDot` Cursor Theme - run: python build.py - - - name: Compressing Artifacts - run: | - tar -cvzf logs.tar.gz build.log - tar -cvzf bitmaps.tar.gz bitmaps - tar -cvzf GoogleDot.tar.gz themes - - - name: Uploading `GoogleDot` Build Log artifact - uses: actions/upload-artifact@v2 - with: - name: logs - path: logs.tar.gz - - - name: Uploading `bitmaps` artifact - uses: actions/upload-artifact@v2 - with: - name: bitmaps - path: bitmaps.tar.gz - - - name: Uploading `GoogleDot` Theme artifact - uses: actions/upload-artifact@v2 - with: - name: GoogleDot - path: GoogleDot.tar.gz + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install build dependencies (apt) + run: sudo apt install -y libx11-dev libxcursor-dev libpng-dev + continue-on-error: false + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + - name: Caching yarn packages + uses: actions/cache@v2 + id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + - name: Set Up NodeJS 12.x + uses: actions/setup-node@v1 + with: + node-version: "12.x" + - name: Caching pip packages + uses: actions/cache@v2 + id: pip-cache # use this to check for `cache-hit` (`steps.pip-cache.outputs.cache-hit != 'true'`) + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} + restore-keys: | + ${{ runner.os }}-pip- + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: "3.8" + - name: Generating `GoogleDot` Cursor Theme + run: make + continue-on-error: false + + - name: Compressing UNIX theme + run: tar -cvzf GoogleDot.tar.gz themes/GoogleDot + + - name: Uploading `bitmaps` artifact + uses: actions/upload-artifact@v2 + with: + name: bitmaps + path: bitmaps/* + - name: Uploading `GoogleDot` UNIX Theme artifact + uses: actions/upload-artifact@v2 + with: + name: GoogleDot + path: GoogleDot.tar.gz + - name: Uploading `GoogleDot` Windows Theme artifact + uses: actions/upload-artifact@v2 + with: + name: GoogleDot_Windows + path: themes/GoogleDot_Windows/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 9aebd07..5054963 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [unreleased] +## [v1.0.1] - 17 Feb 2021 + ### Added - Figma file added inside **README.md** @@ -31,5 +33,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Logo and badges - CI/CD Pipelines -[unreleased]: https://github.com/ful1e5/Google_Cursor/compare/v1.0.0...main +[unreleased]: https://github.com/ful1e5/Google_Cursor/compare/v1.0.1...main +[v1.0.1]: https://github.com/ful1e5/Google_Cursor/compare/v1.0.0...v1.0.1 [v1.0.0]: https://github.com/ful1e5/Google_Cursor/tree/v1.0.0 diff --git a/bitmapper/package.json b/bitmapper/package.json index 530e9d4..ea0355d 100644 --- a/bitmapper/package.json +++ b/bitmapper/package.json @@ -1,6 +1,6 @@ { "name": "google_cursor", - "version": "1.0.0", + "version": "1.0.1", "description": "🍭 Cursor theme inspired on Google", "main": "index.js", "repository": "git@github.com:ful1e5/Google_Cursor.git", diff --git a/builder/setup.py b/builder/setup.py index b0e6efb..2ddf303 100644 --- a/builder/setup.py +++ b/builder/setup.py @@ -5,7 +5,7 @@ setup( name="gbpkg", - version="1.1.0", + version="1.0.1", description="Generate 'GoogleDot' cursor theme from PNGs file", url="https://github.com/ful1e5/Google_Cursor", packages=["gbpkg"],