scarpe 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -1
- data/CHANGELOG.md +36 -4
- data/Gemfile +2 -1
- data/Gemfile.lock +13 -3
- data/LICENSE.txt +7 -1
- data/README.md +77 -14
- data/Rakefile +67 -0
- data/examples/Edit_box_Styles.rb +8 -0
- data/examples/Kerning.rb +7 -0
- data/examples/border.rb +11 -0
- data/examples/check.rb +2 -0
- data/examples/download_and_show_image.rb +3 -0
- data/examples/flags/finland.rb +15 -0
- data/examples/flags/italy.rb +11 -0
- data/examples/flags/mauritius.rb +14 -0
- data/examples/font_family.rb +17 -0
- data/examples/font_shorthand.rb +9 -0
- data/examples/gen.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/append.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/background_change.rb +12 -0
- data/examples/legacy/not_checked/shoes-manual/background_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/basic_app.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/border.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/FONTS.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_color.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_open_file.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/ask_save_folder.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/confirm.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/debug.rb +2 -0
- data/examples/legacy/not_checked/shoes-manual/builtins/info.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/button.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/clear.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/custom_header.rb +13 -0
- data/examples/legacy/not_checked/shoes-manual/displace.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/edit_box.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/fill_pattern.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/fonts.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/gutter.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/image_web.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/keypress.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/list_box.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/motion.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/mouse.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/move.rb +14 -0
- data/examples/legacy/not_checked/shoes-manual/nested_ovals.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/oval.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/ovals.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/ovals_image.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/prepend.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/progress_bar.rb +10 -0
- data/examples/legacy/not_checked/shoes-manual/radio.rb +18 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_1.rb +7 -0
- data/examples/legacy/not_checked/shoes-manual/radio_alternative_2.rb +9 -0
- data/examples/legacy/not_checked/shoes-manual/rotate_rectangle.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/shape.rb +11 -0
- data/examples/legacy/not_checked/shoes-manual/static/avatar.png +0 -0
- data/examples/legacy/not_checked/shoes-manual/stroke.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style.rb +3 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_1.rb +4 -0
- data/examples/legacy/not_checked/shoes-manual/style_alternative_2.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/style_length.rb +5 -0
- data/examples/legacy/not_checked/shoes-manual/timer.rb +6 -0
- data/examples/legacy/not_checked/shoes-manual/trigger_window.rb +8 -0
- data/examples/legacy/not_checked/shoes-manual/window_owner.rb +8 -0
- data/examples/legacy/working/shoes_manual/alert_button.rb +2 -0
- data/examples/legacy/working/shoes_manual/animate.rb +7 -0
- data/examples/legacy/working/shoes_manual/background_para.rb +4 -0
- data/examples/legacy/working/shoes_manual/button_alternative.rb +7 -0
- data/examples/legacy/working/shoes_manual/checkbox.rb +17 -0
- data/examples/legacy/working/shoes_manual/download.rb +12 -0
- data/examples/legacy/working/shoes_manual/edit_box.rb +6 -0
- data/examples/legacy/working/shoes_manual/editline.rb +7 -0
- data/examples/legacy/working/shoes_manual/fixed_height.rb +8 -0
- data/examples/legacy/working/shoes_manual/fixed_width.rb +12 -0
- data/examples/legacy/working/shoes_manual/image.rb +5 -0
- data/examples/legacy/working/shoes_manual/instance_variable_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/message.rb +18 -0
- data/examples/legacy/working/shoes_manual/rectangle.rb +6 -0
- data/examples/legacy/working/shoes_manual/save_download.rb +12 -0
- data/examples/legacy/working/shoes_manual/self_check.rb +10 -0
- data/examples/legacy/working/shoes_manual/stack.rb +7 -0
- data/examples/legacy/working/shoes_manual/style_info.rb +8 -0
- data/examples/legacy/working/shoes_manual/utf8_support.rb +8 -0
- data/examples/legacy/working/shoes_manual/width.rb +4 -0
- data/examples/local_assets/multi_image.rb +5 -0
- data/examples/local_assets/small.png +0 -0
- data/examples/local_fonts.rb +3 -0
- data/examples/margin.rb +13 -0
- data/examples/margin_check.rb +27 -0
- data/examples/oval-with-kwargs.rb +3 -0
- data/examples/oval.rb +26 -0
- data/examples/para_font_styles.rb +17 -0
- data/examples/para_font_variant.rb +6 -0
- data/examples/para_fontweight.rb +13 -0
- data/examples/parse_xl_funnies.rb +3 -0
- data/examples/rect.rb +1 -1
- data/examples/scarpe_ext.rb +3 -0
- data/examples/shapes/star.rb +1 -3
- data/examples/spacing.rb +1 -1
- data/examples/span.rb +4 -2
- data/lacci/lacci.gemspec +2 -2
- data/lacci/lib/lacci/scarpe_cli.rb +0 -1
- data/lacci/lib/lacci/version.rb +1 -1
- data/lacci/lib/scarpe/niente/display_service.rb +5 -1
- data/lacci/lib/scarpe/niente/drawable.rb +2 -0
- data/lacci/lib/scarpe/niente/shoes_spec.rb +7 -1
- data/lacci/lib/scarpe/niente.rb +14 -2
- data/lacci/lib/shoes/app.rb +44 -50
- data/lacci/lib/shoes/constants.rb +23 -2
- data/lacci/lib/shoes/display_service.rb +43 -4
- data/lacci/lib/shoes/drawable.rb +309 -35
- data/lacci/lib/shoes/drawables/arc.rb +2 -24
- data/lacci/lib/shoes/drawables/arrow.rb +2 -22
- data/lacci/lib/shoes/drawables/border.rb +28 -0
- data/lacci/lib/shoes/drawables/button.rb +4 -20
- data/lacci/lib/shoes/drawables/check.rb +7 -3
- data/lacci/lib/shoes/drawables/document_root.rb +4 -4
- data/lacci/lib/shoes/drawables/edit_box.rb +6 -5
- data/lacci/lib/shoes/drawables/edit_line.rb +5 -4
- data/lacci/lib/shoes/drawables/flow.rb +3 -5
- data/lacci/lib/shoes/drawables/font_helper.rb +62 -0
- data/lacci/lib/shoes/drawables/image.rb +2 -2
- data/lacci/lib/shoes/drawables/line.rb +4 -7
- data/lacci/lib/shoes/drawables/link.rb +5 -8
- data/lacci/lib/shoes/drawables/list_box.rb +8 -5
- data/lacci/lib/shoes/drawables/oval.rb +48 -0
- data/lacci/lib/shoes/drawables/para.rb +106 -18
- data/lacci/lib/shoes/drawables/progress.rb +2 -1
- data/lacci/lib/shoes/drawables/radio.rb +5 -3
- data/lacci/lib/shoes/drawables/rect.rb +5 -4
- data/lacci/lib/shoes/drawables/shape.rb +2 -1
- data/lacci/lib/shoes/drawables/slot.rb +99 -8
- data/lacci/lib/shoes/drawables/stack.rb +6 -11
- data/lacci/lib/shoes/drawables/star.rb +8 -30
- data/lacci/lib/shoes/drawables/text_drawable.rb +93 -34
- data/lacci/lib/shoes/drawables/video.rb +3 -2
- data/lacci/lib/shoes/drawables/widget.rb +8 -3
- data/lacci/lib/shoes/drawables.rb +2 -1
- data/lacci/lib/shoes/errors.rb +13 -3
- data/lacci/lib/shoes/margin_helper.rb +79 -0
- data/lacci/lib/shoes.rb +4 -3
- data/lacci/test/.gitignore +1 -0
- data/lacci/test/test_draw_context.rb +167 -0
- data/lacci/test/test_font_helper.rb +57 -0
- data/lacci/test/test_helper.rb +31 -4
- data/lacci/test/test_lacci.rb +93 -6
- data/lacci/test/test_margin_helper.rb +82 -0
- data/lacci/test/test_niente_test_infra.rb +26 -0
- data/lacci/test/test_oval.rb +82 -0
- data/lacci/test/test_parenting.rb +140 -0
- data/lacci/test/test_text_drawables.rb +23 -0
- data/lib/scarpe/assets.rb +18 -0
- data/lib/scarpe/cats_cradle.rb +57 -98
- data/lib/scarpe/shoes_spec.rb +22 -43
- data/lib/scarpe/version.rb +1 -1
- data/lib/scarpe/wv/app.rb +1 -0
- data/lib/scarpe/wv/arc.rb +0 -4
- data/lib/scarpe/wv/border.rb +15 -0
- data/lib/scarpe/wv/control_interface.rb +2 -10
- data/lib/scarpe/wv/document_root.rb +2 -2
- data/lib/scarpe/wv/drawable.rb +6 -40
- data/lib/scarpe/wv/edit_box.rb +4 -1
- data/lib/scarpe/wv/edit_line.rb +5 -2
- data/lib/scarpe/wv/image.rb +2 -5
- data/lib/scarpe/wv/link.rb +4 -2
- data/lib/scarpe/wv/oval.rb +13 -0
- data/lib/scarpe/wv/para.rb +1 -0
- data/lib/scarpe/wv/scarpe_extensions.rb +8 -0
- data/lib/scarpe/wv/shape.rb +10 -5
- data/lib/scarpe/wv/text_drawable.rb +72 -14
- data/lib/scarpe/wv/web_wrangler.rb +33 -11
- data/lib/scarpe/wv/webview_local_display.rb +6 -2
- data/lib/scarpe/wv.rb +8 -1
- data/scarpe-components/Gemfile +4 -1
- data/scarpe-components/Gemfile.lock +2 -3
- data/scarpe-components/README.md +2 -2
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cerulean.css +12229 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cosmo.css +11810 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-cyborg.css +12210 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-darkly.css +12153 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-flatly.css +12126 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-icons.min.css +5 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-journal.css +12099 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-litera.css +12211 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lumen.css +12369 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-lux.css +11928 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-materia.css +13184 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-minty.css +12177 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-morph.css +12750 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-pulse.css +11890 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-quartz.css +12622 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sandstone.css +12201 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-simplex.css +12186 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-sketchy.css +12451 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-slate.css +12492 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-solar.css +12149 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-spacelab.css +12266 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-superhero.css +12216 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-united.css +12077 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-vapor.css +12549 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-yeti.css +12325 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap-zephyr.css +12283 -0
- data/scarpe-components/assets/bootstrap-themes/bootstrap.bundle.min.js +7 -0
- data/scarpe-components/lib/scarpe/components/asset_server.rb +219 -0
- data/scarpe-components/lib/scarpe/components/base64.rb +22 -0
- data/scarpe-components/lib/scarpe/components/calzini/{art_widgets.rb → art_drawables.rb} +42 -18
- data/scarpe-components/lib/scarpe/components/calzini/border.rb +38 -0
- data/scarpe-components/lib/scarpe/components/calzini/button.rb +6 -8
- data/scarpe-components/lib/scarpe/components/calzini/misc.rb +7 -17
- data/scarpe-components/lib/scarpe/components/calzini/para.rb +213 -11
- data/scarpe-components/lib/scarpe/components/calzini/slots.rb +14 -60
- data/scarpe-components/lib/scarpe/components/calzini.rb +88 -1
- data/scarpe-components/lib/scarpe/components/errors.rb +4 -0
- data/scarpe-components/lib/scarpe/components/html.rb +4 -1
- data/scarpe-components/lib/scarpe/components/minitest_export_reporter.rb +11 -3
- data/scarpe-components/lib/scarpe/components/minitest_result.rb +41 -0
- data/scarpe-components/lib/scarpe/components/print_logger.rb +17 -2
- data/scarpe-components/lib/scarpe/components/process_helpers.rb +37 -0
- data/scarpe-components/lib/scarpe/components/segmented_file_loader.rb +1 -1
- data/scarpe-components/lib/scarpe/components/tiranti.rb +42 -100
- data/scarpe-components/lib/scarpe/components/unit_test_helpers.rb +3 -1
- data/scarpe-components/lib/scarpe/components/version.rb +1 -1
- data/scarpe-components/test/assets/big-image.png +0 -0
- data/scarpe-components/test/assets/big-stylesheet.css +497 -0
- data/scarpe-components/test/assets/little-image.png +0 -0
- data/scarpe-components/test/assets/little-stylesheet.css +1 -0
- data/scarpe-components/test/calzini/test_calzini_art_drawables.rb +7 -7
- data/scarpe-components/test/calzini/test_calzini_button.rb +7 -5
- data/scarpe-components/test/calzini/test_calzini_misc.rb +9 -9
- data/scarpe-components/test/calzini/test_calzini_para.rb +6 -9
- data/scarpe-components/test/calzini/test_calzini_slots.rb +12 -57
- data/scarpe-components/test/calzini/test_calzini_text_drawables.rb +83 -18
- data/scarpe-components/test/calzini/test_various.rb +133 -0
- data/scarpe-components/test/test_asset_server.rb +72 -0
- data/scarpe-components/test/test_components.rb +31 -2
- data/scarpe-components/test/test_helper.rb +0 -1
- data/scarpe-components/test/test_minitest_result.rb +7 -0
- data/scarpe-components/test/test_segmented_app_files.rb +2 -0
- data/tasks/check_html_fixtures.rb +140 -0
- data/tasks/regenerate_html_fixtures.rb +104 -0
- data/templates/class_template_with_shapes.erb +0 -11
- metadata +180 -32
- data/lacci/lib/scarpe/niente/logger.rb +0 -29
- data/lacci/lib/shoes/drawables/span.rb +0 -27
- data/lacci/lib/shoes/spacing.rb +0 -9
- data/lib/scarpe/evented_assertions.rb +0 -121
- data/lib/scarpe/wv/span.rb +0 -44
- data/scarpe-components/lib/scarpe/components/calzini/text_widgets.rb +0 -65
- /data/examples/legacy/{not_checked → working}/shoes3-tests/editline/editline.rb +0 -0
@@ -3,23 +3,18 @@
|
|
3
3
|
class Shoes
|
4
4
|
class Stack < Shoes::Slot
|
5
5
|
include Shoes::Background
|
6
|
-
include Shoes::Border
|
7
|
-
include Shoes::Spacing
|
8
6
|
|
9
|
-
|
10
|
-
shoes_styles :width, :height, :scroll
|
7
|
+
shoes_styles :scroll
|
11
8
|
|
12
|
-
shoes_events # No Stack-specific events
|
13
|
-
|
14
|
-
def initialize(width: nil, height: nil, margin: nil, padding: nil, scroll: false, margin_top: nil, margin_bottom: nil, margin_left: nil,
|
15
|
-
margin_right: nil, **options, &block)
|
16
|
-
|
17
|
-
@options = options
|
9
|
+
shoes_events # No Stack-specific events
|
18
10
|
|
11
|
+
def initialize(*args, **kwargs, &block)
|
19
12
|
super
|
20
13
|
|
21
14
|
create_display_drawable
|
22
|
-
|
15
|
+
|
16
|
+
# Create the display-side drawable *before* running the block.
|
17
|
+
# Then child drawables have a parent to add themselves to.
|
23
18
|
Shoes::App.instance.with_slot(self, &block) if block_given?
|
24
19
|
end
|
25
20
|
end
|
@@ -8,43 +8,21 @@ class Shoes
|
|
8
8
|
shoes_style(:outer) { |val| convert_to_float(val, "outer") }
|
9
9
|
shoes_style(:inner) { |val| convert_to_float(val, "inner") }
|
10
10
|
|
11
|
-
|
11
|
+
Shoes::Drawable.drawable_default_styles[Shoes::Star][:points] = 10
|
12
|
+
Shoes::Drawable.drawable_default_styles[Shoes::Star][:outer] = 100
|
13
|
+
Shoes::Drawable.drawable_default_styles[Shoes::Star][:inner] = 50
|
12
14
|
|
13
|
-
|
15
|
+
shoes_events # No Star-specific events
|
16
|
+
|
17
|
+
init_args :left, :top
|
18
|
+
opt_init_args :points, :outer, :inner
|
19
|
+
def initialize(*args, **kwargs)
|
14
20
|
super
|
15
|
-
self.left = left
|
16
|
-
self.top = top
|
17
|
-
self.points = points
|
18
|
-
self.outer = outer
|
19
|
-
self.inner = inner
|
20
21
|
|
21
22
|
@draw_context = Shoes::App.instance.current_draw_context
|
22
23
|
|
23
24
|
create_display_drawable
|
24
25
|
end
|
25
26
|
|
26
|
-
def self.convert_to_integer(value, attribute_name)
|
27
|
-
begin
|
28
|
-
value = Integer(value)
|
29
|
-
raise Shoes::Errors::InvalidAttributeValueError, "Negative num '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
30
|
-
|
31
|
-
value
|
32
|
-
rescue ArgumentError
|
33
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
34
|
-
raise Shoes::Errors::InvalidAttributeValueError, error_message
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.convert_to_float(value, attribute_name)
|
39
|
-
begin
|
40
|
-
value = Float(value)
|
41
|
-
raise Shoes::Errors::InvalidAttributeValueError, "Negative num '#{value}' not allowed for attribute '#{attribute_name}'" if value < 0
|
42
|
-
|
43
|
-
value
|
44
|
-
rescue ArgumentError
|
45
|
-
error_message = "Invalid value '#{value}' provided for attribute '#{attribute_name}'. The value should be a number."
|
46
|
-
raise Shoes::Errors::InvalidAttributeValueError, error_message
|
47
|
-
end
|
48
|
-
end
|
49
27
|
end
|
50
28
|
end
|
@@ -4,60 +4,119 @@ class Shoes
|
|
4
4
|
# TextDrawable is the parent class of various classes of
|
5
5
|
# text that can go inside a para. This includes normal
|
6
6
|
# text, but also links, italic text, bold text, etc.
|
7
|
+
#
|
8
|
+
# In Shoes3 this corresponds to cText, and it would
|
9
|
+
# have methods app, contents, children, parent,
|
10
|
+
# style, to_s, text, text= and replace.
|
11
|
+
#
|
12
|
+
# Much of what this does and how is similar to Para.
|
13
|
+
# It's a very similar API.
|
7
14
|
class TextDrawable < Shoes::Drawable
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
shoes_styles :text_items, :size, :stroke, :strokewidth, :fill, :undercolor, :font
|
16
|
+
|
17
|
+
STRIKETHROUGH_VALUES = [nil, "none", "single"]
|
18
|
+
shoes_style :strikethrough do |val, _name|
|
19
|
+
unless STRIKETHROUGH_VALUES.include?(val)
|
20
|
+
raise Shoes::Errors::InvalidAttributeValueError, "Strikethrough must be one of: #{STRIKETHROUGH_VALUES.inspect}!"
|
21
|
+
end
|
22
|
+
val
|
23
|
+
end
|
24
|
+
|
25
|
+
UNDERLINE_VALUES = [nil, "none", "single", "double", "low", "error"]
|
26
|
+
shoes_style :underline do |val, _name|
|
27
|
+
unless UNDERLINE_VALUES.include?(val)
|
28
|
+
raise Shoes::Errors::InvalidAttributeValueError, "Underline must be one of: #{UNDERLINE_VALUES.inspect}!"
|
16
29
|
end
|
17
|
-
|
30
|
+
val
|
18
31
|
end
|
19
32
|
|
20
33
|
shoes_events # No TextDrawable-specific events yet
|
21
|
-
end
|
22
34
|
|
23
|
-
|
24
|
-
|
25
|
-
|
35
|
+
def initialize(*args, **kwargs)
|
36
|
+
# Don't pass text_children args to Drawable#initialize
|
37
|
+
super(*[], **kwargs)
|
26
38
|
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
# Text_children alternates strings and TextDrawables, so we can't just pass
|
40
|
+
# it as a Shoes style. It won't serialize.
|
41
|
+
update_text_children(args)
|
30
42
|
|
31
|
-
|
32
|
-
|
43
|
+
create_display_drawable
|
44
|
+
end
|
33
45
|
|
34
|
-
|
46
|
+
def text_children_to_items(text_children)
|
47
|
+
text_children.map { |arg| arg.is_a?(TextDrawable) ? arg.linkable_id : arg.to_s }
|
48
|
+
end
|
35
49
|
|
36
|
-
|
37
|
-
|
50
|
+
# Sets the paragraph text to a new value, which can
|
51
|
+
# include {TextDrawable}s like em(), strong(), etc.
|
52
|
+
#
|
53
|
+
# @param children [Array] the arguments can be Strings and/or TextDrawables
|
54
|
+
# @return [void]
|
55
|
+
def replace(*children)
|
56
|
+
update_text_children(children)
|
57
|
+
end
|
38
58
|
|
39
|
-
|
40
|
-
|
41
|
-
|
59
|
+
# Set the paragraph text to a single String.
|
60
|
+
# To use bold, italics, etc. use {Para#replace} instead.
|
61
|
+
#
|
62
|
+
# @param child [String] the new text to use for this Para
|
63
|
+
# @return [void]
|
64
|
+
def text=(*children)
|
65
|
+
update_text_children(children)
|
66
|
+
end
|
42
67
|
|
43
|
-
|
44
|
-
|
45
|
-
|
68
|
+
# Return the text, but not the styling, of the para's
|
69
|
+
# contents. For example, if the contents had strong
|
70
|
+
# and emphasized text, the bold and emphasized would
|
71
|
+
# be removed but the text would be returned.
|
72
|
+
#
|
73
|
+
# @return [String] the text from this para
|
74
|
+
def text
|
75
|
+
@text_children.map(&:to_s).join
|
76
|
+
end
|
46
77
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
78
|
+
# Return the text but not styling from the para. This
|
79
|
+
# is the same as #text.
|
80
|
+
#
|
81
|
+
# @return [String] the text from this para
|
82
|
+
def to_s
|
83
|
+
self.text
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
# Text_children alternates strings and TextDrawables, so we can't just pass
|
89
|
+
# it as a Shoes style. It won't serialize.
|
90
|
+
def update_text_children(children)
|
91
|
+
@text_children = children.flatten
|
92
|
+
# This should signal the display drawable to change
|
93
|
+
self.text_items = text_children_to_items(@text_children)
|
94
|
+
end
|
95
|
+
end
|
54
96
|
|
97
|
+
class << self
|
98
|
+
def default_text_drawable_with(element)
|
99
|
+
class_name = element.capitalize
|
100
|
+
|
101
|
+
drawable_class = Class.new(Shoes::TextDrawable) do
|
55
102
|
shoes_events # No specific events
|
103
|
+
|
104
|
+
init_args # We're going to pass an empty array to super
|
56
105
|
end
|
106
|
+
Shoes.const_set class_name, drawable_class
|
57
107
|
end
|
58
108
|
end
|
59
109
|
end
|
60
110
|
|
61
111
|
Shoes.default_text_drawable_with(:code)
|
112
|
+
Shoes.default_text_drawable_with(:del)
|
62
113
|
Shoes.default_text_drawable_with(:em)
|
63
114
|
Shoes.default_text_drawable_with(:strong)
|
115
|
+
Shoes.default_text_drawable_with(:span)
|
116
|
+
Shoes.default_text_drawable_with(:sub)
|
117
|
+
Shoes.default_text_drawable_with(:sup)
|
118
|
+
Shoes.default_text_drawable_with(:ins) # in Shoes3, looks like "ins" is just underline
|
119
|
+
|
120
|
+
# Defaults must come *after* classes are defined
|
121
|
+
|
122
|
+
Shoes::Drawable.drawable_default_styles[Shoes::Ins][:underline] = "single"
|
@@ -37,11 +37,16 @@
|
|
37
37
|
|
38
38
|
class Shoes::Widget < Shoes::Slot
|
39
39
|
include Shoes::Background
|
40
|
-
include Shoes::Border
|
41
|
-
include Shoes::Spacing
|
42
40
|
|
43
41
|
shoes_events
|
44
42
|
|
43
|
+
def self.inherited(subclass)
|
44
|
+
super
|
45
|
+
|
46
|
+
# Widgets are special - we can't know in advance what sort of initialize args they take
|
47
|
+
subclass.init_args :any
|
48
|
+
end
|
49
|
+
|
45
50
|
def self.method_added(name)
|
46
51
|
# We're only looking for the initialize() method, and only on subclasses
|
47
52
|
# of Shoes::Widget, not Shoes::Widget itself.
|
@@ -57,7 +62,7 @@ class Shoes::Widget < Shoes::Slot
|
|
57
62
|
@midway_through_adding_initialize = true
|
58
63
|
define_method(:initialize) do |*args, **kwargs, &block|
|
59
64
|
super(*args, **kwargs, &block)
|
60
|
-
@options = kwargs
|
65
|
+
@options = kwargs # Get rid of options?
|
61
66
|
create_display_drawable
|
62
67
|
__widget_initialize(*args, **kwargs, &block)
|
63
68
|
|
@@ -15,6 +15,7 @@ require "shoes/drawables/line"
|
|
15
15
|
require "shoes/drawables/rect"
|
16
16
|
require "shoes/drawables/shape"
|
17
17
|
require "shoes/drawables/star"
|
18
|
+
require "shoes/drawables/oval"
|
18
19
|
require "shoes/drawables/arrow"
|
19
20
|
|
20
21
|
require "shoes/drawables/button"
|
@@ -26,6 +27,6 @@ require "shoes/drawables/link"
|
|
26
27
|
require "shoes/drawables/list_box"
|
27
28
|
require "shoes/drawables/para"
|
28
29
|
require "shoes/drawables/radio"
|
29
|
-
require "shoes/drawables/span"
|
30
30
|
require "shoes/drawables/video"
|
31
31
|
require "shoes/drawables/progress"
|
32
|
+
require "shoes/drawables/border"
|
data/lacci/lib/shoes/errors.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Shoes; end
|
4
|
-
|
4
|
+
module Shoes::Errors
|
5
5
|
class InvalidAttributeValueError < Shoes::Error; end
|
6
6
|
|
7
7
|
class TooManyInstancesError < Shoes::Error; end
|
@@ -16,13 +16,23 @@ class Shoes::Errors
|
|
16
16
|
|
17
17
|
class NoSuchStyleError < Shoes::Error; end
|
18
18
|
|
19
|
-
class
|
19
|
+
class NoSuchLinkableIdError < Shoes::Error; end
|
20
20
|
|
21
21
|
class BadLinkableIdError < Shoes::Error; end
|
22
22
|
|
23
|
-
class
|
23
|
+
class UnregisteredShoesEventError < Shoes::Error; end
|
24
|
+
|
25
|
+
class BadArgumentListError < Shoes::Error; end
|
24
26
|
|
25
27
|
class SingletonError < Shoes::Error; end
|
26
28
|
|
27
29
|
class MultipleShoesSpecRunsError < Shoes::Error; end
|
30
|
+
|
31
|
+
class UnsupportedFeatureError < Shoes::Error; end
|
32
|
+
|
33
|
+
class BadFilenameError < Shoes::Error; end
|
34
|
+
|
35
|
+
class UnknownEventsForClassError < Shoes::Error; end
|
36
|
+
|
37
|
+
class DoubleRegisteredShoesEventError < Shoes::Error; end
|
28
38
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module MarginHelper
|
2
|
+
|
3
|
+
def margin_parse(kwargs)
|
4
|
+
|
5
|
+
if kwargs[:margin]
|
6
|
+
|
7
|
+
if kwargs[:margin].is_a?(Numeric)
|
8
|
+
|
9
|
+
if !kwargs[:margin_top]
|
10
|
+
kwargs[:margin_top] = kwargs[:margin]
|
11
|
+
end
|
12
|
+
if !kwargs[:margin_bottom]
|
13
|
+
kwargs[:margin_bottom] = kwargs[:margin]
|
14
|
+
end
|
15
|
+
if !kwargs[:margin_left]
|
16
|
+
kwargs[:margin_left] = kwargs[:margin]
|
17
|
+
end
|
18
|
+
if !kwargs[:margin_right]
|
19
|
+
kwargs[:margin_right] = kwargs[:margin]
|
20
|
+
end
|
21
|
+
|
22
|
+
elsif kwargs[:margin].is_a?(Hash)
|
23
|
+
|
24
|
+
kwargs[:margin].each do |key,value|
|
25
|
+
kwargs[:"margin_#{key}"] = value
|
26
|
+
end
|
27
|
+
|
28
|
+
else
|
29
|
+
margin_props = kwargs[:margin].is_a?(String) ? kwargs[:margin].split(/\s+|\,|-/) : kwargs[:margin]
|
30
|
+
if margin_props.length == 1
|
31
|
+
|
32
|
+
if !kwargs[:margin_top]
|
33
|
+
kwargs[:margin_top] = margin_props[0]
|
34
|
+
end
|
35
|
+
if !kwargs[:margin_bottom]
|
36
|
+
kwargs[:margin_bottom] = margin_props[0]
|
37
|
+
end
|
38
|
+
if !kwargs[:margin_left]
|
39
|
+
kwargs[:margin_left] = margin_props[0]
|
40
|
+
end
|
41
|
+
if !kwargs[:margin_right]
|
42
|
+
kwargs[:margin_right] = margin_props[0]
|
43
|
+
end
|
44
|
+
|
45
|
+
elsif margin_props.length == 2
|
46
|
+
|
47
|
+
raise(Shoes::Errors::InvalidAttributeValueError, "Margin don't support 2-3 values as Array/string input for using 2-3 input you can use the hash input method like '{left:value, right:value, top:value, bottom:value}'")
|
48
|
+
|
49
|
+
elsif margin_props.length == 3
|
50
|
+
|
51
|
+
raise(Shoes::Errors::InvalidAttributeValueError, "Margin don't support 2-3 values as Array/string input for using 2-3 input you can use the hash input method like '{left:value,right:value,top:value,bottom:value}'")
|
52
|
+
|
53
|
+
else
|
54
|
+
|
55
|
+
if !kwargs[:margin_top]
|
56
|
+
kwargs[:margin_top] = margin_props[1]
|
57
|
+
end
|
58
|
+
if !kwargs[:margin_bottom]
|
59
|
+
kwargs[:margin_bottom] = margin_props[3]
|
60
|
+
end
|
61
|
+
if !kwargs[:margin_left]
|
62
|
+
kwargs[:margin_left] = margin_props[0]
|
63
|
+
end
|
64
|
+
if !kwargs[:margin_right]
|
65
|
+
kwargs[:margin_right] = margin_props[2]
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
kwargs[:margin] = nil
|
71
|
+
end
|
72
|
+
if kwargs["options"] && !kwargs[:margin] && !kwargs[:margin_left] && !kwargs[:margin_right] && !kwargs[:margin_top] && !kwargs[:margin_bottom]
|
73
|
+
kwargs[options].each do |key,value|
|
74
|
+
kwargs[key] = value
|
75
|
+
end
|
76
|
+
end
|
77
|
+
kwargs
|
78
|
+
end
|
79
|
+
end
|
data/lacci/lib/shoes.rb
CHANGED
@@ -37,8 +37,6 @@ require_relative "shoes/colors"
|
|
37
37
|
require_relative "shoes/builtins"
|
38
38
|
|
39
39
|
require_relative "shoes/background"
|
40
|
-
require_relative "shoes/border"
|
41
|
-
require_relative "shoes/spacing"
|
42
40
|
|
43
41
|
require_relative "shoes/drawable"
|
44
42
|
require_relative "shoes/app"
|
@@ -76,6 +74,7 @@ class Shoes
|
|
76
74
|
# @param width [Integer] The new app window width
|
77
75
|
# @param height [Integer] The new app window height
|
78
76
|
# @param resizable [Boolean] Whether the app window should be resizeable
|
77
|
+
# @param features [Symbol,Array<Symbol>] Additional Shoes extensions requested by the app
|
79
78
|
# @return [void]
|
80
79
|
# @see Shoes::App#new
|
81
80
|
def app(
|
@@ -83,9 +82,11 @@ class Shoes
|
|
83
82
|
width: 480,
|
84
83
|
height: 420,
|
85
84
|
resizable: true,
|
85
|
+
features: [],
|
86
86
|
&app_code_body
|
87
87
|
)
|
88
|
-
|
88
|
+
f = [features].flatten # Make sure this is a list, not a single symbol
|
89
|
+
app = Shoes::App.new(title:, width:, height:, resizable:, features: f, &app_code_body)
|
89
90
|
app.init
|
90
91
|
app.run
|
91
92
|
nil
|
@@ -0,0 +1 @@
|
|
1
|
+
niente_test.json
|
@@ -0,0 +1,167 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "test_helper"
|
4
|
+
|
5
|
+
class TestDrawContext < NienteTest
|
6
|
+
# need tests for:
|
7
|
+
# default values vs draw context values
|
8
|
+
# setting value explicitly w/ positional or keyword arg
|
9
|
+
|
10
|
+
# Test w/ color string names for now. This reveals a
|
11
|
+
# problem - our highly-variable color handling makes it
|
12
|
+
# hard to be sure about what comes through in a style.
|
13
|
+
|
14
|
+
# We do a bunch of wacky stuff with colors. We need some kind of
|
15
|
+
# equality check. This is good enough for this test until we
|
16
|
+
# have a proper color object backing up what we do in Scarpe.
|
17
|
+
def assert_color_equal(c1, c2)
|
18
|
+
if c1.nil? && c2.nil?
|
19
|
+
raise "Is this an expected use case?"
|
20
|
+
end
|
21
|
+
|
22
|
+
if (c1.is_a?(String) || c1.is_a?(Symbol)) && (c2.is_a?(String) || c2.is_a?(Symbol))
|
23
|
+
return assert_equal c1.to_s, c2.to_s, "Expected color #{c1.inspect} to equal #{c2.inspect}"
|
24
|
+
end
|
25
|
+
|
26
|
+
if c1.is_a?(Array) && c2.is_a?(Array)
|
27
|
+
return assert_equal c1, c2, "Expected color #{c1.inspect} to equal #{c2.inspect}"
|
28
|
+
end
|
29
|
+
|
30
|
+
raise "Oopsie! We got an unexpected comparison between colors #{c1.inspect}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_draw_context_default
|
34
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
35
|
+
Shoes.app do
|
36
|
+
oval 5, 10, 25 # circle with radius 25 with its upper-left point at 5, 10
|
37
|
+
end
|
38
|
+
SHOES_APP
|
39
|
+
ov = oval()
|
40
|
+
assert_equal "black", ov.style["fill"]
|
41
|
+
assert_equal "black", ov.style["stroke"]
|
42
|
+
SHOES_SPEC
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_draw_context_basic
|
46
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
47
|
+
Shoes.app do
|
48
|
+
fill darkgreen
|
49
|
+
stroke blue
|
50
|
+
oval 5, 10, 25 # circle with radius 25 with its upper-left point at 5, 10
|
51
|
+
end
|
52
|
+
SHOES_APP
|
53
|
+
ov = oval()
|
54
|
+
assert_equal [0, 100, 0, 255], ov.style["fill"]
|
55
|
+
assert_equal [0, 0, 255, 255], ov.style["stroke"]
|
56
|
+
SHOES_SPEC
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_draw_context_explicit
|
60
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
61
|
+
Shoes.app do
|
62
|
+
fill blue
|
63
|
+
stroke blue
|
64
|
+
oval 5, 10, 25, fill: darkgreen
|
65
|
+
end
|
66
|
+
SHOES_APP
|
67
|
+
ov = oval()
|
68
|
+
assert_equal [0, 100, 0, 255], ov.style["fill"]
|
69
|
+
assert_equal [0, 0, 255, 255], ov.style["stroke"]
|
70
|
+
SHOES_SPEC
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_draw_context_basic_nofill
|
74
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
75
|
+
Shoes.app do
|
76
|
+
nofill
|
77
|
+
oval 5, 10, 25
|
78
|
+
end
|
79
|
+
SHOES_APP
|
80
|
+
ov = oval()
|
81
|
+
assert_equal [0, 0, 0, 0], ov.style["fill"]
|
82
|
+
SHOES_SPEC
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_draw_context_inherited_nofill
|
86
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
87
|
+
Shoes.app do
|
88
|
+
nofill
|
89
|
+
nostroke
|
90
|
+
stack do
|
91
|
+
oval 5, 10, 25
|
92
|
+
end
|
93
|
+
end
|
94
|
+
SHOES_APP
|
95
|
+
ov = oval()
|
96
|
+
assert_equal [0, 0, 0, 0], ov.style["fill"]
|
97
|
+
assert_equal [0, 0, 0, 0], ov.style["stroke"]
|
98
|
+
SHOES_SPEC
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_draw_context_inherited_no_sibling
|
102
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
103
|
+
Shoes.app do
|
104
|
+
fill yellow
|
105
|
+
stroke yellow
|
106
|
+
stack do
|
107
|
+
fill blue
|
108
|
+
stroke darkgreen
|
109
|
+
stack do
|
110
|
+
fill aquamarine
|
111
|
+
stroke aquamarine
|
112
|
+
end
|
113
|
+
stack do
|
114
|
+
oval 5, 10, 25
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
SHOES_APP
|
119
|
+
ov = oval()
|
120
|
+
assert_equal [0, 0, 255, 255], ov.style["fill"]
|
121
|
+
assert_equal [0, 100, 0, 255], ov.style["stroke"]
|
122
|
+
SHOES_SPEC
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_draw_context_inherited_nil_props
|
126
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
127
|
+
Shoes.app do
|
128
|
+
stack do
|
129
|
+
fill blue
|
130
|
+
stroke darkgreen
|
131
|
+
stack do
|
132
|
+
fill nil
|
133
|
+
stroke nil
|
134
|
+
oval 5, 10, 25
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
SHOES_APP
|
139
|
+
ov = oval()
|
140
|
+
assert_equal [0, 0, 255, 255], ov.style["fill"]
|
141
|
+
assert_equal [0, 100, 0, 255], ov.style["stroke"]
|
142
|
+
SHOES_SPEC
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_draw_context_inherited_cancel_default
|
146
|
+
run_test_niente_code(<<~SHOES_APP, app_test_code: <<~SHOES_SPEC)
|
147
|
+
Shoes.app do
|
148
|
+
stack do
|
149
|
+
fill blue
|
150
|
+
stroke darkgreen
|
151
|
+
stack do
|
152
|
+
fill yellow
|
153
|
+
stroke yellow
|
154
|
+
oval 5, 10, 25
|
155
|
+
fill nil
|
156
|
+
stroke nil
|
157
|
+
@o2 = oval 5, 10, 25
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
SHOES_APP
|
162
|
+
ov = oval("@o2")
|
163
|
+
assert_equal [0, 0, 255, 255], ov.style["fill"]
|
164
|
+
assert_equal [0, 100, 0, 255], ov.style["stroke"]
|
165
|
+
SHOES_SPEC
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "test_helper"
|
4
|
+
|
5
|
+
|
6
|
+
class TestFontHelper < Minitest::Test
|
7
|
+
include FontHelper
|
8
|
+
def test_parse_full_font
|
9
|
+
|
10
|
+
string = "Pacifico 20px bold italic small-caps"
|
11
|
+
|
12
|
+
assert_equal(["italic", "small-caps" , "bold" , "20px" , "Pacifico"],parse_font(string))
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_parse_quotesFamily
|
17
|
+
string = "'Times new roman', serif 20px bold italic small-caps"
|
18
|
+
|
19
|
+
assert_equal(["italic", "small-caps", "bold", "20px", "'Times new roman', serif"],parse_font(string))
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_parse_empty
|
23
|
+
string = ""
|
24
|
+
|
25
|
+
assert_equal([nil,nil,nil,nil,""],parse_font(string))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_parse_onlyFamily
|
29
|
+
string = "arial"
|
30
|
+
|
31
|
+
assert_equal([nil,nil,nil,nil,"arial"],parse_font(string))
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_parse_onlySize
|
35
|
+
string = "40px"
|
36
|
+
|
37
|
+
assert_equal([nil,nil,nil,"40px",""],parse_font(string))
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_parse_onlyFontStyle
|
41
|
+
string = "italic"
|
42
|
+
|
43
|
+
assert_equal(["italic",nil,nil,nil,""],parse_font(string))
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_parse_onlyFontVariant
|
47
|
+
string = "small-caps"
|
48
|
+
|
49
|
+
assert_equal([nil,"small-caps",nil,nil,""],parse_font(string))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_parse_onlyFontWeight
|
53
|
+
string = "900"
|
54
|
+
|
55
|
+
assert_equal([nil,nil,"900",nil,""],parse_font(string))
|
56
|
+
end
|
57
|
+
end
|