epall-limelight 0.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/icons/icon.ico +0 -0
- data/bin/icons/icon_48.gif +0 -0
- data/bin/icons/limelight.icns +0 -0
- data/bin/limelight +5 -0
- data/bin/ll +10 -0
- data/bin/ll.bat +5 -0
- data/lib/init.rb +16 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +41 -0
- data/lib/limelight/builtin/players.rb +16 -0
- data/lib/limelight/builtin/players/button.rb +39 -0
- data/lib/limelight/builtin/players/check_box.rb +50 -0
- data/lib/limelight/builtin/players/combo_box.rb +89 -0
- data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
- data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
- data/lib/limelight/builtin/players/curtains.rb +23 -0
- data/lib/limelight/builtin/players/image.rb +54 -0
- data/lib/limelight/builtin/players/password_box.rb +34 -0
- data/lib/limelight/builtin/players/radio_button.rb +65 -0
- data/lib/limelight/builtin/players/stage_mover.rb +31 -0
- data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
- data/lib/limelight/builtin/players/text_area.rb +34 -0
- data/lib/limelight/builtin/players/text_box.rb +34 -0
- data/lib/limelight/builtin/styles.rb +35 -0
- data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
- data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
- data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
- data/lib/limelight/builtin/utilities_production/production.rb +62 -0
- data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
- data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
- data/lib/limelight/button_group_cache.rb +11 -0
- data/lib/limelight/casting_director.rb +112 -0
- data/lib/limelight/client/playbills.rb +86 -0
- data/lib/limelight/commands/command.rb +168 -0
- data/lib/limelight/commands/create_command.rb +98 -0
- data/lib/limelight/commands/freeze_command.rb +131 -0
- data/lib/limelight/commands/help_command.rb +61 -0
- data/lib/limelight/commands/open_command.rb +60 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/commands/unpack_command.rb +44 -0
- data/lib/limelight/commands/version_command.rb +31 -0
- data/lib/limelight/data.rb +37 -0
- data/lib/limelight/dsl/build_exception.rb +55 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/prop_builder.rb +155 -0
- data/lib/limelight/dsl/stage_builder.rb +105 -0
- data/lib/limelight/dsl/styles_builder.rb +157 -0
- data/lib/limelight/file_chooser.rb +68 -0
- data/lib/limelight/file_filter.rb +33 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +51 -0
- data/lib/limelight/java_couplings.rb +66 -0
- data/lib/limelight/java_util.rb +49 -0
- data/lib/limelight/limelight_exception.rb +24 -0
- data/lib/limelight/main.rb +108 -0
- data/lib/limelight/paint_action.rb +27 -0
- data/lib/limelight/pen.rb +83 -0
- data/lib/limelight/producer.rb +179 -0
- data/lib/limelight/production.rb +169 -0
- data/lib/limelight/prop.rb +367 -0
- data/lib/limelight/scene.rb +151 -0
- data/lib/limelight/specs/spec_helper.rb +87 -0
- data/lib/limelight/specs/test_scene_opener.rb +60 -0
- data/lib/limelight/stage.rb +292 -0
- data/lib/limelight/string.rb +38 -0
- data/lib/limelight/studio.rb +185 -0
- data/lib/limelight/styles.rb +347 -0
- data/lib/limelight/templates/production_templater.rb +49 -0
- data/lib/limelight/templates/scene_templater.rb +47 -0
- data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
- data/lib/limelight/templates/sources/production/init.rb.template +15 -0
- data/lib/limelight/templates/sources/production/production.rb.template +49 -0
- data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
- data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
- data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
- data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
- data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
- data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
- data/lib/limelight/templates/templater.rb +131 -0
- data/lib/limelight/templates/templater_logger.rb +39 -0
- data/lib/limelight/theater.rb +77 -0
- data/lib/limelight/util.rb +65 -0
- data/lib/limelight/util/downloader.rb +115 -0
- data/lib/limelight/version.rb +20 -0
- data/productions/examples/8thlight.com/about/about.txt +24 -0
- data/productions/examples/8thlight.com/about/props.rb +11 -0
- data/productions/examples/8thlight.com/about/styles.rb +2 -0
- data/productions/examples/8thlight.com/footer.rb +6 -0
- data/productions/examples/8thlight.com/home/props.rb +28 -0
- data/productions/examples/8thlight.com/home/styles.rb +2 -0
- data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
- data/productions/examples/8thlight.com/images/bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
- data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/header.jpg +0 -0
- data/productions/examples/8thlight.com/images/moses.jpg +0 -0
- data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
- data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
- data/productions/examples/8thlight.com/menu.rb +11 -0
- data/productions/examples/8thlight.com/services/props.rb +11 -0
- data/productions/examples/8thlight.com/services/services.txt +8 -0
- data/productions/examples/8thlight.com/services/styles.rb +2 -0
- data/productions/examples/8thlight.com/stages.rb +8 -0
- data/productions/examples/8thlight.com/styles.rb +210 -0
- data/productions/examples/calculator/players/button.rb +24 -0
- data/productions/examples/calculator/players/calculator.rb +15 -0
- data/productions/examples/calculator/players/calculator_model.rb +13 -0
- data/productions/examples/calculator/props.rb +23 -0
- data/productions/examples/calculator/styles.rb +36 -0
- data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
- data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
- data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
- data/productions/examples/langstons_ant/init.rb +4 -0
- data/productions/examples/langstons_ant/players/ant.rb +103 -0
- data/productions/examples/langstons_ant/players/log.rb +29 -0
- data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
- data/productions/examples/langstons_ant/players/world.rb +35 -0
- data/productions/examples/langstons_ant/props.rb +22 -0
- data/productions/examples/langstons_ant/styles.rb +104 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
- data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
- data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
- data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
- data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
- data/productions/examples/sandbox/alerts/props.rb +10 -0
- data/productions/examples/sandbox/alerts/styles.rb +46 -0
- data/productions/examples/sandbox/background_images/props.rb +22 -0
- data/productions/examples/sandbox/background_images/styles.rb +40 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
- data/productions/examples/sandbox/click_me/props.rb +8 -0
- data/productions/examples/sandbox/click_me/styles.rb +11 -0
- data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
- data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
- data/productions/examples/sandbox/floaters/props.rb +10 -0
- data/productions/examples/sandbox/floaters/styles.rb +24 -0
- data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
- data/productions/examples/sandbox/frameing/props.rb +35 -0
- data/productions/examples/sandbox/frameing/styles.rb +45 -0
- data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
- data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
- data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
- data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
- data/productions/examples/sandbox/gradients/props.rb +13 -0
- data/productions/examples/sandbox/gradients/styles.rb +47 -0
- data/productions/examples/sandbox/header.rb +22 -0
- data/productions/examples/sandbox/homer/players/homer.rb +24 -0
- data/productions/examples/sandbox/homer/props.rb +10 -0
- data/productions/examples/sandbox/homer/styles.rb +16 -0
- data/productions/examples/sandbox/images/arch.jpg +0 -0
- data/productions/examples/sandbox/images/beach.jpg +0 -0
- data/productions/examples/sandbox/images/homer.jpg +0 -0
- data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images/marilyn.jpg +0 -0
- data/productions/examples/sandbox/images/space.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +36 -0
- data/productions/examples/sandbox/images_scene/styles.rb +34 -0
- data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
- data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
- data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
- data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
- data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
- data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
- data/productions/examples/sandbox/inputs/props.rb +40 -0
- data/productions/examples/sandbox/inputs/styles.rb +39 -0
- data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
- data/productions/examples/sandbox/kiosk/props.rb +9 -0
- data/productions/examples/sandbox/kiosk/styles.rb +37 -0
- data/productions/examples/sandbox/players/sandbox.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
- data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
- data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
- data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
- data/productions/examples/sandbox/scrolling/props.rb +45 -0
- data/productions/examples/sandbox/scrolling/styles.rb +33 -0
- data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
- data/productions/examples/sandbox/sketching/props.rb +25 -0
- data/productions/examples/sandbox/sketching/styles.rb +35 -0
- data/productions/examples/sandbox/sounds/bird.au +0 -0
- data/productions/examples/sandbox/sounds/cat.au +0 -0
- data/productions/examples/sandbox/sounds/cow.au +0 -0
- data/productions/examples/sandbox/sounds/dog.au +0 -0
- data/productions/examples/sandbox/sounds/donkey.au +0 -0
- data/productions/examples/sandbox/sounds/duck.au +0 -0
- data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
- data/productions/examples/sandbox/sounds/props.rb +10 -0
- data/productions/examples/sandbox/sounds/styles.rb +17 -0
- data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
- data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
- data/productions/examples/sandbox/stage_handles/props.rb +17 -0
- data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
- data/productions/examples/sandbox/stages.rb +8 -0
- data/productions/examples/sandbox/styles.rb +35 -0
- data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
- data/productions/examples/sandbox/teaser/props.rb +14 -0
- data/productions/examples/sandbox/teaser/styles.rb +21 -0
- data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
- data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
- data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
- data/productions/playbills.lll +1 -0
- data/productions/stage_composer/init.rb +10 -0
- data/productions/stage_composer/inspector/players/inspector.rb +80 -0
- data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
- data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
- data/productions/stage_composer/inspector/players/style_table.rb +12 -0
- data/productions/stage_composer/inspector/players/style_value.rb +16 -0
- data/productions/stage_composer/inspector/props.rb +19 -0
- data/productions/stage_composer/inspector/styles.rb +71 -0
- data/productions/stage_composer/lib/init.rb +5 -0
- data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
- data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
- data/productions/stage_composer/production.rb +6 -0
- data/productions/stage_composer/stages.rb +15 -0
- data/productions/startup/images/logo.png +0 -0
- data/productions/startup/images/splash.png +0 -0
- data/productions/startup/production.rb +52 -0
- data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/startup/spec/spec_helper.rb +8 -0
- data/productions/startup/stages.rb +9 -0
- data/productions/startup/styles.rb +15 -0
- data/productions/startup/welcome/players/browse_button.rb +10 -0
- data/productions/startup/welcome/players/download_button.rb +17 -0
- data/productions/startup/welcome/players/sandbox_button.rb +11 -0
- data/productions/startup/welcome/props.rb +23 -0
- data/productions/startup/welcome/styles.rb +103 -0
- data/spec/limelight/builtin/players/button_spec.rb +20 -0
- data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/image_spec.rb +43 -0
- data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
- data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
- data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
- data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
- data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
- data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
- data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
- data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
- data/spec/limelight/casting_director_spec.rb +164 -0
- data/spec/limelight/client/playbills_spec.rb +79 -0
- data/spec/limelight/commands/command_spec.rb +26 -0
- data/spec/limelight/commands/create_command_spec.rb +108 -0
- data/spec/limelight/commands/freeze_command_spec.rb +143 -0
- data/spec/limelight/commands/help_command_spec.rb +42 -0
- data/spec/limelight/commands/open_command_spec.rb +52 -0
- data/spec/limelight/commands/pack_command_spec.rb +26 -0
- data/spec/limelight/commands/unpack_command_spec.rb +47 -0
- data/spec/limelight/data_spec.rb +36 -0
- data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
- data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
- data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
- data/spec/limelight/file_chooser_spec.rb +64 -0
- data/spec/limelight/file_filter_spec.rb +29 -0
- data/spec/limelight/file_loader_spec.rb +28 -0
- data/spec/limelight/gems_spec.rb +92 -0
- data/spec/limelight/java_util_spec.rb +37 -0
- data/spec/limelight/main_spec.rb +40 -0
- data/spec/limelight/paint_action_spec.rb +30 -0
- data/spec/limelight/pen_spec.rb +62 -0
- data/spec/limelight/producer_spec.rb +210 -0
- data/spec/limelight/production_spec.rb +100 -0
- data/spec/limelight/prop_spec.rb +431 -0
- data/spec/limelight/scene_spec.rb +173 -0
- data/spec/limelight/stage_spec.rb +202 -0
- data/spec/limelight/string_spec.rb +38 -0
- data/spec/limelight/studio_spec.rb +157 -0
- data/spec/limelight/styles_spec.rb +53 -0
- data/spec/limelight/templates/production_templater_spec.rb +66 -0
- data/spec/limelight/templates/scene_templater_spec.rb +51 -0
- data/spec/limelight/templates/templater_logger_spec.rb +41 -0
- data/spec/limelight/templates/templater_spec.rb +107 -0
- data/spec/limelight/theater_spec.rb +72 -0
- data/spec/limelight/util/downloader_spec.rb +92 -0
- data/spec/spec_helper.rb +70 -0
- metadata +335 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
#- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
|
+
|
4
|
+
require 'limelight/pen'
|
5
|
+
|
6
|
+
module Limelight
|
7
|
+
|
8
|
+
# A PaintAction is created by Prop.after_painting.
|
9
|
+
#
|
10
|
+
class PaintAction #:nodoc:
|
11
|
+
|
12
|
+
include UI::Painting::PaintAction
|
13
|
+
|
14
|
+
attr_reader :block
|
15
|
+
|
16
|
+
def initialize(&block)
|
17
|
+
@block = block
|
18
|
+
end
|
19
|
+
|
20
|
+
def invoke(graphics)
|
21
|
+
pen = Pen.new(graphics)
|
22
|
+
@block.call(pen)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
|
+
|
4
|
+
module Limelight
|
5
|
+
|
6
|
+
# The Pen is acquired from Prop.pen. It is used to draw directly on the screen withing the bounds of the prop
|
7
|
+
# from which the Pen was acquired.
|
8
|
+
#
|
9
|
+
# All points used by the Pen are relative to the bounds of the Prop. The top left corner of the Prop is represented
|
10
|
+
# by the point (0, 0). If a Prop has margin, border, or padding, the point (0, 0) may appear to be outside the Prop.
|
11
|
+
#
|
12
|
+
class Pen
|
13
|
+
|
14
|
+
attr_accessor :context
|
15
|
+
|
16
|
+
# It is constructed with a context which is essentially a java.awt.Graphic2D object. Defaults are set:
|
17
|
+
# * color = "black"
|
18
|
+
# * width = 1
|
19
|
+
# * smooth = false
|
20
|
+
#
|
21
|
+
def initialize(context)
|
22
|
+
@context = context
|
23
|
+
self.color = "black"
|
24
|
+
self.width = 1
|
25
|
+
self.smooth = false
|
26
|
+
end
|
27
|
+
|
28
|
+
# Sets the color of the Pen. The passed value should be a string that either names a known color or specifies
|
29
|
+
# a hex color value.
|
30
|
+
#
|
31
|
+
def color=(value)
|
32
|
+
resolve_color = Util::Colors.resolve(value)
|
33
|
+
@context.setColor(resolve_color)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Sets the width, in pixels, of the pen.
|
37
|
+
#
|
38
|
+
def width=(value)
|
39
|
+
@context.setStroke(java.awt.BasicStroke.new(value))
|
40
|
+
end
|
41
|
+
|
42
|
+
# Specifies whether the pen will use anti-aliasing to draw smooth shapes or not. Shapes will appear pixilated when
|
43
|
+
# smooth is set to false.
|
44
|
+
#
|
45
|
+
def smooth=(value)
|
46
|
+
hint = value ? java.awt.RenderingHints::VALUE_ANTIALIAS_ON : java.awt.RenderingHints::VALUE_ANTIALIAS_OFF
|
47
|
+
@context.setRenderingHint(java.awt.RenderingHints::KEY_ANTIALIASING, hint)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Draws a line from the point (x1, y1) to the point (x2, y2)
|
51
|
+
#
|
52
|
+
def draw_line(x1, y1, x2, y2)
|
53
|
+
@context.drawLine(x1, y1, x2, y2)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Draws a rectangle with the top left corner at (x, y).
|
57
|
+
#
|
58
|
+
def draw_rectangle(x, y, width, height)
|
59
|
+
@context.drawRect(x, y, width, height)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Fills a rectangle with the current color of the Pen. The top left corner of the rectangle is (x, y).
|
63
|
+
#
|
64
|
+
def fill_rectangle(x, y, width, height)
|
65
|
+
@context.fillRect(x, y, width, height)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Draws the largest oval that will fit in the specified rectangle. The top left corner of the bounding
|
69
|
+
# rectangle is at (x, y). The center of the oval will be at (x + width/2, y + height/2).
|
70
|
+
#
|
71
|
+
def draw_oval(x, y, width, height)
|
72
|
+
@context.drawOval(x, y, width, height)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Fills an oval specified by the bounding rectangle. See draw_oval.
|
76
|
+
#
|
77
|
+
def fill_oval(x, y, width, height)
|
78
|
+
@context.fillOval(x, y, width, height)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
#- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
|
+
|
4
|
+
require 'limelight/file_loader'
|
5
|
+
require 'limelight/dsl/prop_builder'
|
6
|
+
require 'limelight/dsl/styles_builder'
|
7
|
+
require 'limelight/dsl/stage_builder'
|
8
|
+
require 'limelight/casting_director'
|
9
|
+
require 'limelight/stage'
|
10
|
+
require 'limelight/dsl/build_exception'
|
11
|
+
require 'limelight/theater'
|
12
|
+
require 'limelight/production'
|
13
|
+
require 'limelight/gems'
|
14
|
+
require 'limelight/util/downloader'
|
15
|
+
require 'limelight/version'
|
16
|
+
|
17
|
+
module Limelight
|
18
|
+
|
19
|
+
# A Producer has the hefty responsibility of producing Productions. Given a directory, it will load the neccessary
|
20
|
+
# files and create all the neccessary objects to bring a Production to life.
|
21
|
+
#
|
22
|
+
# For directory structures, see Limelight::Main
|
23
|
+
#
|
24
|
+
class Producer
|
25
|
+
|
26
|
+
# Creates a new Producer and has it open a Production by specified name.
|
27
|
+
#
|
28
|
+
def self.open(production_name, options={})
|
29
|
+
producer = new(production_name)
|
30
|
+
begin
|
31
|
+
producer.open(options)
|
32
|
+
rescue Exception => e
|
33
|
+
puts e
|
34
|
+
puts e.backtrace
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :theater, :production
|
39
|
+
attr_writer :builtin_styles
|
40
|
+
|
41
|
+
# A Production name, or root directory, must be provided. If not Theater is provided, one will be created.
|
42
|
+
# You may also provide an existing Production for which this Producer will interact.
|
43
|
+
#
|
44
|
+
def initialize(root_path, theater=nil, production=nil)
|
45
|
+
if (root_path[-4..-1] == ".lll")
|
46
|
+
url = IO.read(root_path).strip
|
47
|
+
root_path = Util::Downloader.download(url)
|
48
|
+
end
|
49
|
+
if (root_path[-4..-1] == ".llp")
|
50
|
+
root_path = unpack_production(root_path)
|
51
|
+
end
|
52
|
+
@production = production || Production.new(root_path)
|
53
|
+
@theater = theater.nil? ? Theater.new : theater
|
54
|
+
establish_production
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns true if the production's minimum_limelight_version is compatible with the current version.
|
58
|
+
#
|
59
|
+
def version_compatible?
|
60
|
+
current_version = Limelight::Util::Version.new(Limelight::VERSION::STRING)
|
61
|
+
required_version = Limelight::Util::Version.new(@production.minimum_limelight_version)
|
62
|
+
return required_version.is_less_than_or_equal(current_version)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns the CastingDirector for this Production.
|
66
|
+
#
|
67
|
+
def casting_director
|
68
|
+
@casting_director = CastingDirector.new(@production.root) if not @casting_director
|
69
|
+
return @casting_director
|
70
|
+
end
|
71
|
+
|
72
|
+
# Loads the Production without opening it. The Production will be created into memory with all it's stages
|
73
|
+
#
|
74
|
+
def load(options = {})
|
75
|
+
Gems.install_gems_in_production(@production)
|
76
|
+
Kernel.load(@production.init_file) if ( !options[:ignore_init] && File.exists?(@production.init_file) )
|
77
|
+
load_stages if File.exists?(@production.stages_file)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Opens the Production.
|
81
|
+
#
|
82
|
+
def open(options = {})
|
83
|
+
return unless version_compatible? || Studio.utilities_production.proceed_with_incompatible_version?(@production.name, @production.minimum_limelight_version)
|
84
|
+
@production.production_opening
|
85
|
+
load
|
86
|
+
@production.production_loaded
|
87
|
+
if @theater.has_stages?
|
88
|
+
@theater.stages.each do |stage|
|
89
|
+
open_scene(stage.default_scene.to_s, stage) if stage.default_scene
|
90
|
+
end
|
91
|
+
elsif @production.default_scene
|
92
|
+
open_scene(@production.default_scene, @theater.default_stage)
|
93
|
+
end
|
94
|
+
@casting_director = nil
|
95
|
+
@production.production_opened
|
96
|
+
end
|
97
|
+
|
98
|
+
# Opens the specified Scene onto the Spcified Stage.
|
99
|
+
#
|
100
|
+
def open_scene(name, stage, options={})
|
101
|
+
path = @production.scene_directory(name)
|
102
|
+
scene_name = File.basename(path)
|
103
|
+
scene = load_props(options.merge(:production => @production, :casting_director => casting_director, :path => path, :name => scene_name))
|
104
|
+
styles = load_styles(scene)
|
105
|
+
scene.styles = styles
|
106
|
+
stage.open(scene)
|
107
|
+
return scene
|
108
|
+
end
|
109
|
+
|
110
|
+
# Loads the 'stages.rb' file and configures all the Stages in the Production.
|
111
|
+
#
|
112
|
+
def load_stages
|
113
|
+
stages_file = @production.stages_file
|
114
|
+
content = IO.read(stages_file)
|
115
|
+
stages = Limelight.build_stages(@theater) do
|
116
|
+
begin
|
117
|
+
eval content
|
118
|
+
rescue Exception => e
|
119
|
+
raise DSL::BuildException.new(stages_file, content, e)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
return stages
|
123
|
+
end
|
124
|
+
|
125
|
+
# Loads of the 'props.rb' file for a particular Scene and creates all the Prop objects and Scene.
|
126
|
+
#
|
127
|
+
def load_props(options = {})
|
128
|
+
scene = Scene.new(options)
|
129
|
+
if File.exists?(scene.props_file)
|
130
|
+
content = IO.read(scene.props_file)
|
131
|
+
options[:build_loader] = @production.root
|
132
|
+
return Limelight.build_props(scene, options) do
|
133
|
+
begin
|
134
|
+
eval content
|
135
|
+
rescue Exception => e
|
136
|
+
raise DSL::BuildException.new(scene.props_file, content, e)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
else
|
140
|
+
return scene
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Loads the specified 'styles.rb' file and created a Hash of Styles.
|
145
|
+
#
|
146
|
+
def load_styles(context)
|
147
|
+
extendable_styles = Studio.builtin_styles.merge(@production.root_styles)
|
148
|
+
return extendable_styles.dup if not File.exists?(context.styles_file)
|
149
|
+
new_styles = Limelight.build_styles_from_file(context.styles_file, extendable_styles)
|
150
|
+
return extendable_styles.merge(new_styles)
|
151
|
+
end
|
152
|
+
|
153
|
+
def establish_production #:nodoc:
|
154
|
+
@production.producer = self
|
155
|
+
@production.theater = @theater
|
156
|
+
|
157
|
+
production_file = @production.production_file
|
158
|
+
if File.exists?(production_file)
|
159
|
+
tmp_module = Module.new
|
160
|
+
content = IO.read(production_file)
|
161
|
+
tmp_module.module_eval(content, production_file)
|
162
|
+
production_module = tmp_module.const_get("Production")
|
163
|
+
raise "production.rb should define a module named 'Production'" if production_module.nil?
|
164
|
+
@production.extend(production_module)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
private ###############################################
|
169
|
+
|
170
|
+
def unpack_production(production_name)
|
171
|
+
packer = Limelight::Util::Packer.new()
|
172
|
+
dest_dir = File.join(Data.productions_dir, rand.to_s.sub("0.", ""))
|
173
|
+
Dir.mkdir(dest_dir)
|
174
|
+
return packer.unpack(production_name, dest_dir)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
#- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
|
+
|
4
|
+
require 'limelight/limelight_exception'
|
5
|
+
require 'limelight/file_loader'
|
6
|
+
require 'limelight/studio'
|
7
|
+
require 'drb'
|
8
|
+
|
9
|
+
module Limelight
|
10
|
+
|
11
|
+
# The root object of Limelight Production. Every Prop in a production has access to its Production object.
|
12
|
+
# Therefore it is typical to store reasources in the Production.
|
13
|
+
#
|
14
|
+
# Productions are configured, and attributes are added, by the ProductionBuilder.
|
15
|
+
#
|
16
|
+
class Production
|
17
|
+
|
18
|
+
class << self
|
19
|
+
|
20
|
+
def [](name) #:nodoc:
|
21
|
+
return Studio[name]
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :name, :root
|
27
|
+
attr_accessor :producer, :theater
|
28
|
+
|
29
|
+
# Users typically need not create Production objects.
|
30
|
+
#
|
31
|
+
def initialize(path)
|
32
|
+
@root = FileLoader.for_root(path)
|
33
|
+
@name = File.basename(path)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Sets the name of the Production. The name must be unique amongst all Productions in memory.
|
37
|
+
#
|
38
|
+
def name=(value)
|
39
|
+
Studio.error_if_duplicate_name(value)
|
40
|
+
@name = value
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return the path to the root directory of the production
|
44
|
+
#
|
45
|
+
def path
|
46
|
+
return @root.root
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the path to the production's init file
|
50
|
+
#
|
51
|
+
def init_file
|
52
|
+
return @root.path_to("init.rb")
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the path to the production's production.rb file
|
56
|
+
#
|
57
|
+
def production_file
|
58
|
+
return @root.path_to("production.rb")
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns the path to the production's stages file
|
62
|
+
#
|
63
|
+
def stages_file
|
64
|
+
return @root.path_to("stages.rb")
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns the path to the production's styles file
|
68
|
+
#
|
69
|
+
def styles_file
|
70
|
+
return @root.path_to("styles.rb")
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns the path to the production's gems directory
|
74
|
+
#
|
75
|
+
def gems_directory
|
76
|
+
return @root.path_to("__resources/gems/gems")
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns the path to the productions gems root
|
80
|
+
#
|
81
|
+
def gems_root
|
82
|
+
return @root.path_to("__resources/gems")
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the path to the named Scene's directory within the Production
|
86
|
+
#
|
87
|
+
def scene_directory(name)
|
88
|
+
return @root.root if name == :root
|
89
|
+
return @root.path_to(name)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Returns the minimum version of limelight required to run this production. Default: "0.0.0"
|
93
|
+
# If the version of limelight used to open this production is less than the minimum,
|
94
|
+
# an error will be displayed (starting with version 0.4.0).
|
95
|
+
#
|
96
|
+
def minimum_limelight_version
|
97
|
+
return "0.0.0"
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns true if the production allows itself to be closed. The system will call this methods when
|
101
|
+
# it wishes to close the production, perhaps when the user quits the application. By default the production
|
102
|
+
# will always return true.
|
103
|
+
#
|
104
|
+
def allow_close?
|
105
|
+
return true
|
106
|
+
end
|
107
|
+
|
108
|
+
# Called when the production is about to be opened. The default implementation does nothing but you may re-implement
|
109
|
+
# it in the production.rb file.
|
110
|
+
#
|
111
|
+
def production_opening
|
112
|
+
end
|
113
|
+
|
114
|
+
# Called when the production has been loaded. That is, when all the gems have been loaded stages have been
|
115
|
+
# instantiated.
|
116
|
+
#
|
117
|
+
def production_loaded
|
118
|
+
end
|
119
|
+
|
120
|
+
# Called when the production is fully opened. The default implementation does nothing but you may re-implement
|
121
|
+
# it in the production.rb file.
|
122
|
+
#
|
123
|
+
def production_opened
|
124
|
+
end
|
125
|
+
|
126
|
+
# Called when the production is about to be closed. The default implementation does nothing but you may re-implement
|
127
|
+
# it in the production.rb file.
|
128
|
+
#
|
129
|
+
def production_closing
|
130
|
+
end
|
131
|
+
|
132
|
+
# Called when the production is fully closed. The default implementation does nothing but you may re-implement
|
133
|
+
# it in the production.rb file.
|
134
|
+
#
|
135
|
+
def production_closed
|
136
|
+
end
|
137
|
+
|
138
|
+
# Closes the production. If there are no more productions open, the Limelight runtime will shutdown.
|
139
|
+
#
|
140
|
+
def close
|
141
|
+
self.production_closing
|
142
|
+
Studio.production_closed(self)
|
143
|
+
self.production_closed
|
144
|
+
end
|
145
|
+
|
146
|
+
# Returned the name of the default scene. This is only used when there are not stages defined in the production.
|
147
|
+
# Defaults to :root, the production's root directory is the default scene. Return nil if there are not defaults.
|
148
|
+
#
|
149
|
+
def default_scene
|
150
|
+
return :root
|
151
|
+
end
|
152
|
+
|
153
|
+
# A production with multiple Scenes may have a 'styles.rb' file in the root directory. This is called the
|
154
|
+
# root_styles. This method loads the root_styles, if they haven't already been loaded, and returns them.
|
155
|
+
#
|
156
|
+
def root_styles
|
157
|
+
unless @root_styles
|
158
|
+
if File.exists?(styles_file)
|
159
|
+
@root_styles = Limelight.build_styles_from_file(styles_file)
|
160
|
+
else
|
161
|
+
@root_styles = {}
|
162
|
+
end
|
163
|
+
end
|
164
|
+
return @root_styles
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|