lib/cyberarm_engine/ui/dsl.rb in cyberarm_engine-0.19.0 vs lib/cyberarm_engine/ui/dsl.rb in cyberarm_engine-0.19.1

- old
+ new

@@ -1,139 +1,139 @@ -module CyberarmEngine - module DSL - def flow(options = {}, &block) - container(CyberarmEngine::Element::Flow, options, &block) - end - - def stack(options = {}, &block) - container(CyberarmEngine::Element::Stack, options, &block) - end - - # TODO: Remove in version 0.16.0+ - def label(text, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::TextBlock.new(text, options, block)) - end - - [ - "Banner", - "Title", - "Subtitle", - "Tagline", - "Caption", - "Para", - "Inscription", - "Link" - ].each do |const| - define_method(:"#{const.downcase}") do |text, options = {}, &block| - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element.const_get(const).new(text, options, block)) - end - end - - def button(text, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::Button.new(text, options, block) { block.call if block.is_a?(Proc) }) - end - - def list_box(options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::ListBox.new(options, block) { block.call if block.is_a?(Proc) }) - end - - def edit_line(text, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::EditLine.new(text, options, block)) - end - - def edit_box(text, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::EditBox.new(text, options, block)) - end - - def toggle_button(options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::ToggleButton.new(options, block)) - end - - def check_box(text, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::CheckBox.new(text, options, block)) - end - - def image(path, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::Image.new(path, options, block)) - end - - def progress(options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::Progress.new(options, block)) - end - - def slider(options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - add_element(Element::Slider.new(options, block)) - end - - def background(color = Gosu::Color::NONE) - element_parent.style.default[:background] = color - end - - def theme(theme) - element_parent.options[:theme] = theme - end - - def current_theme - element_parent.options[:theme] - end - - private def add_element(element) - element_parent.add(element) - - element - end - - private def element_parent - $__current_container__ - end - - private def container(klass, options = {}, &block) - options[:parent] = element_parent - options[:theme] = current_theme - - _container = klass.new(options, block) - - old_parent = element_parent - $__current_container__ = _container - - _container.build - _container.parent.add(_container) - - $__current_container__ = old_parent - - _container - end - end -end +module CyberarmEngine + module DSL + def flow(options = {}, &block) + container(CyberarmEngine::Element::Flow, options, &block) + end + + def stack(options = {}, &block) + container(CyberarmEngine::Element::Stack, options, &block) + end + + # TODO: Remove in version 0.16.0+ + def label(text, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::TextBlock.new(text, options, block)) + end + + [ + "Banner", + "Title", + "Subtitle", + "Tagline", + "Caption", + "Para", + "Inscription", + "Link" + ].each do |const| + define_method(:"#{const.downcase}") do |text, options = {}, &block| + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element.const_get(const).new(text, options, block)) + end + end + + def button(text, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::Button.new(text, options, block) { block.call if block.is_a?(Proc) }) + end + + def list_box(options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::ListBox.new(options, block) { block.call if block.is_a?(Proc) }) + end + + def edit_line(text, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::EditLine.new(text, options, block)) + end + + def edit_box(text, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::EditBox.new(text, options, block)) + end + + def toggle_button(options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::ToggleButton.new(options, block)) + end + + def check_box(text, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::CheckBox.new(text, options, block)) + end + + def image(path, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::Image.new(path, options, block)) + end + + def progress(options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::Progress.new(options, block)) + end + + def slider(options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + add_element(Element::Slider.new(options, block)) + end + + def background(color = Gosu::Color::NONE) + element_parent.style.default[:background] = color + end + + def theme(theme) + element_parent.options[:theme] = theme + end + + def current_theme + element_parent.options[:theme] + end + + private def add_element(element) + element_parent.add(element) + + element + end + + private def element_parent + $__current_container__ + end + + private def container(klass, options = {}, &block) + options[:parent] = element_parent + options[:theme] = current_theme + + _container = klass.new(options, block) + + old_parent = element_parent + $__current_container__ = _container + + _container.build + _container.parent.add(_container) + + $__current_container__ = old_parent + + _container + end + end +end