isd-color-palette 0.1.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/README.md +63 -0
- data/lib/isd-color-palette.rb +9 -0
- data/lib/isd-color-palette/controller/isd_basic_color_collection_view_controller.rb +123 -0
- data/lib/isd-color-palette/controller/isd_color_palette_container_view_controller.rb +87 -0
- data/lib/isd-color-palette/controller/isd_color_palette_view_controller.rb +136 -0
- data/lib/isd-color-palette/controller/isd_rgba_color_view_controller.rb +118 -0
- data/lib/isd-color-palette/model/string_ids_extention.rb +12 -0
- data/lib/isd-color-palette/model/uicolor_isd_extention.rb +39 -0
- data/lib/isd-color-palette/view/isd_basic_color_collection_reusable_view.rb +38 -0
- data/lib/isd-color-palette/view/isd_color_palette_collection_view_cell.rb +69 -0
- data/lib/isd-color-palette/view/isd_rgba_slider_view.rb +124 -0
- data/lib/resources/ISDColorPalette.storyboard +435 -0
- data/lib/resources/ISDColorPalette.storyboardc/DDB-9Z-aLd-view-cjl-ZX-JRH.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/ISDColorPaletteViewController.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/Info.plist +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/Ojg-L0-U3y-view-RZ8-kV-96R.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/UIViewController-DDB-9Z-aLd.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/UIViewController-Ojg-L0-U3y.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/UIViewController-Yhi-Ks-PNF.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/UIViewController-lfU-qe-W46.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/Yhi-Ks-PNF-view-DbN-fh-FRU.nib +0 -0
- data/lib/resources/ISDColorPalette.storyboardc/ccp-rq-upX-view-Gjb-sR-XRJ.nib +0 -0
- metadata +87 -0
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# ISDColorPalette
|
2
|
+
|
3
|
+
ISDColorPalette is a color selection panel for the RubyMotion iOS app.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
# in Gemfile
|
9
|
+
gem 'isd-color-palette'
|
10
|
+
```
|
11
|
+
|
12
|
+
ISDColorPalette uses Sugarcube and BubbleWrap.
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
# in Gemfile
|
16
|
+
gem 'bubble-wrap'
|
17
|
+
# minimum set
|
18
|
+
gem 'sugarcube', :require => [
|
19
|
+
'sugarcube-core',
|
20
|
+
'sugarcube-localized',
|
21
|
+
'sugarcube-color',
|
22
|
+
'sugarcube-uikit',
|
23
|
+
'sugarcube-nsuserdefaults'
|
24
|
+
]
|
25
|
+
```
|
26
|
+
|
27
|
+
|
28
|
+
## Usage
|
29
|
+
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
# attr_accessor :color
|
33
|
+
|
34
|
+
# get a controller.
|
35
|
+
c = ISDColorPaletteViewController.colorPaletteViewController
|
36
|
+
# set an initial color.
|
37
|
+
c.selectedColor = self.color
|
38
|
+
# set a callback.
|
39
|
+
c.selected_color_block = Proc.new {|color| did_select_color color }
|
40
|
+
# push the controller.
|
41
|
+
self.navigationController.pushViewController c, animated:true
|
42
|
+
```
|
43
|
+
|
44
|
+
If you want to get nil instead of the clear color, set #return_nil true.
|
45
|
+
|
46
|
+
```
|
47
|
+
c.return_nil = true
|
48
|
+
```
|
49
|
+
|
50
|
+
The selected_color_block is called after a color is selected.
|
51
|
+
|
52
|
+
```
|
53
|
+
def did_select_color color
|
54
|
+
p color
|
55
|
+
self.color = color
|
56
|
+
end
|
57
|
+
```
|
58
|
+
|
59
|
+
## License
|
60
|
+
|
61
|
+
MIT License
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
unless defined?(Motion::Project::Config)
|
2
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
3
|
+
end
|
4
|
+
|
5
|
+
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
6
|
+
Motion::Project::App.setup do |app|
|
7
|
+
app.files.unshift(Dir.glob(File.join(lib_dir_path, "isd-color-palette/**/*.rb")))
|
8
|
+
app.resources_dirs << File.join(lib_dir_path, 'resources')
|
9
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ISDBasicColorCollectionViewController < UICollectionViewController
|
3
|
+
|
4
|
+
attr_reader :recent_colors, :system_colors, :web_colors
|
5
|
+
|
6
|
+
def viewDidLoad
|
7
|
+
super
|
8
|
+
|
9
|
+
load_recent_colors
|
10
|
+
|
11
|
+
@system_colors = [:clear, :white, :black, :dark_gray, :light_gray, :gray,
|
12
|
+
:red, :blue, :cyan, :yellow, :magenta, :orange, :purple, :brown
|
13
|
+
]
|
14
|
+
@web_colors = Symbol.css_colors.dup.sort{|a, b|
|
15
|
+
f = (a.last >> 16) <=> (b.last >> 16)
|
16
|
+
case f
|
17
|
+
when 0
|
18
|
+
f = (a.last >> 8 & 0xff) <=> (b.last >> 8 & 0xff)
|
19
|
+
case f
|
20
|
+
when 0
|
21
|
+
(a.last & 0xff) <=> (b.last & 0xff)
|
22
|
+
else
|
23
|
+
f
|
24
|
+
end
|
25
|
+
else
|
26
|
+
f
|
27
|
+
end
|
28
|
+
}.map{|e| e.first}
|
29
|
+
end
|
30
|
+
|
31
|
+
def viewWillDisappear animated
|
32
|
+
super
|
33
|
+
record_recent_color
|
34
|
+
save_recent_colors
|
35
|
+
end
|
36
|
+
|
37
|
+
def numberOfSectionsInCollectionView collectionView
|
38
|
+
3
|
39
|
+
end
|
40
|
+
|
41
|
+
def collectionView collectionView, numberOfItemsInSection:section
|
42
|
+
case section
|
43
|
+
when 0
|
44
|
+
self.recent_colors.size
|
45
|
+
when 1
|
46
|
+
self.system_colors.size
|
47
|
+
when 2
|
48
|
+
self.web_colors.size
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def collectionView collectionView, viewForSupplementaryElementOfKind:kind, atIndexPath:indexPath
|
53
|
+
view = collectionView.dequeueReusableSupplementaryViewOfKind kind, withReuseIdentifier:"Header", forIndexPath:indexPath
|
54
|
+
case indexPath.section
|
55
|
+
when 0
|
56
|
+
view.headerLabel.text = "Recent"._
|
57
|
+
when 1
|
58
|
+
view.headerLabel.text = "System"._
|
59
|
+
when 2
|
60
|
+
view.headerLabel.text = "Web"._
|
61
|
+
end
|
62
|
+
view
|
63
|
+
end
|
64
|
+
|
65
|
+
CellIdentifier = "ColorWell"
|
66
|
+
def collectionView collectionView, cellForItemAtIndexPath:indexPath
|
67
|
+
cell = collectionView.dequeueReusableCellWithReuseIdentifier CellIdentifier, forIndexPath:indexPath
|
68
|
+
case indexPath.section
|
69
|
+
when 0
|
70
|
+
cell.color = self.recent_colors[indexPath.row].uicolor
|
71
|
+
when 1
|
72
|
+
cell.color = self.system_colors[indexPath.row].uicolor
|
73
|
+
when 2
|
74
|
+
cell.color = self.web_colors[indexPath.row].uicolor
|
75
|
+
else
|
76
|
+
end
|
77
|
+
cell
|
78
|
+
end
|
79
|
+
|
80
|
+
def collectionView collectionView, didSelectItemAtIndexPath:indexPath
|
81
|
+
cell = collectionView.cellForItemAtIndexPath indexPath
|
82
|
+
parentViewController.parentViewController.didChangeColor cell.color
|
83
|
+
collectionView.selectItemAtIndexPath indexPath, animated:true, scrollPosition:UICollectionViewScrollPositionNone
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def collectionView collectionView, didDeselectItemAtIndexPath:indexPath
|
88
|
+
cell = collectionView.cellForItemAtIndexPath indexPath
|
89
|
+
collectionView.deselectItemAtIndexPath indexPath, animated:true
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def load_recent_colors
|
96
|
+
@recent_colors = []
|
97
|
+
begin
|
98
|
+
a = NSUserDefaults["isd_color_palette_recent_colors"] || []
|
99
|
+
a.each do |s|
|
100
|
+
@recent_colors << UIColor.color_by_serialize(s)
|
101
|
+
end
|
102
|
+
rescue
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def record_recent_color
|
107
|
+
color = self.parentViewController.parentViewController.selectedColor
|
108
|
+
@recent_colors.unshift color
|
109
|
+
end
|
110
|
+
|
111
|
+
def save_recent_colors
|
112
|
+
a = @recent_colors.map do |c|
|
113
|
+
(c || :clear.uicolor).to_serialize
|
114
|
+
end
|
115
|
+
# limit 7 x 3
|
116
|
+
a.uniq!
|
117
|
+
a[0, 21]
|
118
|
+
NSUserDefaults["isd_color_palette_recent_colors"] = a
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
end
|
123
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ISDColorPaletteContainerViewController < UIViewController
|
3
|
+
|
4
|
+
attr_accessor :basicColorView # IBOutlet UIView
|
5
|
+
attr_accessor :rgbaColorView # IBOutlet UIView
|
6
|
+
|
7
|
+
attr_reader :views
|
8
|
+
|
9
|
+
=begin
|
10
|
+
def initWithNibName nibNameOrNil, bundle:nibBundleOrNil
|
11
|
+
super
|
12
|
+
self
|
13
|
+
end
|
14
|
+
=end
|
15
|
+
|
16
|
+
def viewDidLoad
|
17
|
+
super
|
18
|
+
@views = [
|
19
|
+
self.basicColorView,
|
20
|
+
self.rgbaColorView
|
21
|
+
]
|
22
|
+
|
23
|
+
select_view self.basicColorView
|
24
|
+
end
|
25
|
+
|
26
|
+
def select_view view
|
27
|
+
self.views.each do |v|
|
28
|
+
if v
|
29
|
+
v.hidden = v != view
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
=begin
|
35
|
+
def viewDidUnload
|
36
|
+
super
|
37
|
+
end
|
38
|
+
=end
|
39
|
+
|
40
|
+
=begin
|
41
|
+
def viewWillAppear animated
|
42
|
+
super
|
43
|
+
end
|
44
|
+
=end
|
45
|
+
|
46
|
+
=begin
|
47
|
+
def viewDidAppear animated
|
48
|
+
super
|
49
|
+
end
|
50
|
+
=end
|
51
|
+
|
52
|
+
=begin
|
53
|
+
def viewWillDisappear animated
|
54
|
+
super
|
55
|
+
end
|
56
|
+
=end
|
57
|
+
|
58
|
+
=begin
|
59
|
+
def viewDidDisappear animated
|
60
|
+
super
|
61
|
+
end
|
62
|
+
=end
|
63
|
+
|
64
|
+
=begin
|
65
|
+
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
66
|
+
interfaceOrientation == UIInterfaceOrientationPortrait
|
67
|
+
end
|
68
|
+
=end
|
69
|
+
|
70
|
+
=begin
|
71
|
+
def shouldAutorotate
|
72
|
+
true
|
73
|
+
end
|
74
|
+
=end
|
75
|
+
|
76
|
+
=begin
|
77
|
+
def supportedInterfaceOrientations
|
78
|
+
UIInterfaceOrientationMaskPortrait
|
79
|
+
end
|
80
|
+
=end
|
81
|
+
|
82
|
+
def didChangeValue sender # IBAction
|
83
|
+
view = self.views[sender.selectedSegmentIndex]
|
84
|
+
select_view view
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ISDColorPaletteViewController < UIViewController
|
3
|
+
|
4
|
+
attr_accessor :colorWellView # IBOutlet UIView
|
5
|
+
attr_accessor :colorNameLabel # IBOutlet UILabel
|
6
|
+
|
7
|
+
attr_accessor :selectedColor
|
8
|
+
|
9
|
+
attr_accessor :selected_color_block # -> {|color| }
|
10
|
+
|
11
|
+
# If it's true, return nil when the color is the clear color.
|
12
|
+
attr_accessor :return_nil
|
13
|
+
|
14
|
+
|
15
|
+
attr_reader :color_layer, :solid_layer
|
16
|
+
|
17
|
+
class << self
|
18
|
+
|
19
|
+
def colorPaletteViewController
|
20
|
+
sb = UIStoryboard.storyboardWithName "ISDColorPalette", bundle:nil
|
21
|
+
sb.instantiateViewControllerWithIdentifier "ISDColorPaletteViewController"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
=begin
|
27
|
+
def initWithNibName nibNameOrNil, bundle:nibBundleOrNil
|
28
|
+
super
|
29
|
+
self
|
30
|
+
end
|
31
|
+
=end
|
32
|
+
|
33
|
+
def viewDidLoad
|
34
|
+
super
|
35
|
+
l = colorWellView.layer
|
36
|
+
l.borderColor = :black.uicolor.cgcolor
|
37
|
+
l.borderWidth = 2
|
38
|
+
l.cornerRadius = 4
|
39
|
+
l.masksToBounds = true
|
40
|
+
@color_layer = l
|
41
|
+
|
42
|
+
@solid_layer = CALayer.new
|
43
|
+
r2 = Math.sqrt 2
|
44
|
+
w = h = @color_layer.frame.size.height * r2
|
45
|
+
x = CGRectGetMaxX(@color_layer.bounds) - w / 2
|
46
|
+
y = -h / 2
|
47
|
+
@solid_layer.frame = CGRectMake(x, y, w, h)
|
48
|
+
rad = 45 * Math::PI / 180
|
49
|
+
@solid_layer.transform = CATransform3DMakeRotation(rad, 0, 0, 1)
|
50
|
+
@color_layer.addSublayer @solid_layer
|
51
|
+
|
52
|
+
set_color self.selectedColor
|
53
|
+
end
|
54
|
+
|
55
|
+
def selectedColor= color
|
56
|
+
willChangeValueForKey "selectedColor"
|
57
|
+
@selectedColor = color
|
58
|
+
didChangeValueForKey "selectedColor"
|
59
|
+
set_color color
|
60
|
+
end
|
61
|
+
|
62
|
+
=begin
|
63
|
+
def viewDidUnload
|
64
|
+
super
|
65
|
+
end
|
66
|
+
=end
|
67
|
+
|
68
|
+
=begin
|
69
|
+
def viewWillAppear animated
|
70
|
+
super
|
71
|
+
end
|
72
|
+
=end
|
73
|
+
|
74
|
+
=begin
|
75
|
+
def viewDidAppear animated
|
76
|
+
super
|
77
|
+
set_color self.selectedColor
|
78
|
+
end
|
79
|
+
=end
|
80
|
+
|
81
|
+
=begin
|
82
|
+
def viewWillDisappear animated
|
83
|
+
super
|
84
|
+
end
|
85
|
+
=end
|
86
|
+
|
87
|
+
=begin
|
88
|
+
def viewDidDisappear animated
|
89
|
+
super
|
90
|
+
end
|
91
|
+
=end
|
92
|
+
|
93
|
+
=begin
|
94
|
+
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
95
|
+
interfaceOrientation == UIInterfaceOrientationPortrait
|
96
|
+
end
|
97
|
+
=end
|
98
|
+
|
99
|
+
=begin
|
100
|
+
def shouldAutorotate
|
101
|
+
true
|
102
|
+
end
|
103
|
+
=end
|
104
|
+
|
105
|
+
=begin
|
106
|
+
def supportedInterfaceOrientations
|
107
|
+
UIInterfaceOrientationMaskPortrait
|
108
|
+
end
|
109
|
+
=end
|
110
|
+
|
111
|
+
def didChangeColor color
|
112
|
+
self.selectedColor = color
|
113
|
+
if self.selected_color_block
|
114
|
+
color = nil if self.return_nil && color == :clear.uicolor
|
115
|
+
self.selected_color_block.call color
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
def set_color color
|
123
|
+
return unless colorWellView
|
124
|
+
|
125
|
+
color ||= :clear.uicolor
|
126
|
+
|
127
|
+
self.color_layer.backgroundColor = color.uicolor.cgcolor
|
128
|
+
self.color_layer.removeAllAnimations
|
129
|
+
self.solid_layer.backgroundColor = color.uicolor(1).cgcolor
|
130
|
+
self.solid_layer.removeAllAnimations
|
131
|
+
|
132
|
+
colorNameLabel.text = color == :clear.uicolor ? "Clear"._ : color.color_name._
|
133
|
+
colorNameLabel.textColor = color.monochrome.red >= 0.5 ? :black.uicolor : :white.uicolor
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
class ISDRgbaColorViewController < UIViewController
|
3
|
+
include BW::KVO
|
4
|
+
|
5
|
+
attr_accessor :rView # IBOutlet ISDRgbaSliderView
|
6
|
+
attr_accessor :gView # IBOutlet ISDRgbaSliderView
|
7
|
+
attr_accessor :bView # IBOutlet ISDRgbaSliderView
|
8
|
+
attr_accessor :aView # IBOutlet ISDRgbaSliderView
|
9
|
+
|
10
|
+
attr_accessor :color
|
11
|
+
|
12
|
+
attr_reader :views
|
13
|
+
|
14
|
+
=begin
|
15
|
+
def initWithNibName nibNameOrNil, bundle:nibBundleOrNil
|
16
|
+
super
|
17
|
+
self
|
18
|
+
end
|
19
|
+
=end
|
20
|
+
|
21
|
+
def viewDidLoad
|
22
|
+
super
|
23
|
+
identities = %w(R G B A)
|
24
|
+
@views = [rView, gView, bView, aView]
|
25
|
+
@views.each_with_index do |v, i|
|
26
|
+
v.identity = identities[i]
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
=begin
|
32
|
+
def viewDidUnload
|
33
|
+
super
|
34
|
+
end
|
35
|
+
=end
|
36
|
+
|
37
|
+
def dealloc
|
38
|
+
unregist_kvo
|
39
|
+
end
|
40
|
+
|
41
|
+
def viewWillAppear animated
|
42
|
+
super
|
43
|
+
|
44
|
+
regist_kvo
|
45
|
+
|
46
|
+
c = self.parentViewController.parentViewController
|
47
|
+
set_color c.selectedColor
|
48
|
+
end
|
49
|
+
|
50
|
+
def regist_kvo
|
51
|
+
return if @registed_kvo
|
52
|
+
|
53
|
+
c = self.parentViewController.parentViewController
|
54
|
+
observe c, "selectedColor" do |old, new|
|
55
|
+
set_color new
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def unregist_kvo
|
60
|
+
return unless @registed_kvo
|
61
|
+
|
62
|
+
c = self.parentViewController.parentViewController
|
63
|
+
unobserve c, "selectedColor"
|
64
|
+
end
|
65
|
+
|
66
|
+
=begin
|
67
|
+
def viewDidAppear animated
|
68
|
+
super
|
69
|
+
end
|
70
|
+
=end
|
71
|
+
|
72
|
+
=begin
|
73
|
+
def viewWillDisappear animated
|
74
|
+
super
|
75
|
+
end
|
76
|
+
=end
|
77
|
+
|
78
|
+
=begin
|
79
|
+
def viewDidDisappear animated
|
80
|
+
super
|
81
|
+
end
|
82
|
+
=end
|
83
|
+
|
84
|
+
=begin
|
85
|
+
def shouldAutorotateToInterfaceOrientation interfaceOrientation
|
86
|
+
interfaceOrientation == UIInterfaceOrientationPortrait
|
87
|
+
end
|
88
|
+
=end
|
89
|
+
|
90
|
+
=begin
|
91
|
+
def shouldAutorotate
|
92
|
+
true
|
93
|
+
end
|
94
|
+
=end
|
95
|
+
|
96
|
+
=begin
|
97
|
+
def supportedInterfaceOrientations
|
98
|
+
UIInterfaceOrientationMaskPortrait
|
99
|
+
end
|
100
|
+
=end
|
101
|
+
|
102
|
+
def set_color color
|
103
|
+
@views.each do |v|
|
104
|
+
v.color = color
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def didChangeColor sender
|
109
|
+
c = self.parentViewController.parentViewController
|
110
|
+
color = UIColor.colorWithRed self.views[0].color_value,
|
111
|
+
green:self.views[1].color_value,
|
112
|
+
blue:self.views[2].color_value,
|
113
|
+
alpha:self.views[3].color_value
|
114
|
+
parentViewController.parentViewController.didChangeColor color
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
end
|