ruby-gr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2c233863f557d6d70810dbfef025d311444633b074163f3e894b01c0b9f54e52
4
+ data.tar.gz: c7e676efdb662b0ea85736d6b66c36e785f587f96961055c712743d79a716265
5
+ SHA512:
6
+ metadata.gz: 2e78037e8e9f2b824ec1f357e834367d696c28fce14732d1fad360c08a0005526cc757cb615d4779aa4d48d2cb05f0d853d849445c80ca7400425fc66c7b7329
7
+ data.tar.gz: 9ebf89a908f4141ef7a2616b7414d48616f2209e203193f8a61662cc4def5a27799425b9d5b6003f0f5ece500359c1416d64e8637ae4f1a5a3fedfddb4ee06c9
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 kojix2
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # GR module for Ruby
2
+
3
+ [![The MIT License](https://img.shields.io/badge/license-MIT-orange.svg)](LICENSE.md)
4
+ [![Build Status](https://travis-ci.com/kojix2/GR.rb.svg?&branch=master)](https://travis-ci.org/kojix2/GR.rb)
5
+
6
+ [GR framework](https://github.com/sciapp/gr) - the graphics library for visualisation - for Ruby
7
+
8
+ :construction: Under construction.
9
+
10
+ ## Installation
11
+ Install [GR](https://github.com/sciapp/gr/releases).
12
+ Set environment variable GRDIR.
13
+
14
+ ```sh
15
+ export GRDIR="/your/path/to/gr"
16
+ ```
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ ```sh
21
+ gem 'ruby-gr'
22
+ ```
23
+
24
+ ## Quick Start
25
+
26
+ ```ruby
27
+ require 'gr'
28
+
29
+ x = [0, 0.2, 0.4, 0.6, 0.8, 1.0]
30
+ y = [0.3, 0.5, 0.4, 0.2, 0.6, 0.7]
31
+
32
+ GR.polyline(x, y)
33
+ tick = GR.tick(0, 1)
34
+ GR.axes(tick, tick, 0, 0, 1, 1, -0.001)
35
+ GR.updatews
36
+ ```
37
+
38
+ ## Contributing
39
+
40
+ Bug reports and pull requests are welcome on GitHub at https://github.com/kojix2/GR.rb.
41
+
42
+ ## License
43
+
44
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/lib/gr.rb ADDED
@@ -0,0 +1,550 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ffi'
4
+
5
+ module GR
6
+ class << self
7
+ attr_reader :ffi_lib
8
+ end
9
+
10
+ # Platforms | path
11
+ # Windows | bin/libgr.dll
12
+ # MacOSX | lib/libGR.so (NOT .dylib)
13
+ # Ubuntu | lib/libGR.so
14
+ raise 'Please set env variable GRDIR' unless ENV['GRDIR']
15
+
16
+ ENV['GKS_FONTPATH'] ||= ENV['GRDIR']
17
+ @ffi_lib = case RbConfig::CONFIG['host_os']
18
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
19
+ File.expand_path('bin/libgr.dll', ENV['GRDIR'])
20
+ .gsub('/', '\\') # windows backslash
21
+ else
22
+ File.expand_path('lib/libGR.so', ENV['GRDIR'])
23
+ end
24
+ end
25
+
26
+ require_relative 'gr_commons'
27
+ require 'gr/ffi'
28
+ require 'gr/grbase'
29
+
30
+ module GR
31
+ extend GRCommons::JupyterSupport
32
+ extend GRBase
33
+
34
+ # 1. double is the default type
35
+ # 2. don't check size (for now)
36
+ class << self
37
+ def inqdspsize
38
+ inquiry %i[double double int int] do |*pts|
39
+ super(*pts)
40
+ end
41
+ end
42
+
43
+ def polyline(x, y)
44
+ n = equal_length(x, y)
45
+ super(n, x, y)
46
+ end
47
+
48
+ def polymarker(x, y)
49
+ n = equal_length(x, y)
50
+ super(n, x, y)
51
+ end
52
+
53
+ def inqtext(x, y, string)
54
+ inquiry [{ double: 4 }, { double: 4 }] do |tbx, tby|
55
+ super(x, y, string, tbx, tby)
56
+ end
57
+ end
58
+
59
+ def fillarea(x, y)
60
+ n = equal_length(x, y)
61
+ super(n, x, y)
62
+ end
63
+
64
+ def cellarray(xmin, xmax, ymin, ymax, dimx, dimy, color)
65
+ super(xmin, xmax, ymin, ymax, dimx, dimy, 1, 1, dimx, dimy, int(color))
66
+ end
67
+
68
+ def nonuniformcellarray(x, y, dimx, dimy, color)
69
+ raise ArgumentError unless length(x) == dimx + 1 && length(y) == dimy + 1
70
+
71
+ super(x, y, dimx, dimy, 1, 1, dimx, dimy, int(color))
72
+ end
73
+
74
+ def polarcellarray(x_org, y_org, phimin, phimax, rmin, rmax, dimphi, dimr, color)
75
+ super(x_org, y_org, phimin, phimax, rmin, rmax, dimphi, dimr, 1, 1, dimphi, dimr, int(color))
76
+ end
77
+
78
+ def gdp(x, y, primid, datrec)
79
+ n = equal_length(x, y)
80
+ ldr = length(datrec, :int)
81
+ super(n, x, y, primid, ldr, datrec)
82
+ end
83
+
84
+ def spline(px, py, m, method)
85
+ n = equal_length(px, py)
86
+ super(n, px, py, m, method)
87
+ end
88
+
89
+ def gridit(xd, yd, zd, nx, ny)
90
+ nd = equal_length(xd, yd, zd)
91
+ inquiry [{ double: nx }, { double: ny }, { double: nx * ny }] do |px, py, pz|
92
+ super(nd, xd, yd, zd, nx, ny, px, py, pz)
93
+ end
94
+ end
95
+
96
+ def inqlinetype
97
+ inquiry_int { |pt| super(pt) }
98
+ end
99
+
100
+ def inqlinewidth
101
+ inquiry_double { |pt| super(pt) }
102
+ end
103
+
104
+ def inqlinecolorind
105
+ inquiry_int { |pt| super(pt) }
106
+ end
107
+
108
+ def inqmarkertype
109
+ inquiry_int { |pt| super(pt) }
110
+ end
111
+
112
+ def inqmarkercolorind
113
+ inquiry_int { |pt| super(pt) }
114
+ end
115
+
116
+ def inqfillintstyle
117
+ inquiry_int { |pt| super(pt) }
118
+ end
119
+
120
+ def inqfillstyle
121
+ inquiry_int { |pt| super(pt) }
122
+ end
123
+
124
+ def inqfillcolorind
125
+ inquiry_int { |pt| super(pt) }
126
+ end
127
+
128
+ def inqscale
129
+ inquiry_int { |pt| super(pt) }
130
+ end
131
+
132
+ def inqtextext(x, y, string)
133
+ inquiry [{ double: 4 }, { double: 4 }] do |tbx, tby|
134
+ super(x, y, string, tbx, tby)
135
+ end
136
+ end
137
+
138
+ def inqwindow
139
+ inquiry %i[double double double double] do |*pts|
140
+ super(*pts)
141
+ end
142
+ end
143
+
144
+ def inqviewport
145
+ inquiry %i[double double double double] do |*pts|
146
+ super(*pts)
147
+ end
148
+ end
149
+
150
+ def inqspace
151
+ inquiry %i[double double int int] do |*pts|
152
+ super(*pts)
153
+ end
154
+ end
155
+
156
+ alias axes2d axes
157
+
158
+ def verrorbars(px, py, e1, e2)
159
+ n = equal_length(px, py, e1, e2)
160
+ super(n, px, py, e1, e2)
161
+ end
162
+
163
+ def herrorbars(px, py, e1, e2)
164
+ n = equal_length(px, py, e1, e2)
165
+ super(n, px, py, e1, e2)
166
+ end
167
+
168
+ def polyline3d(px, py, pz)
169
+ n = equal_length(px, py, pz)
170
+ super(n, px, py, pz)
171
+ end
172
+
173
+ def polymarker3d(px, py, pz)
174
+ n = equal_length(px, py, pz)
175
+ super(n, px, py, pz)
176
+ end
177
+
178
+ def surface(px, py, pz, option)
179
+ # TODO: check: Arrays have incorrect length or dimension.
180
+ nx = length(px)
181
+ ny = length(py)
182
+ super(nx, ny, px, py, pz, option)
183
+ end
184
+
185
+ def trisurface(px, py, pz)
186
+ n = [length(px), length(py), length(pz)].min
187
+ super(n, px, py, pz)
188
+ end
189
+
190
+ def gradient(x, y, z)
191
+ # TODO: check: Arrays have incorrect length or dimension.
192
+ nx = length(x)
193
+ ny = length(y)
194
+ inquiry [{ double: nx * ny }, { double: nx * ny }] do |pu, pv|
195
+ super(nx, ny, x, y, z, pu, pv)
196
+ end
197
+ end
198
+
199
+ def quiver(x, y, u, v, color)
200
+ # TODO: check: Arrays have incorrect length or dimension.
201
+ nx = length(x)
202
+ ny = length(y)
203
+ super(nx, ny, x, y, u, v, (color ? 1 : 0))
204
+ end
205
+
206
+ def contour(px, py, h, pz, major_h)
207
+ # TODO: check: Arrays have incorrect length or dimension.
208
+ nx = length(px)
209
+ ny = length(py)
210
+ nh = h.size
211
+ super(nx, ny, nh, px, py, h, pz, major_h)
212
+ end
213
+
214
+ def contourf(px, py, h, pz, major_h)
215
+ # TODO: check: Arrays have incorrect length or dimension.
216
+ nx = length(px)
217
+ ny = length(py)
218
+ nh = h.size
219
+ super(nx, ny, nh, px, py, h, pz, major_h)
220
+ end
221
+
222
+ def tricontour(x, y, z, levels)
223
+ npoints = length(x) # equal_length ?
224
+ nlevels = length(levels)
225
+ super(npoints, x, y, z, nlevels, levels)
226
+ end
227
+
228
+ def hexbin(x, y, nbins)
229
+ n = length(x)
230
+ super(n, x, y, nbins)
231
+ end
232
+
233
+ def inqcolormap
234
+ inquiry_int { |pt| super(pt) }
235
+ end
236
+
237
+ def setcolormapfromrgb(r, g, b, positions: nil)
238
+ n = equal_length(r, g, b)
239
+ if positions.nil?
240
+ positions = ::FFI::Pointer::NULL
241
+ else
242
+ raise if length(positions) != n
243
+ end
244
+ super(n, r, g, b, positions)
245
+ end
246
+
247
+ def inqcolor(color)
248
+ inquiry_int do |rgb|
249
+ super(color, rgb)
250
+ end
251
+ end
252
+
253
+ def hsvtorgb(h, s, v)
254
+ inquiry %i[double double double] do |r, g, b|
255
+ super(h, s, v, r, g, b)
256
+ end
257
+ end
258
+
259
+ def ndctowc(x, y)
260
+ inquiry %i[double double] do |px, py|
261
+ px.write_double x
262
+ py.write_double y
263
+ super(px, py)
264
+ end
265
+ end
266
+
267
+ def wctondc(x, y)
268
+ inquiry %i[double double] do |px, py|
269
+ px.write_double x
270
+ py.write_double y
271
+ super(px, py)
272
+ end
273
+ end
274
+
275
+ def wc3towc(x, y, z)
276
+ inquiry %i[double double double] do |px, py, pz|
277
+ px.write_double x
278
+ py.write_double y
279
+ pz.write_double z
280
+ super(px, py, pz)
281
+ end
282
+ end
283
+
284
+ def drawpath(points, codes, fill)
285
+ len = length(codes)
286
+ super(len, points, uint8(codes), fill)
287
+ end
288
+
289
+ def drawimage(xmin, xmax, ymin, ymax, width, height, data, model = 0)
290
+ super(xmin, xmax, ymin, ymax, width, height, int(data), model)
291
+ end
292
+
293
+ def setcoordxform(mat)
294
+ raise if mat.size != 6
295
+
296
+ super(mat)
297
+ end
298
+
299
+ def inqmathtex(x, y, string)
300
+ inquiry [{ double: 4 }, { double: 4 }] do |tbx, tby|
301
+ super(x, y, string, tbx, tby)
302
+ end
303
+ end
304
+
305
+ def inqbbox
306
+ inquiry %i[double double double double] do |*pts|
307
+ super(*pts)
308
+ end
309
+ end
310
+
311
+ def adjustlimits(_amin, _amax)
312
+ inquiry %i[double double] do |*pts|
313
+ super(*pts)
314
+ end
315
+ end
316
+
317
+ def version
318
+ super.read_string
319
+ end
320
+
321
+ def reducepoints(xd, yd, n)
322
+ nd = equal_length(xd, yd)
323
+ inquiry [{ double: n }, { double: n }] do |x, y|
324
+ # Different from Julia. x, y are initialized zero.
325
+ super(nd, xd, yd, n, x, y)
326
+ end
327
+ end
328
+
329
+ def shadepoints(x, y, dims: [1200, 1200], xform: 1)
330
+ n = length(x)
331
+ w, h = dims
332
+ super(n, x, y, xform, w, h)
333
+ end
334
+
335
+ def shadelines(x, y, dims: [1200, 1200], xform: 1)
336
+ n = length(x)
337
+ w, h = dims
338
+ super(n, x, y, xform, w, h)
339
+ end
340
+
341
+ def panzoom(x, y, zoom)
342
+ inquiry %i[double double double double] do |xmin, xmax, ymin, ymax|
343
+ super(x, y, zoom, zoom, xmin, xmax, ymin, ymax)
344
+ end
345
+ end
346
+ end
347
+
348
+ # Constants
349
+
350
+ ASF_BUNDLED = 0
351
+ ASF_INDIVIDUAL = 1
352
+
353
+ NOCLIP = 0
354
+ CLIP = 1
355
+
356
+ COORDINATES_WC = 0
357
+ COORDINATES_NDC = 1
358
+
359
+ INTSTYLE_HOLLOW = 0
360
+ INTSTYLE_SOLID = 1
361
+ INTSTYLE_PATTERN = 2
362
+ INTSTYLE_HATCH = 3
363
+
364
+ TEXT_HALIGN_NORMAL = 0
365
+ TEXT_HALIGN_LEFT = 1
366
+ TEXT_HALIGN_CENTER = 2
367
+ TEXT_HALIGN_RIGHT = 3
368
+ TEXT_VALIGN_NORMAL = 0
369
+ TEXT_VALIGN_TOP = 1
370
+ TEXT_VALIGN_CAP = 2
371
+ TEXT_VALIGN_HALF = 3
372
+ TEXT_VALIGN_BASE = 4
373
+ TEXT_VALIGN_BOTTOM = 5
374
+
375
+ TEXT_PATH_RIGHT = 0
376
+ TEXT_PATH_LEFT = 1
377
+ TEXT_PATH_UP = 2
378
+ TEXT_PATH_DOWN = 3
379
+
380
+ TEXT_PRECISION_STRING = 0
381
+ TEXT_PRECISION_CHAR = 1
382
+ TEXT_PRECISION_STROKE = 2
383
+
384
+ LINETYPE_SOLID = 1
385
+ LINETYPE_DASHED = 2
386
+ LINETYPE_DOTTED = 3
387
+ LINETYPE_DASHED_DOTTED = 4
388
+ LINETYPE_DASH_2_DOT = -1
389
+ LINETYPE_DASH_3_DOT = -2
390
+ LINETYPE_LONG_DASH = -3
391
+ LINETYPE_LONG_SHORT_DASH = -4
392
+ LINETYPE_SPACED_DASH = -5
393
+ LINETYPE_SPACED_DOT = -6
394
+ LINETYPE_DOUBLE_DOT = -7
395
+ LINETYPE_TRIPLE_DOT = -8
396
+
397
+ MARKERTYPE_DOT = 1
398
+ MARKERTYPE_PLUS = 2
399
+ MARKERTYPE_ASTERISK = 3
400
+ MARKERTYPE_CIRCLE = 4
401
+ MARKERTYPE_DIAGONAL_CROSS = 5
402
+ MARKERTYPE_SOLID_CIRCLE = -1
403
+ MARKERTYPE_TRIANGLE_UP = -2
404
+ MARKERTYPE_SOLID_TRI_UP = -3
405
+ MARKERTYPE_TRIANGLE_DOWN = -4
406
+ MARKERTYPE_SOLID_TRI_DOWN = -5
407
+ MARKERTYPE_SQUARE = -6
408
+ MARKERTYPE_SOLID_SQUARE = -7
409
+ MARKERTYPE_BOWTIE = -8
410
+ MARKERTYPE_SOLID_BOWTIE = -9
411
+ MARKERTYPE_HOURGLASS = -10
412
+ MARKERTYPE_SOLID_HGLASS = -11
413
+ MARKERTYPE_DIAMOND = -12
414
+ MARKERTYPE_SOLID_DIAMOND = -13
415
+ MARKERTYPE_STAR = -14
416
+ MARKERTYPE_SOLID_STAR = -15
417
+ MARKERTYPE_TRI_UP_DOWN = -16
418
+ MARKERTYPE_SOLID_TRI_RIGHT = -17
419
+ MARKERTYPE_SOLID_TRI_LEFT = -18
420
+ MARKERTYPE_HOLLOW_PLUS = -19
421
+ MARKERTYPE_SOLID_PLUS = -20
422
+ MARKERTYPE_PENTAGON = -21
423
+ MARKERTYPE_HEXAGON = -22
424
+ MARKERTYPE_HEPTAGON = -23
425
+ MARKERTYPE_OCTAGON = -24
426
+ MARKERTYPE_STAR_4 = -25
427
+ MARKERTYPE_STAR_5 = -26
428
+ MARKERTYPE_STAR_6 = -27
429
+ MARKERTYPE_STAR_7 = -28
430
+ MARKERTYPE_STAR_8 = -29
431
+ MARKERTYPE_VLINE = -30
432
+ MARKERTYPE_HLINE = -31
433
+ MARKERTYPE_OMARK = -32
434
+
435
+ OPTION_X_LOG = 1
436
+ OPTION_Y_LOG = 2
437
+ OPTION_Z_LOG = 4
438
+ OPTION_FLIP_X = 8
439
+ OPTION_FLIP_Y = 16
440
+ OPTION_FLIP_Z = 32
441
+
442
+ OPTION_LINES = 0
443
+ OPTION_MESH = 1
444
+ OPTION_FILLED_MESH = 2
445
+ OPTION_Z_SHADED_MESH = 3
446
+ OPTION_COLORED_MESH = 4
447
+ OPTION_CELL_ARRAY = 5
448
+ OPTION_SHADED_MESH = 6
449
+
450
+ MODEL_RGB = 0
451
+ MODEL_HSV = 1
452
+
453
+ COLORMAP_UNIFORM = 0
454
+ COLORMAP_TEMPERATURE = 1
455
+ COLORMAP_GRAYSCALE = 2
456
+ COLORMAP_GLOWING = 3
457
+ COLORMAP_RAINBOWLIKE = 4
458
+ COLORMAP_GEOLOGIC = 5
459
+ COLORMAP_GREENSCALE = 6
460
+ COLORMAP_CYANSCALE = 7
461
+ COLORMAP_BLUESCALE = 8
462
+ COLORMAP_MAGENTASCALE = 9
463
+ COLORMAP_REDSCALE = 10
464
+ COLORMAP_FLAME = 11
465
+ COLORMAP_BROWNSCALE = 12
466
+ COLORMAP_PILATUS = 13
467
+ COLORMAP_AUTUMN = 14
468
+ COLORMAP_BONE = 15
469
+ COLORMAP_COOL = 16
470
+ COLORMAP_COPPER = 17
471
+ COLORMAP_GRAY = 18
472
+ COLORMAP_HOT = 19
473
+ COLORMAP_HSV = 20
474
+ COLORMAP_JET = 21
475
+ COLORMAP_PINK = 22
476
+ COLORMAP_SPECTRAL = 23
477
+ COLORMAP_SPRING = 24
478
+ COLORMAP_SUMMER = 25
479
+ COLORMAP_WINTER = 26
480
+ COLORMAP_GIST_EARTH = 27
481
+ COLORMAP_GIST_HEAT = 28
482
+ COLORMAP_GIST_NCAR = 29
483
+ COLORMAP_GIST_RAINBOW = 30
484
+ COLORMAP_GIST_STERN = 31
485
+ COLORMAP_AFMHOT = 32
486
+ COLORMAP_BRG = 33
487
+ COLORMAP_BWR = 34
488
+ COLORMAP_COOLWARM = 35
489
+ COLORMAP_CMRMAP = 36
490
+ COLORMAP_CUBEHELIX = 37
491
+ COLORMAP_GNUPLOT = 38
492
+ COLORMAP_GNUPLOT2 = 39
493
+ COLORMAP_OCEAN = 40
494
+ COLORMAP_RAINBOW = 41
495
+ COLORMAP_SEISMIC = 42
496
+ COLORMAP_TERRAIN = 43
497
+ COLORMAP_VIRIDIS = 44
498
+ COLORMAP_INFERNO = 45
499
+ COLORMAP_PLASMA = 46
500
+ COLORMAP_MAGMA = 47
501
+
502
+ FONT_TIMES_ROMAN = 101
503
+ FONT_TIMES_ITALIC = 102
504
+ FONT_TIMES_BOLD = 103
505
+ FONT_TIMES_BOLDITALIC = 104
506
+ FONT_HELVETICA = 105
507
+ FONT_HELVETICA_OBLIQUE = 106
508
+ FONT_HELVETICA_BOLD = 107
509
+ FONT_HELVETICA_BOLDOBLIQUE = 108
510
+ FONT_COURIER = 109
511
+ FONT_COURIER_OBLIQUE = 110
512
+ FONT_COURIER_BOLD = 111
513
+ FONT_COURIER_BOLDOBLIQUE = 112
514
+ FONT_SYMBOL = 113
515
+ FONT_BOOKMAN_LIGHT = 114
516
+ FONT_BOOKMAN_LIGHTITALIC = 115
517
+ FONT_BOOKMAN_DEMI = 116
518
+ FONT_BOOKMAN_DEMIITALIC = 117
519
+ FONT_NEWCENTURYSCHLBK_ROMAN = 118
520
+ FONT_NEWCENTURYSCHLBK_ITALIC = 119
521
+ FONT_NEWCENTURYSCHLBK_BOLD = 120
522
+ FONT_NEWCENTURYSCHLBK_BOLDITALIC = 121
523
+ FONT_AVANTGARDE_BOOK = 122
524
+ FONT_AVANTGARDE_BOOKOBLIQUE = 123
525
+ FONT_AVANTGARDE_DEMI = 124
526
+ FONT_AVANTGARDE_DEMIOBLIQUE = 125
527
+ FONT_PALATINO_ROMAN = 126
528
+ FONT_PALATINO_ITALIC = 127
529
+ FONT_PALATINO_BOLD = 128
530
+ FONT_PALATINO_BOLDITALIC = 129
531
+ FONT_ZAPFCHANCERY_MEDIUMITALIC = 130
532
+ FONT_ZAPFDINGBATS = 131
533
+
534
+ PATH_STOP = 0x00
535
+ PATH_MOVETO = 0x01
536
+ PATH_LINETO = 0x02
537
+ PATH_CURVE3 = 0x03
538
+ PATH_CURVE4 = 0x04
539
+ PATH_CLOSEPOLY = 0x4f
540
+
541
+ MPL_SUPPRESS_CLEAR = 1
542
+ MPL_POSTPONE_UPDATE = 2
543
+
544
+ XFORM_BOOLEAN = 0
545
+ XFORM_LINEAR = 1
546
+ XFORM_LOG = 2
547
+ XFORM_LOGLOG = 3
548
+ XFORM_CUBIC = 4
549
+ XFORM_EQUALIZED = 5
550
+ end