gui_geometry 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,6 +1,12 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
4
  task :default => :spec
5
+
6
+ desc "Run specs"
7
+ RSpec::Core::RakeTask.new do |task|
8
+ task.pattern = "**/spec/*_spec.rb"
9
+ task.rspec_opts = Dir.glob("[0-9][0-9][0-9]_*").collect { |x| "-I#{x}" }.sort
10
+ task.rspec_opts << '--color'
11
+ task.rspec_opts << '-f documentation'
12
+ end
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["shanebdavis@gmail.com"]
11
11
  gem.description = %q{2D geometry specificly designed to support graphical user interfaces and bitmaps currently focsued on Point and Rectangle classes}
12
12
  gem.summary = %q{2D geometry specificly designed to support graphical user interfaces and bitmaps}
13
- gem.homepage = ""
13
+ gem.homepage = "https://github.com/shanebdavis/gui_geometry"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -7,8 +7,18 @@ class Point < Struct.new(:x, :y)
7
7
  super if args.length!=0
8
8
  end
9
9
 
10
- def min(b); point(super(x, b.x), super(y, b.y)); end
11
- def max(b); point(super(x, b.x), super(y, b.y)); end
10
+ def min(b); point(Tools::min(x, b.x), Tools::min(y, b.y)); end
11
+ def max(b); point(Tools::max(x, b.x), Tools::max(y, b.y)); end
12
+ def bound(a, b); point(Tools::bound(a.x, x, b.x), Tools::bound(a.y, y, b.y)); end
13
+
14
+ def clone_value(v)
15
+ case v
16
+ when Fixnum, Bignum, Float then v
17
+ else v.clone
18
+ end
19
+ end
20
+
21
+ def clone; point(clone_value(x), clone_value(y)); end
12
22
 
13
23
  def inspect; "point(#{x},#{y})" end
14
24
  def to_s; "(#{x},#{y})" end
@@ -23,6 +23,25 @@ class Rectangle < Struct.new(:loc, :size)
23
23
  !present?
24
24
  end
25
25
 
26
+ def clone
27
+ rect loc.clone, size.clone
28
+ end
29
+
30
+ # val can be a Rectangle or Point
31
+ # returns a Rectangle or Point that is within this Rectangle
32
+ # For Rectangles, the size is only changed if it has to be
33
+ def bound(val)
34
+ case val
35
+ when Rectangle then
36
+ r = val.clone
37
+ r.size = r.size.min(size)
38
+ r.loc = r.loc.bound(loc, loc + size - val.size)
39
+ r
40
+ when Point then (val-loc).bound(point, size) + loc
41
+ else raise ArgumentError.new("wrong type: (#{val.class}) - Rectangle or Point expected")
42
+ end
43
+ end
44
+
26
45
  def x; loc.x; end
27
46
  def y; loc.y; end
28
47
  def w; size.x; end
@@ -11,5 +11,9 @@ module Tools
11
11
  end
12
12
  end
13
13
  def bound(a,bounded,c) max(a,min(bounded,c)); end
14
+
15
+ class << self
16
+ include GuiGeo::Tools
17
+ end
14
18
  end
15
19
  end
@@ -1,3 +1,3 @@
1
1
  module GuiGeo
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -13,6 +13,22 @@ describe "Point" do
13
13
  (point(1,2) + 3).should == point(4,5)
14
14
  end
15
15
 
16
+ it "clone basic point" do
17
+ p1 = point(1,2)
18
+ p2 = p1.clone
19
+ p1.should == p2
20
+ p2.x = 3
21
+ p1.should_not == p2
22
+ end
23
+
24
+ it "clone complex point" do
25
+ p1 = point("hi","bye")
26
+ p2 = p1.clone
27
+ p1.should == p2
28
+ p2.x.upcase!
29
+ p1.should_not == p2
30
+ end
31
+
16
32
  it "-" do
17
33
  (point(9,8) - point(3,4)).should == point(6,4)
18
34
  (point(9,8) - 3).should == point(6,5)
@@ -79,5 +95,13 @@ describe "Point" do
79
95
  point(9,5).max(point(5,9)).should == point(9,9)
80
96
  point(5,9).max(point(9,5)).should == point(9,9)
81
97
  end
98
+
99
+ it "bound" do
100
+ point(3,4).bound(point(1,2), point(5,6)).should == point(3,4)
101
+ point(3,0).bound(point(1,2), point(5,6)).should == point(3,2)
102
+ point(3,6).bound(point(1,2), point(5,6)).should == point(3,6)
103
+ point(0,4).bound(point(1,2), point(5,6)).should == point(1,4)
104
+ point(6,4).bound(point(1,2), point(5,6)).should == point(5,4)
105
+ end
82
106
  end
83
107
  end
@@ -13,6 +13,15 @@ describe "Rectangle" do
13
13
  expect { rect(1,2,3,4,5) }.to raise_error
14
14
  end
15
15
 
16
+ it "clone" do
17
+ r1 = rect(1,2,3,4)
18
+ r2 = r1.clone
19
+ r1.should == r2
20
+ r1.object_id.should_not == r2.object_id
21
+ r1.loc.object_id.should_not == r2.loc.object_id
22
+ r1.size.object_id.should_not == r2.size.object_id
23
+ end
24
+
16
25
  it "init with one point" do
17
26
  rect(point(1,2)).should == rect(0,0,1,2)
18
27
  end
@@ -76,11 +85,32 @@ describe "Rectangle" do
76
85
  rect(0,0,0,1).present?.should == false
77
86
  rect(0,0,0,0).present?.should == false
78
87
  end
88
+
79
89
  it ".blank?" do
80
90
  rect(0,0,1,1).blank?.should == false
81
91
  rect(0,0,1,0).blank?.should == true
82
92
  rect(0,0,0,1).blank?.should == true
83
93
  rect(0,0,0,0).blank?.should == true
84
94
  end
95
+
96
+ it ".bound(point)" do
97
+ r = rect(5, 10, 15, 20)
98
+ r.bound(point(5,10)).should == point(5,10)
99
+ r.bound(point(20,30)).should == point(20,30)
100
+ r.bound(point(5,31)).should == point(5,30)
101
+ r.bound(point(21,10)).should == point(20,10)
102
+ r.bound(point(5,10)).should == point(5,10)
103
+ r.bound(point(5, 9)).should == point(5,10)
104
+ r.bound(point(4,10)).should == point(5,10)
105
+ end
106
+
107
+ it ".bound(smaller_rect)" do
108
+ r1 = rect(5, 10, 15, 20)
109
+ r1.bound(rect(5,0,5,5)).should == rect(5,10,5,5)
110
+ r1.bound(rect(0,10,5,5)).should == rect(5,10,5,5)
111
+ r1.bound(rect(0,30,5,5)).should == rect(5,25,5,5)
112
+ r1.bound(rect(30,0,5,5)).should == rect(15,10,5,5)
113
+ r1.bound(rect(0,0,20,5)).should == rect(5,10,15,5)
114
+ end
85
115
  end
86
116
  end
@@ -1,6 +1,4 @@
1
1
  require 'simplecov'
2
- SimpleCov.start do
3
- add_filter "vendor/ruby"
4
- end
2
+ SimpleCov.start
5
3
 
6
4
  require File.join(File.dirname(__FILE__),"..","lib","gui_geometry")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gui_geometry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
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-01-24 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -131,7 +131,7 @@ files:
131
131
  - spec/rectangle_spec.rb
132
132
  - spec/spec_helper.rb
133
133
  - spec/tools_spec.rb
134
- homepage: ''
134
+ homepage: https://github.com/shanebdavis/gui_geometry
135
135
  licenses: []
136
136
  post_install_message:
137
137
  rdoc_options: []