Class: MotionKit::SizeConstraint

Inherits:
CompoundConstraint show all
Defined in:
lib/motion-kit-cocoa/constraints/constraint.rb

Constant Summary

Constants inherited from Constraint

Constraint::Attributes, Constraint::Priorities, Constraint::Relationships

Instance Attribute Summary

Attributes inherited from Constraint

#attribute, #attribute2, #constant, #identifier, #multiplier, #priority, #relationship, #relative_to, #target

Instance Method Summary collapse

Methods inherited from CompoundConstraint

#update_constraint

Methods inherited from Constraint

#<=, #==, #>=, attribute_lookup, attribute_reverse, axis_lookup, calculate?, constant?, #equals, #gte, #is, #lte, #of, orientation_lookup, priority_lookup, relationship_lookup, relationship_reverse, #update_constraint, view_lookup

Constructor Details

#initialize(target, attribute = nil, relationship = :equal) ⇒ SizeConstraint

Returns a new instance of SizeConstraint.



391
392
393
394
395
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 391

def initialize(target, attribute=nil, relationship=:equal)
  super
  @attribute = [:width, :height]
  @attribute2 = [:width, :height]
end

Instance Method Details

#attribute2=(value) ⇒ Object

Raises:

  • (NoMethodError)


401
402
403
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 401

def attribute2=(value)
  raise NoMethodError.new("undefined method `#{:attribute2=}' for #{self}:#{self.class}", :attribute2=)
end

#attribute=(value) ⇒ Object

Raises:

  • (NoMethodError)


397
398
399
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 397

def attribute=(value)
  raise NoMethodError.new("undefined method `#{:attribute=}' for #{self}:#{self.class}", :attribute=)
end

#constant=(constant) ⇒ Object



405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 405

def constant=(constant)
  if constant.is_a?(Array)
    @constant = constant[0..1]
  elsif constant.is_a?(Hash)
    @constant = [0, 0]

    if constant.key?(:w)
      @constant[0] = constant[:w]
    elsif constant.key?(:width)
      @constant[0] = constant[:width]
    end

    if constant.key?(:h)
      @constant[1] = constant[:h]
    elsif constant.key?(:height)
      @constant[1] = constant[:height]
    end
  else
    @constant = [constant, constant]
  end

  self.update_constraint
end

#divided_by(multiplier) ⇒ Object



528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 528

def divided_by(multiplier)
  if multiplier.is_a?(Array)
    self.multiplier[0] /= multiplier[0].to_f
    self.multiplier[1] /= multiplier[1].to_f
  elsif multiplier.is_a?(Hash)
    if multiplier.key?(:w)
      self.multiplier[0] /= multiplier[:w].to_f
    elsif multiplier.key?(:width)
      self.multiplier[0] /= multiplier[:width].to_f
    end

    if multiplier.key?(:h)
      self.multiplier[1] /= multiplier[:h].to_f
    elsif multiplier.key?(:height)
      self.multiplier[1] /= multiplier[:height].to_f
    end
  else
    self.multiplier[0] /= multiplier.to_f
    self.multiplier[1] /= multiplier.to_f
  end

  self.update_constraint
  self
end

#minus(constant) ⇒ Object



478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 478

def minus(constant)
  if constant.is_a?(Array)
    self.constant[0] -= constant[0]
    self.constant[1] -= constant[1]
  elsif constant.is_a?(Hash)
    if constant.key?(:w)
      self.constant[0] -= constant[:w]
    elsif constant.key?(:width)
      self.constant[0] -= constant[:width]
    end

    if constant.key?(:h)
      self.constant[1] -= constant[:h]
    elsif constant.key?(:height)
      self.constant[1] -= constant[:height]
    end
  else
    self.constant[0] -= constant
    self.constant[1] -= constant
  end

  self.update_constraint
  self
end

#multiplier=(multiplier) ⇒ Object



429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 429

def multiplier=(multiplier)
  if multiplier.is_a?(Array)
    @multiplier = multiplier[0..1]
  elsif multiplier.is_a?(Hash)
    @multiplier = [0, 0]

    if multiplier.key?(:w)
      @multiplier[0] = multiplier[:w]
    elsif multiplier.key?(:width)
      @multiplier[0] = multiplier[:width]
    end

    if multiplier.key?(:h)
      @multiplier[1] = multiplier[:h]
    elsif multiplier.key?(:height)
      @multiplier[1] = multiplier[:height]
    end
  else
    @multiplier = [multiplier, multiplier]
  end

  self.update_constraint
end

#plus(constant) ⇒ Object



453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 453

def plus(constant)
  if constant.is_a?(Array)
    self.constant[0] += constant[0]
    self.constant[1] += constant[1]
  elsif constant.is_a?(Hash)
    if constant.key?(:w)
      self.constant[0] += constant[:w]
    elsif constant.key?(:width)
      self.constant[0] += constant[:width]
    end

    if constant.key?(:h)
      self.constant[1] += constant[:h]
    elsif constant.key?(:height)
      self.constant[1] += constant[:height]
    end
  else
    self.constant[0] += constant
    self.constant[1] += constant
  end

  self.update_constraint
  self
end

#resolve_all(layout, view) ⇒ Object



553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 553

def resolve_all(layout, view)
  @resolved ||= begin
    item = Constraint.view_lookup(layout, view, self.target)
    rel_item = Constraint.view_lookup(layout, view, self.relative_to)

    [[:width, 0], [:height, 1]].map do |attribute, index|
      nsconstraint = NSLayoutConstraint.constraintWithItem(item,
        attribute: Constraint.attribute_lookup(attribute),
        relatedBy: Constraint.relationship_lookup(self.relationship),
        toItem: rel_item,
        attribute: Constraint.attribute_lookup(attribute),
        multiplier: self.multiplier[index],
        constant: self.constant[index]
        )

      if self.priority
        nsconstraint.priority = Constraint.priority_lookup(self.priority)
      end

      if self.identifier
        nsconstraint.setIdentifier(self.identifier)
      end

      nsconstraint
    end
  end
end

#times(multiplier) ⇒ Object



503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
# File 'lib/motion-kit-cocoa/constraints/constraint.rb', line 503

def times(multiplier)
  if multiplier.is_a?(Array)
    self.multiplier[0] *= multiplier[0]
    self.multiplier[1] *= multiplier[1]
  elsif multiplier.is_a?(Hash)
    if multiplier.key?(:w)
      self.multiplier[0] *= multiplier[:w]
    elsif multiplier.key?(:width)
      self.multiplier[0] *= multiplier[:width]
    end

    if multiplier.key?(:h)
      self.multiplier[1] *= multiplier[:h]
    elsif multiplier.key?(:height)
      self.multiplier[1] *= multiplier[:height]
    end
  else
    self.multiplier[0] *= multiplier
    self.multiplier[1] *= multiplier
  end

  self.update_constraint
  self
end