glimmer-libui-cc-graphs_and_charts 0.1.8 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5c81413f717dac087558fbed16937659603f9bb6a4a2b849cadf31bade1750c
4
- data.tar.gz: c76f09ab3cff5d2486c45c59841ed1bacff95ad6d7b63033e01965318adef73e
3
+ metadata.gz: 263ed1c13a5130568949ac82714104e494a4e8ffd1ded95fec7d14110d5fc364
4
+ data.tar.gz: 2eea70d52135a1381d2ae30c2fb03dac37f5a07c0f74ba94875ea8a5fb82b867
5
5
  SHA512:
6
- metadata.gz: 82239ec1af1f0186761ac787f94d2f5756abc9cc17ea67dbaf5f38f9b27c35cc834c947f46df19309bee5f425d9a764a0ed335163bcc764a2e84b44d6ebf7b4a
7
- data.tar.gz: 65c1a640f16352f4ec249bff010824872b4c7bea47d818d7264fc4c2b9c57ab40307f32fa0f22c449944d3d7ab51cd07d4ae513e12255d2a7da9de4cb6e46fe3
6
+ metadata.gz: 8cf72862f552c4d9de06163653465ea4cf4779f371080b8fb4a345fa1bce9315ad190e12c8cdffaf71ae546d43510804d1574e12a7080e30a35901e3e842d947
7
+ data.tar.gz: cff63fd75943908ee9084e821c7a6a32d517c729796cbdc705f4928431f27540d904c0ea1080c9248a0542a43cbc660e652d07b0cb69e8e641153956d1354e47
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.2.1
4
+
5
+ - Fix clipped text of grid markers when they include 1000 displayed as 1K
6
+
7
+ ## 0.2.0
8
+
9
+ - Initial implementation of `bar_chart` custom control
10
+ - New `examples/graphs_and_charts/basic_bar_chart.rb`
11
+
3
12
  ## 0.1.8
4
13
 
5
14
  - Fix the display of grid marker lines when passing `values` with non-Integer y-axis values (especially max y-axis value being non-Integer). It now shows highest grid marker having a non-Integer value while keeping smaller values as Integer (e.g. 1, 2, 3, 3.75).
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
- # Graphs and Charts 0.1.8 (Alpha)
1
+ # Graphs and Charts 0.2.1 (Alpha)
2
2
  ## [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui) Custom Controls
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-libui-cc-graphs_and_charts.svg)](http://badge.fury.io/rb/glimmer-libui-cc-graphs_and_charts)
4
4
  [![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5
5
 
6
6
  Graphs and Charts (Custom Controls) for [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui)
7
7
 
8
+ ![bar chart](/screenshots/glimmer-libui-cc-graphs_and_charts-mac-basic-bar-chart.png)
9
+
8
10
  ![line graph](/screenshots/glimmer-libui-cc-graphs_and_charts-mac-basic-line-graph-relative.png)
9
11
 
10
12
  ## Setup
@@ -12,7 +14,7 @@ Graphs and Charts (Custom Controls) for [Glimmer DSL for LibUI](https://github.c
12
14
  Add this line to Bundler `Gemfile`:
13
15
 
14
16
  ```ruby
15
- gem 'glimmer-libui-cc-graphs_and_charts', '~> 0.1.8'
17
+ gem 'glimmer-libui-cc-graphs_and_charts', '~> 0.2.1'
16
18
  ```
17
19
 
18
20
  Run:
@@ -31,6 +33,89 @@ However, if you prefer to load all graphs and charts, add this line to your Ruby
31
33
  require 'glimmer-libui-cc-graphs_and_charts'
32
34
  ```
33
35
 
36
+ ### Bar Chart
37
+
38
+ To load the `bar_chart` custom control, add this line to your Ruby file:
39
+
40
+ ```ruby
41
+ require 'glimmer/view/bar_chart'
42
+ ```
43
+
44
+ This makes the `bar_chart` [Glimmer DSL for LibUI Custom Control](https://github.com/AndyObtiva/glimmer-dsl-libui#custom-components) available in the Glimmer GUI DSL.
45
+ You can then nest `bar_chart` under `window` or some container like `vertical_box`. By the way, `bar_chart` is implemented on top of the [`area` Glimmer DSL for LibUI control](https://github.com/AndyObtiva/glimmer-dsl-libui#area-api).
46
+
47
+ `values` are a `Hash` map of `String` x-axis values to `Numeric` y-axis values.
48
+
49
+ ```ruby
50
+ bar_chart(
51
+ width: 900,
52
+ height: 300,
53
+ values: {
54
+ 'Jan' => 30,
55
+ 'Feb' => 49,
56
+ 'Mar' => 58,
57
+ 'Apr' => 63,
58
+ 'May' => 72,
59
+ 'Jun' => 86,
60
+ 'Jul' => 95,
61
+ 'Aug' => 100,
62
+ 'Sep' => 84,
63
+ 'Oct' => 68,
64
+ 'Nov' => 52,
65
+ 'Dec' => 36,
66
+ }
67
+ )
68
+ ```
69
+
70
+ ![basic bar chart](/screenshots/glimmer-libui-cc-graphs_and_charts-mac-basic-bar-chart.png)
71
+
72
+ Look into [lib/glimmer/view/bar_chart.rb](/lib/glimmer/view/bar_chart.rb) to learn about all supported options.
73
+
74
+ **Basic Bar Chart Example:**
75
+
76
+ [examples/graphs_and_charts/basic_bar_chart.rb](/examples/graphs_and_charts/basic_bar_chart.rb)
77
+
78
+ ```ruby
79
+ require 'glimmer-dsl-libui'
80
+ require 'glimmer/view/bar_chart'
81
+
82
+ class BasicBarChart
83
+ include Glimmer::LibUI::Application
84
+
85
+ body {
86
+ window('Basic Bar Chart', 900, 300) { |main_window|
87
+ @bar_chart = bar_chart(
88
+ width: 900,
89
+ height: 300,
90
+ values: {
91
+ 'Jan' => 30,
92
+ 'Feb' => 49,
93
+ 'Mar' => 58,
94
+ 'Apr' => 63,
95
+ 'May' => 72,
96
+ 'Jun' => 86,
97
+ 'Jul' => 95,
98
+ 'Aug' => 100,
99
+ 'Sep' => 84,
100
+ 'Oct' => 68,
101
+ 'Nov' => 52,
102
+ 'Dec' => 36,
103
+ }
104
+ )
105
+
106
+ on_content_size_changed do
107
+ @bar_chart.width = main_window.content_size[0]
108
+ @bar_chart.height = main_window.content_size[1]
109
+ end
110
+ }
111
+ }
112
+ end
113
+
114
+ BasicBarChart.launch
115
+ ```
116
+
117
+ ![basic bar chart](/screenshots/glimmer-libui-cc-graphs_and_charts-mac-basic-bar-chart.png)
118
+
34
119
  ### Line Graph
35
120
 
36
121
  To load the `line_graph` custom control, add this line to your Ruby file:
@@ -51,36 +136,36 @@ Note that you can use in absolute mode or relative mode for determining x-axis v
51
136
  It supports any `Numeric` y-axis values in addition to `Time` x-axis values.
52
137
 
53
138
  ```ruby
54
- @line_graph = line_graph(
55
- width: 900,
56
- height: 300,
57
- lines: [
58
- {
59
- name: 'Stock 1',
60
- stroke: [163, 40, 39, thickness: 2],
61
- values: {
62
- Time.new(2030, 12, 1) => 80,
63
- Time.new(2030, 12, 2) => 36,
64
- Time.new(2030, 12, 4) => 10,
65
- Time.new(2030, 12, 5) => 60,
66
- Time.new(2030, 12, 6) => 20,
67
- },
68
- x_value_format: -> (time) {time.strftime("%a %d %b %Y %T GMT")},
69
- },
70
- {
71
- name: 'Stock 2',
72
- stroke: [47, 109, 104, thickness: 2],
73
- values: {
74
- Time.new(2030, 12, 1) => 62,
75
- Time.new(2030, 12, 2) => 0,
76
- Time.new(2030, 12, 3) => 90,
77
- Time.new(2030, 12, 5) => 0,
78
- Time.new(2030, 12, 7) => 17,
79
- },
80
- x_value_format: -> (time) {time.strftime("%a %d %b %Y %T GMT")},
81
- },
82
- ],
83
- )
139
+ line_graph(
140
+ width: 900,
141
+ height: 300,
142
+ lines: [
143
+ {
144
+ name: 'Stock 1',
145
+ stroke: [163, 40, 39, thickness: 2],
146
+ values: {
147
+ Time.new(2030, 12, 1) => 80,
148
+ Time.new(2030, 12, 2) => 36,
149
+ Time.new(2030, 12, 4) => 10,
150
+ Time.new(2030, 12, 5) => 60,
151
+ Time.new(2030, 12, 6) => 20,
152
+ },
153
+ x_value_format: -> (time) {time.strftime("%a %d %b %Y %T GMT")},
154
+ },
155
+ {
156
+ name: 'Stock 2',
157
+ stroke: [47, 109, 104, thickness: 2],
158
+ values: {
159
+ Time.new(2030, 12, 1) => 62,
160
+ Time.new(2030, 12, 2) => 0,
161
+ Time.new(2030, 12, 3) => 90,
162
+ Time.new(2030, 12, 5) => 0,
163
+ Time.new(2030, 12, 7) => 17,
164
+ },
165
+ x_value_format: -> (time) {time.strftime("%a %d %b %Y %T GMT")},
166
+ },
167
+ ],
168
+ )
84
169
  ```
85
170
 
86
171
  ![basic line graph](/screenshots/glimmer-libui-cc-graphs_and_charts-mac-basic-line-graph.png)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.2.1
@@ -0,0 +1,39 @@
1
+ # This line is only needed when running the example from inside the project directory
2
+ $LOAD_PATH.prepend(File.expand_path(File.join(__dir__, '..', '..', 'lib'))) if File.exist?(File.join(__dir__, '..', '..', 'lib'))
3
+
4
+ require 'glimmer-dsl-libui'
5
+ require 'glimmer/view/bar_chart'
6
+
7
+ class BasicBarChart
8
+ include Glimmer::LibUI::Application
9
+
10
+ body {
11
+ window('Basic Bar Chart', 900, 300) { |main_window|
12
+ @bar_chart = bar_chart(
13
+ width: 900,
14
+ height: 300,
15
+ values: {
16
+ 'Jan' => 30,
17
+ 'Feb' => 49,
18
+ 'Mar' => 58,
19
+ 'Apr' => 63,
20
+ 'May' => 72,
21
+ 'Jun' => 86,
22
+ 'Jul' => 95,
23
+ 'Aug' => 100,
24
+ 'Sep' => 84,
25
+ 'Oct' => 68,
26
+ 'Nov' => 52,
27
+ 'Dec' => 36,
28
+ }
29
+ )
30
+
31
+ on_content_size_changed do
32
+ @bar_chart.width = main_window.content_size[0]
33
+ @bar_chart.height = main_window.content_size[1]
34
+ end
35
+ }
36
+ }
37
+ end
38
+
39
+ BasicBarChart.launch
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-libui-cc-graphs_and_charts 0.1.8 ruby lib
5
+ # stub: glimmer-libui-cc-graphs_and_charts 0.2.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-libui-cc-graphs_and_charts".freeze
9
- s.version = "0.1.8".freeze
9
+ s.version = "0.2.1".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Andy Maleh".freeze]
14
- s.date = "2023-12-26"
14
+ s.date = "2023-12-29"
15
15
  s.description = "Graphs and Charts (Custom Controls) for Glimmer DSL for LibUI, like Line Graph.".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.extra_rdoc_files = [
@@ -24,15 +24,17 @@ Gem::Specification.new do |s|
24
24
  "LICENSE.txt",
25
25
  "README.md",
26
26
  "VERSION",
27
+ "examples/graphs_and_charts/basic_bar_chart.rb",
27
28
  "examples/graphs_and_charts/basic_line_graph.rb",
28
29
  "examples/graphs_and_charts/basic_line_graph_relative.rb",
29
30
  "glimmer-libui-cc-graphs_and_charts.gemspec",
30
31
  "lib/glimmer-libui-cc-graphs_and_charts.rb",
32
+ "lib/glimmer/view/bar_chart.rb",
31
33
  "lib/glimmer/view/line_graph.rb"
32
34
  ]
33
35
  s.homepage = "http://github.com/AndyObtiva/glimmer-libui-cc-graphs_and_charts".freeze
34
36
  s.licenses = ["MIT".freeze]
35
- s.rubygems_version = "3.5.1".freeze
37
+ s.rubygems_version = "3.5.3".freeze
36
38
  s.summary = "Graphs and Charts - Glimmer DSL for LibUI Custom Controls".freeze
37
39
 
38
40
  s.specification_version = 4
@@ -0,0 +1,249 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ module Glimmer
4
+ module View
5
+ # General-Purpose Bar Chart Custom Control
6
+ class BarChart
7
+ class << self
8
+ def interpret_color(color_object)
9
+ # TODO refactor move this method to somewhere common like Glimmer module
10
+ @color_cache ||= {}
11
+ @color_cache[color_object] ||= Glimmer::LibUI.interpret_color(color_object)
12
+ end
13
+ end
14
+
15
+ include Glimmer::LibUI::CustomControl
16
+
17
+ DEFAULT_CHART_PADDING_WIDTH = 5.0
18
+ DEFAULT_CHART_PADDING_HEIGHT = 5.0
19
+ DEFAULT_CHART_GRID_MARKER_PADDING_WIDTH = 37.0
20
+ DEFAULT_CHART_BAR_PADDING_WIDTH_PERCENTAGE = 30.0
21
+
22
+ DEFAULT_CHART_STROKE_GRID = [185, 184, 185]
23
+ DEFAULT_CHART_STROKE_MARKER = [185, 184, 185]
24
+ DEFAULT_CHART_STROKE_MARKER_LINE = [217, 217, 217, thickness: 1, dashes: [1, 1]]
25
+
26
+ DEFAULT_CHART_COLOR_BAR = [92, 122, 190]
27
+ DEFAULT_CHART_COLOR_MARKER_TEXT = [96, 96, 96]
28
+
29
+ DEFAULT_CHART_FONT_MARKER_TEXT = {family: "Arial", size: 14}
30
+
31
+ option :width, default: 600
32
+ option :height, default: 200
33
+
34
+ option :chart_padding_width, default: DEFAULT_CHART_PADDING_WIDTH
35
+ option :chart_padding_height, default: DEFAULT_CHART_PADDING_HEIGHT
36
+ option :chart_grid_marker_padding_width, default: DEFAULT_CHART_GRID_MARKER_PADDING_WIDTH
37
+ option :chart_bar_padding_width_percentage, default: DEFAULT_CHART_BAR_PADDING_WIDTH_PERCENTAGE
38
+
39
+ option :chart_stroke_grid, default: DEFAULT_CHART_STROKE_GRID
40
+ option :chart_stroke_marker, default: DEFAULT_CHART_STROKE_MARKER
41
+ option :chart_stroke_marker_line, default: DEFAULT_CHART_STROKE_MARKER_LINE
42
+
43
+ option :chart_color_bar, default: DEFAULT_CHART_COLOR_BAR
44
+ option :chart_color_marker_text, default: DEFAULT_CHART_COLOR_MARKER_TEXT
45
+
46
+ option :chart_font_marker_text, default: DEFAULT_CHART_FONT_MARKER_TEXT
47
+
48
+ # Hash map of x-axis values (String) to y-axis values (Numeric)
49
+ # Example:
50
+ # {
51
+ # '1' => 38,
52
+ # '2' => 83,
53
+ # '3' => 48,
54
+ # '4' => 83,
55
+ # '5' => 92,
56
+ # '6' => 13,
57
+ # '7' => 03,
58
+ # }
59
+ option :values, default: {}
60
+
61
+ attr_reader :bar_width_including_padding
62
+
63
+ after_body do
64
+ observe(self, :values) do
65
+ clear_drawing_cache
66
+ body_root.queue_redraw_all
67
+ end
68
+ observe(self, :width) do
69
+ clear_drawing_cache
70
+ end
71
+ observe(self, :height) do
72
+ clear_drawing_cache
73
+ end
74
+ end
75
+
76
+ body {
77
+ area { |chart_area|
78
+ on_draw do
79
+ calculate_dynamic_options
80
+ chart_background
81
+ grid_lines
82
+ bars
83
+ end
84
+ }
85
+ }
86
+
87
+ private
88
+
89
+ def clear_drawing_cache
90
+ @y_resolution = nil
91
+ @bar_width_including_padding = nil
92
+ @grid_marker_points = nil
93
+ @grid_marker_number_values = nil
94
+ @grid_marker_numbers = nil
95
+ @chart_stroke_marker_values = nil
96
+ @mod_values = nil
97
+ end
98
+
99
+ def calculate_dynamic_options
100
+ calculate_bar_width_including_padding
101
+ end
102
+
103
+ def calculate_bar_width_including_padding
104
+ return if values.empty?
105
+
106
+ @bar_width_including_padding ||= begin
107
+ value = width_drawable / (values.size - 1).to_f
108
+ [value, width_drawable].min
109
+ end
110
+ end
111
+
112
+ def bar_width
113
+ @bar_width_including_padding*((100.0 - chart_bar_padding_width_percentage)/100.0)
114
+ end
115
+
116
+ def bar_padding_width
117
+ @bar_width_including_padding*(chart_bar_padding_width_percentage/100.0)
118
+ end
119
+
120
+ def width_drawable
121
+ width - 2.0*chart_padding_width - chart_grid_marker_padding_width
122
+ end
123
+
124
+ def height_drawable
125
+ height - 2.0*chart_padding_height
126
+ end
127
+
128
+ def chart_background
129
+ rectangle(0, 0, width, height) {
130
+ fill 255, 255, 255
131
+ }
132
+ end
133
+
134
+ def grid_lines
135
+ line(chart_padding_width, chart_padding_height, chart_padding_width, height - chart_padding_height) {
136
+ stroke chart_stroke_grid
137
+ }
138
+ line(chart_padding_width, height - chart_padding_height, width - chart_padding_width, height - chart_padding_height) {
139
+ stroke chart_stroke_grid
140
+ }
141
+ grid_marker_number_font = chart_font_marker_text.merge(size: 11)
142
+ @grid_marker_number_values ||= []
143
+ @grid_marker_numbers ||= []
144
+ @chart_stroke_marker_values ||= []
145
+ @mod_values ||= []
146
+ grid_marker_points.each_with_index do |marker_point, index|
147
+ @grid_marker_number_values[index] ||= begin
148
+ value = (grid_marker_points.size - index).to_i
149
+ value = y_value_max if !y_value_max.nil? && y_value_max.to_i != y_value_max && index == 0
150
+ value
151
+ end
152
+ grid_marker_number_value = @grid_marker_number_values[index]
153
+ @grid_marker_numbers[index] ||= (grid_marker_number_value >= 1000) ? "#{grid_marker_number_value / 1000}K" : grid_marker_number_value.to_s
154
+ grid_marker_number = @grid_marker_numbers[index]
155
+ @chart_stroke_marker_values[index] ||= BarChart.interpret_color(chart_stroke_marker).tap do |color_hash|
156
+ color_hash[:thickness] = (index != grid_marker_points.size - 1 ? 2 : 1) if color_hash[:thickness].nil?
157
+ end
158
+ chart_stroke_marker_value = @chart_stroke_marker_values[index]
159
+ @mod_values[index] ||= begin
160
+ mod_value_multiplier = ((grid_marker_points.size / max_marker_count) + 1)
161
+ [(5 * mod_value_multiplier), 1].max
162
+ end
163
+ mod_value = @mod_values[index]
164
+ comparison_value = (mod_value > 2) ? 0 : 1
165
+ if mod_value > 2
166
+ if grid_marker_number_value % mod_value == comparison_value
167
+ line(marker_point[:x], marker_point[:y], marker_point[:x] + 4, marker_point[:y]) {
168
+ stroke chart_stroke_marker_value
169
+ }
170
+ end
171
+ else
172
+ line(marker_point[:x], marker_point[:y], marker_point[:x] + 4, marker_point[:y]) {
173
+ stroke chart_stroke_marker_value
174
+ }
175
+ end
176
+ if grid_marker_number_value % mod_value == comparison_value && grid_marker_number_value != grid_marker_points.size
177
+ line(marker_point[:x], marker_point[:y], marker_point[:x] + width - chart_padding_width, marker_point[:y]) {
178
+ stroke chart_stroke_marker_line
179
+ }
180
+ end
181
+ if grid_marker_number_value % mod_value == comparison_value || grid_marker_number_value != grid_marker_number_value.to_i
182
+ grid_marker_number_width = estimate_width_of_text(grid_marker_number, grid_marker_number_font)
183
+ text(marker_point[:x] + 4 + 3, marker_point[:y] - 6, grid_marker_number_width) {
184
+ string(grid_marker_number) {
185
+ font grid_marker_number_font
186
+ color chart_color_marker_text
187
+ }
188
+ }
189
+ end
190
+ end
191
+ end
192
+
193
+ def grid_marker_points
194
+ if @grid_marker_points.nil?
195
+ if values.any?
196
+ chart_y_max = [y_value_max, 1].max
197
+ current_chart_height = (height - chart_padding_height * 2)
198
+ y_value_count = chart_y_max.ceil
199
+ @grid_marker_points = chart_y_max.to_i.times.map do |marker_index|
200
+ x = chart_padding_width
201
+ y_value = y_value_count - marker_index
202
+ scaled_y_value = y_value.to_f * y_resolution.to_f
203
+ y = height - chart_padding_height - scaled_y_value
204
+ {x: x, y: y}
205
+ end
206
+ end
207
+ end
208
+
209
+ @grid_marker_points
210
+ end
211
+
212
+ def max_marker_count
213
+ [(0.15*height).to_i, 1].max
214
+ end
215
+
216
+ def bars
217
+ values.each_with_index do |(x_value, y_value), index|
218
+ x = chart_grid_marker_padding_width + chart_padding_width + (index * bar_width_including_padding) + bar_padding_width
219
+ bar_height = y_value * y_resolution
220
+ y = height - chart_padding_height - bar_height
221
+ rectangle(x, y, bar_width, bar_height) {
222
+ fill chart_color_bar
223
+ }
224
+ end
225
+ end
226
+
227
+ # this is the multiplier that we must multiply by the relative y value
228
+ def y_resolution
229
+ # TODO in the future, we will use the y range, but today, we assume it starts at 0
230
+ @y_resolution ||= height_drawable.to_f / y_value_max.to_f
231
+ end
232
+
233
+ def y_value_max
234
+ if @y_value_max.nil?
235
+ @y_value_max = values.values.max.to_f
236
+ end
237
+ @y_value_max
238
+ end
239
+
240
+ def estimate_width_of_text(text_string, font_properties)
241
+ # TODO refactor move this method to somewhere common like Glimmer module
242
+ font_size = font_properties[:size] || 16
243
+ estimated_font_width = 0.62 * font_size
244
+ text_string.chars.size * estimated_font_width
245
+ end
246
+
247
+ end
248
+ end
249
+ end
@@ -142,7 +142,6 @@ module Glimmer
142
142
  @grid_marker_numbers = nil
143
143
  @graph_stroke_marker_values = nil
144
144
  @mod_values = nil
145
- @estimated_widths_of_text = nil
146
145
  end
147
146
 
148
147
  def calculate_dynamic_options
@@ -554,7 +553,7 @@ module Glimmer
554
553
 
555
554
  def estimate_width_of_text(text_string, font_properties)
556
555
  font_size = font_properties[:size] || 16
557
- estimated_font_width = 0.6 * font_size
556
+ estimated_font_width = 0.62 * font_size
558
557
  text_string.chars.size * estimated_font_width
559
558
  end
560
559
 
@@ -1,4 +1,5 @@
1
1
  $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
2
2
 
3
3
  require 'glimmer-dsl-libui'
4
+ require 'glimmer/view/bar_chart'
4
5
  require 'glimmer/view/line_graph'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-libui-cc-graphs_and_charts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-26 00:00:00.000000000 Z
11
+ date: 2023-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer-dsl-libui
@@ -80,10 +80,12 @@ files:
80
80
  - LICENSE.txt
81
81
  - README.md
82
82
  - VERSION
83
+ - examples/graphs_and_charts/basic_bar_chart.rb
83
84
  - examples/graphs_and_charts/basic_line_graph.rb
84
85
  - examples/graphs_and_charts/basic_line_graph_relative.rb
85
86
  - glimmer-libui-cc-graphs_and_charts.gemspec
86
87
  - lib/glimmer-libui-cc-graphs_and_charts.rb
88
+ - lib/glimmer/view/bar_chart.rb
87
89
  - lib/glimmer/view/line_graph.rb
88
90
  homepage: http://github.com/AndyObtiva/glimmer-libui-cc-graphs_and_charts
89
91
  licenses:
@@ -104,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  - !ruby/object:Gem::Version
105
107
  version: '0'
106
108
  requirements: []
107
- rubygems_version: 3.5.1
109
+ rubygems_version: 3.5.3
108
110
  signing_key:
109
111
  specification_version: 4
110
112
  summary: Graphs and Charts - Glimmer DSL for LibUI Custom Controls