Class: Fidgit::Selection
Constant Summary collapse
- MIN_DRAG_DISTANCE =
2
Instance Method Summary collapse
- #[](index) ⇒ Object
- #add(object) ⇒ Object
- #begin_drag(x, y) ⇒ Object
- #clear ⇒ Object
-
#dragging? ⇒ Boolean
Current being dragged?.
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #end_drag ⇒ Object
- #include?(object) ⇒ Boolean
-
#initialize ⇒ Selection
constructor
A new instance of Selection.
-
#moved? ⇒ Boolean
Actually moved during a dragging operation?.
- #remove(object) ⇒ Object
-
#reset_drag ⇒ Object
Move all dragged object back to original positions.
- #size ⇒ Object
- #to_a ⇒ Object
- #update_drag(x, y) ⇒ Object
Constructor Details
#initialize ⇒ Selection
Returns a new instance of Selection.
20 21 22 23 24 |
# File 'lib/fidgit/selection.rb', line 20 def initialize @items = [] @moved = false @dragging = false end |
Instance Method Details
#[](index) ⇒ Object
9 |
# File 'lib/fidgit/selection.rb', line 9 def [](index); @items[index]; end |
#add(object) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/fidgit/selection.rb', line 26 def add(object) object.selected = true @items.push(object) self end |
#begin_drag(x, y) ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/fidgit/selection.rb', line 49 def begin_drag(x, y) @initial_x, @initial_y = x, y @last_x, @last_y = x, y @dragging = true @moved = false self end |
#clear ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/fidgit/selection.rb', line 41 def clear end_drag if dragging? @items.each { |o| o.selected = false; o.dragging = false } @items.clear self end |
#dragging? ⇒ Boolean
Current being dragged?
15 |
# File 'lib/fidgit/selection.rb', line 15 def dragging?; @dragging; end |
#each(&block) ⇒ Object
10 |
# File 'lib/fidgit/selection.rb', line 10 def each(&block); @items.each(&block); end |
#empty? ⇒ Boolean
8 |
# File 'lib/fidgit/selection.rb', line 8 def empty?; @items.empty?; end |
#end_drag ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fidgit/selection.rb', line 58 def end_drag @items.each do |object| object.x, object.y = object.x.round, object.y.round object.dragging = false end @dragging = false @moved = false self end |
#include?(object) ⇒ Boolean
12 |
# File 'lib/fidgit/selection.rb', line 12 def include?(object); @items.include? object; end |
#moved? ⇒ Boolean
Actually moved during a dragging operation?
18 |
# File 'lib/fidgit/selection.rb', line 18 def moved?; @moved; end |
#remove(object) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/fidgit/selection.rb', line 33 def remove(object) @items.delete(object) object.selected = false object.dragging = false self end |
#reset_drag ⇒ Object
Move all dragged object back to original positions.
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/fidgit/selection.rb', line 70 def reset_drag if moved? @items.each do |o| o.x += @initial_x - @last_x o.y += @initial_y - @last_y end end self.end_drag self end |
#size ⇒ Object
7 |
# File 'lib/fidgit/selection.rb', line 7 def size; @items.size; end |
#to_a ⇒ Object
11 |
# File 'lib/fidgit/selection.rb', line 11 def to_a; @items.dup; end |
#update_drag(x, y) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/fidgit/selection.rb', line 83 def update_drag(x, y) x, y = x.round, y.round # If the mouse has been dragged far enough from the initial click position, then 'pick up' the objects and drag. unless moved? if distance(@initial_x, @initial_y, x, y) > MIN_DRAG_DISTANCE @items.each { |o| o.dragging = true } @moved = true end end if moved? @items.each do |o| o.x += x - @last_x o.y += y - @last_y end @last_x, @last_y = x, y end self end |