1# Copyright (c) 2006-2008, The RubyCocoa Project. 2# Copyright (c) 2001-2006, FUJIMOTO Hisakuni. 3# All Rights Reserved. 4# 5# RubyCocoa is free software, covered under either the Ruby's license or the 6# LGPL. See the COPYRIGHT file for more information. 7 8# This module adds syntax-sugar APIs on top of the Cocoa structures. 9# This is mostly to preserve backward compatibility with previous versions 10# of RubyCocoa where the C structures support was hardcoded in the bridge. 11# Now structures are automatically handled via the metadata mechanism, but 12# the API is not compatible with what we used to have. 13 14class OSX::NSRect 15 class << self 16 alias_method :orig_new, :new 17 def new(*args) 18 origin, size = case args.size 19 when 0 20 [[0, 0], [0, 0]] 21 when 2 22 [args[0], args[1]] 23 when 4 24 [args[0..1], args[2..3]] 25 else 26 raise ArgumentError, "wrong number of arguments (#{args.size} for either 0, 2 or 4)" 27 end 28 origin = OSX::NSPoint.new(*origin) unless origin.is_a?(OSX::NSPoint) 29 size = OSX::NSSize.new(*size) unless size.is_a?(OSX::NSSize) 30 orig_new(origin, size) 31 end 32 end 33 def x; origin.x; end 34 def y; origin.y; end 35 def width; size.width; end 36 def height; size.height; end 37 def x=(v); origin.x = v; end 38 def y=(v); origin.y = v; end 39 def width=(v); size.width = v; end 40 def height=(v); size.height = v; end 41 alias_method :old_to_a, :to_a # To remove a warning. 42 def to_a; [origin.to_a, size.to_a]; end 43 def center; OSX::NSPoint.new(OSX::NSMidX(self), OSX::NSMidY(self)); end 44 def contain?(arg) 45 case arg 46 when OSX::NSRect 47 OSX::NSContainsRect(self, arg) 48 when OSX::NSPoint 49 OSX::NSPointInRect(arg, self) 50 else 51 raise ArgumentError, "argument should be NSRect or NSPoint" 52 end 53 end 54 def empty?; OSX::NSIsEmptyRect(self); end 55 def inflate(dx, dy); inset(-dx, -dy); end 56 def inset(dx, dy); OSX::NSInsetRect(self, dx, dy); end 57 def integral; OSX::NSIntegralRect(self); end 58 def intersect?(rect); OSX::NSIntersectsRect(self, rect); end 59 def intersection(rect); OSX::NSIntersectionRect(self, rect); end 60 def offset(dx, dy); OSX::NSOffsetRect(self, dx, dy); end 61 def union(rect); OSX::NSUnionRect(self, rect); end 62 def inspect; "#<#{self.class} x=#{x}, y=#{y}, width=#{width}, height=#{height}>"; end 63end 64 65class OSX::NSPoint 66 def in?(rect); OSX::NSPointInRect(self, rect); end 67 alias_method :inRect?, :in? 68 def +(v) 69 if v.is_a?(OSX::NSSize) 70 OSX::NSPoint.new(x + v.width, y + v.height) 71 else 72 raise ArgumentException, "parameter should be NSSize" 73 end 74 end 75 def -(v) 76 if v.is_a?(OSX::NSSize) 77 OSX::NSPoint.new(x - v.width, y - v.height) 78 else 79 raise ArgumentException, "parameter should be NSSize" 80 end 81 end 82 def inspect; "#<#{self.class} x=#{x}, y=#{y}>"; end 83end 84 85class OSX::NSSize 86 def /(v); OSX::NSSize.new(width / v, height / v); end 87 def *(v); OSX::NSSize.new(width * v, height * v); end 88 def +(v); OSX::NSSize.new(width + v, height + v); end 89 def -(v); OSX::NSSize.new(width - v, height - v); end 90 def inspect; "#<#{self.class} width=#{width}, height=#{height}>"; end 91end 92