cryptopunks-gui 0.0.4 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c58e4224d053623e8f1d2f49f3a5b4eaa8255468a0300ac3f044b517a1b66d1f
4
- data.tar.gz: ce2c34aab44d09c58a8826c2b0dd7c2f224d96f93171bafe823cb5a3aa60e332
3
+ metadata.gz: 6ee3d5ade75811ebc70295c6f76b54ba9303f54478f384cccad7893f677fc10e
4
+ data.tar.gz: eaa8d181497699192da8ed4a507f7482f305aac74920e8a4259c25dd49316a11
5
5
  SHA512:
6
- metadata.gz: c65b92b843de9fa308ab44fdf79efb0ab55b60f96e7d05fe742faca7056ba4338f8b2e51c4e16b43bc189ba1d982d5e59527f1e668772e1a6c9745c6290766cc
7
- data.tar.gz: 0f39e1c911d52d56e9d548444ae49a3908e770754eda423847217cca604f6a9bc7b58e641ee9dcd791c82a98314d50c38afff76969096c7da9ed0d7ce21ff0c8
6
+ metadata.gz: 8ff9986b156bc144985f4e2a74b288218e15048ff3cf0b06962a7d0220210d1c8cdeae9b44795deada9baa0bf5d822bb547a41c10b86a3047846da6fbc9c80e7
7
+ data.tar.gz: 8647990b82c10f17bac2894d0fa6e3a6e6e73fbb40fc55b47ffcc69e0a20de8cd2a974d129dcb051550a81fd3380a4fce9910bc7bd24af87c4fd39f8bbce344d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.8
4
+
5
+ - Remove Boring Apes collections since they are 28x28 instead of 24x24, thus incomptible with the cryptopunks Ruby gem
6
+ - Fixed Boring Apes collection image dimensions (28x28 instead of default 24x24)
7
+
8
+ ## 0.0.7
9
+
10
+ - Multiple Punk Collections (https://github.com/cryptopunksnotdead/awesome-24px)
11
+
12
+ ## 0.0.6
13
+
14
+ - Provide option to change output location
15
+ - Update default output location not to be a hidden location, switching `~/.cryptopunks` to `~/cryptopunks`
16
+ - Remember last selected output location upon app start
17
+ - Avoid hardcoding punk count in code (change 9999 to size of `@punks` array)
18
+
19
+ ## 0.0.5
20
+
21
+ - Led style spacing option
22
+ - Led style round corner option
23
+ - Sketch style line option
24
+ - Apply zoom to led and sketch styles correctly
25
+ - Fixed issue with typing punk index higher than 9999 (ignore)
26
+
3
27
  ## 0.0.4
4
28
 
5
29
  - Changed flip and mirror to checkbuttons
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
- # <img src="https://raw.githubusercontent.com/AndyObtiva/cryptopunks-gui/master/icons/cryptopunks-gui.png" height=85 /> CryptoPunks GUI 0.0.4
1
+ # <img src="https://raw.githubusercontent.com/AndyObtiva/cryptopunks-gui/master/icons/cryptopunks-gui.png" height=85 /> CryptoPunks GUI 0.0.8
2
2
  ## Simplified Minting
3
3
  [![Gem Version](https://badge.fury.io/rb/cryptopunks-gui.svg)](http://badge.fury.io/rb/cryptopunks-gui)
4
4
 
5
5
  This is a Graphical User Interface for the famous [cryptopunks Ruby gem](https://github.com/cryptopunksnotdead/cryptopunks/tree/master/cryptopunks).
6
6
 
7
- It automatically downloads `punks.png` from https://github.com/larvalabs/cryptopunks on first use.
7
+ It automatically downloads image collection sprites on first use (e.g. `punks.png` from https://github.com/larvalabs/cryptopunks).
8
8
 
9
- Minted cryptopunks are stored at `~/.cryptopunks/`.
9
+ Minted cryptopunks are stored at `~/cryptopunks/` by default ([output location can be changed](#output-location)).
10
10
 
11
11
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot.png)
12
12
 
@@ -25,7 +25,7 @@ You can use CryptoPunks GUI via gem or via cloning repository.
25
25
  Run:
26
26
 
27
27
  ```
28
- gem install cryptopunks-gui -v0.0.4
28
+ gem install cryptopunks-gui -v0.0.8
29
29
  ```
30
30
 
31
31
  Afterwards, run app via:
@@ -69,9 +69,61 @@ ruby app/cryptopunks_gui.rb
69
69
 
70
70
  ## Instructions
71
71
 
72
- ### Punk Index
73
-
74
- Change punk index to pick a different punk.
72
+ ### Collection
73
+
74
+ Change collection to pick a different collection of images.
75
+
76
+ There are currently 34 available collections (from https://github.com/cryptopunksnotdead/awesome-24px):
77
+ - [Punks](https://raw.githubusercontent.com/larvalabs/cryptopunks/master/punks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/punks-strip.png)
78
+ - [Mohawks](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/mohawks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/mohawks-strip.png)
79
+ - [Blondies](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/blondies.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/blondies-strip.png)
80
+ - [Zombies](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/zombies.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/zombies-strip.png)
81
+ - [Apes](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/apes.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/apes-strip.png)
82
+ - [Aliens](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/aliens.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/aliens-strip.png)
83
+ - [Golden Punks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/goldenpunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/goldenpunks-strip.png)
84
+ - [Halloween Punks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/halloweenpunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/halloweenpunks-strip.png)
85
+ - [Front Punks](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/frontpunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/frontpunks-strip.png)
86
+ - [More Punks](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/morepunks.png') ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/morepunks-strip.png)
87
+ - [Expansion Punks](https://expansionpunks.com/provenance/expansionpunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/expansionpunks-strip.png)
88
+ - [Avalanche Punks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/avalanchepunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/avalanchepunks-strip.png)
89
+ - [International Punks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/intlpunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/intlpunks-strip.png)
90
+ - [Ape Punks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/apepunks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/apepunks-strip.png)
91
+ - [Alien Clan](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/alienclan.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/alienclan-strip.png)
92
+ - [Bored Apes](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes-strip.png)
93
+ - [Bored Apes Blue](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_blue.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes_blue-strip.png)
94
+ - [Bored Apes Red](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_red.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes_red-strip.png)
95
+ - [Bored Apes Neon Glow](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_neon_glow.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes_neon_glow-strip.png)
96
+ - [Bored Apes Stars and Stripes](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_stars_and_stripes.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes_stars_and_stripes-strip.png)
97
+ - [Bored Apes Acid](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_acid.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/boredapes_acid-strip.png)
98
+ - [Cool Cats](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats-strip.png)
99
+ - [Cool Cats Mohawks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_mohawks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_mohawks-strip.png)
100
+ - [Cool Cats Ninjas](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_ninjas.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_ninjas-strip.png)
101
+ - [Cool Cats TV Heads](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_tvheads.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_tvheads-strip.png)
102
+ - [Cool Cats Pirates](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_pirates.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_pirates-strip.png)
103
+ - [Cool Cats Unicorns](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_unicorns.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_unicorns-strip.png)
104
+ - [Cool Cats Dragons](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_dragons.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/coolcats_dragons-strip.png)
105
+ - [Cool Cats Frogs](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_frogs.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/blob/master/i/coolcats_frogs-strip.png)
106
+ - [Pudgy Penguins](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/pudgypenguins.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/pudgypenguins-strip.png)
107
+ - [Dodge](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/dodge.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/dodge-strip.png)
108
+ - [Rocks](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/rocks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/rocks-strip.png)
109
+ - [Punk Rocks](https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/punkrocks.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/punkrocks-strip.png)
110
+ - [Tulips](https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/tulips.png) ![image examples](https://github.com/cryptopunksnotdead/awesome-24px/raw/master/i/tulips-strip.png)
111
+
112
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-zombies.png)
113
+
114
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-apes.png)
115
+
116
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-alien-clan.png)
117
+
118
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-bored-apes-stars-and-stripes.png)
119
+
120
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-cool-cats-ninjas.png)
121
+
122
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-collection-dodge.png)
123
+
124
+ ### Image Index
125
+
126
+ Change image index to pick a different image.
75
127
 
76
128
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-different-punk-index.png)
77
129
 
@@ -99,15 +151,33 @@ Change palette to get different punk colors.
99
151
 
100
152
  Change style to get different punk looks.
101
153
 
154
+ #### Normal Style
155
+
102
156
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-normal.png)
103
157
 
158
+ #### Led Style
159
+
104
160
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led.png)
105
161
 
162
+ ##### Led Spacing
163
+
164
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led-spacing.png)
165
+
166
+ ##### Led Round Corner
167
+
168
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led-round-corner.png)
169
+
170
+ #### Sketch Style
171
+
106
172
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-sketch.png)
107
173
 
174
+ ##### Sketch Line
175
+
176
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-sketch-line.png)
177
+
108
178
  ### Mirror/Flip
109
179
 
110
- Check mirror and/or flip to apply punk transformation. Can combine with different palettes and styles.
180
+ Check mirror and/or flip to apply punk transformations. Can be combined with different palettes and styles.
111
181
 
112
182
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-no-mirror-no-flip.png)
113
183
 
@@ -119,6 +189,12 @@ Check mirror and/or flip to apply punk transformation. Can combine with differen
119
189
 
120
190
  ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-false-style-led-mirror-flip.png)
121
191
 
192
+ ### Output Location
193
+
194
+ You may select a new output location by clicking on the `...` button.
195
+
196
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-output-location.png)
197
+
122
198
  ## TODO
123
199
 
124
200
  [TODO.md](TODO.md)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.8
@@ -5,6 +5,7 @@ require 'fileutils'
5
5
  require 'net/http'
6
6
  require 'uri'
7
7
  require 'glimmer/data_binding/observer'
8
+ require 'yaml'
8
9
  require 'puts_debuggerer'
9
10
 
10
11
  class CryptopunksGui
@@ -12,18 +13,60 @@ class CryptopunksGui
12
13
 
13
14
  PALETTES = ['Standard'] + (Palette8bit.constants).map(&:name).map {|palette| palette.split('_').map(&:capitalize).join(' ')}.reject { |palette| palette.include?(' ') }.sort
14
15
  STYLES = ['Normal', 'Led', 'Sketch']
16
+ COLLECTION_URL_MAP = {
17
+ 'Punks' => 'https://raw.githubusercontent.com/larvalabs/cryptopunks/master/punks.png',
18
+ 'Mohawks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/mohawks.png',
19
+ 'Blondies' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/blondies.png',
20
+ 'Zombies' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/zombies.png',
21
+ 'Apes' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/apes.png',
22
+ 'Aliens' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/aliens.png',
23
+ 'Golden Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/goldenpunks.png',
24
+ 'Halloween Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/halloweenpunks.png',
25
+ 'Front Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/frontpunks.png',
26
+ 'More Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/morepunks.png',
27
+ 'Expansion Punks' => 'https://expansionpunks.com/provenance/expansionpunks.png',
28
+ 'Avalanche Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/avalanchepunks.png',
29
+ 'International Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/intlpunks.png',
30
+ 'Ape Punks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/apepunks.png',
31
+ 'Alien Clan' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/alienclan.png',
32
+ 'Bored Apes' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes.png',
33
+ 'Bored Apes Blue' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_blue.png',
34
+ 'Bored Apes Red' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_red.png',
35
+ 'Bored Apes Neon Glow' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_neon_glow.png',
36
+ 'Bored Apes Stars and Stripes' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_stars_and_stripes.png',
37
+ 'Bored Apes Acid' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/boredapes_acid.png',
38
+ 'Cool Cats' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats.png',
39
+ 'Cool Cats Mohawks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_mohawks.png',
40
+ 'Cool Cats Ninjas' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_ninjas.png',
41
+ 'Cool Cats TV Heads' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_tvheads.png',
42
+ 'Cool Cats Pirates' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_pirates.png',
43
+ 'Cool Cats Unicorns' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_unicorns.png',
44
+ 'Cool Cats Dragons' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_dragons.png',
45
+ 'Cool Cats Frogs' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/coolcats_frogs.png',
46
+ 'Pudgy Penguins' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/pudgypenguins.png',
47
+ 'Dodge' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/dodge.png',
48
+ 'Rocks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/rocks.png',
49
+ 'Punk Rocks' => 'https://raw.githubusercontent.com/cryptopunksnotdead/programming-cryptopunks/master/i/punkrocks.png',
50
+ 'Tulips' => 'https://raw.githubusercontent.com/cryptopunksnotdead/awesome-24px/master/collection/tulips.png',
51
+ }
15
52
 
16
- attr_accessor :punk_index, :zoom, :palette, :style, :flip, :mirror
53
+ attr_accessor :collection, :image_index, :zoom, :palette, :style, :led_spacing, :led_round_corner, :sketch_line, :flip, :mirror
17
54
 
18
55
  def initialize
19
- initialize_punks
56
+ initialize_punk_directory
57
+ initialize_collection
58
+ load_config
20
59
  initialize_defaults
21
60
  observe_image_attribute_changes
22
61
  create_gui
23
- self.punk_index = 0
62
+ self.image_index = 0
24
63
  @root.open
25
64
  end
26
65
 
66
+ def collection_options
67
+ COLLECTION_URL_MAP.keys
68
+ end
69
+
27
70
  def palette_options
28
71
  PALETTES
29
72
  end
@@ -32,53 +75,87 @@ class CryptopunksGui
32
75
  STYLES
33
76
  end
34
77
 
35
- def initialize_punks
36
- @punk_directory = File.join(Dir.home, '.cryptopunks')
78
+ def initialize_punk_directory
79
+ @punk_directory = @punk_config_directory = File.join(Dir.home, 'cryptopunks')
37
80
  FileUtils.mkdir_p(@punk_directory)
38
- @punk_file = File.join(@punk_directory, 'punks.png')
39
- File.write(@punk_file, Net::HTTP.get(URI('https://raw.githubusercontent.com/larvalabs/cryptopunks/master/punks.png'))) unless File.exist?(@punk_file)
40
- @punks = Punks::Image::Composite.read(@punk_file)
81
+ end
82
+
83
+ def initialize_collection
84
+ return if @collection && @collection == @last_collection
85
+ @collection ||= COLLECTION_URL_MAP.keys.first
86
+ url = COLLECTION_URL_MAP[@collection]
87
+ @punk_file = File.join(@punk_config_directory, File.basename(url, '.png'))
88
+ File.write(@punk_file, Net::HTTP.get(URI(url))) unless File.exist?(@punk_file)
89
+ @images ||= {}
90
+ dimension = @collection.start_with?('Bored Apes') ? 28 : 24
91
+ @images[@collection] ||= Punks::Image::Composite.read(@punk_file, width: dimension, height: dimension)
92
+ @last_collection = @collection
93
+ self.image_index = 0
94
+ @image_index_spinbox.to = @images[@collection].size - 1 if @image_index_spinbox
95
+ end
96
+
97
+ def load_config
98
+ @punk_config_file = File.join(@punk_config_directory, 'cryptopunks.yml')
99
+ FileUtils.touch(@punk_config_file)
100
+ @punk_config = YAML.load(File.read(@punk_config_file)) || {punk_directory: @punk_directory}
101
+ @punk_directory = @punk_config[:punk_directory]
102
+ end
103
+
104
+ def save_config
105
+ File.write(@punk_config_file, YAML.dump(@punk_config))
41
106
  end
42
107
 
43
108
  def initialize_defaults
109
+ @collection = COLLECTION_URL_MAP.keys.first
44
110
  @zoom = 12
45
111
  @palette = PALETTES.first
46
112
  @style = STYLES.first
113
+ @led_spacing = 2
114
+ @led_round_corner = false
115
+ @sketch_line = 1
47
116
  @mirror = false
48
117
  @flip = false
49
118
  end
50
119
 
51
120
  def observe_image_attribute_changes
52
121
  observer = Glimmer::DataBinding::Observer.proc { generate_image }
53
- observer.observe(self, :punk_index)
122
+ observer.observe(self, :collection)
123
+ observer.observe(self, :image_index)
54
124
  observer.observe(self, :zoom)
55
125
  observer.observe(self, :palette)
56
126
  observer.observe(self, :style)
127
+ observer.observe(self, :led_spacing)
128
+ observer.observe(self, :led_round_corner)
129
+ observer.observe(self, :sketch_line)
57
130
  observer.observe(self, :mirror)
58
131
  observer.observe(self, :flip)
59
132
  end
60
133
 
61
134
  def generate_image
62
- image_location = File.join(@punk_directory, "punk-#{@punk_index}#{"x#{@zoom}" if @zoom.to_i > 1}#{"-#{@palette.underscore}" if @palette != PALETTES.first}#{"-#{@style.underscore}" if @style != STYLES.first}.png")
135
+ initialize_collection
136
+ return if @image_index.to_i > @images[@collection].size
137
+ image_location = File.join(@punk_directory, "#{@collection.gsub(' ', '').downcase}-#{@image_index}#{"x#{@zoom}" if @zoom.to_i > 1}#{"-#{@palette.underscore}" if @palette != PALETTES.first}#{"-#{@style.underscore}" if @style != STYLES.first}.png")
63
138
  puts "Writing punk image to #{image_location}"
64
- selected_punk = @punks[@punk_index.to_i]
139
+ selected_punk = @images[@collection][@image_index.to_i]
65
140
  selected_punk = selected_punk.change_palette8bit(Palette8bit.const_get(@palette.gsub(' ', '_').upcase.to_sym)) if @palette != PALETTES.first
66
141
  @original_zoom = @zoom
67
142
  if @style != STYLES.first
68
- selected_punk = selected_punk.send(@style.underscore)
69
- if @style != @previous_style
70
- @zoom = 2 if @style == 'Sketch'
71
- @zoom = 1 if @style == 'Led'
143
+ style_options = {}
144
+ if @style == 'Led'
145
+ style_options[:spacing] = @led_spacing.to_i
146
+ style_options[:round_corner] = @led_round_corner
72
147
  end
73
- else
74
- @zoom = 12 if @style != @previous_style
148
+ if @style == 'Sketch'
149
+ style_options[:line] = @sketch_line.to_i
150
+ end
151
+ selected_punk = selected_punk.send(@style.underscore, @zoom.to_i, **style_options)
75
152
  end
76
153
  selected_punk = selected_punk.mirror if @mirror
77
154
  selected_punk = selected_punk.flip if @flip
78
- selected_punk = selected_punk.zoom(@zoom.to_i)
155
+ selected_punk = selected_punk.zoom(@zoom.to_i) if @style == STYLES.first
79
156
  selected_punk.save(image_location)
80
157
  @image_label.image = image_location
81
- @message_entry.text = image_location
158
+ @output_location_entry.text = image_location
82
159
  @previous_style = @style
83
160
  notify_observers(:zoom) if @zoom != @original_zoom
84
161
  end
@@ -90,17 +167,20 @@ class CryptopunksGui
90
167
 
91
168
  frame {
92
169
  label {
93
- text 'Select Punk Index and Zoom To Mint Cryptopunk'
94
- font weight: 'bold'
170
+ text 'Collection:'
171
+ }
172
+ combobox {
173
+ readonly true
174
+ text <=> [self, :collection]
95
175
  }
96
176
 
97
177
  label {
98
- text 'Punk Index:'
178
+ text 'Image Index:'
99
179
  }
100
- spinbox {
180
+ @image_index_spinbox = spinbox {
101
181
  from 0
102
- to @punks.size - 1
103
- text <=> [self, :punk_index]
182
+ to @images[@collection].size - 1
183
+ text <=> [self, :image_index]
104
184
  }
105
185
 
106
186
  label {
@@ -125,13 +205,17 @@ class CryptopunksGui
125
205
  }
126
206
  combobox {
127
207
  readonly true
128
- text <=> [self, :style]
208
+ text <=> [self, :style, after_write: ->(val) {add_style_options}]
209
+ }
210
+
211
+ @style_options_frame = frame {
212
+ padding 0
129
213
  }
130
214
 
131
215
  frame {
132
216
  padding 0
133
217
 
134
- @mirror_checkbutton = checkbutton {
218
+ checkbutton {
135
219
  grid row: 0, column: 0, column_weight: 0
136
220
  variable <=> [self, :mirror]
137
221
  }
@@ -144,7 +228,7 @@ class CryptopunksGui
144
228
  end
145
229
  }
146
230
 
147
- @flip_checkbutton = checkbutton {
231
+ checkbutton {
148
232
  grid row: 0, column: 2
149
233
  variable <=> [self, :flip]
150
234
  }
@@ -161,8 +245,26 @@ class CryptopunksGui
161
245
  label {
162
246
  text 'Output Location:'
163
247
  }
164
- @message_entry = entry {
165
- readonly true
248
+ frame {
249
+ padding 0
250
+
251
+ @output_location_entry = entry {
252
+ grid row: 0, column: 0
253
+ readonly true
254
+ width 47
255
+ }
256
+ button {
257
+ grid row: 0, column: 1
258
+ text '...'
259
+ width 1.1
260
+
261
+ on('command') do
262
+ @punk_directory = choose_directory(parent: @root)
263
+ @punk_config[:punk_directory] = @punk_directory
264
+ save_config
265
+ generate_image
266
+ end
267
+ }
166
268
  }
167
269
 
168
270
  @image_label = label {
@@ -171,6 +273,62 @@ class CryptopunksGui
171
273
  }
172
274
  }
173
275
  end
276
+
277
+ def add_style_options
278
+ @style_options_frame.content {
279
+ @style_options_frame.children.each(&:destroy)
280
+ if @style == 'Led'
281
+ frame {
282
+ padding 0
283
+
284
+ label {
285
+ grid row: 0, column: 0, column_weight: 0
286
+ text 'Spacing:'
287
+ }
288
+ spinbox {
289
+ grid row: 0, column: 1
290
+ from 1
291
+ to 72
292
+ text <=> [self, :led_spacing]
293
+ }
294
+
295
+ checkbutton {
296
+ grid row: 0, column: 2
297
+ variable <=> [self, :led_round_corner]
298
+ }
299
+ label {
300
+ grid row: 0, column: 3
301
+ text 'Round Corner'
302
+
303
+ on('Button-1') do
304
+ self.led_round_corner = !led_round_corner
305
+ end
306
+ }
307
+ }
308
+ elsif @style == 'Sketch'
309
+ frame {
310
+ padding 0
311
+
312
+ label {
313
+ grid row: 0, column: 0, column_weight: 0
314
+ text 'Line:'
315
+ }
316
+ spinbox {
317
+ grid row: 0, column: 1
318
+ from 1
319
+ to 72
320
+ text <=> [self, :sketch_line]
321
+ }
322
+ }
323
+ else
324
+ frame { # filler
325
+ padding 0
326
+ height 0
327
+ width 0
328
+ }
329
+ end
330
+ }
331
+ end
174
332
  end
175
333
 
176
334
  CryptopunksGui.new.launch
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: cryptopunks-gui 0.0.4 ruby app
5
+ # stub: cryptopunks-gui 0.0.8 ruby app
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "cryptopunks-gui".freeze
9
- s.version = "0.0.4"
9
+ s.version = "0.0.8"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["app".freeze]
13
13
  s.authors = ["Andy Maleh".freeze]
14
- s.date = "2021-10-25"
14
+ s.date = "2021-10-28"
15
15
  s.description = "CryptoPunks GUI for Simplified Minting - Built with Glimmer DSL for Tk (requires ActiveTcl to run cryptopunks-gui command)".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["cryptopunks-gui".freeze]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptopunks-gui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-25 00:00:00.000000000 Z
11
+ date: 2021-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer-dsl-tk