Class: Fidgit::ColorPicker

Inherits:
Composite show all
Defined in:
lib/fidgit/elements/color_picker.rb

Constant Summary

CHANNELS =
[:red, :green, :blue]
DEFAULT_CHANNEL_NAMES =
CHANNELS.map {|c| c.to_s.capitalize }
INDICATOR_HEIGHT =
25

Constants inherited from Composite

Fidgit::Composite::DEBUG_BORDER_COLOR

Constants inherited from Element

Element::DEFAULT_SCHEMA_FILE, Element::VALID_ALIGN_H, Element::VALID_ALIGN_V

Instance Attribute Summary

Attributes inherited from Packer

#spacing_h, #spacing_v

Attributes inherited from Element

#align_h, #align_v, #background_color, #border_thickness, #font, #padding_bottom, #padding_left, #padding_right, #padding_top, #parent, #tip, #z

Instance Method Summary (collapse)

Methods inherited from Container

#add, #button, #clear, #color_picker, #color_well, #combo_box, #file_browser, #grid, #group, #hit_element, #horizontal, #image_frame, #insert, #label, #list, #radio_button, #remove, #scroll_area, #scroll_window, #slider, #text_area, #to_s, #toggle_button, #update, #vertical, #write_tree, #x=, #y=

Methods inherited from Element

#default, #drag?, #draw, #draw_frame, #draw_rect, #enabled=, #enabled?, #height, #height=, #hit?, #max_height, #max_width, #min_height, #min_width, new, original_new, #outer_height, #outer_width, #recalc, schema, #to_s, #update, #width, #width=, #with, #x, #x=, #y, #y=

Methods included from Event

#events, included, new_event_handlers, #publish, #subscribe, #unsubscribe

Constructor Details

- (ColorPicker) initialize(options = {}, &block)



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
# File 'lib/fidgit/elements/color_picker.rb', line 27

def initialize(options = {}, &block)
  options = {
    padding: 0,
    spacing: 0,
    channel_names: DEFAULT_CHANNEL_NAMES,
    color: default(:color),
    indicator_height: default(:indicator_height),
  }.merge! options

  @color = options[:color].dup
  @indicator_height = options[:indicator_height]

  super(options)

  slider_width = width
  vertical do
    @sliders = {}
    CHANNELS.each_with_index do |channel, i|
      @sliders[channel] = slider(value: @color.send(channel), range: 0..255, width: slider_width,
                                 tip: options[:channel_names][i]) do |sender, value|
        @color.send "#{channel}=", value
        @indicator.background_color = @color
        publish :changed, @color.dup
      end
    end

    @indicator = label '', background_color: @color, width: slider_width, height: @indicator_height
  end
end

Instance Method Details

- (Object) color



12
# File 'lib/fidgit/elements/color_picker.rb', line 12

def color; @color.dup; end

- (Object) color=(value)



14
15
16
17
18
19
20
21
22
23
# File 'lib/fidgit/elements/color_picker.rb', line 14

def color=(value)
  @color = value.dup
  CHANNELS.each do |channel|
    @sliders[channel].value = @color.send channel
  end

  publish :changed, @color.dup

  value
end