Skip to content

Commit

Permalink
Merge pull request #100 from papr/seek_bar_refactor
Browse files Browse the repository at this point in the history
Seek bar refactor
  • Loading branch information
mkassner authored Mar 16, 2018
2 parents 1fc0213 + 3072d86 commit bd914c0
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 24 deletions.
2 changes: 1 addition & 1 deletion pyglui/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '1.19'
__version__ = '1.20'
66 changes: 43 additions & 23 deletions pyglui/custom.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,36 @@ cdef class Seek_Bar(UI_element):
0 Seek bar is not being hovered
'''

cdef double min_ts, mid_ts, max_ts
cdef int recent_idx
cdef double recent_ts, min_ts, mid_ts, max_ts
cdef Vec2 point_click_seek_loc
cdef readonly int hovering
cdef FitBox bar, seek_handle, trim_left_handle, trim_right_handle
cdef readonly bint seeking, trimming_left, trimming_right
cdef Synced_Value trim_left, trim_right, current, playback_speed
cdef object seeking_cb
cdef Synced_Value trim_left, trim_right, playback_speed
cdef object recent_idx_ts_getter, playback_time_setter, seeking_cb
cdef Timeline_Menu handle_start_reference
cdef Icon backwards, play, forwards

def __cinit__(self, object ctx, double min_ts, double max_ts, object seeking_cb,
Timeline_Menu handle_start_reference, *args, **kwargs):
def __cinit__(self, object sync_ctx,
double min_ts,
double max_ts,
object recent_idx_ts_getter,
object playback_time_setter,
object seeking_cb,
Timeline_Menu handle_start_reference,
*args, **kwargs):
self.uid = id(self)
self.trim_left = Synced_Value('trim_left_ts', ctx, trigger_overlay_only=True)
self.trim_right = Synced_Value('trim_right_ts', ctx, trigger_overlay_only=True)
self.current = Synced_Value('current_ts', ctx, trigger_overlay_only=True)
self.playback_speed = Synced_Value('playback_speed', ctx, trigger_overlay_only=True)
self.trim_left = Synced_Value('trim_left_ts', sync_ctx, trigger_overlay_only=True)
self.trim_right = Synced_Value('trim_right_ts', sync_ctx, trigger_overlay_only=True)
self.playback_speed = Synced_Value('playback_speed', sync_ctx, trigger_overlay_only=True)
self.recent_idx_ts_getter = recent_idx_ts_getter
self.playback_time_setter = playback_time_setter
self.seeking_cb = seeking_cb

self.recent_ts = min_ts
self.recent_idx = 0

self.min_ts = min_ts
self.max_ts = max_ts
self.mid_ts = (min_ts + max_ts) / 2
Expand All @@ -55,19 +67,19 @@ cdef class Seek_Bar(UI_element):
decr_pbs_icon = chr(0xE020)

def set_play(_):
ctx.play = not ctx.play
sync_ctx.play = not sync_ctx.play

self.backwards = Icon('backwards', ctx, label_font='pupil_icons',
label_getter=lambda: decr_pbs_icon if ctx.play else step_bwd_icon,
self.backwards = Icon('backwards', sync_ctx, label_font='pupil_icons',
label_getter=lambda: decr_pbs_icon if sync_ctx.play else step_bwd_icon,
getter=lambda: True,
hotkey=263) # 263 = glfw.GLFW_KEY_LEFT
self.forwards = Icon('forwards', ctx, label_font='pupil_icons',
label_getter=lambda: incr_pbs_icon if ctx.play else step_fwd_icon,
self.forwards = Icon('forwards', sync_ctx, label_font='pupil_icons',
label_getter=lambda: incr_pbs_icon if sync_ctx.play else step_fwd_icon,
hotkey=262, # 262 = glfw.GLFW_KEY_RIGHT
getter=lambda: True)

self.play = Icon('play', ctx, label_font='pupil_icons',
label_getter=lambda: pause_icon if ctx.play else play_icon,
self.play = Icon('play', sync_ctx, label_font='pupil_icons',
label_getter=lambda: pause_icon if sync_ctx.play else play_icon,
hotkey=32, # 32 = glfw.GLFW_KEY_SPACE
setter=set_play,
getter=lambda: True)
Expand All @@ -80,14 +92,20 @@ cdef class Seek_Bar(UI_element):
pass

cpdef sync(self):
global should_redraw_overlay
self.trim_left.sync()
self.trim_right.sync()
self.current.sync()
self.playback_speed.sync()
self.backwards.sync()
self.play.sync()
self.forwards.sync()

# test for value changes
recent_idx, recent_ts = self.recent_idx_ts_getter()
if self.recent_idx != recent_idx:
should_redraw_overlay = True
self.recent_idx, self.recent_ts = recent_idx, recent_ts

cpdef draw(self,FitBox parent,bint nested=True, bint parent_read_only = False):
self.outline.compute(parent)
self.outline.sketch(RGBA(0., 0., 0., 0.3))
Expand All @@ -101,10 +119,10 @@ cdef class Seek_Bar(UI_element):
self.forwards.draw(self.outline, nested=True, parent_read_only=False)

cdef FitBox handle = FitBox(Vec2(0., 0.), Vec2(0., 0.))
cdef double current_val = self.current.value

cdef double trim_left_val = self.trim_left.value
cdef double trim_right_val = self.trim_right.value
cdef double seek_x = clampmap(current_val, self.min_ts, self.max_ts, 0, self.bar.size.x)
cdef double seek_x = clampmap(self.recent_ts, self.min_ts, self.max_ts, 0, self.bar.size.x)
cdef double top_ext = self.handle_start_reference.element_space.org.y
cdef double bot_ext = self.bar.org.y + self.bar.size.y + 20 * ui_scale
cdef double selection_height = 5 * self.bar.size.y
Expand Down Expand Up @@ -145,10 +163,12 @@ cdef class Seek_Bar(UI_element):
# rect(self.trim_right_handle.org, self.trim_right_handle.size, RGBA(1., 0., 0., 0.2))

cdef basestring speed_str = '{}x'.format(self.playback_speed.value)
cdef basestring current_ts_str = self.format_ts(current_val)
cdef basestring current_ts_str = self.format_ts(self.recent_ts)
cdef basestring trim_left_str = self.format_ts(trim_left_val)
cdef basestring trim_right_str = self.format_ts(trim_right_val)

current_ts_str += ' – {:d}'.format(self.recent_idx)

cdef double trim_num_offset = 3. * ui_scale
cdef double time_y = self.bar.org.y - selection_height / 2 + 2*ui_scale
cdef double nums_y = self.play.button.org.y + self.play.button.size.y - seekbar_number_size * ui_scale / 3
Expand All @@ -161,7 +181,7 @@ cdef class Seek_Bar(UI_element):
glfont.set_blur(.1)
glfont.set_color_float((1., 1., 1., 1.))

if current_val < self.mid_ts:
if self.recent_ts < self.mid_ts:
glfont.set_align(fs.FONS_ALIGN_BOTTOM | fs.FONS_ALIGN_LEFT)
glfont.draw_text(self.bar.org.x + seek_x + 5*ui_scale, time_y, current_ts_str)
else:
Expand Down Expand Up @@ -199,7 +219,7 @@ cdef class Seek_Bar(UI_element):
if self.seeking and new_input.dm:
val = clampmap(new_input.m.x-self.bar.org.x, 0, self.bar.size.x,
self.min_ts, self.max_ts)
self.current.value = val
self.playback_time_setter(val)
should_redraw_overlay = True
elif self.trimming_right and new_input.dm:
val = clampmap(new_input.m.x-self.bar.org.x, 0, self.bar.size.x,
Expand Down Expand Up @@ -237,7 +257,7 @@ cdef class Seek_Bar(UI_element):
self.bar.size.x, self.min_ts, self.max_ts)
self.seeking = True
self.seeking_cb(True)
self.current.value = val
self.playback_time_setter(val)
self.hovering = 1
should_redraw_overlay = True

Expand Down

0 comments on commit bd914c0

Please sign in to comment.