Skip to content

Commit a455c35

Browse files
committed
layout,song: add more layout options
1 parent dd02183 commit a455c35

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

blitzloop/layout.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ def __init__(self, display):
7373
"early_limit": 5.0,
7474
"reverse_stagger": 1.5,
7575
"ruby_expand": 0,
76+
"margin_x": 0.07,
77+
"margin_y": 0.07,
78+
"line_spacing": 0.01,
7679
}
7780

7881
self.descender = 0
@@ -135,7 +138,8 @@ def add(self, molecule, get_atom_time, style, font, ruby_font):
135138

136139
new_ascender = font.ascender
137140
if ruby_font:
138-
new_ascender += ruby_font.ascender - ruby_font.descender
141+
ruby_spacing = style.ruby_spacing * (ruby_font.ascender - ruby_font.descender)
142+
new_ascender += ruby_spacing + ruby_font.ascender - ruby_font.descender
139143
self.ascender = max(self.ascender, new_ascender)
140144
self.descender = min(self.descender, font.descender)
141145

@@ -181,7 +185,7 @@ def add(self, molecule, get_atom_time, style, font, ruby_font):
181185
if atom.particles is not None and ruby_font:
182186
# ruby pen. we will adjust X later when centering over atom.
183187
ruby_px = 0
184-
ruby_py = self.display.round_coord(atom_y + font.ascender - ruby_font.descender)
188+
ruby_py = self.display.round_coord(atom_y + font.ascender - ruby_font.descender + ruby_spacing)
185189
ruby_prev_char = None
186190
ruby_glyphs = []
187191
par_step = step
@@ -251,10 +255,6 @@ def __init__(self, song_obj, variant, renderer):
251255
self.variant = song_obj.variants[variant]
252256
self.renderer = renderer
253257

254-
self.margin = 0.07
255-
self.rowspacing = 0.01
256-
self.wrapwidth = 1.0 - self.margin * 2
257-
258258
self.lines = {}
259259
self.fonts = {}
260260

@@ -431,7 +431,8 @@ def movetop(l):
431431

432432
max_ascender = max(l.ascender for l in lines)
433433
min_descender = min(l.descender for l in lines)
434-
row_height = max_ascender - min_descender + self.rowspacing
434+
max_spacing = max(l.layout_options["line_spacing"] for l in lines)
435+
row_height = (max_ascender - min_descender) + max_spacing
435436

436437
lastrow = 1 if top else -1
437438
max_end = 0
@@ -452,7 +453,7 @@ def movetop(l):
452453
l.align = 1.0 # right
453454
else:
454455
l.align = 0.5 # center
455-
l.x = self.margin + l.align * (self.wrapwidth - l.width)
456+
l.x = l.layout_options["margin_x"] + l.align * (1.0 - l.layout_options["margin_x"] * 2 - l.width)
456457
if max_end > l.start and prev_l:
457458
orig_start = l.start
458459
l.start = max(min(l.start, prev_l.lim_start), l.start - l.layout_options["early_limit"])
@@ -464,9 +465,9 @@ def movetop(l):
464465
max_end = max(max_end, l.end)
465466
lastrow = l.row
466467
if not top:
467-
l.y = self.margin - min_descender + row_height * l.row
468+
l.y = l.layout_options["margin_y"] - min_descender + row_height * l.row
468469
else:
469-
l.y = self.renderer.display.top - self.margin - max_ascender - row_height * l.row
470+
l.y = self.renderer.display.top - l.layout_options["margin_y"] - max_ascender - row_height * l.row
470471
prev_l = l
471472

472473
def draw(self, t, renderer):

blitzloop/mpvplayer.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,13 @@ def load_song(self, song):
162162
aspect = self._getprop("video-params/aspect")
163163

164164
if song.aspect:
165-
if song.aspect > aspect:
166-
nh = int(h * (aspect / song.aspect))
167-
self.mpv.set_property("vf", "crop=%d:%d" % (w, nh))
168-
elif aspect > song.aspect:
169-
nw = int(w * (song.aspect / aspect))
170-
self.mpv.set_property("vf", "crop=%d:%d" % (nw, h))
165+
if not song.no_crop:
166+
if song.aspect > aspect:
167+
nh = int(h * (aspect / song.aspect))
168+
self.mpv.set_property("vf", "crop=%d:%d" % (w, nh))
169+
elif aspect > song.aspect:
170+
nw = int(w * (song.aspect / aspect))
171+
self.mpv.set_property("vf", "crop=%d:%d" % (nw, h))
171172
self.aspect = song.aspect
172173
else:
173174
self.mpv.set_property("vf", "")

blitzloop/song.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ def __init__(self, data):
503503
self.ruby_font = None
504504
self.size = 16
505505
self.ruby_size = None
506+
self.ruby_spacing = 0
506507
self.outline_width = 0.1
507508
self.border_width = 0.8
508509
self.colors = ((255, 255, 255), (0, 128, 255), (0, 0, 0))
@@ -512,7 +513,7 @@ def __init__(self, data):
512513
for key, value in self.data.items():
513514
if key in ("font", "ruby_font"):
514515
setattr(self, key, value)
515-
elif key in ("size", "ruby_size", "outline_width", "border_width"):
516+
elif key in ("size", "ruby_size", "ruby_spacing", "outline_width", "border_width"):
516517
setattr(self, key, float(value))
517518
elif key in ("colors", "colors_on"):
518519
setattr(self, key, self._parse_colors(value))
@@ -546,7 +547,10 @@ def __init__(self, style=None, edge=BOTTOM):
546547
self.layout_options = {}
547548

548549
class Variant(object):
549-
LAYOUT_OPTIONS = ["early_limit", "reverse_stagger", "fade_in", "fade_out", "ruby_expand"]
550+
LAYOUT_OPTIONS = [
551+
"early_limit", "reverse_stagger", "fade_in", "fade_out", "ruby_expand",
552+
"margin_x", "margin_y", "line_spacing"
553+
]
550554
def __init__(self, data):
551555
self.data = data
552556
self.name = None
@@ -888,6 +892,13 @@ def aspect(self):
888892
else:
889893
return fractions.Fraction(self.song["aspect"])
890894

895+
@property
896+
def no_crop(self):
897+
if "no_crop" not in self.song:
898+
return False
899+
else:
900+
return bool(int(self.song["no_crop"]))
901+
891902
@property
892903
def channels(self):
893904
return int(self.song.get("channels", "1"))

0 commit comments

Comments
 (0)