tioga 1.4 → 1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Tioga_README +177 -139
- data/split/Dtable/dtable.c +3 -0
- data/split/Dtable/namespace.h +7 -3
- data/split/Dtable/symbols.h +2 -2
- data/split/Dvector/dvector.c +3 -2
- data/split/Dvector/namespace.h +7 -3
- data/split/Dvector/symbols.h +2 -2
- data/split/Flate/flate.c +2 -1
- data/split/Flate/namespace.h +7 -3
- data/split/Flate/symbols.h +2 -2
- data/split/Function/extconf.rb +1 -1
- data/split/Function/function.c +38 -6
- data/split/Function/joint_qsort.c +1 -2
- data/split/Function/namespace.h +7 -3
- data/split/Function/symbols.h +2 -2
- data/split/Tioga/axes.c +4 -5
- data/split/Tioga/figures.c +1 -0
- data/split/Tioga/figures.h +5 -3
- data/split/Tioga/lib/Arcs_and_Circles.rb +1 -1
- data/split/Tioga/lib/ColorConstants.rb +9 -9
- data/split/Tioga/lib/Creating_Paths.rb +1 -1
- data/split/Tioga/lib/FigMkr.rb +25 -23
- data/split/Tioga/lib/FigureConstants.rb +2 -2
- data/split/Tioga/lib/Figures_and_Plots.rb +6 -6
- data/split/Tioga/lib/Images.rb +2 -2
- data/split/Tioga/lib/MarkerConstants.rb +3 -3
- data/split/Tioga/lib/Markers.rb +6 -6
- data/split/Tioga/lib/Page_Frame_Bounds.rb +1 -1
- data/split/Tioga/lib/Rectangles.rb +1 -1
- data/split/Tioga/lib/Shading.rb +2 -2
- data/split/Tioga/lib/Special_Paths.rb +5 -5
- data/split/Tioga/lib/Strokes.rb +2 -2
- data/split/Tioga/lib/TeX_Text.rb +5 -5
- data/split/Tioga/lib/TexPreamble.rb +116 -116
- data/split/Tioga/lib/Transparency.rb +2 -2
- data/split/Tioga/lib/Using_Paths.rb +1 -1
- data/split/Tioga/lib/X_and_Y_Axes.rb +19 -15
- data/split/Tioga/lib/irb_tioga.rb +36 -11
- data/split/Tioga/lib/maker.rb +201 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +6 -2
- data/split/Tioga/namespace.h +7 -3
- data/split/Tioga/pdfcoords.c +20 -2
- data/split/Tioga/pdfs.h +1 -1
- data/split/Tioga/symbols.h +2 -2
- data/split/extconf.rb +7 -5
- data/split/namespace.h +7 -3
- data/split/symbols.c +1 -9
- data/split/symbols.h +2 -2
- metadata +19 -23
- data/split/Dtable/symbols.c +0 -92
- data/split/Dvector/symbols.c +0 -92
- data/split/Flate/symbols.c +0 -92
- data/split/Function/symbols.c +0 -92
- data/split/Tioga/symbols.c +0 -92
@@ -32,7 +32,7 @@ class Transparency < Doc < FigureMaker
|
|
32
32
|
#
|
33
33
|
# Example: on left, fill_opacity = 1.0; on right fill_opacity = 0.6
|
34
34
|
#
|
35
|
-
#
|
35
|
+
# link:images/Squares.png
|
36
36
|
def fill_opacity
|
37
37
|
end
|
38
38
|
|
@@ -72,7 +72,7 @@ class Transparency < Doc < FigureMaker
|
|
72
72
|
#
|
73
73
|
# Example: on left, fill_transparency = 0.0; on right fill_transparency = 0.4
|
74
74
|
#
|
75
|
-
#
|
75
|
+
# link:images/Squares.png
|
76
76
|
def fill_transparency
|
77
77
|
end
|
78
78
|
|
@@ -94,7 +94,7 @@ class Using_Paths < Doc < FigureMaker
|
|
94
94
|
# If the squares are drawn in opposite directions, only the area between them is inside,
|
95
95
|
# according to the nonzero winding number rule. See also #eofill.
|
96
96
|
#
|
97
|
-
#
|
97
|
+
# link:images/Fill_Rules.png
|
98
98
|
def fill
|
99
99
|
end
|
100
100
|
|
@@ -269,8 +269,10 @@ class X_and_Y_Axes < Doc < FigureMaker
|
|
269
269
|
# xaxis_digits_max
|
270
270
|
# xaxis_digits_max = an_integer_value
|
271
271
|
#
|
272
|
-
# If non-zero and
|
273
|
-
# will be switched to exponential format if
|
272
|
+
# If non-zero (and xaxis_use_fixed_pt is not true), then x axis numeric labels
|
273
|
+
# will be switched to exponential format if they require more than this number of digits.
|
274
|
+
# If yaxis_digits_max is set to zero, then a system-choosen default value is used instead.
|
275
|
+
# See also xaxis_use_fixed_pt.
|
274
276
|
def xaxis_digits_max
|
275
277
|
end
|
276
278
|
|
@@ -278,11 +280,11 @@ class X_and_Y_Axes < Doc < FigureMaker
|
|
278
280
|
# xaxis_use_fixed_pt
|
279
281
|
# xaxis_use_fixed_pt = true_or_false
|
280
282
|
#
|
281
|
-
# If this flag is +true+,
|
282
|
-
#
|
283
|
-
# then the
|
284
|
-
#
|
285
|
-
#
|
283
|
+
# If this flag is +true+, then numeric labels for the x axis
|
284
|
+
# will always use fixed point notation rather than exponential.
|
285
|
+
# If +false+, then the value of xaxis_digits_max will be used to decide between
|
286
|
+
# fixed point or exponential notation.
|
287
|
+
# See also xaxis_digits_max.
|
286
288
|
def xaxis_use_fixed_pt
|
287
289
|
end
|
288
290
|
|
@@ -515,8 +517,10 @@ class X_and_Y_Axes < Doc < FigureMaker
|
|
515
517
|
# yaxis_digits_max
|
516
518
|
# yaxis_digits_max = an_integer_value
|
517
519
|
#
|
518
|
-
# If non-zero and
|
519
|
-
# will be switched to exponential format if
|
520
|
+
# If non-zero (and yaxis_use_fixed_pt is not true), then y axis numeric labels
|
521
|
+
# will be switched to exponential format if they require more than this number of digits.
|
522
|
+
# If yaxis_digits_max is set to zero, then a system-choosen default value is used instead.
|
523
|
+
# See also yaxis_use_fixed_pt.
|
520
524
|
def yaxis_digits_max
|
521
525
|
end
|
522
526
|
|
@@ -524,11 +528,11 @@ class X_and_Y_Axes < Doc < FigureMaker
|
|
524
528
|
# yaxis_use_fixed_pt
|
525
529
|
# yaxis_use_fixed_pt = true_or_false
|
526
530
|
#
|
527
|
-
# If this flag is +true+,
|
528
|
-
#
|
529
|
-
# then the
|
530
|
-
#
|
531
|
-
#
|
531
|
+
# If this flag is +true+, then numeric labels for the y axis
|
532
|
+
# will always use fixed point notation rather than exponential.
|
533
|
+
# If +false+, then the value of yaxis_digits_max will be used to decide between
|
534
|
+
# fixed point or exponential notation.
|
535
|
+
# See also yaxis_digits_max.
|
532
536
|
def yaxis_use_fixed_pt
|
533
537
|
end
|
534
538
|
|
@@ -583,7 +587,7 @@ Examples
|
|
583
587
|
end
|
584
588
|
end
|
585
589
|
|
586
|
-
|
590
|
+
link:images/Special_Y.png
|
587
591
|
|
588
592
|
=end
|
589
593
|
def yaxis_tick_labels
|
@@ -5,9 +5,17 @@ module IRB_Tioga
|
|
5
5
|
|
6
6
|
$tioga_figure_filename = nil
|
7
7
|
$tioga_figure_num = nil
|
8
|
+
|
9
|
+
|
10
|
+
def check_have_loaded
|
11
|
+
return true unless ($tioga_figure_filename == nil) || ($tioga_figure_filename.length == 0)
|
12
|
+
puts "Must open a file first."
|
13
|
+
return false
|
14
|
+
end
|
8
15
|
|
9
16
|
def o(filename=nil)
|
10
17
|
filename = $tioga_figure_filename if filename == nil
|
18
|
+
return if filename == nil || filename.length == 0 # this happens if just give shell command irb_tioga with no filename
|
11
19
|
filename = $tioga_ui.fix_filename(filename)
|
12
20
|
result = $tioga_ui.setdir_and_load(filename)
|
13
21
|
return false if result == nil
|
@@ -22,22 +30,26 @@ def do_figs(fignums,view)
|
|
22
30
|
end
|
23
31
|
if fignums == nil
|
24
32
|
$tioga_ui.make_all_pdfs(view)
|
25
|
-
|
26
|
-
fignums += FigureMaker.default.num_figures if fignums < 0
|
27
|
-
$tioga_ui.do_fignums([fignums],view)
|
33
|
+
set_figure_num(0)
|
28
34
|
else
|
35
|
+
if fignums.kind_of?Integer
|
36
|
+
fignums += FigureMaker.default.num_figures if fignums < 0
|
37
|
+
fignums = [fignums]
|
38
|
+
end
|
29
39
|
$tioga_ui.do_fignums(fignums,view)
|
40
|
+
set_figure_num(fignums[-1])
|
30
41
|
end
|
31
|
-
set_figure_num(fignums[-1]) unless fignums == nil
|
32
42
|
return true
|
33
43
|
end
|
34
44
|
|
35
45
|
def s(fignums=nil)
|
46
|
+
return unless check_have_loaded
|
36
47
|
do_figs(fignums,true)
|
37
48
|
return true
|
38
49
|
end
|
39
50
|
|
40
51
|
def m(fignums=nil)
|
52
|
+
return unless check_have_loaded
|
41
53
|
do_figs(fignums,false)
|
42
54
|
return true
|
43
55
|
end
|
@@ -48,6 +60,7 @@ def set_figure_num(num)
|
|
48
60
|
end
|
49
61
|
|
50
62
|
def p(fignums=nil)
|
63
|
+
return unless check_have_loaded
|
51
64
|
if fignums.kind_of?String
|
52
65
|
fignums = $tioga_ui.parse_figs(fignums)
|
53
66
|
end
|
@@ -64,6 +77,7 @@ def p(fignums=nil)
|
|
64
77
|
end
|
65
78
|
|
66
79
|
def r
|
80
|
+
return unless check_have_loaded
|
67
81
|
if $tioga_figure_num != nil
|
68
82
|
figname = FigureMaker.default.figure_names[$tioga_figure_num]
|
69
83
|
else
|
@@ -79,6 +93,16 @@ def r
|
|
79
93
|
end
|
80
94
|
|
81
95
|
|
96
|
+
def cmds
|
97
|
+
l
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def list_cmds
|
102
|
+
l
|
103
|
+
end
|
104
|
+
|
105
|
+
|
82
106
|
def l
|
83
107
|
$tioga_ui.list_figures
|
84
108
|
return true
|
@@ -87,13 +111,14 @@ end
|
|
87
111
|
def h
|
88
112
|
puts ''
|
89
113
|
puts " Command description"
|
90
|
-
puts " o 'filename'
|
91
|
-
puts "
|
92
|
-
puts "
|
93
|
-
puts "
|
94
|
-
puts "
|
95
|
-
puts "
|
96
|
-
puts "
|
114
|
+
puts " o 'filename' opens the named tioga file (with extension .rb)."
|
115
|
+
puts " o opens the current tioga file (i.e., reload)."
|
116
|
+
puts " l lists the defined figures by number and name."
|
117
|
+
puts " m <figs> makes PDFs without showing them in the viewer."
|
118
|
+
puts " s <figs> makes and shows PDFs, each in a separate viewer window."
|
119
|
+
puts " p <figs> makes PDFs and shows the portfolio as a multi-page document."
|
120
|
+
puts " r reloads the current file and reshows the current figure."
|
121
|
+
puts " h helpfully prints this list of commands."
|
97
122
|
puts "\n Since the filename extension is known, you can skip typing it if you like."
|
98
123
|
puts "\n If <figs> is omitted, then tioga does all the figures defined in the file"
|
99
124
|
puts " ordered by their definition index numbers."
|
@@ -0,0 +1,201 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright (C) 2005 Bill Paxton
|
3
|
+
|
4
|
+
This file is part of Tioga.
|
5
|
+
|
6
|
+
Tioga is free software; you can redistribute it and/or modify
|
7
|
+
it under the terms of the GNU General Library Public License as published
|
8
|
+
by the Free Software Foundation; either version 2 of the License, or
|
9
|
+
(at your option) any later version.
|
10
|
+
|
11
|
+
Tioga is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
GNU Library General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Library General Public License
|
17
|
+
along with Tioga; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
=end
|
20
|
+
|
21
|
+
require 'Tioga/tioga.rb'
|
22
|
+
require 'scanf'
|
23
|
+
|
24
|
+
include Tioga
|
25
|
+
|
26
|
+
require 'readline'
|
27
|
+
include Readline
|
28
|
+
# for some reason, the pipes don't work unless I use the Readline package
|
29
|
+
|
30
|
+
def report_error(er, msg)
|
31
|
+
fm = FigureMaker.default
|
32
|
+
puts msg
|
33
|
+
puts ""
|
34
|
+
puts " " + "#{er.message}"
|
35
|
+
line_count = 0
|
36
|
+
er.backtrace.each do |line|
|
37
|
+
if line_count < fm.num_error_lines
|
38
|
+
puts " " + line
|
39
|
+
end
|
40
|
+
line_count = line_count + 1
|
41
|
+
end
|
42
|
+
puts "ERROR" # GUI uses this
|
43
|
+
end
|
44
|
+
|
45
|
+
def loadfile(fname, cmd)
|
46
|
+
fm = FigureMaker.default
|
47
|
+
have_loaded = false
|
48
|
+
fm.reset_state
|
49
|
+
begin
|
50
|
+
puts "load #{fname}"
|
51
|
+
load(fname) # this should define the TiogaFigures class
|
52
|
+
refresh_fname = fm.auto_refresh_filename
|
53
|
+
if refresh_fname != nil
|
54
|
+
refresh_fname = "#{fm.run_dir}/#{refresh_fname}" if fm.run_dir != nil && refresh_fname[0..0] != '/'
|
55
|
+
puts "####03OK #{refresh_fname}" # GUI uses this
|
56
|
+
end
|
57
|
+
have_loaded = true
|
58
|
+
if cmd == "load_and_list"
|
59
|
+
num_fig = fm.num_figures
|
60
|
+
if num_fig == 0
|
61
|
+
puts "ERROR: Failed to define any figures. Remember to invoke 'new' for the class containing the figure definitions"
|
62
|
+
end
|
63
|
+
response = "####01OK " + num_fig.to_s
|
64
|
+
num_fig.times { |i| response = response + ' ' + fm.figure_name(i) }
|
65
|
+
puts response # GUI uses this
|
66
|
+
end
|
67
|
+
rescue Exception => er
|
68
|
+
report_error(er, "ERROR: load failed for #{fname}\n####01")
|
69
|
+
end
|
70
|
+
return have_loaded
|
71
|
+
end
|
72
|
+
|
73
|
+
def command_loop
|
74
|
+
fm = FigureMaker.default
|
75
|
+
fname = nil
|
76
|
+
pname = nil
|
77
|
+
have_loaded = false
|
78
|
+
|
79
|
+
loop do
|
80
|
+
cmd_line = readline("\n")
|
81
|
+
#cmd_line = gets
|
82
|
+
break if cmd_line.nil?
|
83
|
+
cmd = cmd_line.scanf("%s")
|
84
|
+
cmd = cmd.to_s
|
85
|
+
puts "\n\n"
|
86
|
+
if cmd == "exit"
|
87
|
+
puts "exiting"
|
88
|
+
puts "###\n" # this marks end of command -- DON'T change it since the GUI depends on it!
|
89
|
+
exit
|
90
|
+
elsif (cmd == "need_to_reload_data")
|
91
|
+
fm.need_to_reload_data = true
|
92
|
+
elsif (cmd == "eval_function")
|
93
|
+
skip = "eval_function".length
|
94
|
+
string = cmd_line[skip+1..-1]
|
95
|
+
begin
|
96
|
+
result = fm.eval_function(string)
|
97
|
+
puts result.to_s
|
98
|
+
rescue
|
99
|
+
end
|
100
|
+
puts "####00" # GUI uses this
|
101
|
+
elsif (cmd == "load" || cmd == "load_and_list")
|
102
|
+
cmd, fname = cmd_line.scanf("%s %s")
|
103
|
+
if fname == nil
|
104
|
+
puts "must give file name as argument for load command"
|
105
|
+
else
|
106
|
+
have_loaded = loadfile(fname, cmd)
|
107
|
+
end
|
108
|
+
elsif (cmd == "make_portfolio")
|
109
|
+
if !have_loaded
|
110
|
+
puts "must load a file before make a portfolio"
|
111
|
+
else
|
112
|
+
cmd, fname = cmd_line.scanf("%s %s")
|
113
|
+
if fname == nil
|
114
|
+
puts "must give file name as argument for make_portfolio command"
|
115
|
+
else
|
116
|
+
fm.require_all
|
117
|
+
fm.make_portfolio_pdf(fname)
|
118
|
+
puts "####00" # GUI uses this
|
119
|
+
end
|
120
|
+
end
|
121
|
+
elsif (cmd == "make" || cmd == "need_to_reload_data_and_make")
|
122
|
+
if cmd == "need_to_reload_data_and_make"
|
123
|
+
fm.need_to_reload_data = true
|
124
|
+
end
|
125
|
+
if !have_loaded
|
126
|
+
puts "must load a file before make a figure"
|
127
|
+
else
|
128
|
+
cmd, num = cmd_line.scanf("%s %s")
|
129
|
+
if num == nil || (num.to_i == 0 && num != "0")
|
130
|
+
puts "must provide integer figure index as arg make"
|
131
|
+
else
|
132
|
+
result = fm.make_pdf(num.to_i)
|
133
|
+
if result == false
|
134
|
+
puts "####02FAILED" # GUI uses this
|
135
|
+
else
|
136
|
+
puts "####02OK #{result}"
|
137
|
+
end
|
138
|
+
puts "#{result}"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
elsif cmd == "make_all"
|
142
|
+
if !have_loaded
|
143
|
+
puts "must load a file before make_all"
|
144
|
+
else
|
145
|
+
puts "make_all"
|
146
|
+
fm.num_figures.times {|i| fm.make_preview_pdf(i) }
|
147
|
+
end
|
148
|
+
puts "####00" # GUI uses this
|
149
|
+
elsif cmd == "name"
|
150
|
+
if !have_loaded
|
151
|
+
puts "must load a file before ask for figure names"
|
152
|
+
else
|
153
|
+
cmd, num = cmd_line.scanf("%s %s")
|
154
|
+
if (num == nil)
|
155
|
+
puts "must give index of figure as argument for name command"
|
156
|
+
else
|
157
|
+
eval_str = "fm.figure_name(#{num})"
|
158
|
+
begin
|
159
|
+
puts eval(eval_str)
|
160
|
+
rescue Exception
|
161
|
+
puts "invalid figure number #{num}"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
elsif cmd == "names"
|
166
|
+
if !have_loaded
|
167
|
+
puts "must load a file before ask for figure names"
|
168
|
+
else
|
169
|
+
puts fm.figure_names
|
170
|
+
end
|
171
|
+
elsif cmd == "list"
|
172
|
+
if !have_loaded
|
173
|
+
puts "must load a file before ask to list figure names"
|
174
|
+
else
|
175
|
+
fm.figure_names.each_with_index { |name,i| STDOUT.printf("%3i %s\n",i,name) }
|
176
|
+
end
|
177
|
+
elsif cmd == "num_figures"
|
178
|
+
if !have_loaded
|
179
|
+
puts "must load a file before ask how many figures"
|
180
|
+
else
|
181
|
+
eval_str = "fm.num_figures"
|
182
|
+
begin
|
183
|
+
puts eval(eval_str).to_s
|
184
|
+
rescue Exception
|
185
|
+
end
|
186
|
+
end
|
187
|
+
elsif cmd == "set_which_pdflatex"
|
188
|
+
cmd, fname = cmd_line.scanf("%s %s")
|
189
|
+
if fname == nil
|
190
|
+
puts "must give pdflatex name as argument for set_which_pdflatex command"
|
191
|
+
else
|
192
|
+
FigureMaker.pdflatex = fname
|
193
|
+
puts "use #{fname}"
|
194
|
+
end
|
195
|
+
else
|
196
|
+
puts "invalid command <#{cmd}> in command line <#{cmd_line}>"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
command_loop
|
@@ -169,8 +169,12 @@ class TiogaUI
|
|
169
169
|
|
170
170
|
return filename unless $change_working_directory
|
171
171
|
|
172
|
-
|
173
|
-
|
172
|
+
if (filename.length > 2) && (filename[0..1] == '~/')
|
173
|
+
filename = ENV['HOME'] + filename[1..-1]
|
174
|
+
elsif filename[0..0] != '/'
|
175
|
+
# if necessary, add the current directory to the front of the filename
|
176
|
+
filename = Dir.getwd + '/' + filename
|
177
|
+
end
|
174
178
|
|
175
179
|
parts = filename.split('/')
|
176
180
|
if parts[-1].length < 2 || parts[-1][-2..-1] != "rb"
|
data/split/Tioga/namespace.h
CHANGED
@@ -34,14 +34,18 @@
|
|
34
34
|
*/
|
35
35
|
|
36
36
|
#ifdef __APPLE__
|
37
|
-
# define
|
37
|
+
# define INTERN __private_extern__
|
38
38
|
# define PUBLIC
|
39
39
|
#elif __GNUC__ >= 4 /* we have the visibility attribute */
|
40
|
-
# define
|
40
|
+
# define INTERN __attribute__ ((visibility ("hidden")))
|
41
41
|
# define PUBLIC __attribute__ ((visibility ("default")))
|
42
42
|
#else /* not really good */
|
43
|
-
# define
|
43
|
+
# define INTERN
|
44
44
|
# define PUBLIC
|
45
45
|
#endif /* __APPLE__ and __GNU_C_ >= 4*/
|
46
46
|
|
47
|
+
/* In any case, PRIVATE is static */
|
48
|
+
|
49
|
+
#define PRIVATE static
|
50
|
+
|
47
51
|
#endif
|
data/split/Tioga/pdfcoords.c
CHANGED
@@ -139,14 +139,32 @@ void c_set_bounds(FM *p, double left, double right, double top, double bottom)
|
|
139
139
|
} else if (right < left) {
|
140
140
|
p->xaxis_reversed = true;
|
141
141
|
p->bounds_xmin = right; p->bounds_xmax = left;
|
142
|
-
} else
|
142
|
+
} else { // left == right
|
143
|
+
p->xaxis_reversed = false;
|
144
|
+
if (left > 0.0) {
|
145
|
+
p->bounds_xmin = left * (1.0 - 1e-6); p->bounds_xmax = left * (1.0 + 1e-6);
|
146
|
+
} else if (left < 0.0) {
|
147
|
+
p->bounds_xmin = left * (1.0 + 1e-6); p->bounds_xmax = left * (1.0 - 1e-6);
|
148
|
+
} else {
|
149
|
+
p->bounds_xmin = -1e-6; p->bounds_xmax = 1e-6;
|
150
|
+
}
|
151
|
+
}
|
143
152
|
if (bottom < top) {
|
144
153
|
p->yaxis_reversed = false;
|
145
154
|
p->bounds_ymin = bottom; p->bounds_ymax = top;
|
146
155
|
} else if (top < bottom) {
|
147
156
|
p->yaxis_reversed = true;
|
148
157
|
p->bounds_ymin = top; p->bounds_ymax = bottom;
|
149
|
-
} else
|
158
|
+
} else { // top == bottom
|
159
|
+
p->yaxis_reversed = false;
|
160
|
+
if (bottom > 0.0) {
|
161
|
+
p->bounds_ymin = bottom * (1.0 - 1e-6); p->bounds_ymax = bottom * (1.0 + 1e-6);
|
162
|
+
} else if (bottom < 0.0) {
|
163
|
+
p->bounds_ymin = bottom * (1.0 + 1e-6); p->bounds_ymax = bottom * (1.0 - 1e-6);
|
164
|
+
} else {
|
165
|
+
p->bounds_xmin = -1e-6; p->bounds_xmax = 1e-6;
|
166
|
+
}
|
167
|
+
}
|
150
168
|
p->bounds_width = p->bounds_xmax - p->bounds_xmin;
|
151
169
|
p->bounds_height = p->bounds_ymax - p->bounds_ymin;
|
152
170
|
Recalc_Font_Hts(p);
|