ctioga2 0.8 → 0.9

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.
data/lib/ctioga2/utils.rb CHANGED
@@ -17,6 +17,8 @@ require 'rbconfig'
17
17
  # The version
18
18
  require 'ctioga2/version'
19
19
 
20
+ require 'set'
21
+
20
22
 
21
23
  module CTioga2
22
24
 
@@ -174,6 +176,9 @@ module CTioga2
174
176
  while (a.size > 1) && (a.first < tolerance * a.last)
175
177
  a.shift
176
178
  end
179
+ if a.first == 0
180
+ return 0
181
+ end
177
182
 
178
183
  return Math.log10(a.first).send(method)
179
184
  end
@@ -207,6 +212,23 @@ module CTioga2
207
212
  return file # But that will fail later on.
208
213
  end
209
214
 
215
+ # Returns the biggest vector of multiples of delta contained
216
+ # within bot and top
217
+ def self.integer_subdivisions(bot, top, delta)
218
+ if bot > top
219
+ bot, top = top, bot
220
+ end
221
+ tn = (top/delta).floor
222
+ bn = (bot/delta).ceil
223
+ ret = Dobjects::Dvector.new()
224
+ nb = (tn - bn).to_i + 1
225
+
226
+ nb.times do |i|
227
+ ret << (bn + i) * delta
228
+ end
229
+ return ret
230
+ end
231
+
210
232
 
211
233
 
212
234
  # Cross-platform way of finding an executable in the $PATH.
@@ -293,6 +315,7 @@ module CTioga2
293
315
  end
294
316
  return ret
295
317
  end
318
+
296
319
  end
297
320
 
298
321
 
@@ -351,6 +374,103 @@ module CTioga2
351
374
 
352
375
  end
353
376
 
377
+
378
+ # This class watches over a list of named texts and can be queried
379
+ # for size/position information.
380
+ class TextSizeWatcher
381
+
382
+ # Watched text names
383
+ attr_accessor :watched_names
384
+
385
+ # A left, bottom, right, up bounding box (in output coordinates
386
+ # divided by 10)
387
+ attr_accessor :bb
388
+
389
+ def initialize
390
+ @watched_names = Set.new
391
+ end
392
+
393
+ def watch(*names)
394
+ @watched_names += names
395
+ end
396
+
397
+ # Given the MarginsBox with which the text was drawn, returns
398
+ # another MarginsBox item that specifies how much the text extends
399
+ # from the previous box. Works using the current frame
400
+ # coordinates.
401
+ #
402
+ # Padding in big points
403
+ #
404
+ # Min is the minimum size, also in big points.
405
+ def update_margins(t, margins, padding = 2, min = 4)
406
+ compute_bb(t)
407
+ if ! @bb
408
+ # Don't change anything if the bounding box does not exist
409
+ return margins
410
+ end
411
+ left, top, right, bottom = *margins.to_frame_coordinates(t)
412
+
413
+ xl = 0.1 * t.convert_page_to_output_x(t.convert_frame_to_page_x(left))
414
+ xr = 0.1 * t.convert_page_to_output_x(t.convert_frame_to_page_x(right))
415
+ yt = 0.1 * t.convert_page_to_output_y(t.convert_frame_to_page_y(top))
416
+ yb = 0.1 * t.convert_page_to_output_y(t.convert_frame_to_page_y(bottom))
417
+
418
+ vals = [ xl - @bb[0], @bb[2] - xr, @bb[3] - yt, yb - @bb[1]].map do |x|
419
+ x += padding
420
+ x = if x > min
421
+ x
422
+ else
423
+ min
424
+ end
425
+ Graphics::Types::Dimension.new(:bp, x)
426
+ end
427
+
428
+ return Graphics::Types::MarginsBox.
429
+ new(*vals)
430
+ end
431
+
432
+
433
+ def compute_bb(t)
434
+
435
+ @bb = nil
436
+
437
+ for w in @watched_names
438
+ info = t.get_text_size(w)
439
+ if info.key? 'points'
440
+ # We need to take every single point, since for rotated
441
+ # text, potentially all coordinates are different
442
+ for p in info['points']
443
+ update_bb(*p)
444
+ end
445
+ end
446
+ end
447
+ end
448
+
449
+
450
+ protected
451
+
452
+ # update the current bounding box to take into account the given point
453
+ def update_bb(x, y)
454
+ if ! @bb
455
+ @bb = [x,y,x,y]
456
+ else
457
+ if x < @bb[0]
458
+ @bb[0] = x
459
+ elsif x > @bb[2]
460
+ @bb[2] = x
461
+ end
462
+ if y < @bb[1]
463
+ @bb[1] = y
464
+ elsif y > @bb[3]
465
+ @bb[3] = y
466
+ end
467
+ end
468
+ end
469
+
470
+
471
+
472
+ end
473
+
354
474
  end
355
475
 
356
476
  ######################################################################
@@ -2,7 +2,7 @@
2
2
  module CTioga2
3
3
 
4
4
  module Version
5
- GIT_VERSION = '0.8'
6
- GIT_DATE = 'Fri 27 Dec 01:11:58 CET 2013'
5
+ GIT_VERSION = '0.9'
6
+ GIT_DATE = 'Thu 6 Feb 22:05:21 CET 2014'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ctioga2
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.8'
4
+ version: '0.9'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-27 00:00:00.000000000 Z
12
+ date: 2014-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tioga
@@ -61,9 +61,11 @@ files:
61
61
  - lib/ctioga2/commands/doc/html.rb
62
62
  - lib/ctioga2/commands/arguments.rb
63
63
  - lib/ctioga2/commands/context.rb
64
+ - lib/ctioga2/commands/general-functions.rb
64
65
  - lib/ctioga2/commands/general-types.rb
65
66
  - lib/ctioga2/commands/general-commands.rb
66
67
  - lib/ctioga2/commands/commands.rb
68
+ - lib/ctioga2/commands/function.rb
67
69
  - lib/ctioga2/postprocess.rb
68
70
  - lib/ctioga2/utils.rb
69
71
  - lib/ctioga2/version.rb
@@ -154,6 +156,7 @@ files:
154
156
  - COPYING
155
157
  - Changelog
156
158
  - setup.rb
159
+ - bin/ct2-make-movie
157
160
  - bin/ctioga2
158
161
  homepage: http://ctioga2.sourceforge.net
159
162
  licenses: []