lib/cyberarm_engine/ui/theme.rb in cyberarm_engine-0.19.0 vs lib/cyberarm_engine/ui/theme.rb in cyberarm_engine-0.19.1
- old
+ new
@@ -1,207 +1,207 @@
-module CyberarmEngine
- module Theme
- def default(*args)
- value = @options
- args.each do |arg|
- value = value.dig(arg)
- end
-
- value
- end
-
- def theme_defaults(options)
- raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
-
- _theme = THEME
- _theme = deep_merge(_theme, options[:theme]) if options[:theme]
- _theme.delete(:theme) if options[:theme]
-
- hash = {}
- class_names = self.class.ancestors
- class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! do |c|
- c.to_s.split("::").last.to_sym
- end.reverse!
-
- class_names.each do |klass|
- next unless data = _theme.dig(klass)
-
- data.each do |_key, _value|
- hash.merge!(data)
- end
- end
-
- deep_merge(hash, options)
- end
-
- # Derived from Rails Hash#deep_merge!
- # Enables passing partial themes through Element options without issue
- def deep_merge(original, intergrate, &block)
- original.merge(intergrate) do |key, this_val, other_val|
- if this_val.is_a?(Hash) && other_val.is_a?(Hash)
- deep_merge(this_val, other_val, &block)
- elsif block_given?
- block.call(key, this_val, other_val)
- else
- other_val
- end
- end
- end
-
- THEME = {
- Element: {
- x: 0,
- y: 0,
- z: 30,
-
- width: nil,
- height: nil,
- color: Gosu::Color::WHITE,
- background: Gosu::Color::NONE,
- margin: 0,
- padding: 0,
- border_thickness: 0,
- border_color: Gosu::Color::NONE,
- border_radius: 0
- },
-
- Container: { # < Element (Base class for Stack and Flow)
- debug_color: Gosu::Color::YELLOW
- },
-
- Button: { # < Label
- margin: 1,
- padding: 4,
- border_thickness: 1,
- border_color: ["ffd59674".hex, "ffff8746".hex],
- border_radius: 0,
- background: ["ffc75e61".to_i(16), "ffe26623".to_i(16)],
- text_align: :center,
- text_wrap: :none,
-
- hover: {
- color: Gosu::Color.rgb(200, 200, 200),
- background: ["ffB23E41".to_i(16), "ffFF7C00".to_i(16)]
- },
-
- active: {
- color: Gosu::Color::BLACK,
- background: ["ffB23E41".to_i(16)]
- },
-
- disabled: {
- color: Gosu::Color::GRAY,
- background: 0xff303030
- }
- },
-
- EditLine: { # < Button
- type: :text,
- width: 200,
- password_character: "•",
- caret_width: 2,
- caret_color: Gosu::Color::WHITE,
- caret_interval: 500,
- selection_color: Gosu::Color.rgba(255, 128, 50, 200),
- text_align: :left
- },
-
- Image: { # < Element
- color: Gosu::Color::WHITE,
- tileable: false,
- retro: false
- },
-
- TextBlock: { # < Element
- text_size: 28,
- text_wrap: :word_wrap, # :word_wrap, :break_word, :none
- text_shadow: false,
- text_border: false,
- text_align: :left,
- font: "Arial",
- margin: 0,
- padding: 2,
- disabled: {
- color: Gosu::Color.rgb(175, 175, 175),
- }
- },
-
- Banner: { # < TextBlock
- text_size: 48
- },
-
- Title: { # < TextBlock
- text_size: 34
- },
-
- Subtitle: { # < TextBlock
- text_size: 26
- },
-
- Tagline: { # < TextBlock
- text_size: 24
- },
-
- Caption: { # < TextBlock
- text_size: 22
- },
-
- Para: { # < TextBlock
- text_size: 18
- },
-
- Inscription: { # < TextBlock
- text_size: 16
- },
-
- ToolTip: { # < TextBlock
- color: Gosu::Color::WHITE,
- padding_top: 4,
- padding_bottom: 4,
- padding_left: 8,
- padding_right: 8,
- border_thickness: 1,
- border_color: 0xffaaaaaa,
- background: 0xff404040
- },
- Link: { # < TextBlock
- color: Gosu::Color::BLUE,
- border_thickness: 1,
- border_bottom_color: Gosu::Color::BLUE,
- hover: {
- color: 0xff_ff00ff,
- border_bottom_color: 0xff_ff00ff
- },
- active: {
- color: 0xff_ff0000,
- border_bottom_color: 0xff_ff0000
- }
- },
-
- ToggleButton: { # < Button
- checkmark: "√"
- },
-
- CheckBox: { # < Flow
- text_wrap: :none
- },
-
- Progress: { # < Element
- width: 250,
- height: 36,
- background: 0xff111111,
- fraction_background: [0xffc75e61, 0xffe26623],
- border_thickness: 1,
- border_color: [0xffd59674, 0xffff8746]
- },
-
- Slider: { # < Element
- width: 250,
- height: 36,
- background: 0xff111111,
- fraction_background: [0xffc75e61, 0xffe26623],
- border_thickness: 1,
- border_color: [0xffd59674, 0xffff8746]
- }
- }.freeze
- end
-end
+module CyberarmEngine
+ module Theme
+ def default(*args)
+ value = @options
+ args.each do |arg|
+ value = value.dig(arg)
+ end
+
+ value
+ end
+
+ def theme_defaults(options)
+ raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
+
+ _theme = THEME
+ _theme = deep_merge(_theme, options[:theme]) if options[:theme]
+ _theme.delete(:theme) if options[:theme]
+
+ hash = {}
+ class_names = self.class.ancestors
+ class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! do |c|
+ c.to_s.split("::").last.to_sym
+ end.reverse!
+
+ class_names.each do |klass|
+ next unless data = _theme.dig(klass)
+
+ data.each do |_key, _value|
+ hash.merge!(data)
+ end
+ end
+
+ deep_merge(hash, options)
+ end
+
+ # Derived from Rails Hash#deep_merge!
+ # Enables passing partial themes through Element options without issue
+ def deep_merge(original, intergrate, &block)
+ original.merge(intergrate) do |key, this_val, other_val|
+ if this_val.is_a?(Hash) && other_val.is_a?(Hash)
+ deep_merge(this_val, other_val, &block)
+ elsif block_given?
+ block.call(key, this_val, other_val)
+ else
+ other_val
+ end
+ end
+ end
+
+ THEME = {
+ Element: {
+ x: 0,
+ y: 0,
+ z: 30,
+
+ width: nil,
+ height: nil,
+ color: Gosu::Color::WHITE,
+ background: Gosu::Color::NONE,
+ margin: 0,
+ padding: 0,
+ border_thickness: 0,
+ border_color: Gosu::Color::NONE,
+ border_radius: 0
+ },
+
+ Container: { # < Element (Base class for Stack and Flow)
+ debug_color: Gosu::Color::YELLOW
+ },
+
+ Button: { # < Label
+ margin: 1,
+ padding: 4,
+ border_thickness: 1,
+ border_color: ["ffd59674".hex, "ffff8746".hex],
+ border_radius: 0,
+ background: ["ffc75e61".to_i(16), "ffe26623".to_i(16)],
+ text_align: :center,
+ text_wrap: :none,
+
+ hover: {
+ color: Gosu::Color.rgb(200, 200, 200),
+ background: ["ffB23E41".to_i(16), "ffFF7C00".to_i(16)]
+ },
+
+ active: {
+ color: Gosu::Color::BLACK,
+ background: ["ffB23E41".to_i(16)]
+ },
+
+ disabled: {
+ color: Gosu::Color::GRAY,
+ background: 0xff303030
+ }
+ },
+
+ EditLine: { # < Button
+ type: :text,
+ width: 200,
+ password_character: "•",
+ caret_width: 2,
+ caret_color: Gosu::Color::WHITE,
+ caret_interval: 500,
+ selection_color: Gosu::Color.rgba(255, 128, 50, 200),
+ text_align: :left
+ },
+
+ Image: { # < Element
+ color: Gosu::Color::WHITE,
+ tileable: false,
+ retro: false
+ },
+
+ TextBlock: { # < Element
+ text_size: 28,
+ text_wrap: :word_wrap, # :word_wrap, :break_word, :none
+ text_shadow: false,
+ text_border: false,
+ text_align: :left,
+ font: "Arial",
+ margin: 0,
+ padding: 2,
+ disabled: {
+ color: Gosu::Color.rgb(175, 175, 175),
+ }
+ },
+
+ Banner: { # < TextBlock
+ text_size: 48
+ },
+
+ Title: { # < TextBlock
+ text_size: 34
+ },
+
+ Subtitle: { # < TextBlock
+ text_size: 26
+ },
+
+ Tagline: { # < TextBlock
+ text_size: 24
+ },
+
+ Caption: { # < TextBlock
+ text_size: 22
+ },
+
+ Para: { # < TextBlock
+ text_size: 18
+ },
+
+ Inscription: { # < TextBlock
+ text_size: 16
+ },
+
+ ToolTip: { # < TextBlock
+ color: Gosu::Color::WHITE,
+ padding_top: 4,
+ padding_bottom: 4,
+ padding_left: 8,
+ padding_right: 8,
+ border_thickness: 1,
+ border_color: 0xffaaaaaa,
+ background: 0xff404040
+ },
+ Link: { # < TextBlock
+ color: Gosu::Color::BLUE,
+ border_thickness: 1,
+ border_bottom_color: Gosu::Color::BLUE,
+ hover: {
+ color: 0xff_ff00ff,
+ border_bottom_color: 0xff_ff00ff
+ },
+ active: {
+ color: 0xff_ff0000,
+ border_bottom_color: 0xff_ff0000
+ }
+ },
+
+ ToggleButton: { # < Button
+ checkmark: "√"
+ },
+
+ CheckBox: { # < Flow
+ text_wrap: :none
+ },
+
+ Progress: { # < Element
+ width: 250,
+ height: 36,
+ background: 0xff111111,
+ fraction_background: [0xffc75e61, 0xffe26623],
+ border_thickness: 1,
+ border_color: [0xffd59674, 0xffff8746]
+ },
+
+ Slider: { # < Element
+ width: 250,
+ height: 36,
+ background: 0xff111111,
+ fraction_background: [0xffc75e61, 0xffe26623],
+ border_thickness: 1,
+ border_color: [0xffd59674, 0xffff8746]
+ }
+ }.freeze
+ end
+end