Class: ExampleApp::MetalPanel

Inherits:
Zif::UI::NinePanel show all
Defined in:
app/ui/panels/metal_panel.rb

Overview

The Kenney UI Space pack contains these metal panels which have a colorful tab in the upper left. This is a bit more complex than a normal nine-slice, since the top edge will actually have 3 parts So we are using NinePanelEdge for this, and regular sprites for the other 8 sections.

Constant Summary collapse

SPRITES_PATH =
'sprites/kenney-uipack-space/danhealy-modified'.freeze
VALID_COLORS =
%i[blue green red yellow].freeze
BIG_CORNER =
32
SMALL_CORNER =
16
TRANSITION_WIDTH =
12

Constants inherited from Zif::Sprite

Zif::Sprite::BLENDMODE

Instance Attribute Summary collapse

Attributes inherited from Zif::UI::NinePanel

#corners, #edges, #fill

Attributes inherited from Zif::CompoundSprite

#labels, #sprites

Attributes inherited from Zif::Sprite

#a, #angle, #b, #g, #h, #logical_x, #logical_y, #name, #path, #r, #render_target, #source_h, #source_w, #source_x, #source_y, #w, #x, #y, #z_index

Attributes included from Zif::Clickable

#on_mouse_changed, #on_mouse_down, #on_mouse_up

Attributes included from Zif::Actions::Animatable

#animation_sequences, #cur_animation

Attributes included from Zif::Actions::Actionable

#actions, #dirty

Instance Method Summary collapse

Methods inherited from Zif::UI::NinePanel

#height, #height=, #lower_left_corner, #lower_left_corner=, #lower_left_edge, #lower_left_edge=, #lower_right_corner, #lower_right_corner=, #lower_right_edge, #lower_right_edge=, #resize, #sprites, #upper_left_corner, #upper_left_corner=, #upper_left_edge, #upper_left_edge=, #upper_right_corner, #upper_right_corner=, #upper_right_edge, #upper_right_edge=, #width, #width=

Methods inherited from Zif::CompoundSprite

#draw_override, #source_rect

Methods inherited from Zif::Sprite

#blend, #blend=, #center, #center_x, #center_y, #clicked?, #color, #color=, #dup_and_assign, #exclude_from_serialize, #hide, #rect, rect_array_to_hash, rect_array_to_source_hash, #rect_hash, rect_hash_to_source_hash, #show, #source_as_rect_hash, #source_center, #source_is_set?, #source_rect, #source_rect_hash, #source_wh, #source_xy, #to_h, #view_actual_size!, #wh, #xy, #zoom_factor

Methods included from Zif::Clickable

#absorb_click?, #clicked?

Methods included from Zif::Actions::Animatable

#new_basic_animation, #new_tiled_animation, #register_animation_sequence, #run_animation_sequence, #stop_animating

Methods included from Zif::Actions::Actionable

#bounce_forever_around, #delayed_action, #fade_in, #fade_out, #fade_out_and_in_forever, #new_action, #perform_actions, #run_action, #running_actions?, #stop_action

Methods included from Zif::Serializable

#exclude_from_serialize, #inspect, #serialize, #to_s

Methods included from Zif::Assignable

#assign

Constructor Details

#initialize(width, height, label = nil, color = :blue, name = Zif.unique_name('metal_panel')) ⇒ MetalPanel

Returns a new instance of MetalPanel.

[View source]

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/ui/panels/metal_panel.rb', line 15

def initialize(width, height, label=nil, color=:blue, name=Zif.unique_name('metal_panel'))
  super(name)

  @upper_edge_panel = Zif::UI::NinePanelEdge.new
  @upper_edge_panel.left_edge_height  = BIG_CORNER
  @upper_edge_panel.transition_height = BIG_CORNER
  @upper_edge_panel.transition_width  = TRANSITION_WIDTH
  @upper_edge_panel.right_edge_path   = "#{SPRITES_PATH}/metal_side.png"
  @upper_edge_panel.right_edge_height = SMALL_CORNER

  # Gotta define this first so we can set the color.
  self.upper_left_corner = Zif::Sprite.new.tap do |s|
    s.x = 0
    s.w = BIG_CORNER
    s.h = BIG_CORNER
  end

  change_color(color)
  @upper_edge_panel.init_sprites

  self.right_edge = Zif::Sprite.new.tap do |s|
    s.y = SMALL_CORNER
    s.w = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_side_right.png"
  end

  self.lower_edge = Zif::Sprite.new.tap do |s|
    s.x = SMALL_CORNER
    s.y = 0
    s.h = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_side.png"
    s.flip_vertically = true
  end

  self.left_edge = Zif::Sprite.new.tap do |s|
    s.x = 0
    s.y = SMALL_CORNER
    s.w = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_side_right.png"
    s.flip_horizontally = true
  end

  self.upper_right_corner = Zif::Sprite.new.tap do |s|
    s.w = SMALL_CORNER
    s.h = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_corner.png"
    s.flip_horizontally = true
  end

  self.lower_right_corner = Zif::Sprite.new.tap do |s|
    s.y = 0
    s.w = SMALL_CORNER
    s.h = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_corner.png"
    s.flip_horizontally = true
    s.flip_vertically = true
  end

  self.lower_left_corner = Zif::Sprite.new.tap do |s|
    s.x = 0
    s.y = 0
    s.w = SMALL_CORNER
    s.h = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_corner.png"
    s.flip_vertically = true
  end

  @fill = Zif::Sprite.new.tap do |s|
    s.x = SMALL_CORNER
    s.y = SMALL_CORNER
    s.path = "#{SPRITES_PATH}/metal_center.png"
  end

  if label
    @header = FutureLabel.new(label, size: -1, alignment: :left)
    @header.x = 10
    @labels << @header
  end

  resize(width, height)

  self.upper_edge = @upper_edge_panel.sprites
end

Instance Attribute Details

#headerObject

Returns the value of attribute header.


6
7
8
# File 'app/ui/panels/metal_panel.rb', line 6

def header
  @header
end

#upper_edge_panelObject

Returns the value of attribute upper_edge_panel.


6
7
8
# File 'app/ui/panels/metal_panel.rb', line 6

def upper_edge_panel
  @upper_edge_panel
end

Instance Method Details

#change_color(color) ⇒ Object

[View source]

99
100
101
102
103
104
105
106
107
# File 'app/ui/panels/metal_panel.rb', line 99

def change_color(color)
  @color = VALID_COLORS.include?(color) ? color : :blue

  @upper_edge_panel.transition_path = "#{SPRITES_PATH}/metal_#{@color}_side_transition.png"
  @upper_edge_panel.left_edge_path  = "#{SPRITES_PATH}/metal_#{@color}_side.png"
  upper_left_corner.path = "#{SPRITES_PATH}/metal_#{@color}_corner.png"

  @upper_edge_panel.update_paths
end

#resize_height(height) ⇒ Object

[View source]

126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'app/ui/panels/metal_panel.rb', line 126

def resize_height(height)
  return if @h == height

  @h = height

  @upper_edge_panel.reposition(BIG_CORNER, @h - BIG_CORNER)

  upper_right_corner.y = @h - SMALL_CORNER
  upper_left_corner.y  = @h - BIG_CORNER
  left_edge.h          = @h - 2 * SMALL_CORNER
  right_edge.h         = @h - 2 * SMALL_CORNER
  @fill.h              = @h - 2 * SMALL_CORNER
  @header.y            = @h - 4
end

#resize_width(width) ⇒ Object

[View source]

109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'app/ui/panels/metal_panel.rb', line 109

def resize_width(width)
  return if @w == width

  @w = width

  @upper_edge_panel.resize_width(@w - BIG_CORNER - SMALL_CORNER)
  @upper_edge_panel.reposition(BIG_CORNER, @h - BIG_CORNER)

  right_edge.x         = BIG_CORNER + upper_edge_panel.width
  lower_edge.w         = @w - 2 * SMALL_CORNER
  upper_right_corner.x = @w - SMALL_CORNER
  lower_right_corner.x = @w - SMALL_CORNER
  @fill.w              = @w - 2 * SMALL_CORNER

  @header.truncate(@upper_edge_panel.left_edge.w + (upper_left_corner.w - @header.x))
end