Class: Shoes::Swt::LinkSegment
- Inherits:
-
Object
- Object
- Shoes::Swt::LinkSegment
- Defined in:
- shoes-swt/lib/shoes/swt/link_segment.rb
Defined Under Namespace
Classes: Region
Instance Method Summary collapse
- #add_region(left, top, right, bottom) ⇒ Object
- #add_region_for_single_line(first_line) ⇒ Object
- #add_regions_for_first_and_last_lines(first_line, last_line) ⇒ Object
- #add_regions_for_lines(lines) ⇒ Object
- #add_regions_for_remaining_lines(lines) ⇒ Object
- #end_position ⇒ Object
- #in_bounds?(x, y) ⇒ Boolean
-
#initialize(text_segment, range) ⇒ LinkSegment
constructor
A new instance of LinkSegment.
- #layout ⇒ Object
- #line_bounds ⇒ Object
- #line_in_bounds?(bound) ⇒ Boolean
- #lines_for_link ⇒ Object
- #offset_regions(left, top) ⇒ Object
- #start_position ⇒ Object
Constructor Details
#initialize(text_segment, range) ⇒ LinkSegment
Returns a new instance of LinkSegment.
6 7 8 9 10 11 12 13 14 15 16 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 6 def initialize(text_segment, range) @regions = [] @range = range @text_segment = text_segment # Don't create regions for empty links! return unless @range.count.positive? add_regions_for_lines(lines_for_link) offset_regions(text_segment.element_left, text_segment.element_top) end |
Instance Method Details
#add_region(left, top, right, bottom) ⇒ Object
65 66 67 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 65 def add_region(left, top, right, bottom) @regions << Region.new(left, top, right, bottom) end |
#add_region_for_single_line(first_line) ⇒ Object
46 47 48 49 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 46 def add_region_for_single_line(first_line) add_region(start_position.x, start_position.y, end_position.x, end_position.y + first_line.height) end |
#add_regions_for_first_and_last_lines(first_line, last_line) ⇒ Object
51 52 53 54 55 56 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 51 def add_regions_for_first_and_last_lines(first_line, last_line) add_region(start_position.x, start_position.y, layout.width, start_position.y + first_line.height) add_region(0, end_position.y, end_position.x, end_position.y + last_line.height) end |
#add_regions_for_lines(lines) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 18 def add_regions_for_lines(lines) first_line = lines.shift last_line = lines.pop if last_line.nil? add_region_for_single_line(first_line) else add_regions_for_first_and_last_lines(first_line, last_line) add_regions_for_remaining_lines(lines) end end |
#add_regions_for_remaining_lines(lines) ⇒ Object
58 59 60 61 62 63 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 58 def add_regions_for_remaining_lines(lines) lines.each do |line| add_region(line.x, line.y, line.x + line.width, line.y + line.height) end end |
#end_position ⇒ Object
83 84 85 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 83 def end_position @text_segment.get_location(@range.last, true) end |
#in_bounds?(x, y) ⇒ Boolean
75 76 77 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 75 def in_bounds?(x, y) @regions.any? { |region| region.in_bounds?(x, y) } end |
#layout ⇒ Object
87 88 89 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 87 def layout @text_segment.layout end |
#line_bounds ⇒ Object
36 37 38 39 40 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 36 def line_bounds (0..layout.line_count - 1).map do |index| layout.get_line_bounds(index) end end |
#line_in_bounds?(bound) ⇒ Boolean
42 43 44 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 42 def line_in_bounds?(bound) bound.y >= start_position.y && bound.y <= end_position.y end |
#lines_for_link ⇒ Object
30 31 32 33 34 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 30 def lines_for_link line_bounds.select do |bound| line_in_bounds?(bound) end end |
#offset_regions(left, top) ⇒ Object
69 70 71 72 73 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 69 def offset_regions(left, top) @regions.each do |region| region.offset_by!(left, top) end end |
#start_position ⇒ Object
79 80 81 |
# File 'shoes-swt/lib/shoes/swt/link_segment.rb', line 79 def start_position @text_segment.get_location(@range.first, false) end |