Class: Fidgit::Element Abstract
- Includes:
- Event
- Defined in:
- lib/fidgit/elements/element.rb
Overview
An element within the GUI environment.
Direct Known Subclasses
Container, Label, ScrollBar::Handle, Slider::Handle, TextArea
Constant Summary collapse
- DEFAULT_SCHEMA_FILE =
File.(File.join(__FILE__, '..', '..', '..', '..', 'config', 'default_schema.yml'))
- VALID_ALIGN_H =
[:left, :center, :right, :fill]
- VALID_ALIGN_V =
[:top, :center, :bottom, :fill]
Instance Attribute Summary collapse
-
#align_h ⇒ Object
readonly
Returns the value of attribute align_h.
-
#align_v ⇒ Object
readonly
Returns the value of attribute align_v.
-
#background_color ⇒ Object
Returns the value of attribute background_color.
-
#border_thickness ⇒ Object
readonly
Returns the value of attribute border_thickness.
-
#font_size ⇒ Object
readonly
Returns the value of attribute font_size.
-
#padding_bottom ⇒ Object
readonly
Returns the value of attribute padding_bottom.
-
#padding_left ⇒ Object
readonly
Returns the value of attribute padding_left.
-
#padding_right ⇒ Object
readonly
Returns the value of attribute padding_right.
-
#padding_top ⇒ Object
readonly
Returns the value of attribute padding_top.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#tip ⇒ Object
readonly
Returns the value of attribute tip.
-
#z ⇒ Object
readonly
Returns the value of attribute z.
Class Method Summary collapse
Instance Method Summary collapse
-
#default(*names) ⇒ Object
Get the default value from the schema.
-
#drag?(button) ⇒ Boolean
Can the object be dragged?.
-
#draw ⇒ Object
Redraw the element.
- #draw_frame(*args) ⇒ Object
- #draw_rect(*args) ⇒ Object
- #enabled=(value) ⇒ Object
- #enabled? ⇒ Boolean
- #font ⇒ Object
-
#height ⇒ Object
Height not including border.
- #height=(value) ⇒ Object
-
#hit?(x, y) ⇒ Boolean
Check if a point (screen coordinates) is over the element.
-
#initialize(options = {}) { ... } ⇒ Element
constructor
A new instance of Element.
- #max_height ⇒ Object
- #max_width ⇒ Object
- #min_height ⇒ Object
- #min_width ⇒ Object
-
#outer_height ⇒ Object
Height including border thickness.
-
#outer_width ⇒ Object
Width including border thickness.
- #recalc ⇒ Object
-
#update ⇒ Object
Update the element.
-
#width ⇒ Object
Width not including border.
- #width=(value) ⇒ Object
-
#with(&block) ⇒ Object
Evaluate a block, just like it was a constructor block.
- #x ⇒ Object
- #x=(value) ⇒ Object
- #y ⇒ Object
- #y=(value) ⇒ Object
Methods included from Event
#events, included, #publish, #subscribe
Constructor Details
#initialize(options = {}) { ... } ⇒ Element
Returns a new instance of Element.
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/fidgit/elements/element.rb', line 139 def initialize( = {}, &block) = { x: 0, y: 0, z: 0, tip: '', font_name: default(:font_name), font_size: default(:font_size), background_color: default(:background_color), border_color: default(:border_color), border_thickness: default(:border_thickness), enabled: true, }.merge! @enabled = [:enabled] @mouse_over = false # Alignment and min/max dimensions. @align_h = [:align_h] || Array([:align]).last || default(:align_h) raise ArgumentError, "Invalid align_h: #{@align_h}" unless VALID_ALIGN_H.include? @align_h min_width = ([:min_width] || [:width] || 0) max_width = ([:max_width] || [:width] || Float::INFINITY) @width_range = min_width..max_width @align_v = [:align_v] || Array([:align]).first || default(:align_v) raise ArgumentError, "Invalid align_v: #{@align_v}" unless VALID_ALIGN_V.include? @align_v min_height = ([:min_height] || [:height] || 0) max_height = ([:max_height] || [:height] || Float::INFINITY) @height_range = min_height..max_height @background_color = [:background_color].dup @border_color = [:border_color].dup @border_thickness = [:border_thickness] @padding_top = [:padding_top] || [:padding_v] || [:padding] || default(:padding_top) @padding_right = [:padding_right] || [:padding_h] || [:padding] || default(:padding_right) @padding_bottom = [:padding_bottom] || [:padding_v] || [:padding] || default(:padding_bottom) @padding_left = [:padding_left] || [:padding_h] || [:padding] || default(:padding_left) self.parent = [:parent] @z = [:z] @tip = [:tip].dup @font_name = if [:font_name].nil? or [:font_name] == :default Gosu::default_font_name else [:font_name].dup end @font_size = [:font_size] @rect = Chingu::Rect.new([:x], [:y], [:width] || 0, [:height] || 0) end |
Instance Attribute Details
#align_h ⇒ Object (readonly)
Returns the value of attribute align_h.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def align_h @align_h end |
#align_v ⇒ Object (readonly)
Returns the value of attribute align_v.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def align_v @align_v end |
#background_color ⇒ Object
Returns the value of attribute background_color.
42 43 44 |
# File 'lib/fidgit/elements/element.rb', line 42 def background_color @background_color end |
#border_thickness ⇒ Object (readonly)
Returns the value of attribute border_thickness.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def border_thickness @border_thickness end |
#font_size ⇒ Object (readonly)
Returns the value of attribute font_size.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def font_size @font_size end |
#padding_bottom ⇒ Object (readonly)
Returns the value of attribute padding_bottom.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def padding_bottom @padding_bottom end |
#padding_left ⇒ Object (readonly)
Returns the value of attribute padding_left.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def padding_left @padding_left end |
#padding_right ⇒ Object (readonly)
Returns the value of attribute padding_right.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def padding_right @padding_right end |
#padding_top ⇒ Object (readonly)
Returns the value of attribute padding_top.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def padding_top @padding_top end |
#parent ⇒ Object
Returns the value of attribute parent.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def parent @parent end |
#tip ⇒ Object (readonly)
Returns the value of attribute tip.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def tip @tip end |
#z ⇒ Object (readonly)
Returns the value of attribute z.
40 41 42 |
# File 'lib/fidgit/elements/element.rb', line 40 def z @z end |
Class Method Details
.new(*args, &block) ⇒ Object
88 89 90 91 92 93 |
# File 'lib/fidgit/elements/element.rb', line 88 def new(*args, &block) obj = original_new(*args) # Block should be ignored. obj.send :post_init obj.send :post_init_block, &block if block_given? obj end |
.original_new ⇒ Object
86 |
# File 'lib/fidgit/elements/element.rb', line 86 alias_method :original_new, :new |
.schema ⇒ Object
83 |
# File 'lib/fidgit/elements/element.rb', line 83 def self.schema; @@schema ||= Schema.new(YAML.load(File.read(DEFAULT_SCHEMA_FILE)));; end |
Instance Method Details
#default(*names) ⇒ Object
Get the default value from the schema.
99 100 101 |
# File 'lib/fidgit/elements/element.rb', line 99 def default(*names) self.class.schema.default(self.class, names) end |
#drag?(button) ⇒ Boolean
Can the object be dragged?
67 |
# File 'lib/fidgit/elements/element.rb', line 67 def drag?(); false; end |
#draw ⇒ Object
Redraw the element.
209 210 211 212 213 214 |
# File 'lib/fidgit/elements/element.rb', line 209 def draw draw_background draw_border draw_foreground nil end |
#draw_frame(*args) ⇒ Object
225 226 227 |
# File 'lib/fidgit/elements/element.rb', line 225 def draw_frame(*args) $window.current_game_state.draw_frame(*args) end |
#draw_rect(*args) ⇒ Object
221 222 223 |
# File 'lib/fidgit/elements/element.rb', line 221 def draw_rect(*args) $window.current_game_state.draw_rect(*args) end |
#enabled=(value) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/fidgit/elements/element.rb', line 71 def enabled=(value) if @mouse_over and enabled? and not value $window.current_game_state.unset_mouse_over end @enabled = value end |
#enabled? ⇒ Boolean
69 |
# File 'lib/fidgit/elements/element.rb', line 69 def enabled?; @enabled; end |
#font ⇒ Object
79 |
# File 'lib/fidgit/elements/element.rb', line 79 def font; @font ||= Gosu::Font[@font_name, @font_size]; end |
#height ⇒ Object
Height not including border.
59 |
# File 'lib/fidgit/elements/element.rb', line 59 def height; rect.height; end |
#height=(value) ⇒ Object
60 |
# File 'lib/fidgit/elements/element.rb', line 60 def height=(value); rect.height = [[value, @height_range.max].min, @height_range.min].max; end |
#hit?(x, y) ⇒ Boolean
Check if a point (screen coordinates) is over the element.
204 205 206 |
# File 'lib/fidgit/elements/element.rb', line 204 def hit?(x, y) @rect.collide_point?(x, y) end |
#max_height ⇒ Object
62 |
# File 'lib/fidgit/elements/element.rb', line 62 def max_height; @height_range.max; end |
#max_width ⇒ Object
54 |
# File 'lib/fidgit/elements/element.rb', line 54 def max_width; @width_range.max; end |
#min_height ⇒ Object
61 |
# File 'lib/fidgit/elements/element.rb', line 61 def min_height; @height_range.min; end |
#min_width ⇒ Object
53 |
# File 'lib/fidgit/elements/element.rb', line 53 def min_width; @width_range.min; end |
#outer_height ⇒ Object
Height including border thickness.
64 |
# File 'lib/fidgit/elements/element.rb', line 64 def outer_height; rect.height + @border_thickness * 2; end |
#outer_width ⇒ Object
Width including border thickness.
56 |
# File 'lib/fidgit/elements/element.rb', line 56 def outer_width; rect.width + @border_thickness * 2; end |
#recalc ⇒ Object
195 196 197 198 199 200 201 |
# File 'lib/fidgit/elements/element.rb', line 195 def recalc old_width, old_height = width, height layout parent.recalc if parent and (width != old_width or height != old_height) nil end |
#update ⇒ Object
Update the element.
217 218 219 |
# File 'lib/fidgit/elements/element.rb', line 217 def update nil end |
#width ⇒ Object
Width not including border.
51 |
# File 'lib/fidgit/elements/element.rb', line 51 def width; rect.width; end |
#width=(value) ⇒ Object
52 |
# File 'lib/fidgit/elements/element.rb', line 52 def width=(value); rect.width = [[value, @width_range.max].min, @width_range.min].max; end |
#with(&block) ⇒ Object
Evaluate a block, just like it was a constructor block.
262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/fidgit/elements/element.rb', line 262 def with(&block) raise ArgumentError.new("Must pass a block") unless block_given? case block.arity when 1 yield self when 0 instance_methods_eval(&block) else raise "block arity must be 0 or 1" end end |
#x ⇒ Object
44 |
# File 'lib/fidgit/elements/element.rb', line 44 def x; rect.x; end |
#x=(value) ⇒ Object
45 |
# File 'lib/fidgit/elements/element.rb', line 45 def x=(value); rect.x = value; end |
#y ⇒ Object
47 |
# File 'lib/fidgit/elements/element.rb', line 47 def y; rect.y; end |
#y=(value) ⇒ Object
48 |
# File 'lib/fidgit/elements/element.rb', line 48 def y=(value); rect.y = value; end |