gruff 0.13.0-java → 0.14.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +66 -0
- data/.rubocop.yml +6 -10
- data/.rubocop_todo.yml +19 -85
- data/CHANGELOG.md +10 -0
- data/README.md +6 -7
- data/gruff.gemspec +2 -4
- data/lib/gruff.rb +1 -0
- data/lib/gruff/accumulator_bar.rb +3 -1
- data/lib/gruff/area.rb +5 -8
- data/lib/gruff/bar.rb +19 -23
- data/lib/gruff/base.rb +134 -96
- data/lib/gruff/bezier.rb +4 -6
- data/lib/gruff/bullet.rb +11 -10
- data/lib/gruff/dot.rb +10 -10
- data/lib/gruff/font.rb +39 -0
- data/lib/gruff/helper/stacked_mixin.rb +1 -2
- data/lib/gruff/histogram.rb +9 -7
- data/lib/gruff/line.rb +55 -46
- data/lib/gruff/mini/bar.rb +9 -6
- data/lib/gruff/mini/legend.rb +12 -8
- data/lib/gruff/mini/pie.rb +9 -6
- data/lib/gruff/mini/side_bar.rb +9 -6
- data/lib/gruff/net.rb +9 -15
- data/lib/gruff/patch/string.rb +1 -1
- data/lib/gruff/pie.rb +23 -65
- data/lib/gruff/renderer/bezier.rb +8 -9
- data/lib/gruff/renderer/circle.rb +8 -9
- data/lib/gruff/renderer/dash_line.rb +9 -10
- data/lib/gruff/renderer/dot.rb +13 -14
- data/lib/gruff/renderer/ellipse.rb +8 -9
- data/lib/gruff/renderer/line.rb +8 -9
- data/lib/gruff/renderer/polygon.rb +9 -10
- data/lib/gruff/renderer/polyline.rb +8 -9
- data/lib/gruff/renderer/rectangle.rb +7 -8
- data/lib/gruff/renderer/renderer.rb +21 -36
- data/lib/gruff/renderer/text.rb +21 -37
- data/lib/gruff/scatter.rb +41 -46
- data/lib/gruff/scene.rb +15 -13
- data/lib/gruff/side_bar.rb +14 -30
- data/lib/gruff/side_stacked_bar.rb +8 -11
- data/lib/gruff/spider.rb +11 -16
- data/lib/gruff/stacked_area.rb +10 -11
- data/lib/gruff/stacked_bar.rb +9 -9
- data/lib/gruff/store/store.rb +6 -10
- data/lib/gruff/themes.rb +6 -6
- data/lib/gruff/version.rb +1 -1
- data/rails_generators/gruff/templates/controller.rb +1 -1
- metadata +4 -21
- data/.travis.yml +0 -23
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/lib/gruff/photo_bar.rb +0 -93
    
        data/lib/gruff/bar.rb
    CHANGED
    
    | @@ -33,7 +33,21 @@ class Gruff::Bar < Gruff::Base | |
| 33 33 | 
             
              # Prevent drawing of column labels below a bar graph.  Default is +false+.
         | 
| 34 34 | 
             
              attr_writer :hide_labels
         | 
| 35 35 |  | 
| 36 | 
            -
               | 
| 36 | 
            +
              # Can be used to adjust the spaces between the bars.
         | 
| 37 | 
            +
              # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
         | 
| 38 | 
            +
              # and 1 means that each bars' width is nearly 0 (so each bar is a simple
         | 
| 39 | 
            +
              # line with no x dimension).
         | 
| 40 | 
            +
              #
         | 
| 41 | 
            +
              # Default value is +0.9+.
         | 
| 42 | 
            +
              def spacing_factor=(space_percent)
         | 
| 43 | 
            +
                raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                @spacing_factor = (1 - space_percent)
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            private
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              def initialize_attributes
         | 
| 37 51 | 
             
                super
         | 
| 38 52 | 
             
                @spacing_factor = 0.9
         | 
| 39 53 | 
             
                @group_spacing = 10
         | 
| @@ -41,34 +55,16 @@ class Gruff::Bar < Gruff::Base | |
| 41 55 | 
             
                @show_labels_for_bar_values = false
         | 
| 42 56 | 
             
                @hide_labels = false
         | 
| 43 57 | 
             
              end
         | 
| 44 | 
            -
              private :initialize_ivars
         | 
| 45 58 |  | 
| 46 | 
            -
              def  | 
| 59 | 
            +
              def setup_drawing
         | 
| 47 60 | 
             
                # Labels will be centered over the left of the bar if
         | 
| 48 61 | 
             
                # there are more labels than columns. This is basically the same
         | 
| 49 62 | 
             
                # as where it would be for a line graph.
         | 
| 50 63 | 
             
                @center_labels_over_point = (@labels.keys.length > column_count)
         | 
| 51 64 |  | 
| 52 65 | 
             
                super
         | 
| 53 | 
            -
                return unless data_given?
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                draw_bars
         | 
| 56 66 | 
             
              end
         | 
| 57 67 |  | 
| 58 | 
            -
              # Can be used to adjust the spaces between the bars.
         | 
| 59 | 
            -
              # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
         | 
| 60 | 
            -
              # and 1 means that each bars' width is nearly 0 (so each bar is a simple
         | 
| 61 | 
            -
              # line with no x dimension).
         | 
| 62 | 
            -
              #
         | 
| 63 | 
            -
              # Default value is +0.9+.
         | 
| 64 | 
            -
              def spacing_factor=(space_percent)
         | 
| 65 | 
            -
                raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                @spacing_factor = (1 - space_percent)
         | 
| 68 | 
            -
              end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
            protected
         | 
| 71 | 
            -
             | 
| 72 68 | 
             
              def hide_labels?
         | 
| 73 69 | 
             
                @hide_labels
         | 
| 74 70 | 
             
              end
         | 
| @@ -84,7 +80,7 @@ protected | |
| 84 80 | 
             
              # Value to avoid completely overwriting the coordinate axis
         | 
| 85 81 | 
             
              AXIS_MARGIN = 0.5
         | 
| 86 82 |  | 
| 87 | 
            -
              def  | 
| 83 | 
            +
              def draw_graph
         | 
| 88 84 | 
             
                # Setup spacing.
         | 
| 89 85 | 
             
                #
         | 
| 90 86 | 
             
                # Columns sit side-by-side.
         | 
| @@ -112,7 +108,7 @@ protected | |
| 112 108 | 
             
                    left_y, right_y = conversion.get_top_bottom_scaled(data_point)
         | 
| 113 109 |  | 
| 114 110 | 
             
                    # create new bar
         | 
| 115 | 
            -
                    rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
         | 
| 111 | 
            +
                    rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: data_row.color)
         | 
| 116 112 | 
             
                    rect_renderer.render(left_x, left_y - AXIS_MARGIN, right_x, right_y - AXIS_MARGIN)
         | 
| 117 113 |  | 
| 118 114 | 
             
                    # Calculate center based on bar_width and current row
         | 
| @@ -123,7 +119,7 @@ protected | |
| 123 119 | 
             
                    if @show_labels_for_bar_values
         | 
| 124 120 | 
             
                      bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
         | 
| 125 121 | 
             
                      bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
         | 
| 126 | 
            -
                        draw_value_label(x, y, text | 
| 122 | 
            +
                        draw_value_label(x, y, text)
         | 
| 127 123 | 
             
                      end
         | 
| 128 124 | 
             
                    end
         | 
| 129 125 | 
             
                  end
         | 
    
        data/lib/gruff/base.rb
    CHANGED
    
    | @@ -93,15 +93,6 @@ module Gruff | |
| 93 93 | 
             
                # Set the large title of the graph displayed at the top.
         | 
| 94 94 | 
             
                attr_writer :title
         | 
| 95 95 |  | 
| 96 | 
            -
                # Same as {#font=} but for the title.
         | 
| 97 | 
            -
                attr_writer :title_font
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                # Specifies whether to draw the title bolded or not. Default is +true+.
         | 
| 100 | 
            -
                attr_writer :bold_title
         | 
| 101 | 
            -
             | 
| 102 | 
            -
                # Specifies the text color.
         | 
| 103 | 
            -
                attr_writer :font_color
         | 
| 104 | 
            -
             | 
| 105 96 | 
             
                # Prevent drawing of line markers. Default is +false+.
         | 
| 106 97 | 
             
                attr_writer :hide_line_markers
         | 
| 107 98 |  | 
| @@ -118,21 +109,9 @@ module Gruff | |
| 118 109 | 
             
                # to +"No Data."+.
         | 
| 119 110 | 
             
                attr_writer :no_data_message
         | 
| 120 111 |  | 
| 121 | 
            -
                # Set the font size of the large title at the top of the graph. Default is +36+.
         | 
| 122 | 
            -
                attr_writer :title_font_size
         | 
| 123 | 
            -
             | 
| 124 | 
            -
                # Optionally set the size of the font. Based on an 800x600px graph.
         | 
| 125 | 
            -
                # Default is +20+.
         | 
| 126 | 
            -
                #
         | 
| 127 | 
            -
                # Will be scaled down if the graph is smaller than 800px wide.
         | 
| 128 | 
            -
                attr_writer :legend_font_size
         | 
| 129 | 
            -
             | 
| 130 112 | 
             
                # Display the legend under the graph. Default is +false+.
         | 
| 131 113 | 
             
                attr_writer :legend_at_bottom
         | 
| 132 114 |  | 
| 133 | 
            -
                # The font size of the labels around the graph. Default is +21+.
         | 
| 134 | 
            -
                attr_writer :marker_font_size
         | 
| 135 | 
            -
             | 
| 136 115 | 
             
                # Set the color of the auxiliary lines.
         | 
| 137 116 | 
             
                attr_writer :marker_color
         | 
| 138 117 |  | 
| @@ -181,7 +160,7 @@ module Gruff | |
| 181 160 | 
             
                  @rows.freeze
         | 
| 182 161 |  | 
| 183 162 | 
             
                  initialize_graph_scale
         | 
| 184 | 
            -
                   | 
| 163 | 
            +
                  initialize_attributes
         | 
| 185 164 | 
             
                  initialize_store
         | 
| 186 165 |  | 
| 187 166 | 
             
                  self.theme = Themes::KEYNOTE
         | 
| @@ -209,7 +188,7 @@ module Gruff | |
| 209 188 | 
             
                #
         | 
| 210 189 | 
             
                # This makes it possible to set defaults in a subclass but still allow
         | 
| 211 190 | 
             
                # developers to change this values in their program.
         | 
| 212 | 
            -
                def  | 
| 191 | 
            +
                def initialize_attributes
         | 
| 213 192 | 
             
                  @marker_count = nil
         | 
| 214 193 | 
             
                  @maximum_value = @minimum_value = nil
         | 
| 215 194 | 
             
                  @labels = {}
         | 
| @@ -217,13 +196,9 @@ module Gruff | |
| 217 196 | 
             
                  @sorted_drawing = false
         | 
| 218 197 | 
             
                  @title = nil
         | 
| 219 198 |  | 
| 220 | 
            -
                  @title_font =  | 
| 221 | 
            -
                  @ | 
| 222 | 
            -
                  @ | 
| 223 | 
            -
             | 
| 224 | 
            -
                  @marker_font_size = 21.0
         | 
| 225 | 
            -
                  @legend_font_size = 20.0
         | 
| 226 | 
            -
                  @title_font_size = 36.0
         | 
| 199 | 
            +
                  @title_font = Gruff::Font.new(size: 36.0, bold: true)
         | 
| 200 | 
            +
                  @marker_font = Gruff::Font.new(size: 21.0)
         | 
| 201 | 
            +
                  @legend_font = Gruff::Font.new(size: 20.0)
         | 
| 227 202 |  | 
| 228 203 | 
             
                  @top_margin = @bottom_margin = @left_margin = @right_margin = DEFAULT_MARGIN
         | 
| 229 204 | 
             
                  @legend_margin = LEGEND_MARGIN
         | 
| @@ -247,7 +222,7 @@ module Gruff | |
| 247 222 | 
             
                  @x_axis_label_format = nil
         | 
| 248 223 | 
             
                  @y_axis_label_format = nil
         | 
| 249 224 | 
             
                end
         | 
| 250 | 
            -
                protected : | 
| 225 | 
            +
                protected :initialize_attributes
         | 
| 251 226 |  | 
| 252 227 | 
             
                # Sets the top, bottom, left and right margins to +margin+.
         | 
| 253 228 | 
             
                #
         | 
| @@ -262,8 +237,62 @@ module Gruff | |
| 262 237 | 
             
                # @param font_path [String] The path to font.
         | 
| 263 238 | 
             
                #
         | 
| 264 239 | 
             
                def font=(font_path)
         | 
| 265 | 
            -
                  @ | 
| 266 | 
            -
                   | 
| 240 | 
            +
                  @title_font.path = font_path unless @title_font.path
         | 
| 241 | 
            +
                  @marker_font.path = font_path
         | 
| 242 | 
            +
                  @legend_font.path = font_path
         | 
| 243 | 
            +
                end
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                # Same as {#font=} but for the title.
         | 
| 246 | 
            +
                #
         | 
| 247 | 
            +
                # @param font_path [String] The path to font.
         | 
| 248 | 
            +
                #
         | 
| 249 | 
            +
                def title_font=(font_path)
         | 
| 250 | 
            +
                  @title_font.path = font_path
         | 
| 251 | 
            +
                end
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                # Set the font size of the large title at the top of the graph. Default is +36+.
         | 
| 254 | 
            +
                #
         | 
| 255 | 
            +
                # @param value [Numeric] title font size
         | 
| 256 | 
            +
                #
         | 
| 257 | 
            +
                def title_font_size=(value)
         | 
| 258 | 
            +
                  @title_font.size = value
         | 
| 259 | 
            +
                end
         | 
| 260 | 
            +
             | 
| 261 | 
            +
                # The font size of the labels around the graph. Default is +21+.
         | 
| 262 | 
            +
                #
         | 
| 263 | 
            +
                # @param value [Numeric] marker font size
         | 
| 264 | 
            +
                #
         | 
| 265 | 
            +
                def marker_font_size=(value)
         | 
| 266 | 
            +
                  @marker_font.size = value
         | 
| 267 | 
            +
                end
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                # Optionally set the size of the font. Based on an 800x600px graph.
         | 
| 270 | 
            +
                # Default is +20+.
         | 
| 271 | 
            +
                #
         | 
| 272 | 
            +
                # Will be scaled down if the graph is smaller than 800px wide.
         | 
| 273 | 
            +
                #
         | 
| 274 | 
            +
                # @param value [Numeric] legend font size
         | 
| 275 | 
            +
                #
         | 
| 276 | 
            +
                def legend_font_size=(value)
         | 
| 277 | 
            +
                  @legend_font.size = value
         | 
| 278 | 
            +
                end
         | 
| 279 | 
            +
             | 
| 280 | 
            +
                # Specifies whether to draw the title bolded or not. Default is +true+.
         | 
| 281 | 
            +
                #
         | 
| 282 | 
            +
                # @param value [Boolean] specifies whether to draw the title bolded or not.
         | 
| 283 | 
            +
                #
         | 
| 284 | 
            +
                def bold_title=(value)
         | 
| 285 | 
            +
                  @title_font.bold = value
         | 
| 286 | 
            +
                end
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                # Specifies the text color.
         | 
| 289 | 
            +
                #
         | 
| 290 | 
            +
                # @param value [String] color
         | 
| 291 | 
            +
                #
         | 
| 292 | 
            +
                def font_color=(value)
         | 
| 293 | 
            +
                  @title_font.color = value
         | 
| 294 | 
            +
                  @marker_font.color = value
         | 
| 295 | 
            +
                  @legend_font.color = value
         | 
| 267 296 | 
             
                end
         | 
| 268 297 |  | 
| 269 298 | 
             
                # Add a color to the list of available colors for lines.
         | 
| @@ -332,12 +361,13 @@ module Gruff | |
| 332 361 | 
             
                  }
         | 
| 333 362 | 
             
                  @theme_options = defaults.merge options
         | 
| 334 363 |  | 
| 364 | 
            +
                  self.marker_color = @theme_options[:marker_color]
         | 
| 365 | 
            +
                  self.font_color = @theme_options[:font_color] || @marker_color
         | 
| 366 | 
            +
             | 
| 335 367 | 
             
                  @colors = @theme_options[:colors]
         | 
| 336 | 
            -
                  @marker_color = @theme_options[:marker_color]
         | 
| 337 368 | 
             
                  @marker_shadow_color = @theme_options[:marker_shadow_color]
         | 
| 338 | 
            -
                  @font_color = @theme_options[:font_color] || @marker_color
         | 
| 339 369 |  | 
| 340 | 
            -
                  Gruff::Renderer. | 
| 370 | 
            +
                  @renderer = Gruff::Renderer.new(@columns, @rows, @scale, @theme_options)
         | 
| 341 371 | 
             
                end
         | 
| 342 372 |  | 
| 343 373 | 
             
                # Apply Apple's keynote theme.
         | 
| @@ -439,8 +469,8 @@ module Gruff | |
| 439 469 | 
             
                def to_image
         | 
| 440 470 | 
             
                  @to_image ||= begin
         | 
| 441 471 | 
             
                    draw
         | 
| 442 | 
            -
                     | 
| 443 | 
            -
                     | 
| 472 | 
            +
                    renderer.finish
         | 
| 473 | 
            +
                    renderer.image
         | 
| 444 474 | 
             
                  end
         | 
| 445 475 | 
             
                end
         | 
| 446 476 |  | 
| @@ -456,27 +486,29 @@ module Gruff | |
| 456 486 | 
             
                  end
         | 
| 457 487 | 
             
                end
         | 
| 458 488 |  | 
| 459 | 
            -
             | 
| 460 | 
            -
             | 
| 461 | 
            -
                # Overridden by subclasses to do the actual plotting of the graph.
         | 
| 462 | 
            -
                #
         | 
| 463 | 
            -
                # Subclasses should start by calling super() for this method.
         | 
| 489 | 
            +
                # Draw a graph.
         | 
| 464 490 | 
             
                def draw
         | 
| 491 | 
            +
                  setup_data
         | 
| 492 | 
            +
             | 
| 465 493 | 
             
                  # Maybe should be done in one of the following functions for more granularity.
         | 
| 466 494 | 
             
                  unless data_given?
         | 
| 467 495 | 
             
                    draw_no_data
         | 
| 468 496 | 
             
                    return
         | 
| 469 497 | 
             
                  end
         | 
| 470 498 |  | 
| 471 | 
            -
                  setup_data
         | 
| 472 499 | 
             
                  setup_drawing
         | 
| 473 500 |  | 
| 474 501 | 
             
                  draw_legend
         | 
| 475 502 | 
             
                  draw_line_markers
         | 
| 476 503 | 
             
                  draw_axis_labels
         | 
| 477 504 | 
             
                  draw_title
         | 
| 505 | 
            +
                  draw_graph
         | 
| 478 506 | 
             
                end
         | 
| 479 507 |  | 
| 508 | 
            +
              protected
         | 
| 509 | 
            +
             | 
| 510 | 
            +
                attr_reader :renderer
         | 
| 511 | 
            +
             | 
| 480 512 | 
             
                # Perform data manipulation before calculating chart measurements
         | 
| 481 513 | 
             
                def setup_data # :nodoc:
         | 
| 482 514 | 
             
                  if @y_axis_increment && !@hide_line_markers
         | 
| @@ -581,13 +613,13 @@ module Gruff | |
| 581 613 | 
             
                    x_axis_label_y_coordinate = @graph_bottom + LABEL_MARGIN + @marker_caps_height
         | 
| 582 614 |  | 
| 583 615 | 
             
                    # TODO: Center between graph area
         | 
| 584 | 
            -
                    text_renderer = Gruff::Renderer::Text.new(@x_axis_label, font: @ | 
| 616 | 
            +
                    text_renderer = Gruff::Renderer::Text.new(renderer, @x_axis_label, font: @marker_font)
         | 
| 585 617 | 
             
                    text_renderer.add_to_render_queue(@raw_columns, 1.0, 0.0, x_axis_label_y_coordinate)
         | 
| 586 618 | 
             
                  end
         | 
| 587 619 |  | 
| 588 620 | 
             
                  if @y_axis_label
         | 
| 589 621 | 
             
                    # Y Axis, rotated vertically
         | 
| 590 | 
            -
                    text_renderer = Gruff::Renderer::Text.new(@y_axis_label, font: @ | 
| 622 | 
            +
                    text_renderer = Gruff::Renderer::Text.new(renderer, @y_axis_label, font: @marker_font, rotation: -90)
         | 
| 591 623 | 
             
                    text_renderer.add_to_render_queue(1.0, @raw_rows, @left_margin + @marker_caps_height / 2.0, 0.0, Magick::CenterGravity)
         | 
| 592 624 | 
             
                  end
         | 
| 593 625 | 
             
                end
         | 
| @@ -602,13 +634,13 @@ module Gruff | |
| 602 634 | 
             
                  (0..marker_count).each do |index|
         | 
| 603 635 | 
             
                    y = @graph_top + @graph_height - index.to_f * increment_scaled
         | 
| 604 636 |  | 
| 605 | 
            -
                    line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
         | 
| 637 | 
            +
                    line_renderer = Gruff::Renderer::Line.new(renderer, color: @marker_color, shadow_color: @marker_shadow_color)
         | 
| 606 638 | 
             
                    line_renderer.render(@graph_left, y, @graph_right, y)
         | 
| 607 639 |  | 
| 608 640 | 
             
                    unless @hide_line_numbers
         | 
| 609 641 | 
             
                      marker_label = BigDecimal(index.to_s) * BigDecimal(@increment.to_s) + BigDecimal(minimum_value.to_s)
         | 
| 610 642 | 
             
                      label = y_axis_label(marker_label, @increment)
         | 
| 611 | 
            -
                      text_renderer = Gruff::Renderer::Text.new(label, font: @ | 
| 643 | 
            +
                      text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @marker_font)
         | 
| 612 644 | 
             
                      text_renderer.add_to_render_queue(@graph_left - LABEL_MARGIN, 1.0, 0.0, y, Magick::EastGravity)
         | 
| 613 645 | 
             
                    end
         | 
| 614 646 | 
             
                  end
         | 
| @@ -641,17 +673,17 @@ module Gruff | |
| 641 673 | 
             
                    next if legend_label.empty?
         | 
| 642 674 |  | 
| 643 675 | 
             
                    # Draw label
         | 
| 644 | 
            -
                    text_renderer = Gruff::Renderer::Text.new(legend_label, font: @ | 
| 676 | 
            +
                    text_renderer = Gruff::Renderer::Text.new(renderer, legend_label, font: @legend_font)
         | 
| 645 677 | 
             
                    text_renderer.add_to_render_queue(@raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, Magick::WestGravity)
         | 
| 646 678 |  | 
| 647 679 | 
             
                    # Now draw box with color of this dataset
         | 
| 648 | 
            -
                    rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
         | 
| 680 | 
            +
                    rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: store.data[index].color)
         | 
| 649 681 | 
             
                    rect_renderer.render(current_x_offset,
         | 
| 650 682 | 
             
                                         current_y_offset - legend_square_width / 2.0,
         | 
| 651 683 | 
             
                                         current_x_offset + legend_square_width,
         | 
| 652 684 | 
             
                                         current_y_offset + legend_square_width / 2.0)
         | 
| 653 685 |  | 
| 654 | 
            -
                    width = calculate_width(@ | 
| 686 | 
            +
                    width = calculate_width(@legend_font, legend_label)
         | 
| 655 687 | 
             
                    current_x_offset += width + (legend_square_width * 2.7)
         | 
| 656 688 | 
             
                    label_widths.first.shift
         | 
| 657 689 |  | 
| @@ -672,15 +704,12 @@ module Gruff | |
| 672 704 | 
             
                def draw_title
         | 
| 673 705 | 
             
                  return if hide_title?
         | 
| 674 706 |  | 
| 675 | 
            -
                   | 
| 676 | 
            -
                  font_weight = @bold_title ? Magick::BoldWeight : Magick::NormalWeight
         | 
| 677 | 
            -
                  font_size = @title_font_size
         | 
| 678 | 
            -
             | 
| 679 | 
            -
                  metrics = Renderer::Text.metrics(@title, font, font_size, font_weight)
         | 
| 707 | 
            +
                  metrics = Gruff::Renderer::Text.new(renderer, @title, font: @title_font).metrics
         | 
| 680 708 | 
             
                  if metrics.width > @raw_columns
         | 
| 681 | 
            -
                     | 
| 709 | 
            +
                    @title_font.size = @title_font.size * (@raw_columns / metrics.width) * 0.95
         | 
| 682 710 | 
             
                  end
         | 
| 683 | 
            -
             | 
| 711 | 
            +
             | 
| 712 | 
            +
                  text_renderer = Gruff::Renderer::Text.new(renderer, @title, font: @title_font)
         | 
| 684 713 | 
             
                  text_renderer.add_to_render_queue(@raw_columns, 1.0, 0, @top_margin)
         | 
| 685 714 | 
             
                end
         | 
| 686 715 |  | 
| @@ -714,24 +743,31 @@ module Gruff | |
| 714 743 |  | 
| 715 744 | 
             
                def draw_label_at(width, height, x, y, text, gravity = Magick::NorthGravity)
         | 
| 716 745 | 
             
                  label_text = truncate_label_text(text)
         | 
| 717 | 
            -
                  text_renderer = Gruff::Renderer::Text.new(label_text, font: @ | 
| 746 | 
            +
                  text_renderer = Gruff::Renderer::Text.new(renderer, label_text, font: @marker_font)
         | 
| 718 747 | 
             
                  text_renderer.add_to_render_queue(width, height, x, y, gravity)
         | 
| 719 748 | 
             
                end
         | 
| 720 749 |  | 
| 721 750 | 
             
                # Draws the data value over the data point in bar graphs
         | 
| 722 | 
            -
                def draw_value_label(x_offset, y_offset, data_point | 
| 723 | 
            -
                  return if @hide_line_markers | 
| 751 | 
            +
                def draw_value_label(x_offset, y_offset, data_point)
         | 
| 752 | 
            +
                  return if @hide_line_markers
         | 
| 724 753 |  | 
| 725 | 
            -
                  text_renderer = Gruff::Renderer::Text.new(data_point, font: @ | 
| 754 | 
            +
                  text_renderer = Gruff::Renderer::Text.new(renderer, data_point, font: @marker_font)
         | 
| 726 755 | 
             
                  text_renderer.add_to_render_queue(1.0, 1.0, x_offset, y_offset)
         | 
| 727 756 | 
             
                end
         | 
| 728 757 |  | 
| 729 758 | 
             
                # Shows an error message because you have no data.
         | 
| 730 759 | 
             
                def draw_no_data
         | 
| 731 | 
            -
                   | 
| 760 | 
            +
                  font = @title_font.dup
         | 
| 761 | 
            +
                  font.size = 80
         | 
| 762 | 
            +
                  font.bold = false
         | 
| 763 | 
            +
                  text_renderer = Gruff::Renderer::Text.new(renderer, @no_data_message, font: font)
         | 
| 732 764 | 
             
                  text_renderer.render(@raw_columns, @raw_rows, 0, 0, Magick::CenterGravity)
         | 
| 733 765 | 
             
                end
         | 
| 734 766 |  | 
| 767 | 
            +
                def draw_graph
         | 
| 768 | 
            +
                  raise 'Should implement this method at inherited class.'
         | 
| 769 | 
            +
                end
         | 
| 770 | 
            +
             | 
| 735 771 | 
             
                # Resets everything to defaults (except data).
         | 
| 736 772 | 
             
                def reset_themes
         | 
| 737 773 | 
             
                  @theme_options = {}
         | 
| @@ -794,15 +830,15 @@ module Gruff | |
| 794 830 | 
             
              private
         | 
| 795 831 |  | 
| 796 832 | 
             
                def setup_marker_caps_height
         | 
| 797 | 
            -
                  hide_bottom_label_area? ? 0 : calculate_caps_height(@ | 
| 833 | 
            +
                  hide_bottom_label_area? ? 0 : calculate_caps_height(@marker_font)
         | 
| 798 834 | 
             
                end
         | 
| 799 835 |  | 
| 800 836 | 
             
                def setup_title_caps_height
         | 
| 801 | 
            -
                  hide_title? ? 0 : calculate_caps_height(@ | 
| 837 | 
            +
                  hide_title? ? 0 : calculate_caps_height(@title_font) * @title.lines.to_a.size
         | 
| 802 838 | 
             
                end
         | 
| 803 839 |  | 
| 804 840 | 
             
                def setup_legend_caps_height
         | 
| 805 | 
            -
                  @hide_legend ? 0 : calculate_caps_height(@ | 
| 841 | 
            +
                  @hide_legend ? 0 : calculate_caps_height(@legend_font)
         | 
| 806 842 | 
             
                end
         | 
| 807 843 |  | 
| 808 844 | 
             
                def graph_right_margin
         | 
| @@ -813,7 +849,7 @@ module Gruff | |
| 813 849 | 
             
                  # Make space for half the width of the rightmost column label.
         | 
| 814 850 | 
             
                  # Might be greater than the number of columns if between-style bar markers are used.
         | 
| 815 851 | 
             
                  last_label = @labels.keys.max.to_i
         | 
| 816 | 
            -
                  (last_label >= (column_count - 1) && @center_labels_over_point) ? calculate_width(@ | 
| 852 | 
            +
                  (last_label >= (column_count - 1) && @center_labels_over_point) ? calculate_width(@marker_font, @labels[last_label]) / 2.0 : 0
         | 
| 817 853 | 
             
                end
         | 
| 818 854 |  | 
| 819 855 | 
             
                def setup_left_margin
         | 
| @@ -826,7 +862,7 @@ module Gruff | |
| 826 862 | 
             
                      y_axis_label(maximum_value.to_f, @increment)
         | 
| 827 863 | 
             
                    end
         | 
| 828 864 | 
             
                  end
         | 
| 829 | 
            -
                  longest_left_label_width = calculate_width(@ | 
| 865 | 
            +
                  longest_left_label_width = calculate_width(@marker_font, truncate_label_text(text))
         | 
| 830 866 | 
             
                  longest_left_label_width *= 1.25 if @has_left_labels
         | 
| 831 867 |  | 
| 832 868 | 
             
                  # Shift graph if left line numbers are hidden
         | 
| @@ -868,29 +904,31 @@ module Gruff | |
| 868 904 | 
             
                # Return a formatted string representing a number value that should be
         | 
| 869 905 | 
             
                # printed as a label.
         | 
| 870 906 | 
             
                def label(value, increment)
         | 
| 871 | 
            -
                  label =  | 
| 872 | 
            -
             | 
| 873 | 
            -
             | 
| 874 | 
            -
             | 
| 875 | 
            -
             | 
| 876 | 
            -
             | 
| 877 | 
            -
             | 
| 878 | 
            -
             | 
| 879 | 
            -
             | 
| 880 | 
            -
             | 
| 881 | 
            -
             | 
| 882 | 
            -
             | 
| 883 | 
            -
             | 
| 884 | 
            -
             | 
| 885 | 
            -
             | 
| 886 | 
            -
             | 
| 887 | 
            -
             | 
| 888 | 
            -
             | 
| 889 | 
            -
             | 
| 890 | 
            -
             | 
| 891 | 
            -
             | 
| 892 | 
            -
             | 
| 893 | 
            -
             | 
| 907 | 
            +
                  label = begin
         | 
| 908 | 
            +
                    if increment
         | 
| 909 | 
            +
                      if increment >= 10 || (increment * 1) == (increment * 1).to_i.to_f
         | 
| 910 | 
            +
                        sprintf('%0i', value)
         | 
| 911 | 
            +
                      elsif increment >= 1.0 || (increment * 10) == (increment * 10).to_i.to_f
         | 
| 912 | 
            +
                        sprintf('%0.1f', value)
         | 
| 913 | 
            +
                      elsif increment >= 0.1 || (increment * 100) == (increment * 100).to_i.to_f
         | 
| 914 | 
            +
                        sprintf('%0.2f', value)
         | 
| 915 | 
            +
                      elsif increment >= 0.01 || (increment * 1000) == (increment * 1000).to_i.to_f
         | 
| 916 | 
            +
                        sprintf('%0.3f', value)
         | 
| 917 | 
            +
                      elsif increment >= 0.001 || (increment * 10000) == (increment * 10000).to_i.to_f
         | 
| 918 | 
            +
                        sprintf('%0.4f', value)
         | 
| 919 | 
            +
                      else
         | 
| 920 | 
            +
                        value.to_s
         | 
| 921 | 
            +
                      end
         | 
| 922 | 
            +
                    elsif (@spread.to_f % (marker_count.to_f == 0 ? 1 : marker_count.to_f) == 0) || !@y_axis_increment.nil?
         | 
| 923 | 
            +
                      value.to_i.to_s
         | 
| 924 | 
            +
                    elsif @spread > 10.0
         | 
| 925 | 
            +
                      sprintf('%0i', value)
         | 
| 926 | 
            +
                    elsif @spread >= 3.0
         | 
| 927 | 
            +
                      sprintf('%0.2f', value)
         | 
| 928 | 
            +
                    else
         | 
| 929 | 
            +
                      value.to_s
         | 
| 930 | 
            +
                    end
         | 
| 931 | 
            +
                  end
         | 
| 894 932 |  | 
| 895 933 | 
             
                  parts = label.split('.')
         | 
| 896 934 | 
             
                  parts[0] = parts[0].commify
         | 
| @@ -917,7 +955,7 @@ module Gruff | |
| 917 955 | 
             
                  # May fix legend drawing problem at small sizes
         | 
| 918 956 | 
             
                  label_widths = [[]] # Used to calculate line wrap
         | 
| 919 957 | 
             
                  legend_labels.each do |label|
         | 
| 920 | 
            -
                    width = calculate_width(@ | 
| 958 | 
            +
                    width = calculate_width(@legend_font, label)
         | 
| 921 959 | 
             
                    label_width = width + legend_square_width * 2.7
         | 
| 922 960 | 
             
                    label_widths.last.push label_width
         | 
| 923 961 |  | 
| @@ -959,8 +997,8 @@ module Gruff | |
| 959 997 | 
             
                #
         | 
| 960 998 | 
             
                # Not scaled since it deals with dimensions that the regular scaling will
         | 
| 961 999 | 
             
                # handle.
         | 
| 962 | 
            -
                def calculate_caps_height( | 
| 963 | 
            -
                  metrics = Renderer::Text. | 
| 1000 | 
            +
                def calculate_caps_height(font)
         | 
| 1001 | 
            +
                  metrics = Gruff::Renderer::Text.new(renderer, 'X', font: font).metrics
         | 
| 964 1002 | 
             
                  metrics.height
         | 
| 965 1003 | 
             
                end
         | 
| 966 1004 |  | 
| @@ -968,11 +1006,11 @@ module Gruff | |
| 968 1006 | 
             
                #
         | 
| 969 1007 | 
             
                # Not scaled since it deals with dimensions that the regular
         | 
| 970 1008 | 
             
                # scaling will handle.
         | 
| 971 | 
            -
                def calculate_width( | 
| 1009 | 
            +
                def calculate_width(font, text)
         | 
| 972 1010 | 
             
                  text = text.to_s
         | 
| 973 1011 | 
             
                  return 0 if text.empty?
         | 
| 974 1012 |  | 
| 975 | 
            -
                  metrics = Renderer::Text. | 
| 1013 | 
            +
                  metrics = Gruff::Renderer::Text.new(renderer, text, font: font).metrics
         | 
| 976 1014 | 
             
                  metrics.width
         | 
| 977 1015 | 
             
                end
         | 
| 978 1016 |  |