Video is a Glimmer DSL for SWT Custom Widget for playing videos via the video
Glimmer DSL keyword.
Featured in Math Bowling 2
This has been tested and confirmed to be working on:
Add the following to a Glimmer DSL for SWT application Gemfile
:
gem 'glimmer-cw-video', '1.1.0'
Run:
jruby -S bundle
(or just bundle
if using RVM)
When reusing the video custom widget in a Glimmer DSL for SWT custom shell or custom widget, you can follow the same steps for a Glimmer DSL for SWT application, and then add a require statement to your library file:
require 'glimmer-cw-video'
# ... more require statements follow
Here are the options to pass in as hash arguments to the video
widget keyword (see in Samples):
autoplay
(true [default] or false): plays video automatically as soon as loadedcontrols
(true [default] or false): displays controlslooped
(true or false [default]): plays video in looped modebackground
(Glimmer color [default: white]): sets background color just like with any other widgetfit_to_width
(true [default] or false): fits video width to widget allotted width regardless of video's original size. Maintains video aspect ratio.fit_to_height
(true [default] or false): fits video height to widget allotted height regardless of video's original size. Maintains video aspect ratio.offset_x
(integer [default: 0]): offset from left border. Could be a negative number if you want to show only an area of the video. Useful when fit_to_width is false to pick an area of the video to display.offset_y
(integer [default: 0]): offset from top border. Could be a negative number if you want to show only an area of the video. Useful when fit_to_height is false to pick an area of the video to display.#play
: plays video#pause
: pauses video#toggle
: toggles video playback, playing if paused, and pausing if playing.#reload
: reloads video restarting from beginning#position
: position in seconds (and fractions)#position=
: seeks a new position in video#duration
: length of video, maximum video position possible#loaded?
: returns true when video has been initially loaded or reloaded#playing?
: returns true when video is actively playing#paused?
: returns true when video is not playing#ended?
: returns true when video has reached the end (position == duration)#volume
: returns video volume (0.0 - 1.0 float value)#volume=
: sets video volume (0.0 - 1.0 float value)#volume_up(value=0.05)
: bumps video volume up by a specified value or default#volume_down(value=0.05)
: bumps video volume down by a specified value or default#mute
: mutes video#unmute
: unmutes video#muted?
: returns true if video is muted#toggle_muted
: mutes/unmutes video depending on muted?
attribute(see in Samples)
on_loaded
: invoked when video #loaded?
becomes trueon_ended
: invoked when video #ended?
becomes trueon_playing
: invoked when video #playing?
becomes trueon_paused
: invoked when video #paused?
becomes trueRun this command after installing the gem to list available Video samples via the Glimmer Meta-Sample (note that you would have to restart the Glimmer Meta-Sample after every Video sample run because of an unresolved minor issue):
glimmer samples
Run from Glimmer Meta-Sample or by cloning this project and executing:
glimmer samples/video/hello_video.rb
Glimmer Code (from samples/video/hello_video.rb):
require_relative '../../lib/glimmer-cw-video'
include Glimmer
video_file = File.expand_path('../videos/Clouds_passing_by_CCBY_NatureClip.mp4', __FILE__)
shell {
text 'Hello, Video!'
minimum_size 384, 240
video(file: video_file)
}.open
Glimmer App:
Run from Glimmer Meta-Sample or by cloning this project and executing:
glimmer samples/video/hello_looped_video_with_black_background.rb
Glimmer Code (from samples/video/hello_looped_video_with_black_background.rb):
require_relative '../../lib/glimmer-cw-video'
include Glimmer
video_file = File.expand_path('../videos/Blackpool_Timelapse.mp4', __FILE__)
shell {
text 'Hello, Looped Video with Black Background!'
minimum_size 1024, 640
video(file: video_file, looped: true, background: :black)
}.open
Glimmer App:
Run from Glimmer Meta-Sample or by cloning this project and executing:
glimmer samples/video/hello_video_observers.rb
Glimmer Code (from samples/video/hello_video_observers.rb):
require_relative '../../lib/glimmer-cw-video'
include Glimmer
video_file = File.expand_path('../videos/Ants.mp4', __FILE__)
def display_video_status(video, status)
message_box {
text status
message "#{video.position.round(2)}/#{video.duration.round(2)} seconds have elapsed."
}.open
end
@shell = shell {
text 'Hello, Video Observers!'
minimum_size 800, 500
@video = video(file: video_file, background: :black) {
on_swt_show { |event|
# set focus as soon as the SWT widget is shown to grab keyboard events below
@video.set_focus
}
on_key_pressed { |event|
case event.keyCode
when swt(:space), swt(:cr)
@video.toggle
when swt(:arrow_left)
@video.rewind
when swt(:arrow_right)
@video.fast_forward
when swt(:arrow_up)
@video.volume_up
when swt(:arrow_down)
@video.volume_down
end
}
on_playing {
display_video_status(@video, 'Playing')
}
on_paused {
display_video_status(@video, 'Paused')
}
on_ended {
display_video_status(@video, 'Ended')
}
}
}
@shell.open
Glimmer App:
Dialog for video playing event:
Dialog for video paused event:
Dialog for video ended event:
Copyright (c) 2020-2023 - Andy Maleh.
--
Built for Glimmer DSL for SWT (JRuby Desktop Development GUI Framework).