mirror of
https://github.com/quantum5/win2xcur.git
synced 2025-06-07 13:29:37 -04:00
Compare commits
3 commits
0820eda840
...
e686d3750e
Author | SHA1 | Date | |
---|---|---|---|
|
e686d3750e | ||
|
10804a68c8 | ||
|
02e58f0719 |
|
@ -28,13 +28,13 @@ For example, if you want to convert [the sample cursor](sample/crosshair.cur)
|
|||
to Linux format:
|
||||
|
||||
mkdir output/
|
||||
win2xcur sample/crosshair.cur -o output/
|
||||
win2xcur sample/crosshair.cur -o output/ --size 32 48 64
|
||||
|
||||
`-s` can be specified to enable shadows.
|
||||
Multiple cursors files can be specified on the command line.
|
||||
For example, to convert a directory of cursors with shadows enabled:
|
||||
|
||||
win2xcur input/*.{ani,cur} -o output/
|
||||
win2xcur input/*.{ani,cur} -o output/ --size 32 48 64
|
||||
|
||||
For more information, run `win2xcur --help`.
|
||||
|
||||
|
@ -43,7 +43,7 @@ For more information, run `win2xcur --help`.
|
|||
For example, if you want to convert DMZ-White to Windows:
|
||||
|
||||
mkdir dmz-white/
|
||||
x2wincur /usr/share/icons/DMZ-White/cursors/* -o dmz-white/
|
||||
x2wincur /usr/share/icons/DMZ-White/cursors/* -o dmz-white/ --size 32 48 64
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
|
|
@ -32,10 +32,10 @@ def main() -> None:
|
|||
help='y-offset of shadow (as fraction of height)')
|
||||
parser.add_argument('-c', '--shadow-color', default='#000000',
|
||||
help='color of the shadow')
|
||||
parser.add_argument('--scale', default=None, type=str,
|
||||
parser.add_argument('--scale', nargs='*', type=float, default=None,
|
||||
help='Scale the cursor by the specified factor. Multi-scale "[0.125,0.1875,0.25]"')
|
||||
parser.add_argument('--size', default=None, type=str,
|
||||
help='Scale the cursor to the specified size. Multi-size "[32,28,64]"')
|
||||
parser.add_argument('--size', nargs='*', type=int, default=None,
|
||||
help='Scale the cursor to the specified size. Multi-size "[32,48,64]"')
|
||||
|
||||
args = parser.parse_args()
|
||||
print_lock = Lock()
|
||||
|
@ -51,17 +51,11 @@ def main() -> None:
|
|||
traceback.print_exc()
|
||||
else:
|
||||
if args.scale:
|
||||
scales = eval(args.scale)
|
||||
if isinstance(scales, (int, float)):
|
||||
scale.apply_to_frames(cursor.frames, scale=scales)
|
||||
else:
|
||||
cursor.frames = scale.apply_to_frames_MS(cursor.frames, scales=scales)
|
||||
cursor.frames = scale.apply_to_frames_by_scales(cursor.frames, scales=args.scale)
|
||||
elif args.size:
|
||||
sizes = eval(args.size)
|
||||
if isinstance(sizes, (int, float)):
|
||||
scale.apply_to_frames(cursor.frames, size=sizes)
|
||||
else:
|
||||
cursor.frames = scale.apply_to_frames_MS(cursor.frames, sizes=sizes)
|
||||
cursor.frames = scale.apply_to_frames_to_sizes(cursor.frames, sizes=args.size)
|
||||
else:
|
||||
raise NotImplementedError('Please specify either --scale or --size')
|
||||
|
||||
if args.shadow:
|
||||
shadow.apply_to_frames(cursor.frames, color=args.shadow_color, radius=args.shadow_radius,
|
||||
|
|
|
@ -18,9 +18,9 @@ def main() -> None:
|
|||
help='X11 cursor files to convert (no extension)')
|
||||
parser.add_argument('-o', '--output', '--output-dir', default=os.curdir,
|
||||
help='Directory to store converted cursor files.')
|
||||
parser.add_argument('-S', '--scale', default=None, type=str,
|
||||
parser.add_argument('-S', '--scale', nargs='*', type=float, default=None,
|
||||
help='Scale the cursor by the specified factor. Multi-scale "[0.125,0.1875,0.25]"')
|
||||
parser.add_argument('--size', default=None, type=str,
|
||||
parser.add_argument('--size', nargs='*', type=int, default=None,
|
||||
help='Scale the cursor to the specified size. Multi-size "[32,28,64]"')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
@ -37,17 +37,11 @@ def main() -> None:
|
|||
traceback.print_exc()
|
||||
else:
|
||||
if args.scale:
|
||||
scales = eval(args.scale)
|
||||
if isinstance(scales, (int, float)):
|
||||
scale.apply_to_frames(cursor.frames, scale=scales)
|
||||
else:
|
||||
cursor.frames = scale.apply_to_frames_MS(cursor.frames, scales=scales)
|
||||
cursor.frames = scale.apply_to_frames_by_scales(cursor.frames, scales=args.scale)
|
||||
elif args.size:
|
||||
sizes = eval(args.size)
|
||||
if isinstance(sizes, (int, float)):
|
||||
scale.apply_to_frames(cursor.frames, size=sizes)
|
||||
else:
|
||||
cursor.frames = scale.apply_to_frames_MS(cursor.frames, sizes=sizes)
|
||||
cursor.frames = scale.apply_to_frames_to_sizes(cursor.frames, sizes=args.size)
|
||||
else:
|
||||
raise NotImplementedError('Please specify either --scale or --size')
|
||||
|
||||
ext, result = to_smart(cursor.frames)
|
||||
output = os.path.join(args.output, os.path.basename(name) + ext)
|
||||
|
|
|
@ -2,32 +2,35 @@ from typing import List
|
|||
|
||||
from win2xcur.cursor import CursorFrame
|
||||
|
||||
def apply_to_frames_by_scales(frames: List[CursorFrame], *, scales: List[float] = None) -> List[CursorFrame]:
|
||||
all_frames = []
|
||||
for scale in scales:
|
||||
for frame in frames:
|
||||
frame = frame.clone()
|
||||
for cursor in frame:
|
||||
cursor.image.scale(
|
||||
int(round(cursor.image.width * scale)),
|
||||
int(round(cursor.image.height * scale)),
|
||||
)
|
||||
cursor.nominal = int(cursor.nominal * scale)
|
||||
hx, hy = cursor.hotspot
|
||||
cursor.hotspot = (int(hx * scale), int(hy * scale))
|
||||
all_frames.append(frame)
|
||||
return all_frames
|
||||
|
||||
def apply_to_frames(frames: List[CursorFrame], *, scale: float = None, size: int = None) -> None:
|
||||
for frame in frames:
|
||||
for cursor in frame:
|
||||
if size:
|
||||
def apply_to_frames_to_sizes(frames: List[CursorFrame], *, sizes: List[int] = None) -> List[CursorFrame]:
|
||||
all_frames = []
|
||||
for size in sizes:
|
||||
for frame in frames:
|
||||
frame = frame.clone()
|
||||
for cursor in frame:
|
||||
scale = size / cursor.image.width
|
||||
cursor.image.scale(
|
||||
size or int(round(cursor.image.width * scale)),
|
||||
size or int(round(cursor.image.height * scale)),
|
||||
)
|
||||
cursor.nominal = int(cursor.nominal * scale)
|
||||
hx, hy = cursor.hotspot
|
||||
cursor.hotspot = (int(hx * scale), int(hy * scale))
|
||||
|
||||
|
||||
def apply_to_frames_MS(frames: List[CursorFrame], *, scales: List[float] = None,
|
||||
sizes: List[int] = None) -> List[CursorFrame]:
|
||||
frames_MS = []
|
||||
if scales is not None:
|
||||
for scale in scales:
|
||||
frames_s = [frame.clone() for frame in frames]
|
||||
apply_to_frames(frames_s, scale=scale)
|
||||
frames_MS.extend(frames_s)
|
||||
else:
|
||||
for size in sizes:
|
||||
frames_s = [frame.clone() for frame in frames]
|
||||
apply_to_frames(frames_s, size=size)
|
||||
frames_MS.extend(frames_s)
|
||||
return frames_MS
|
||||
cursor.image.scale(
|
||||
size,
|
||||
size,
|
||||
)
|
||||
cursor.nominal = int(cursor.nominal * scale)
|
||||
hx, hy = cursor.hotspot
|
||||
cursor.hotspot = (int(hx * scale), int(hy * scale))
|
||||
all_frames.append(frame)
|
||||
return all_frames
|
||||
|
|
Loading…
Reference in a new issue