editor: better ways to find the bedstead executable.

Previously the editor just expected to find it in your cwd. Now by
default it looks in the same directory as its own script, which means
you can run it from some other directory.

Also, I've provided a command-line option to override the default, in
case you keep the executable somewhere else again.
This commit is contained in:
Simon Tatham 2024-10-13 10:50:37 +01:00 committed by Ben Harris
parent 384c5a305c
commit 4ce96879d8

36
editor
View File

@ -7,6 +7,21 @@
# Simon Tatham makes this program available under the CC0 Public
# Domain Dedication.
'''Interactive glyph editor for Bedstead.
Uses Python/Tk to display a window with a pixel grid on the left side,
where the user can click or drag to toggle pixels on and off, and on
the right, shows the output of the Bedstead smoothing algorithm
applied to that grid of pixels.
This is done by running the `bedstead` executable itself to compute
the smoothed outline, so a copy of that executable is required to use
this editor.
'''
import argparse
import os
import re
import sys
import string
@ -20,7 +35,9 @@ XSIZE, YSIZE = 5, 9
LEFT, TOP = 100, 700 # for transforming coordinates returned from bedstead
class EditorGui:
def __init__(self):
def __init__(self, bedstead):
self.bedstead = bedstead
self.tkroot = Tk()
self.canvas = Canvas(self.tkroot,
@ -75,7 +92,7 @@ class EditorGui:
self.polygons = []
data = subprocess.check_output(
["./bedstead"] + list(map(str, self.bitmap)))
[self.bedstead] + list(map(str, self.bitmap)))
paths = []
path = None
for line in data.splitlines():
@ -191,7 +208,20 @@ class EditorGui:
mainloop()
def main():
editor = EditorGui()
# By default, assume that the user ran 'make' in the bedstead
# source directory, so that the 'bedstead' executable is alongside
# the binary.
default_executable_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "bedstead")
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("--bedstead", default=default_executable_path,
help="Location of the 'bedstead' executable.")
args = parser.parse_args()
editor = EditorGui(args.bedstead)
editor.run()
if __name__ == '__main__':