geomotion 0.13.0 → 0.13.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.
- data/Gemfile.lock +1 -1
- data/README.md +11 -4
- data/lib/geomotion/cg_rect.rb +96 -8
- data/lib/geomotion/version.rb +1 -1
- data/spec/cg_rect_spec.rb +184 -26
- metadata +1 -1
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -191,20 +191,27 @@ frame.bottom_right(true) # => [20, 20]
|
|
191
191
|
|
192
192
|
#### The great and powerful `apply` method
|
193
193
|
|
194
|
+
Most of the frame-manipulation methods delegate to the `apply` method. You can
|
195
|
+
use this method to perform batch changes.
|
196
|
+
|
197
|
+
```ruby
|
198
|
+
frame = view.frame.apply(left: 10, y: 0, wider: 50, grow_height: 10)
|
199
|
+
```
|
200
|
+
|
194
201
|
All of the methods that return a new frame (`left, shrink, below` and friends)
|
195
202
|
also accept a hash in which you can apply more changes. You can accomplish the
|
196
203
|
same thing using method chaining; this is an implementation detail that might
|
197
|
-
also clean your code up by grouping changes.
|
198
|
-
its own as well.
|
204
|
+
also clean your code up by grouping changes.
|
199
205
|
|
200
206
|
```ruby
|
201
207
|
frame = CGRect.make(x: 10, y: 10, width:10, height: 10)
|
202
208
|
frame.beside.width(20).down(10).height(20)
|
203
209
|
# => [[20, 20], [20, 20]]
|
204
|
-
|
210
|
+
|
211
|
+
# using the options hash / apply method
|
205
212
|
frame.beside(width: 20, down: 10, height: 20)
|
213
|
+
# => [[20, 20], [20, 20]]
|
206
214
|
|
207
|
-
# there are some changes that don't have a corresponding method:
|
208
215
|
frame.below(grow_width: 10, grow_up: 5)
|
209
216
|
# => [[0, 15], [40, 25]]
|
210
217
|
```
|
data/lib/geomotion/cg_rect.rb
CHANGED
@@ -191,15 +191,15 @@ class CGRect
|
|
191
191
|
rect.size.width -= value
|
192
192
|
rect.origin.x += value
|
193
193
|
when :grow_width
|
194
|
-
rect = rect.
|
194
|
+
rect = rect.grow_width(value)
|
195
195
|
when :grow_height
|
196
|
-
rect = rect.
|
196
|
+
rect = rect.grow_height(value)
|
197
197
|
when :shrink
|
198
198
|
rect = rect.shrink(value)
|
199
199
|
when :shrink_width
|
200
|
-
rect = rect.
|
200
|
+
rect = rect.shrink_width(value)
|
201
201
|
when :shrink_height
|
202
|
-
rect = rect.
|
202
|
+
rect = rect.shrink_height(value)
|
203
203
|
when :offset
|
204
204
|
rect = rect.offset(value)
|
205
205
|
else
|
@@ -210,65 +210,105 @@ class CGRect
|
|
210
210
|
end
|
211
211
|
|
212
212
|
# modified rects
|
213
|
-
def left(dist
|
213
|
+
def left(dist=nil, options={})
|
214
|
+
if dist.nil?
|
215
|
+
NSLog("Using the default value of `0` in `CGRect#left` is deprecated.")
|
216
|
+
dist = 0
|
217
|
+
end
|
218
|
+
raise "You must specify an amount in `CGRect#left`" unless dist.is_a?(Numeric)
|
219
|
+
|
214
220
|
options[:left] = dist
|
215
221
|
self.apply(options)
|
216
222
|
end
|
217
223
|
|
218
|
-
def right(dist
|
224
|
+
def right(dist=nil, options={})
|
225
|
+
if dist.nil?
|
226
|
+
NSLog("Using the default value of `0` in `CGRect#right` is deprecated.")
|
227
|
+
dist = 0
|
228
|
+
end
|
229
|
+
raise "You must specify an amount in `CGRect#right`" unless dist.is_a?(Numeric)
|
230
|
+
|
219
231
|
options[:right] = dist
|
220
232
|
self.apply(options)
|
221
233
|
end
|
222
234
|
|
223
|
-
def up(dist
|
235
|
+
def up(dist=nil, options={})
|
236
|
+
if dist.nil?
|
237
|
+
NSLog("Using the default value of `0` in `CGRect#up` is deprecated.")
|
238
|
+
dist = 0
|
239
|
+
end
|
240
|
+
raise "You must specify an amount in `CGRect#up`" unless dist.is_a?(Numeric)
|
241
|
+
|
224
242
|
options[:up] = dist
|
225
243
|
self.apply(options)
|
226
244
|
end
|
227
245
|
|
228
|
-
def down(dist
|
246
|
+
def down(dist=nil, options={})
|
247
|
+
if dist.nil?
|
248
|
+
NSLog("Using the default value of `0` in `CGRect#down` is deprecated.")
|
249
|
+
dist = 0
|
250
|
+
end
|
251
|
+
raise "You must specify an amount in `CGRect#down`" unless dist.is_a?(Numeric)
|
252
|
+
|
229
253
|
options[:down] = dist
|
230
254
|
self.apply(options)
|
231
255
|
end
|
232
256
|
|
233
257
|
def wider(dist, options={})
|
258
|
+
raise "You must specify an amount in `CGRect#wider`" unless dist.is_a?(Numeric)
|
259
|
+
|
234
260
|
options[:wider] = dist
|
235
261
|
self.apply(options)
|
236
262
|
end
|
237
263
|
|
238
264
|
def thinner(dist, options={})
|
265
|
+
raise "You must specify an amount in `CGRect#thinner`" unless dist.is_a?(Numeric)
|
266
|
+
|
239
267
|
options[:thinner] = dist
|
240
268
|
self.apply(options)
|
241
269
|
end
|
242
270
|
|
243
271
|
def taller(dist, options={})
|
272
|
+
raise "You must specify an amount in `CGRect#taller`" unless dist.is_a?(Numeric)
|
273
|
+
|
244
274
|
options[:taller] = dist
|
245
275
|
self.apply(options)
|
246
276
|
end
|
247
277
|
|
248
278
|
def shorter(dist, options={})
|
279
|
+
raise "You must specify an amount in `CGRect#shorter`" unless dist.is_a?(Numeric)
|
280
|
+
|
249
281
|
options[:shorter] = dist
|
250
282
|
self.apply(options)
|
251
283
|
end
|
252
284
|
|
253
285
|
# adjacent rects
|
254
286
|
def above(margin = 0, options={})
|
287
|
+
margin, options = 0, margin if margin.is_a?(NSDictionary)
|
288
|
+
|
255
289
|
height = options[:height] || self.size.height
|
256
290
|
options[:up] = height + margin
|
257
291
|
self.apply(options)
|
258
292
|
end
|
259
293
|
|
260
294
|
def below(margin = 0, options={})
|
295
|
+
margin, options = 0, margin if margin.is_a?(NSDictionary)
|
296
|
+
|
261
297
|
options[:down] = self.size.height + margin
|
262
298
|
self.apply(options)
|
263
299
|
end
|
264
300
|
|
265
301
|
def before(margin = 0, options={})
|
302
|
+
margin, options = 0, margin if margin.is_a?(NSDictionary)
|
303
|
+
|
266
304
|
width = options[:width] || self.size.width
|
267
305
|
options[:left] = width + margin
|
268
306
|
self.apply(options)
|
269
307
|
end
|
270
308
|
|
271
309
|
def beside(margin = 0, options={})
|
310
|
+
margin, options = 0, margin if margin.is_a?(NSDictionary)
|
311
|
+
|
272
312
|
options[:right] = self.size.width + margin
|
273
313
|
self.apply(options)
|
274
314
|
end
|
@@ -395,6 +435,30 @@ public
|
|
395
435
|
return rect
|
396
436
|
end
|
397
437
|
|
438
|
+
alias grow_right wider
|
439
|
+
def grow_left(amount, options=nil)
|
440
|
+
raise "You must specify an amount in `CGRect#grow_left`" unless amount.is_a?(Numeric)
|
441
|
+
|
442
|
+
options[:grow_left] = amount
|
443
|
+
self.apply(options)
|
444
|
+
end
|
445
|
+
|
446
|
+
alias grow_down taller
|
447
|
+
def grow_up(amount, options=nil)
|
448
|
+
raise "You must specify an amount in `CGRect#grow_up`" unless amount.is_a?(Numeric)
|
449
|
+
|
450
|
+
options[:grow_up] = amount
|
451
|
+
self.apply(options)
|
452
|
+
end
|
453
|
+
|
454
|
+
def grow_width(amount, options=nil)
|
455
|
+
return self.grow([amount, 0], options)
|
456
|
+
end
|
457
|
+
|
458
|
+
def grow_height(amount, options=nil)
|
459
|
+
return self.grow([0, amount], options)
|
460
|
+
end
|
461
|
+
|
398
462
|
def shrink(size, options=nil)
|
399
463
|
if size.is_a? Numeric
|
400
464
|
size = CGSize.new(size, size)
|
@@ -406,6 +470,30 @@ public
|
|
406
470
|
return rect
|
407
471
|
end
|
408
472
|
|
473
|
+
alias shrink_left thinner
|
474
|
+
def shrink_right(amount, options={})
|
475
|
+
raise "You must specify an amount in `CGRect#shrink_right`" unless amount.is_a?(Numeric)
|
476
|
+
|
477
|
+
options[:shrink_right] = amount
|
478
|
+
self.apply(options)
|
479
|
+
end
|
480
|
+
|
481
|
+
alias shrink_up shorter
|
482
|
+
def shrink_down(amount, options={})
|
483
|
+
raise "You must specify an amount in `CGRect#shrink_down`" unless amount.is_a?(Numeric)
|
484
|
+
|
485
|
+
options[:shrink_down] = amount
|
486
|
+
self.apply(options)
|
487
|
+
end
|
488
|
+
|
489
|
+
def shrink_width(amount, options={})
|
490
|
+
return self.shrink([amount, 0], options)
|
491
|
+
end
|
492
|
+
|
493
|
+
def shrink_height(amount, options={})
|
494
|
+
return self.shrink([0, amount], options)
|
495
|
+
end
|
496
|
+
|
409
497
|
def empty?
|
410
498
|
CGRectIsEmpty(self)
|
411
499
|
end
|
data/lib/geomotion/version.rb
CHANGED
data/spec/cg_rect_spec.rb
CHANGED
@@ -288,10 +288,15 @@ describe "CGRect" do
|
|
288
288
|
|
289
289
|
describe "#left" do
|
290
290
|
it "works" do
|
291
|
-
rect = CGRect.empty
|
292
|
-
rect = rect.left(20)
|
291
|
+
rect = CGRect.empty.left(20)
|
293
292
|
rect.origin.x.should == -20
|
294
293
|
end
|
294
|
+
|
295
|
+
it "works with options" do
|
296
|
+
rect = CGRect.empty.left(20, width: 20)
|
297
|
+
rect.origin.x.should == -20
|
298
|
+
rect.size.width.should == 20
|
299
|
+
end
|
295
300
|
end
|
296
301
|
|
297
302
|
describe "#right" do
|
@@ -299,6 +304,12 @@ describe "CGRect" do
|
|
299
304
|
rect = CGRect.empty.right(20)
|
300
305
|
rect.origin.x.should == 20
|
301
306
|
end
|
307
|
+
|
308
|
+
it "works with options" do
|
309
|
+
rect = CGRect.empty.right(20, width: 20)
|
310
|
+
rect.origin.x.should == 20
|
311
|
+
rect.size.width.should == 20
|
312
|
+
end
|
302
313
|
end
|
303
314
|
|
304
315
|
describe "#up" do
|
@@ -306,6 +317,12 @@ describe "CGRect" do
|
|
306
317
|
rect = CGRect.empty.up(20)
|
307
318
|
rect.origin.y.should == -20
|
308
319
|
end
|
320
|
+
|
321
|
+
it "works with options" do
|
322
|
+
rect = CGRect.empty.up(20, height: 20)
|
323
|
+
rect.origin.y.should == -20
|
324
|
+
rect.size.height.should == 20
|
325
|
+
end
|
309
326
|
end
|
310
327
|
|
311
328
|
describe "#down" do
|
@@ -313,6 +330,12 @@ describe "CGRect" do
|
|
313
330
|
rect = CGRect.empty.down(20)
|
314
331
|
rect.origin.y.should == 20
|
315
332
|
end
|
333
|
+
|
334
|
+
it "works with options" do
|
335
|
+
rect = CGRect.empty.down(20, height: 20)
|
336
|
+
rect.origin.y.should == 20
|
337
|
+
rect.size.height.should == 20
|
338
|
+
end
|
316
339
|
end
|
317
340
|
|
318
341
|
describe "#wider" do
|
@@ -320,106 +343,154 @@ describe "CGRect" do
|
|
320
343
|
rect = CGRect.empty.wider(20)
|
321
344
|
rect.size.width.should == 20
|
322
345
|
end
|
346
|
+
|
347
|
+
it "works with options" do
|
348
|
+
rect = CGRect.empty.wider(20, height: 20)
|
349
|
+
rect.size.width.should == 20
|
350
|
+
rect.size.height.should == 20
|
351
|
+
end
|
323
352
|
end
|
324
353
|
|
325
354
|
describe "#thinner" do
|
326
355
|
it "works" do
|
327
|
-
rect = CGRect.
|
328
|
-
rect.size.width.should ==
|
356
|
+
rect = CGRect.make(width: 20).thinner(10)
|
357
|
+
rect.size.width.should == 10
|
358
|
+
end
|
359
|
+
|
360
|
+
it "works with options" do
|
361
|
+
rect = CGRect.make(width: 20).thinner(10, height: 20)
|
362
|
+
rect.size.width.should == 10
|
363
|
+
rect.size.height.should == 20
|
329
364
|
end
|
330
365
|
end
|
331
366
|
|
332
367
|
describe "#taller" do
|
333
368
|
it "works" do
|
334
|
-
rect = CGRect.
|
335
|
-
rect.size.height.should ==
|
369
|
+
rect = CGRect.make(height: 20).taller(20)
|
370
|
+
rect.size.height.should == 40
|
371
|
+
end
|
372
|
+
|
373
|
+
it "works with options" do
|
374
|
+
rect = CGRect.make(height: 20).taller(20, width: 20)
|
375
|
+
rect.size.width.should == 20
|
376
|
+
rect.size.height.should == 40
|
336
377
|
end
|
337
378
|
end
|
338
379
|
|
339
380
|
describe "#shorter" do
|
340
381
|
it "works" do
|
341
|
-
rect = CGRect.
|
342
|
-
rect.size.height.should ==
|
382
|
+
rect = CGRect.make(height: 20).shorter(10)
|
383
|
+
rect.size.height.should == 10
|
384
|
+
end
|
385
|
+
|
386
|
+
it "works with options" do
|
387
|
+
rect = CGRect.make(height: 20).shorter(10, width: 20)
|
388
|
+
rect.size.width.should == 20
|
389
|
+
rect.size.height.should == 10
|
343
390
|
end
|
344
391
|
end
|
345
392
|
|
346
393
|
describe "#above" do
|
394
|
+
it "works without margins" do
|
395
|
+
rect = CGRect.make(height: 50).above
|
396
|
+
rect.origin.y.should == -50
|
397
|
+
rect.size.height.should == 50
|
398
|
+
end
|
399
|
+
|
347
400
|
it "works with margins" do
|
348
401
|
rect = CGRect.make(height: 50).above(20)
|
349
402
|
rect.origin.y.should == -70
|
350
403
|
rect.size.height.should == 50
|
351
404
|
end
|
352
405
|
|
353
|
-
it "works with
|
406
|
+
it "works with options" do
|
354
407
|
rect = CGRect.make(height: 50).above(20, height: 10)
|
355
408
|
rect.origin.y.should == -30
|
356
409
|
rect.size.height.should == 10
|
357
410
|
end
|
358
411
|
|
359
|
-
it "works
|
360
|
-
rect = CGRect.make(height: 50).above
|
361
|
-
rect.origin.y.should == -
|
362
|
-
rect.size.height.should ==
|
412
|
+
it "works with options and no margin" do
|
413
|
+
rect = CGRect.make(height: 50).above(height: 10)
|
414
|
+
rect.origin.y.should == -10
|
415
|
+
rect.size.height.should == 10
|
363
416
|
end
|
364
417
|
end
|
365
418
|
|
366
419
|
describe "#below" do
|
420
|
+
it "works without margins" do
|
421
|
+
rect = CGRect.make(height: 50).below
|
422
|
+
rect.origin.y.should == 50
|
423
|
+
rect.size.height.should == 50
|
424
|
+
end
|
425
|
+
|
367
426
|
it "works with margins" do
|
368
427
|
rect = CGRect.make(height: 50).below(20)
|
369
428
|
rect.origin.y.should == 70
|
370
429
|
rect.size.height.should == 50
|
371
430
|
end
|
372
431
|
|
373
|
-
it "works with
|
432
|
+
it "works with options" do
|
374
433
|
rect = CGRect.make(height: 50).below(20, height: 10)
|
375
434
|
rect.origin.y.should == 70
|
376
435
|
rect.size.height.should == 10
|
377
436
|
end
|
378
437
|
|
379
|
-
it "works
|
380
|
-
rect = CGRect.make(height: 50).below
|
438
|
+
it "works with options and no margin" do
|
439
|
+
rect = CGRect.make(height: 50).below(height: 10)
|
381
440
|
rect.origin.y.should == 50
|
382
|
-
rect.size.height.should ==
|
441
|
+
rect.size.height.should == 10
|
383
442
|
end
|
384
443
|
end
|
385
444
|
|
386
445
|
describe "#before" do
|
446
|
+
it "works without margins" do
|
447
|
+
rect = CGRect.make(width: 50).before
|
448
|
+
rect.origin.x.should == -50
|
449
|
+
rect.size.width.should == 50
|
450
|
+
end
|
451
|
+
|
387
452
|
it "works with margins" do
|
388
453
|
rect = CGRect.make(width: 50).before(20)
|
389
454
|
rect.origin.x.should == -70
|
390
455
|
rect.size.width.should == 50
|
391
456
|
end
|
392
457
|
|
393
|
-
it "works with
|
458
|
+
it "works with options" do
|
394
459
|
rect = CGRect.make(width: 50).before(20, width: 10)
|
395
460
|
rect.origin.x.should == -30
|
396
461
|
rect.size.width.should == 10
|
397
462
|
end
|
398
463
|
|
399
|
-
it "works
|
400
|
-
rect = CGRect.make(width: 50).before
|
401
|
-
rect.origin.x.should == -
|
402
|
-
rect.size.width.should ==
|
464
|
+
it "works with options and no margin" do
|
465
|
+
rect = CGRect.make(width: 50).before(width: 10)
|
466
|
+
rect.origin.x.should == -10
|
467
|
+
rect.size.width.should == 10
|
403
468
|
end
|
404
469
|
end
|
405
470
|
|
406
471
|
describe "#beside" do
|
472
|
+
it "works without margins" do
|
473
|
+
rect = CGRect.make(width: 50).beside
|
474
|
+
rect.origin.x.should == 50
|
475
|
+
rect.size.width.should == 50
|
476
|
+
end
|
477
|
+
|
407
478
|
it "works with margins" do
|
408
479
|
rect = CGRect.make(width: 50).beside(20)
|
409
480
|
rect.origin.x.should == 70
|
410
481
|
rect.size.width.should == 50
|
411
482
|
end
|
412
483
|
|
413
|
-
it "works with
|
484
|
+
it "works with options" do
|
414
485
|
rect = CGRect.make(width: 50).beside(20, width: 10)
|
415
486
|
rect.origin.x.should == 70
|
416
487
|
rect.size.width.should == 10
|
417
488
|
end
|
418
489
|
|
419
|
-
it "works
|
420
|
-
rect = CGRect.make(width: 50).beside
|
490
|
+
it "works with options and no margin" do
|
491
|
+
rect = CGRect.make(width: 50).beside(width: 10)
|
421
492
|
rect.origin.x.should == 50
|
422
|
-
rect.size.width.should ==
|
493
|
+
rect.size.width.should == 10
|
423
494
|
end
|
424
495
|
end
|
425
496
|
|
@@ -711,6 +782,50 @@ describe "CGRect" do
|
|
711
782
|
end
|
712
783
|
end
|
713
784
|
|
785
|
+
describe "#grow_left" do
|
786
|
+
# @rect = CGRect.make(x: 10, y: 100, width: 50, height: 20)
|
787
|
+
it "should work" do
|
788
|
+
rect = @rect.grow_left(10)
|
789
|
+
rect.should == CGRectMake(0, 100, 60, 20)
|
790
|
+
end
|
791
|
+
end
|
792
|
+
|
793
|
+
describe "#grow_right" do
|
794
|
+
it "should work" do
|
795
|
+
rect = @rect.grow_right(10)
|
796
|
+
rect.should == CGRectMake(10, 100, 60, 20)
|
797
|
+
end
|
798
|
+
end
|
799
|
+
|
800
|
+
describe "#grow_up" do
|
801
|
+
it "should work" do
|
802
|
+
rect = @rect.grow_up(10)
|
803
|
+
rect.should == CGRectMake(10, 90, 50, 30)
|
804
|
+
end
|
805
|
+
end
|
806
|
+
|
807
|
+
describe "#grow_down" do
|
808
|
+
it "should work" do
|
809
|
+
rect = @rect.grow_down(10)
|
810
|
+
rect.should == CGRectMake(10, 100, 50, 30)
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
814
|
+
describe "#grow_width" do
|
815
|
+
# @rect = CGRect.make(x: 10, y: 100, width: 50, height: 20)
|
816
|
+
it "should work" do
|
817
|
+
rect = @rect.grow_width(10)
|
818
|
+
rect.should == CGRectMake(0, 100, 70, 20)
|
819
|
+
end
|
820
|
+
end
|
821
|
+
|
822
|
+
describe "#grow_height" do
|
823
|
+
it "should work" do
|
824
|
+
rect = @rect.grow_height(10)
|
825
|
+
rect.should == CGRectMake(10, 90, 50, 40)
|
826
|
+
end
|
827
|
+
end
|
828
|
+
|
714
829
|
describe "#shrink" do
|
715
830
|
it "should work with Numeric" do
|
716
831
|
rect = @rect.shrink(10)
|
@@ -728,6 +843,49 @@ describe "CGRect" do
|
|
728
843
|
end
|
729
844
|
end
|
730
845
|
|
846
|
+
describe "#shrink_left" do
|
847
|
+
it "should work" do
|
848
|
+
rect = @rect.shrink_left(10)
|
849
|
+
rect.should == CGRectMake(10, 100, 40, 20)
|
850
|
+
end
|
851
|
+
end
|
852
|
+
|
853
|
+
describe "#shrink_right" do
|
854
|
+
it "should work" do
|
855
|
+
rect = @rect.shrink_right(10)
|
856
|
+
rect.should == CGRectMake(20, 100, 40, 20)
|
857
|
+
end
|
858
|
+
end
|
859
|
+
|
860
|
+
describe "#shrink_up" do
|
861
|
+
it "should work" do
|
862
|
+
rect = @rect.shrink_up(10)
|
863
|
+
rect.should == CGRectMake(10, 100, 50, 10)
|
864
|
+
end
|
865
|
+
end
|
866
|
+
|
867
|
+
describe "#shrink_down" do
|
868
|
+
it "should work" do
|
869
|
+
rect = @rect.shrink_down(10)
|
870
|
+
rect.should == CGRectMake(10, 110, 50, 10)
|
871
|
+
end
|
872
|
+
end
|
873
|
+
|
874
|
+
describe "#shrink_width" do
|
875
|
+
# @rect = CGRect.make(x: 10, y: 100, width: 50, height: 20)
|
876
|
+
it "should work" do
|
877
|
+
rect = @rect.shrink_width(10)
|
878
|
+
rect.should == CGRectMake(20, 100, 30, 20)
|
879
|
+
end
|
880
|
+
end
|
881
|
+
|
882
|
+
describe "#shrink_height" do
|
883
|
+
it "should work" do
|
884
|
+
rect = @rect.shrink_height(10)
|
885
|
+
rect.should == CGRectMake(10, 110, 50, 0)
|
886
|
+
end
|
887
|
+
end
|
888
|
+
|
731
889
|
describe "#apply" do
|
732
890
|
|
733
891
|
it "should support :left" do
|