Class: HexaPDF::Content::GraphicsState
- Inherits:
-
Object
- Object
- HexaPDF::Content::GraphicsState
- Defined in:
- lib/hexapdf/content/graphics_state.rb
Overview
A GraphicsState object holds all the graphic control parameters needed for correct operation when parsing or creating a content stream with a Processor object.
While a content stream is parsed/created, operations may use the current parameters or modify them.
The device-dependent graphics state parameters have not been implemented!
See: PDF2.0 s8.4.1
Instance Attribute Summary collapse
-
#alpha_source ⇒ Object
A boolean specifying whether the current soft mask and alpha parameters should be interpreted as shape values or opacity values.
-
#blend_mode ⇒ Object
The current blend mode for the transparent imaging model.
-
#character_spacing ⇒ Object
The character spacing in unscaled text units.
-
#ctm ⇒ Object
The current transformation matrix.
-
#fill_alpha ⇒ Object
The alpha constant for non-stroking operations in the transparent imaging model.
-
#fill_color ⇒ Object
The current color used for all other (i.e. non-stroking) painting operations.
-
#font ⇒ Object
The font for the text.
-
#font_size ⇒ Object
The font size.
-
#horizontal_scaling ⇒ Object
The horizontal text scaling.
-
#leading ⇒ Object
The leading in unscaled text units.
-
#line_cap_style ⇒ Object
The current line cap style (for the available values see LineCapStyle).
-
#line_dash_pattern ⇒ Object
The line dash pattern (see LineDashPattern).
-
#line_join_style ⇒ Object
The current line join style (for the available values see LineJoinStyle).
-
#line_width ⇒ Object
The current line width in user space units.
-
#miter_limit ⇒ Object
The maximum line length of mitered line joins for stroked paths.
-
#rendering_intent ⇒ Object
The rendering intent (only used for CIE-based colors; for the available values see RenderingIntent).
-
#scaled_character_spacing ⇒ Object
readonly
The scaled character spacing used in glyph displacement calculations.
-
#scaled_font_size ⇒ Object
readonly
The scaled font size used in glyph displacement calculations.
-
#scaled_horizontal_scaling ⇒ Object
readonly
The scaled horizontal scaling used in glyph displacement calculations.
-
#scaled_word_spacing ⇒ Object
readonly
The scaled word spacing used in glyph displacement calculations.
-
#soft_mask ⇒ Object
The soft mask specifying the mask shape or mask opacity value to be used in the transparent imaging model.
-
#stroke_adjustment ⇒ Object
The stroke adjustment for very small line width.
-
#stroke_alpha ⇒ Object
The alpha constant for stroking operations in the transparent imaging model.
-
#stroke_color ⇒ Object
The current color used for stroking operations during painting.
-
#text_knockout ⇒ Object
The text knockout, a boolean value.
-
#text_rendering_mode ⇒ Object
The text rendering mode.
-
#text_rise ⇒ Object
The text rise distance in unscaled text units.
-
#tlm ⇒ Object
The text line matrix which captures the state of the text matrix at the beginning of a line.
-
#tm ⇒ Object
The text matrix.
-
#word_spacing ⇒ Object
The word spacing in unscaled text units.
Instance Method Summary collapse
-
#fill_color_space ⇒ Object
:nodoc:.
-
#fill_color_space=(color_space) ⇒ Object
:nodoc:.
-
#initialize ⇒ GraphicsState
constructor
Initializes the graphics state parameters to their default values.
-
#restore ⇒ Object
Restores the graphics state from the internal stack.
-
#save ⇒ Object
Saves the current graphics state on the internal stack.
-
#saved_states? ⇒ Boolean
Returns
true
if the internal stack of saved graphic states contains entries. -
#stroke_color_space ⇒ Object
:nodoc:.
-
#stroke_color_space=(color_space) ⇒ Object
:nodoc:.
Constructor Details
#initialize ⇒ GraphicsState
Initializes the graphics state parameters to their default values.
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 |
# File 'lib/hexapdf/content/graphics_state.rb', line 580 def initialize @ctm = TransformationMatrix.new @stroke_color = @fill_color = GlobalConfiguration.constantize('color_space.map', :DeviceGray).new.default_color @line_width = 1.0 @line_cap_style = LineCapStyle::BUTT_CAP @line_join_style = LineJoinStyle::MITER_JOIN @miter_limit = 10.0 @line_dash_pattern = LineDashPattern.new @rendering_intent = RenderingIntent::RELATIVE_COLORIMETRIC @stroke_adjustment = false @blend_mode = :Normal @soft_mask = :None @stroke_alpha = @fill_alpha = 1.0 @alpha_source = false @tm = nil @tlm = nil @character_spacing = 0 @word_spacing = 0 @horizontal_scaling = 100 @leading = 0 @font = nil @font_size = 0 @text_rendering_mode = TextRenderingMode::FILL @text_rise = 0 @text_knockout = true @scaled_character_spacing = 0 @scaled_word_spacing = 0 @scaled_font_size = 0 @scaled_horizontal_scaling = 1 @stack = [] end |
Instance Attribute Details
#alpha_source ⇒ Object
A boolean specifying whether the current soft mask and alpha parameters should be interpreted as shape values or opacity values.
490 491 492 |
# File 'lib/hexapdf/content/graphics_state.rb', line 490 def alpha_source @alpha_source end |
#blend_mode ⇒ Object
The current blend mode for the transparent imaging model.
476 477 478 |
# File 'lib/hexapdf/content/graphics_state.rb', line 476 def blend_mode @blend_mode end |
#character_spacing ⇒ Object
The character spacing in unscaled text units.
It specifies the additional spacing used for the horizontal or vertical displacement of glyphs.
506 507 508 |
# File 'lib/hexapdf/content/graphics_state.rb', line 506 def character_spacing @character_spacing end |
#ctm ⇒ Object
The current transformation matrix.
445 446 447 |
# File 'lib/hexapdf/content/graphics_state.rb', line 445 def ctm @ctm end |
#fill_alpha ⇒ Object
The alpha constant for non-stroking operations in the transparent imaging model.
486 487 488 |
# File 'lib/hexapdf/content/graphics_state.rb', line 486 def fill_alpha @fill_alpha end |
#fill_color ⇒ Object
The current color used for all other (i.e. non-stroking) painting operations.
451 452 453 |
# File 'lib/hexapdf/content/graphics_state.rb', line 451 def fill_color @fill_color end |
#font ⇒ Object
The font for the text.
524 525 526 |
# File 'lib/hexapdf/content/graphics_state.rb', line 524 def font @font end |
#font_size ⇒ Object
The font size.
527 528 529 |
# File 'lib/hexapdf/content/graphics_state.rb', line 527 def font_size @font_size end |
#horizontal_scaling ⇒ Object
The horizontal text scaling.
The value specifies the percentage of the normal width that should be used.
516 517 518 |
# File 'lib/hexapdf/content/graphics_state.rb', line 516 def horizontal_scaling @horizontal_scaling end |
#leading ⇒ Object
The leading in unscaled text units.
It specifies the distance between the baselines of adjacent lines of text.
521 522 523 |
# File 'lib/hexapdf/content/graphics_state.rb', line 521 def leading @leading end |
#line_cap_style ⇒ Object
The current line cap style (for the available values see LineCapStyle).
457 458 459 |
# File 'lib/hexapdf/content/graphics_state.rb', line 457 def line_cap_style @line_cap_style end |
#line_dash_pattern ⇒ Object
The line dash pattern (see LineDashPattern).
466 467 468 |
# File 'lib/hexapdf/content/graphics_state.rb', line 466 def line_dash_pattern @line_dash_pattern end |
#line_join_style ⇒ Object
The current line join style (for the available values see LineJoinStyle).
460 461 462 |
# File 'lib/hexapdf/content/graphics_state.rb', line 460 def line_join_style @line_join_style end |
#line_width ⇒ Object
The current line width in user space units.
454 455 456 |
# File 'lib/hexapdf/content/graphics_state.rb', line 454 def line_width @line_width end |
#miter_limit ⇒ Object
The maximum line length of mitered line joins for stroked paths.
463 464 465 |
# File 'lib/hexapdf/content/graphics_state.rb', line 463 def miter_limit @miter_limit end |
#rendering_intent ⇒ Object
The rendering intent (only used for CIE-based colors; for the available values see RenderingIntent).
470 471 472 |
# File 'lib/hexapdf/content/graphics_state.rb', line 470 def rendering_intent @rendering_intent end |
#scaled_character_spacing ⇒ Object (readonly)
The scaled character spacing used in glyph displacement calculations.
This returns the character spacing multiplied by #scaled_horizontal_scaling.
See PDF2.0 s9.4.4
553 554 555 |
# File 'lib/hexapdf/content/graphics_state.rb', line 553 def scaled_character_spacing @scaled_character_spacing end |
#scaled_font_size ⇒ Object (readonly)
The scaled font size used in glyph displacement calculations.
This returns the font size multiplied by the scaling factor from glyph space to text space (0.001 for all fonts except Type3 fonts or the scaling specified in /FontMatrix for Type3 fonts) and multiplied by #scaled_horizontal_scaling.
See PDF2.0 s9.4.4, HexaPDF::Type::FontType3
569 570 571 |
# File 'lib/hexapdf/content/graphics_state.rb', line 569 def scaled_font_size @scaled_font_size end |
#scaled_horizontal_scaling ⇒ Object (readonly)
The scaled horizontal scaling used in glyph displacement calculations.
Since the horizontal scaling attribute is stored in percent of 100, this method returns the correct value for calculations.
See PDF2.0 s9.4.4
577 578 579 |
# File 'lib/hexapdf/content/graphics_state.rb', line 577 def scaled_horizontal_scaling @scaled_horizontal_scaling end |
#scaled_word_spacing ⇒ Object (readonly)
The scaled word spacing used in glyph displacement calculations.
This returns the word spacing multiplied by #scaled_horizontal_scaling.
See PDF2.0 s9.4.4
560 561 562 |
# File 'lib/hexapdf/content/graphics_state.rb', line 560 def scaled_word_spacing @scaled_word_spacing end |
#soft_mask ⇒ Object
The soft mask specifying the mask shape or mask opacity value to be used in the transparent imaging model.
480 481 482 |
# File 'lib/hexapdf/content/graphics_state.rb', line 480 def soft_mask @soft_mask end |
#stroke_adjustment ⇒ Object
The stroke adjustment for very small line width.
473 474 475 |
# File 'lib/hexapdf/content/graphics_state.rb', line 473 def stroke_adjustment @stroke_adjustment end |
#stroke_alpha ⇒ Object
The alpha constant for stroking operations in the transparent imaging model.
483 484 485 |
# File 'lib/hexapdf/content/graphics_state.rb', line 483 def stroke_alpha @stroke_alpha end |
#stroke_color ⇒ Object
The current color used for stroking operations during painting.
448 449 450 |
# File 'lib/hexapdf/content/graphics_state.rb', line 448 def stroke_color @stroke_color end |
#text_knockout ⇒ Object
The text knockout, a boolean value.
It specifies whether each glyph should be treated as separate elementary object for the purpose of color compositing in the transparent imaging model (knockout = false
) or if all glyphs together are treated as one elementary object (knockout = true
).
546 547 548 |
# File 'lib/hexapdf/content/graphics_state.rb', line 546 def text_knockout @text_knockout end |
#text_rendering_mode ⇒ Object
The text rendering mode.
It determines if and how the glyphs of a text should be shown (for all available values see TextRenderingMode).
533 534 535 |
# File 'lib/hexapdf/content/graphics_state.rb', line 533 def text_rendering_mode @text_rendering_mode end |
#text_rise ⇒ Object
The text rise distance in unscaled text units.
It specifies the distance that the baseline should be moved up or down from its default location.
539 540 541 |
# File 'lib/hexapdf/content/graphics_state.rb', line 539 def text_rise @text_rise end |
#tlm ⇒ Object
The text line matrix which captures the state of the text matrix at the beginning of a line.
As with the text matrix the text line matrix is non-nil only when inside a text object.
500 501 502 |
# File 'lib/hexapdf/content/graphics_state.rb', line 500 def tlm @tlm end |
#tm ⇒ Object
The text matrix.
This attribute is non-nil only when inside a text object.
495 496 497 |
# File 'lib/hexapdf/content/graphics_state.rb', line 495 def tm @tm end |
#word_spacing ⇒ Object
The word spacing in unscaled text units.
It works like the character spacing but is only applied to the ASCII space character.
511 512 513 |
# File 'lib/hexapdf/content/graphics_state.rb', line 511 def word_spacing @word_spacing end |
Instance Method Details
#fill_color_space ⇒ Object
:nodoc:
671 672 673 |
# File 'lib/hexapdf/content/graphics_state.rb', line 671 def fill_color_space @fill_color.color_space end |
#fill_color_space=(color_space) ⇒ Object
:nodoc:
675 676 677 |
# File 'lib/hexapdf/content/graphics_state.rb', line 675 def fill_color_space=(color_space) #:nodoc: self.fill_color = color_space.default_color end |
#restore ⇒ Object
Restores the graphics state from the internal stack.
Raises an error if the stack is empty.
632 633 634 635 636 637 638 639 640 641 642 643 644 |
# File 'lib/hexapdf/content/graphics_state.rb', line 632 def restore if @stack.empty? raise HexaPDF::Error, "Can't restore graphics state because the stack is empty" end @ctm, @stroke_color, @fill_color, @line_width, @line_cap_style, @line_join_style, @miter_limit, @line_dash_pattern, @rendering_intent, @stroke_adjustment, @blend_mode, @soft_mask, @stroke_alpha, @fill_alpha, @alpha_source, @character_spacing, @word_spacing, @horizontal_scaling, @leading, @font, @font_size, @text_rendering_mode, @text_rise, @text_knockout, @scaled_character_spacing, @scaled_word_spacing, @scaled_font_size, @scaled_horizontal_scaling = @stack.pop end |
#save ⇒ Object
Saves the current graphics state on the internal stack.
617 618 619 620 621 622 623 624 625 626 627 |
# File 'lib/hexapdf/content/graphics_state.rb', line 617 def save @stack.push([@ctm, @stroke_color, @fill_color, @line_width, @line_cap_style, @line_join_style, @miter_limit, @line_dash_pattern, @rendering_intent, @stroke_adjustment, @blend_mode, @soft_mask, @stroke_alpha, @fill_alpha, @alpha_source, @character_spacing, @word_spacing, @horizontal_scaling, @leading, @font, @font_size, @text_rendering_mode, @text_rise, @text_knockout, @scaled_character_spacing, @scaled_word_spacing, @scaled_font_size, @scaled_horizontal_scaling]) @ctm = @ctm.dup end |
#saved_states? ⇒ Boolean
Returns true
if the internal stack of saved graphic states contains entries.
647 648 649 |
# File 'lib/hexapdf/content/graphics_state.rb', line 647 def saved_states? !@stack.empty? end |
#stroke_color_space ⇒ Object
:nodoc:
657 658 659 |
# File 'lib/hexapdf/content/graphics_state.rb', line 657 def stroke_color_space @stroke_color.color_space end |
#stroke_color_space=(color_space) ⇒ Object
:nodoc:
661 662 663 |
# File 'lib/hexapdf/content/graphics_state.rb', line 661 def stroke_color_space=(color_space) # :nodoc: self.stroke_color = color_space.default_color end |