Class: CTioga2::TextSizeWatcher
- Inherits:
-
Object
- Object
- CTioga2::TextSizeWatcher
- Defined in:
- lib/ctioga2/utils.rb
Overview
This class watches over a list of named texts and can be queried for size/position information.
Instance Attribute Summary collapse
-
#bb ⇒ Object
A left, bottom, right, up bounding box (postscript points).
-
#watched_names ⇒ Object
Watched text names.
Instance Method Summary collapse
- #compute_bb(t) ⇒ Object
-
#initialize ⇒ TextSizeWatcher
constructor
A new instance of TextSizeWatcher.
-
#update_margins(t, margins, padding = 2, min = 4) ⇒ Object
Given the MarginsBox with which the text was drawn, returns another MarginsBox item that specifies how much the text extends from the previous box.
- #watch(*names) ⇒ Object
Constructor Details
#initialize ⇒ TextSizeWatcher
Returns a new instance of TextSizeWatcher.
605 606 607 |
# File 'lib/ctioga2/utils.rb', line 605 def initialize @watched_names = Set.new end |
Instance Attribute Details
#bb ⇒ Object
A left, bottom, right, up bounding box (postscript points)
603 604 605 |
# File 'lib/ctioga2/utils.rb', line 603 def bb @bb end |
#watched_names ⇒ Object
Watched text names
600 601 602 |
# File 'lib/ctioga2/utils.rb', line 600 def watched_names @watched_names end |
Instance Method Details
#compute_bb(t) ⇒ Object
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 |
# File 'lib/ctioga2/utils.rb', line 649 def compute_bb(t) @bb = nil for w in @watched_names info = t.get_text_size(w) if info.key? 'points' # We need to take every single point, since for rotated # text, potentially all coordinates are different for p in info['points'] update_bb(*p) end end end end |
#update_margins(t, margins, padding = 2, min = 4) ⇒ Object
Given the MarginsBox with which the text was drawn, returns another MarginsBox item that specifies how much the text extends from the previous box. Works using the current frame coordinates.
Padding in big points
Min is the minimum size, also in big points.
621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 |
# File 'lib/ctioga2/utils.rb', line 621 def update_margins(t, margins, padding = 2, min = 4) compute_bb(t) if ! @bb # Don't change anything if the bounding box does not exist return margins end left, top, right, bottom = *margins.to_frame_coordinates(t) scl = 1/t.scaling_factor xl = scl * t.convert_page_to_output_x(t.convert_frame_to_page_x(left)) xr = scl * t.convert_page_to_output_x(t.convert_frame_to_page_x(right)) yt = scl * t.convert_page_to_output_y(t.convert_frame_to_page_y(top)) yb = scl * t.convert_page_to_output_y(t.convert_frame_to_page_y(bottom)) vals = [ xl - @bb[0], @bb[2] - xr, @bb[3] - yt, yb - @bb[1]].map do |x| x += padding x = if x > min x else min end Graphics::Types::Dimension.new(:bp, x) end return Graphics::Types::MarginsBox. new(*vals) end |
#watch(*names) ⇒ Object
609 610 611 |
# File 'lib/ctioga2/utils.rb', line 609 def watch(*names) @watched_names += names end |