diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e250542e..b30f5260 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,9 +35,9 @@ jobs:
- name: Print cbmp version
run: npx cbmp --version
- # - name: Rendering Bitmaps
- # run: yarn render
- # continue-on-error: false
+ - name: Rendering Bitmaps
+ run: yarn render
+ continue-on-error: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -53,5 +53,5 @@ jobs:
clickgen --version
ctgen --version
- # - name: Building XCursor-Pro Cursors
- # run: yarn build
+ - name: Building XCursor-Pro Cursors
+ run: yarn build
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e7c179fe..6c4f47ed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The 'bitmaps' directory has been removed from the git repository. You can now generate the PNG files using `yarn render` or download them from the release assets.
+- The `build.toml` file has been removed. Instead, the cursor build configurations are now distributed according to platforms within the `configs` directory:
+ - `configs/x.build.toml`: Used to build XCursor.
+ - `configs/win_rg.build.toml`: Used to build regular size Windows cursors.
+ - `configs/win_lg.build.toml`: Used to build large size Windows cursors.
+ - `configs/win_xxl.build.toml`: Used to build extra large size Windows cursors.
+
### What's New?
- Using [cbmp v1.1.1](https://github.com/ful1e5/cbmp/tree/v1.1.1) for rendering cursor bitmaps.
diff --git a/README.md b/README.md
index 7a12392c..969cd9ce 100644
--- a/README.md
+++ b/README.md
@@ -50,27 +50,27 @@ N/A
### Windows Cursor Size:
-- 16x16 - Small
-- 24x24 - Regular
-- 32x32 - Large
-- 48x48 - Extra Large
+- 48x48 - Extra Large
+- 32x32 - Large
+- 24x24 - Regular
+- 16x16 - Small
## Colors:
### XCursor-Pro-Red
-- Base Color - `#FF0000` (Red)
-- Outline Color - `#FFFFFF` (White)
+- Outline Color - `#FFFFFF` (White)
+- Base Color - `#FF0000` (Red)
### XCursor-Pro-Dark
-- Base Color - `#000000` (Black)
-- Outline Color - `#FFFFFF` (White)
+- Outline Color - `#FFFFFF` (White)
+- Base Color - `#000000` (Black)
### XCursor-Pro-Light
-- Base Color - `#FFFFFF` (White)
-- Outline Color - `#000000` (Black)
+- Outline Color - `#000000` (Black)
+- Base Color - `#FFFFFF` (White)
## How to get it
@@ -81,9 +81,9 @@ You can download latest `stable` & `development` releases from
### Quick install
-- XCursor Pro Dark: [https://www.pling.com/p/1481466](https://www.pling.com/p/1481466)
-- XCursor Pro Light: [https://www.pling.com/p/1639833](https://www.pling.com/p/1639833)
-- XCursor Pro Red: [https://www.pling.com/p/1639834](https://www.pling.com/p/1639834)
+- XCursor Pro Red: [https://www.pling.com/p/1639834](https://www.pling.com/p/1639834)
+- XCursor Pro Light: [https://www.pling.com/p/1639833](https://www.pling.com/p/1639833)
+- XCursor Pro Dark: [https://www.pling.com/p/1481466](https://www.pling.com/p/1481466)
## Installing XCursor-Pro Cursor
@@ -133,25 +133,26 @@ Run the `uninstall.bat` script packed with the `.zip` archive
#### Notes
-- XCursor-Pro build configuration and cursor hotspot settings are bundled in the `build.toml` file.
-- Check out the scripts section in [package.json](./package.json) to see how we build the cursor theme,
- excluding the render scripts. They are useful for converting `.svg` files to `.png` files.
-- yarn is optional, For building XCursors and Windows cursors from `.png` files or resizing them
- you don't need that. If you want to develop/modify XCursor-Pro's colors, and bitmaps, or generate a png
- file from a svg, Then you can use yarn because bitmapper is written in TypeScript.
-- Since XCursor-Pro variants are designed similarly, they share the same hotspot settings so a
- single configuration file `build.toml` is responsible for building all variants. Due to this, you will have
- to change the following options in `ctgen` to build the appropriate variant:
- - **-d**: bitmaps directory
- - **-n**: The name you want to give to the generated theme.
- - **-c**: Theme comment.
- - See `ctgen --help` for all available options.
+ - See `ctgen --help` for all available options.
+ - **-c**: Theme comment.
+ - **-n**: The name you want to give to the generated theme.
+ - **-d**: bitmaps directory
+ to change the following options in `ctgen` to build the appropriate variant:
+ single configuration file `build.toml` is responsible for building all variants. Due to this, you will have
+
+- Since XCursor-Pro variants are designed similarly, they share the same hotspot settings so a
+ file from a svg, Then you can use yarn because bitmapper is written in TypeScript.
+ you don't need that. If you want to develop/modify XCursor-Pro's colors, and bitmaps, or generate a png
+- yarn is optional, For building XCursors and Windows cursors from `.png` files or resizing them
+ excluding the render scripts. They are useful for converting `.svg` files to `.png` files.
+- Check out the scripts section in [package.json](./package.json) to see how we build the cursor theme,
+- XCursor-Pro build configuration and cursor hotspot settings are bundled in the `build.toml` file.
### Build prerequisites
-- Python version 3.7 or higher
-- [clickgen](https://github.com/ful1e5/clickgen)>=2.1.2 (`pip install clickgen`)
-- [yarn](https://github.com/yarnpkg/yarn)
+- [yarn](https://github.com/yarnpkg/yarn)
+- [clickgen](https://github.com/ful1e5/clickgen)>=2.1.2 (`pip install clickgen`)
+- Python version 3.7 or higher
### Quick start
diff --git a/build.sh b/build.sh
new file mode 100755
index 00000000..5efe3f8f
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+# A script for preparing binaries of XCursor-Pro Cursors, created by Abdulkaiz Khatri.
+
+version="v2.0.2"
+
+error() (
+ set -o pipefail
+ "$@" 2> >(sed $'s,.*,\e[31m&\e[m,' >&2)
+)
+
+get_config_file() {
+ local key="${1}"
+ local cfg_file="build.toml"
+
+ if [[ $key == *"Right"* ]]; then
+ cfg_file="build.right.toml"
+ fi
+
+ echo $cfg_file
+}
+
+with_version() {
+ local comment="${1}"
+ echo "$comment ($version)"
+}
+
+if ! type -p ctgen >/dev/null; then
+ error ctgen
+ exit 127 # exit program with "command not found" error code
+fi
+
+declare -A names
+names["XCursor-Pro-Dark"]=$(with_version "Modern, Proffesional Dark")
+names["XCursor-Pro-Light"]=$(with_version "Modern, Proffesional Light")
+names["XCursor-Pro-Red"]=$(with_version "Modern, Proffesional Red")
+
+# Cleanup old builds
+rm -rf themes bin
+
+# Building XCursor binaries
+for key in "${!names[@]}"; do
+ comment="${names[$key]}"
+ cfg=$(get_config_file key)
+
+ ctgen "configs/x.$cfg" -p x11 -d "bitmaps/$key" -n "$key" -c "$comment XCursors" &
+ PID=$!
+ wait $PID
+done
+
+# Building Windows binaries
+for key in "${!names[@]}"; do
+ comment="${names[$key]}"
+ cfg=$(get_config_file key)
+
+ ctgen "configs/win_rg.$cfg" -d "bitmaps/$key" -n "$key-Regular" -c "$comment Regular Windows Cursors" &
+ ctgen "configs/win_lg.$cfg" -d "bitmaps/$key" -n "$key-Large" -c "$comment Large Windows Cursors" &
+ ctgen "configs/win_xl.$cfg" -d "bitmaps/$key" -n "$key-Extra-Large" -c "$comment Extra Large Windows Cursors" &
+ PID=$!
+ wait $PID
+done
+
+# Compressing Binaries
+mkdir -p bin
+cd themes || exit
+
+for key in "${!names[@]}"; do
+ tar -cJvf "../bin/${key}.tar.xz" "${key}" &
+ PID=$!
+ wait $PID
+done
+
+# Compressing xcursor-pro-all.tar.xz
+cp ../LICENSE .
+tar -cJvf "../bin/xcursor-pro-all.tar.xz" --exclude="*-Windows" . &
+PID=$!
+wait $PID
+
+# Compressing XCursor-Pro-*-Windows
+for key in "${!names[@]}"; do
+ zip -rv "../bin/${key}-Windows.zip" "${key}-Regular-Windows" "${key}-Large-Windows" "${key}-Extra-Large-Windows" &
+ PID=$!
+ wait $PID
+done
+
+cd ..
+
+# Copying License File for 'bitmaps'
+cp LICENSE bitmaps/
+zip -rv bin/bitmaps.zip bitmaps
diff --git a/configs/win_lg.build.toml b/configs/win_lg.build.toml
new file mode 100644
index 00000000..942e83ac
--- /dev/null
+++ b/configs/win_lg.build.toml
@@ -0,0 +1,133 @@
+[theme]
+name = 'XCursor-Pro-Large'
+comment = 'Modern, Proffesional Large Windows Cursors'
+website = 'https://github.com/ful1e5/XCursor-pro'
+
+[config]
+bitmaps_dir = '' # This config will assigned with `ctgen -d `
+out_dir = '../themes'
+platforms = 'windows'
+
+
+[cursors]
+[cursors.fallback_settings]
+win_sizes = ["26:32", "39:48", "52:64", "77:96", "103:128"]
+x_hotspot = 128
+y_hotspot = 128
+win_delay = 1
+
+
+[cursors.all-scroll]
+png = 'all-scroll.png'
+win_name = 'Move'
+
+[cursors.move]
+png = 'move.png'
+x_hotspot = 137
+y_hotspot = 84
+win_name = 'Grabbing'
+
+[cursors.bottom_left_corner]
+png = 'bottom_left_corner.png'
+win_name = 'Dgn2'
+
+[cursors.bottom_right_corner]
+png = 'bottom_right_corner.png'
+win_name = 'Dgn1'
+
+[cursors.cross]
+png = 'cross.png'
+win_name = 'Cross'
+
+[cursors.crossed_circle]
+png = 'crossed_circle.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Unavailable'
+
+[cursors.hand1]
+png = 'hand1.png'
+x_hotspot = 141
+y_hotspot = 88
+win_name = 'Pan'
+
+[cursors.hand2]
+png = 'hand2.png'
+x_hotspot = 98
+y_hotspot = 24
+win_name = 'Link'
+
+[cursors.left_ptr]
+png = 'left_ptr.png'
+x_hotspot = 123
+y_hotspot = 11
+win_name = 'Pointer'
+
+[cursors.left_ptr_watch]
+png = 'left_ptr_watch-*.png'
+x_hotspot = 40
+y_hotspot = 30
+win_sizes = "78:96"
+win_name = 'Work'
+
+[cursors.pencil]
+png = 'pencil.png'
+x_hotspot = 28
+y_hotspot = 226
+win_name = 'Handwriting'
+
+[cursors.question_arrow]
+png = 'question_arrow.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Help'
+
+[cursors.right_ptr]
+png = 'right_ptr.png'
+x_hotspot = 174
+y_hotspot = 42
+win_name = 'Alternate'
+
+[cursors.sb_h_double_arrow]
+png = 'sb_h_double_arrow.png'
+x11_name = 'sb_h_double_arrow'
+win_name = 'Horz'
+
+[cursors.sb_v_double_arrow]
+png = 'sb_v_double_arrow.png'
+win_name = 'Vert'
+
+[cursors.wait]
+png = 'wait-*.png'
+win_sizes = "78:96"
+win_name = 'Busy'
+
+[cursors.xterm]
+png = 'xterm.png'
+x_hotspot = 128
+y_hotspot = 126
+win_name = 'Text'
+
+[cursors.zoom-in]
+png = 'zoom-in.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-in'
+
+[cursors.zoom-out]
+png = 'zoom-out.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-out'
+
+[cursors.person]
+png = 'person.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Person'
+
+[cursors.pin]
+png = 'pin.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Pin'
diff --git a/configs/win_rg.build.toml b/configs/win_rg.build.toml
new file mode 100644
index 00000000..157c016f
--- /dev/null
+++ b/configs/win_rg.build.toml
@@ -0,0 +1,133 @@
+[theme]
+name = 'XCursor-Pro-Regular'
+comment = 'Modern, Proffesional Regular Windows Cursors'
+website = 'https://github.com/ful1e5/XCursor-pro'
+
+[config]
+bitmaps_dir = '' # This config will assigned with `ctgen -d `
+out_dir = '../themes'
+platforms = 'windows'
+
+
+[cursors]
+[cursors.fallback_settings]
+win_sizes = ["22:32", "32:48", "43:64", "64:96", "86:128"]
+x_hotspot = 128
+y_hotspot = 128
+win_delay = 1
+
+
+[cursors.all-scroll]
+png = 'all-scroll.png'
+win_name = 'Move'
+
+[cursors.move]
+png = 'move.png'
+x_hotspot = 137
+y_hotspot = 84
+win_name = 'Grabbing'
+
+[cursors.bottom_left_corner]
+png = 'bottom_left_corner.png'
+win_name = 'Dgn2'
+
+[cursors.bottom_right_corner]
+png = 'bottom_right_corner.png'
+win_name = 'Dgn1'
+
+[cursors.cross]
+png = 'cross.png'
+win_name = 'Cross'
+
+[cursors.crossed_circle]
+png = 'crossed_circle.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Unavailable'
+
+[cursors.hand1]
+png = 'hand1.png'
+x_hotspot = 141
+y_hotspot = 88
+win_name = 'Pan'
+
+[cursors.hand2]
+png = 'hand2.png'
+x_hotspot = 98
+y_hotspot = 24
+win_name = 'Link'
+
+[cursors.left_ptr]
+png = 'left_ptr.png'
+x_hotspot = 123
+y_hotspot = 11
+win_name = 'Pointer'
+
+[cursors.left_ptr_watch]
+png = 'left_ptr_watch-*.png'
+x_hotspot = 40
+y_hotspot = 30
+win_sizes = "64:96"
+win_name = 'Work'
+
+[cursors.pencil]
+png = 'pencil.png'
+x_hotspot = 28
+y_hotspot = 226
+win_name = 'Handwriting'
+
+[cursors.question_arrow]
+png = 'question_arrow.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Help'
+
+[cursors.right_ptr]
+png = 'right_ptr.png'
+x_hotspot = 174
+y_hotspot = 42
+win_name = 'Alternate'
+
+[cursors.sb_h_double_arrow]
+png = 'sb_h_double_arrow.png'
+x11_name = 'sb_h_double_arrow'
+win_name = 'Horz'
+
+[cursors.sb_v_double_arrow]
+png = 'sb_v_double_arrow.png'
+win_name = 'Vert'
+
+[cursors.wait]
+png = 'wait-*.png'
+win_sizes = "64:96"
+win_name = 'Busy'
+
+[cursors.xterm]
+png = 'xterm.png'
+x_hotspot = 128
+y_hotspot = 126
+win_name = 'Text'
+
+[cursors.zoom-in]
+png = 'zoom-in.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-in'
+
+[cursors.zoom-out]
+png = 'zoom-out.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-out'
+
+[cursors.person]
+png = 'person.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Person'
+
+[cursors.pin]
+png = 'pin.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Pin'
diff --git a/configs/win_xl.build.toml b/configs/win_xl.build.toml
new file mode 100644
index 00000000..31ff1cae
--- /dev/null
+++ b/configs/win_xl.build.toml
@@ -0,0 +1,133 @@
+[theme]
+name = 'XCursor-Pro-Extra-Large'
+comment = 'Modern, Proffesional Extra Large Windows Cursors'
+website = 'https://github.com/ful1e5/XCursor-pro'
+
+[config]
+bitmaps_dir = '' # This config will assigned with `ctgen -d `
+out_dir = '../themes'
+platforms = 'windows'
+
+
+[cursors]
+[cursors.fallback_settings]
+win_sizes = [32, 48, 64, 96, 128]
+x_hotspot = 128
+y_hotspot = 128
+win_delay = 1
+
+
+[cursors.all-scroll]
+png = 'all-scroll.png'
+win_name = 'Move'
+
+[cursors.move]
+png = 'move.png'
+x_hotspot = 137
+y_hotspot = 84
+win_name = 'Grabbing'
+
+[cursors.bottom_left_corner]
+png = 'bottom_left_corner.png'
+win_name = 'Dgn2'
+
+[cursors.bottom_right_corner]
+png = 'bottom_right_corner.png'
+win_name = 'Dgn1'
+
+[cursors.cross]
+png = 'cross.png'
+win_name = 'Cross'
+
+[cursors.crossed_circle]
+png = 'crossed_circle.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Unavailable'
+
+[cursors.hand1]
+png = 'hand1.png'
+x_hotspot = 141
+y_hotspot = 88
+win_name = 'Pan'
+
+[cursors.hand2]
+png = 'hand2.png'
+x_hotspot = 98
+y_hotspot = 24
+win_name = 'Link'
+
+[cursors.left_ptr]
+png = 'left_ptr.png'
+x_hotspot = 123
+y_hotspot = 11
+win_name = 'Pointer'
+
+[cursors.left_ptr_watch]
+png = 'left_ptr_watch-*.png'
+x_hotspot = 40
+y_hotspot = 30
+win_sizes = 96
+win_name = 'Work'
+
+[cursors.pencil]
+png = 'pencil.png'
+x_hotspot = 28
+y_hotspot = 226
+win_name = 'Handwriting'
+
+[cursors.question_arrow]
+png = 'question_arrow.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Help'
+
+[cursors.right_ptr]
+png = 'right_ptr.png'
+x_hotspot = 174
+y_hotspot = 42
+win_name = 'Alternate'
+
+[cursors.sb_h_double_arrow]
+png = 'sb_h_double_arrow.png'
+x11_name = 'sb_h_double_arrow'
+win_name = 'Horz'
+
+[cursors.sb_v_double_arrow]
+png = 'sb_v_double_arrow.png'
+win_name = 'Vert'
+
+[cursors.wait]
+png = 'wait-*.png'
+win_sizes = 96
+win_name = 'Busy'
+
+[cursors.xterm]
+png = 'xterm.png'
+x_hotspot = 128
+y_hotspot = 126
+win_name = 'Text'
+
+[cursors.zoom-in]
+png = 'zoom-in.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-in'
+
+[cursors.zoom-out]
+png = 'zoom-out.png'
+x_hotspot = 112
+y_hotspot = 113
+win_name = 'Zoom-out'
+
+[cursors.person]
+png = 'person.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Person'
+
+[cursors.pin]
+png = 'pin.png'
+x_hotspot = 39
+y_hotspot = 32
+win_name = 'Pin'
diff --git a/build.toml b/configs/x.build.toml
similarity index 83%
rename from build.toml
rename to configs/x.build.toml
index 32b3c30b..ab03a4ac 100644
--- a/build.toml
+++ b/configs/x.build.toml
@@ -1,22 +1,20 @@
[theme]
name = 'XCursor Pro'
-comment = 'Modern XCursors.'
+comment = 'Modern XCursors'
website = 'https://github.com/ful1e5/XCursor-pro'
[config]
-bitmaps_dir = '' # This config will assigned with `ctgen -d `
-out_dir = 'themes'
-platforms = ['x11', 'windows']
-x11_sizes = [22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96]
-win_size = 32
+bitmaps_dir = '' # This config will assigned with `ctgen -d `
+out_dir = '../themes'
+platforms = 'x11'
[cursors]
-
[cursors.fallback_settings]
-x_hotspot = 100
-y_hotspot = 100
-x11_delay = 25
-win_delay = 1
+x11_sizes = [16, 20, 22, 24, 28, 32, 40, 48, 56, 64, 72, 80, 88, 96]
+x_hotspot = 128
+y_hotspot = 128
+x11_delay = 35
+
[cursors.all-scroll]
png = 'all-scroll.png'
@@ -26,7 +24,6 @@ x11_symlinks = ['fleur', 'size_all']
[cursors.bottom_left_corner]
png = 'bottom_left_corner.png'
x11_name = 'bottom_left_corner'
-win_name = 'Diagonal_2'
x11_symlinks = [
'fcf1c3c7cd4491d801f1e1c78f100000',
'sw-resize',
@@ -40,7 +37,6 @@ x11_symlinks = [
[cursors.bottom_right_corner]
png = 'bottom_right_corner.png'
x11_name = 'bottom_right_corner'
-win_name = 'Diagonal_1'
x11_symlinks = [
'c7088f0f3e6c8088236ef8e1e3e70000',
'top_left_corner',
@@ -53,26 +49,26 @@ x11_symlinks = [
[cursors.bottom_tee]
png = 'bottom_tee.png'
-x_hotspot = 98
-y_hotspot = 137
+x_hotspot = 128
+y_hotspot = 175
x11_name = 'bottom_tee'
[cursors.center_ptr]
png = 'center_ptr.png'
-x_hotspot = 99
-y_hotspot = 29
+x_hotspot = 120
+y_hotspot = 10
x11_name = 'center_ptr'
[cursors.context-menu]
png = 'context-menu.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 39
+y_hotspot = 32
x11_name = 'context-menu'
[cursors.copy]
png = 'copy.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 39
+y_hotspot = 32
x11_name = 'copy'
x11_symlinks = [
'1081e37283d90000800003c07f3ef6bf',
@@ -84,15 +80,13 @@ x11_symlinks = [
[cursors.cross]
png = 'cross.png'
x11_name = 'cross'
-win_name = 'Cross'
x11_symlinks = ['cross_reverse', 'diamond_cross', 'tcross', 'color-picker']
[cursors.crossed_circle]
png = 'crossed_circle.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 39
+y_hotspot = 32
x11_name = 'crossed_circle'
-win_name = 'Unavailiable'
x11_symlinks = [
'03b6e0fcb3499374a867c041f52298f0',
'not-allowed',
@@ -116,18 +110,16 @@ x11_symlinks = ['dot_box_mask', 'draped_box', 'icon', 'target']
[cursors.hand1]
png = 'hand1.png'
-x_hotspot = 103
-y_hotspot = 56
+x_hotspot = 141
+y_hotspot = 88
x11_name = 'hand1'
-win_name = 'Move'
x11_symlinks = ['grab', 'openhand']
[cursors.hand2]
png = 'hand2.png'
-x_hotspot = 78
-y_hotspot = 26
+x_hotspot = 98
+y_hotspot = 24
x11_name = 'hand2'
-win_name = 'Link'
x11_symlinks = [
'9d800788f1b08800ae810202380a0822',
'e29285e634086352946a0e7090d73106',
@@ -137,18 +129,16 @@ x11_symlinks = [
[cursors.left_ptr]
png = 'left_ptr.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 123
+y_hotspot = 11
x11_name = 'left_ptr'
-win_name = 'Default'
x11_symlinks = ['arrow', 'default', 'top_left_arrow']
[cursors.left_ptr_watch]
png = 'left_ptr_watch-*.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 40
+y_hotspot = 30
x11_name = 'left_ptr_watch'
-win_name = 'Work'
x11_symlinks = [
'00000000000000020006000e7e9ffc3f',
'08e8e1c95fe2fc01f976f1e063a24ccd',
@@ -163,12 +153,14 @@ x11_symlinks = ['w-resize', 'right_side', 'e-resize']
[cursors.left_tee]
png = 'left_tee.png'
+x_hotspot = 86
+y_hotspot = 128
x11_name = 'left_tee'
[cursors.link]
png = 'link.png'
-x_hotspot = 120
-y_hotspot = 55
+x_hotspot = 113
+y_hotspot = 110
x11_name = 'link'
x11_symlinks = [
'3085a0e285430894940527032f8b26df',
@@ -180,16 +172,20 @@ x11_symlinks = [
[cursors.ll_angle]
png = 'll_angle.png'
+x_hotspot = 53
+y_hotspot = 201
x11_name = 'll_angle'
[cursors.lr_angle]
png = 'lr_angle.png'
+x_hotspot = 202
+y_hotspot = 201
x11_name = 'lr_angle'
[cursors.move]
png = 'move.png'
-x_hotspot = 102
-y_hotspot = 73
+x_hotspot = 137
+y_hotspot = 84
x11_name = 'move'
x11_symlinks = [
'4498f0e0c1937ffe01fd06f973665830',
@@ -204,25 +200,21 @@ x11_symlinks = [
[cursors.pencil]
png = 'pencil.png'
-x_hotspot = 81
-y_hotspot = 117
+x_hotspot = 28
+y_hotspot = 226
x11_name = 'pencil'
-win_name = 'Handwriting'
x11_symlinks = ['draft']
[cursors.plus]
png = 'plus.png'
-x_hotspot = 98
-y_hotspot = 100
x11_name = 'plus'
x11_symlinks = ['cell']
[cursors.question_arrow]
png = 'question_arrow.png'
-x_hotspot = 51
-y_hotspot = 24
+x_hotspot = 39
+y_hotspot = 32
x11_name = 'question_arrow'
-win_name = 'Help'
x11_symlinks = [
'5c6cd98b3f3ebcb1f9c7f1c204630408',
'd9ce0ab605698f320427677b458ad60b',
@@ -234,27 +226,27 @@ x11_symlinks = [
[cursors.right_ptr]
png = 'right_ptr.png'
-x_hotspot = 143
-y_hotspot = 24
+x_hotspot = 174
+y_hotspot = 42
x11_name = 'right_ptr'
-win_name = 'Alternate'
x11_symlinks = ['draft_large', 'draft_small']
[cursors.right_tee]
png = 'right_tee.png'
-x_hotspot = 98
-y_hotspot = 99
+x_hotspot = 169
+y_hotspot = 126
x11_name = 'right_tee'
[cursors.sb_down_arrow]
png = 'sb_down_arrow.png'
+x_hotspot = 128
+y_hotspot = 209
x11_name = 'sb_down_arrow'
x11_symlinks = ['down-arrow']
[cursors.sb_h_double_arrow]
png = 'sb_h_double_arrow.png'
x11_name = 'sb_h_double_arrow'
-win_name = 'Horizontal'
x11_symlinks = [
'028006030e0e7ebffc7f7070c0600140',
'14fef782d02440884392942c1120523',
@@ -268,23 +260,28 @@ x11_symlinks = [
[cursors.sb_left_arrow]
png = 'sb_left_arrow.png'
+x_hotspot = 44
+y_hotspot = 128
x11_name = 'sb_left_arrow'
x11_symlinks = ['left-arrow']
[cursors.sb_right_arrow]
png = 'sb_right_arrow.png'
+x_hotspot = 212
+y_hotspot = 128
x11_name = 'sb_right_arrow'
x11_symlinks = ['right-arrow']
[cursors.sb_up_arrow]
png = 'sb_up_arrow.png'
+x_hotspot = 128
+y_hotspot = 44
x11_name = 'sb_up_arrow'
x11_symlinks = ['up-arrow']
[cursors.sb_v_double_arrow]
png = 'sb_v_double_arrow.png'
x11_name = 'sb_v_double_arrow'
-win_name = 'Vertical'
x11_symlinks = [
'00008160000006810000408080010102',
'2870a09082c103050810ffdffffe0204',
@@ -304,26 +301,31 @@ x11_symlinks = ['s-resize', 'n-resize', 'bottom_side']
[cursors.top_tee]
png = 'top_tee.png'
+x_hotspot = 128
+y_hotspot = 87
x11_name = 'top_tee'
[cursors.ul_angle]
png = 'ul_angle.png'
+x_hotspot = 52
+y_hotspot = 52
x11_name = 'ul_angle'
[cursors.ur_angle]
png = 'ur_angle.png'
+x_hotspot = 203
+y_hotspot = 52
x11_name = 'ur_angle'
[cursors.vertical-text]
png = 'vertical-text.png'
-x_hotspot = 96
-y_hotspot = 99
+x_hotspot = 126
+y_hotspot = 130
x11_name = 'vertical-text'
[cursors.wait]
png = 'wait-*.png'
x11_name = 'wait'
-win_name = 'Busy'
x11_symlinks = ['watch']
[cursors.wayland-cursor]
@@ -337,20 +339,19 @@ x11_symlinks = ['pirate', 'x-cursor']
[cursors.xterm]
png = 'xterm.png'
-x_hotspot = 100
-y_hotspot = 89
+x_hotspot = 128
+y_hotspot = 126
x11_name = 'xterm'
-win_name = 'IBeam'
x11_symlinks = ['ibeam', 'text']
[cursors.zoom-in]
png = 'zoom-in.png'
-x_hotspot = 89
-y_hotspot = 87
+x_hotspot = 112
+y_hotspot = 113
x11_name = 'zoom-in'
[cursors.zoom-out]
png = 'zoom-out.png'
-x_hotspot = 89
-y_hotspot = 87
+x_hotspot = 112
+y_hotspot = 113
x11_name = 'zoom-out'
diff --git a/package.json b/package.json
index 3cb3fe7e..9ebc3e3f 100644
--- a/package.json
+++ b/package.json
@@ -3,13 +3,9 @@
"cbmp": "^1.1.1"
},
"scripts": {
- "render:xcursor-pro-dark": "npx cbmp -d 'svg' -n 'XCursor-Pro-Dark' -bc '#000000' -oc '#FFFFFF'",
- "render:xcursor-pro-light": "npx cbmp -d 'svg' -n 'XCursor-Pro-Light' -bc '#FFFFFF' -oc '#000000'",
- "render:xcursor-pro-red": "npx cbmp -d 'svg' -n 'XCursor-Pro-Red' -bc '#FF0000' -oc '#FFFFFF'",
- "render": "yarn render:xcursor-pro-dark && yarn render:xcursor-pro-light && yarn render:xcursor-pro-red",
- "build:xcursor-pro-dark": "ctgen build.toml -d 'bitmaps/XCursor-Pro-Dark' -n 'XCursor-Pro-Dark' -c 'Modern dark XCursors.'",
- "build:xcursor-pro-light": "ctgen build.toml -d 'bitmaps/XCursor-Pro-Light' -n 'XCursor-Pro-Light' -c 'Modern light XCursors.'",
- "build:xcursor-pro-red": "ctgen build.toml -d 'bitmaps/XCursor-Pro-Red' -n 'XCursor-Pro-Red' -c 'Modern Red XCursors.'",
- "build": "yarn build:xcursor-pro-dark && yarn build:xcursor-pro-light && yarn build:xcursor-pro-red"
+ "clean": "rm -rf bin bitmaps themes",
+ "render": "npx cbmp render.json",
+ "build": "bash build.sh",
+ "generate": "npx cbmp render.json && bash build.sh"
}
}
diff --git a/release.sh b/release.sh
deleted file mode 100755
index 905d8586..00000000
--- a/release.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-# A script for preparing binaries for version release of XCursor-Pro, by Abdulkaiz Khatri
-
-declare -A names
-names["XCursor-Pro-Dark"]="Modern dark XCursors."
-names["XCursor-Pro-Light"]="Modern light XCursors."
-names["XCursor-Pro-Red"]="Modern Red XCursors."
-
-# Cleanup old builds
-rm -rf themes bin
-
-# Building XCursor-Pro binaries
-for key in "${!names[@]}";
-do
- comment="${names[$key]}";
- ctgen build.toml -p x11 -d "bitmaps/$key" -n "$key" -c "$comment" &
- PID=$!
- wait $PID
-done
-
-
-# Building XCursor-Pro Windows binaries
-for key in "${!names[@]}";
-do
- comment="${names[$key]}";
- ctgen build.toml -p windows -s 16 -d "bitmaps/$key" -n "$key-Small" -c "$comment" &
- ctgen build.toml -p windows -s 24 -d "bitmaps/$key" -n "$key-Regular" -c "$comment" &
- ctgen build.toml -p windows -s 32 -d "bitmaps/$key" -n "$key-Large" -c "$comment" &
- ctgen build.toml -p windows -s 48 -d "bitmaps/$key" -n "$key-Extra-Large" -c "$comment" &
- PID=$!
- wait $PID
-done
-
-# Compressing Binaries
-mkdir -p bin
-cd themes
-
-for key in "${!names[@]}";
-do
- tar -czvf "../bin/${key}.tar.gz" "${key}" &
- PID=$!
- wait $PID
-done
-
-
-for key in "${!names[@]}";
-do
- zip -rv "../bin/${key}-Windows.zip" "${key}-Small-Windows" "${key}-Regular-Windows" "${key}-Large-Windows" "${key}-Extra-Large-Windows" &
- PID=$!
- wait $PID
-done
-
-cd ..
diff --git a/render.json b/render.json
new file mode 100644
index 00000000..6ccc7a95
--- /dev/null
+++ b/render.json
@@ -0,0 +1,26 @@
+{
+ "XCursor-Pro-Dark": {
+ "dir": "svg",
+ "out": "bitmaps/XCursor-Pro-Dark",
+ "colors": [
+ { "match": "#00FF00", "replace": "#000000" },
+ { "match": "#0000FF", "replace": "#FFFFFF" }
+ ]
+ },
+ "XCursor-Pro-Light": {
+ "dir": "svg",
+ "out": "bitmaps/XCursor-Pro-Light",
+ "colors": [
+ { "match": "#00FF00", "replace": "#FFFFFF" },
+ { "match": "#0000FF", "replace": "#000000" }
+ ]
+ },
+ "XCursor-Pro-Red": {
+ "dir": "svg",
+ "out": "bitmaps/XCursor-Pro-Red",
+ "colors": [
+ { "match": "#00FF00", "replace": "#FF0000" },
+ { "match": "#0000FF", "replace": "#FFFFFF" }
+ ]
+ }
+}
diff --git a/svg/left_side-1.svg b/svg/left_side-1.svg
deleted file mode 100644
index 8487a029..00000000
--- a/svg/left_side-1.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/svg/left_side.svg b/svg/left_side.svg
index f8ed8202..8487a029 100644
--- a/svg/left_side.svg
+++ b/svg/left_side.svg
@@ -1,17 +1,17 @@
diff --git a/svg/left_tee.svg b/svg/left_tee.svg
new file mode 100644
index 00000000..f8ed8202
--- /dev/null
+++ b/svg/left_tee.svg
@@ -0,0 +1,17 @@
+
diff --git a/svg/lr_angle.svg b/svg/lr_angle.svg
index d0c09ad8..9b6beeed 100644
--- a/svg/lr_angle.svg
+++ b/svg/lr_angle.svg
@@ -4,7 +4,7 @@
-
+
diff --git a/svg/pencil-1.svg b/svg/pencil-1.svg
deleted file mode 100644
index 37d22355..00000000
--- a/svg/pencil-1.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
diff --git a/svg/pencil.svg b/svg/pencil.svg
index fd18fac3..37d22355 100644
--- a/svg/pencil.svg
+++ b/svg/pencil.svg
@@ -1,19 +1,19 @@
diff --git a/svg/person.svg b/svg/person.svg
new file mode 100644
index 00000000..e7d943b1
--- /dev/null
+++ b/svg/person.svg
@@ -0,0 +1,31 @@
+
diff --git a/svg/pin.svg b/svg/pin.svg
new file mode 100644
index 00000000..a24e6ebb
--- /dev/null
+++ b/svg/pin.svg
@@ -0,0 +1,31 @@
+
diff --git a/svg/plus.svg b/svg/plus.svg
new file mode 100644
index 00000000..fd18fac3
--- /dev/null
+++ b/svg/plus.svg
@@ -0,0 +1,19 @@
+