cryptopunks-gui 0.0.2 → 0.0.6

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: 3c2dbdaae667d1a222c8d3484dce2903b6a7636fe8445287124c3fa9293f6ab3
4
- data.tar.gz: d4066e8e07533ac59630f345cbd7496abffdbbcccee541100716e582bd0a5f03
3
+ metadata.gz: 41332d4eb8f4427149280fd075b456ace5f882ec6acd9d794a052d66747b5ab4
4
+ data.tar.gz: b52e82c7789dd198ee4925db7b1f59cfc99fae0e11b7d1d577ffa1e7190ddd6c
5
5
  SHA512:
6
- metadata.gz: 47b5b1513fb6328af05d4adf9bdff57598596b747f3257c05d3fc7f6969cb06e02bf7d311442d71d890535e777e545765a66802773d898ed72bd39beedc1a6d7
7
- data.tar.gz: 6c61ff9deeb391131f9a94da5c217afe6a228763aa7427bac374a99dde1d3af8cf84794166faa5206dad9325a9b274ef54546bedd9b9b89094c5dee6408e236c
6
+ metadata.gz: 50ead25c82393bfb068c411b17edd7a64bf5eb943fae3f74094ae25766e5600d07949f85f283c4869777645a2b05bc85efce4a3d3e0eb241c218e5d063cc0341
7
+ data.tar.gz: 4f18e99c50b31cb823ea68e8239c78a30d0ed6428b9199aa8300eaf747a503499a2c321dd552ff3d0f039c525babb6d9b832066da5ff200774160b65f8f742ef
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.6
4
+
5
+ - Provide option to change output location
6
+ - Update default output location not to be a hidden location, switching `~/.cryptopunks` to `~/cryptopunks`
7
+ - Remember last selected output location upon app start
8
+ - Avoid hardcoding punk count in code (change 9999 to size of `@punks` array)
9
+
10
+ ## 0.0.5
11
+
12
+ - Led style spacing option
13
+ - Led style round corner option
14
+ - Sketch style line option
15
+ - Apply zoom to led and sketch styles correctly
16
+ - Fixed issue with typing punk index higher than 9999 (ignore)
17
+
18
+ ## 0.0.4
19
+
20
+ - Changed flip and mirror to checkbuttons
21
+ - Fixed zooming for led and sketch styles
22
+
23
+ ## 0.0.3
24
+
25
+ - Style support (e.g. mirror, flip, sketch, led)
26
+
3
27
  ## 0.0.2
4
28
 
5
29
  - Palette support (e.g. grayscale or sepia)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # <img src="https://raw.githubusercontent.com/AndyObtiva/cryptopunks-gui/master/icons/cryptopunks-gui.png" height=85 /> CryptoPunks GUI 0.0.2
1
+ # <img src="https://raw.githubusercontent.com/AndyObtiva/cryptopunks-gui/master/icons/cryptopunks-gui.png" height=85 /> CryptoPunks GUI 0.0.6
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
 
@@ -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.2
28
+ gem install cryptopunks-gui -v0.0.6
29
29
  ```
30
30
 
31
31
  Afterwards, run app via:
@@ -85,7 +85,63 @@ Change zoom to enlarge punk to your liking.
85
85
 
86
86
  Change palette to get different punk colors.
87
87
 
88
- ![Screenshot](/screenshots/cryptopunks-gui-screenshot-different-palette.png)
88
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-standard.png)
89
+
90
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-sepia.png)
91
+
92
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-blue.png)
93
+
94
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-false.png)
95
+
96
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-grayscale.png)
97
+
98
+ ### Style
99
+
100
+ Change style to get different punk looks.
101
+
102
+ #### Normal Style
103
+
104
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-normal.png)
105
+
106
+ #### Led Style
107
+
108
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led.png)
109
+
110
+ ##### Led Spacing
111
+
112
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led-spacing.png)
113
+
114
+ ##### Led Round Corner
115
+
116
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-led-round-corner.png)
117
+
118
+ #### Sketch Style
119
+
120
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-sketch.png)
121
+
122
+ ##### Sketch Line
123
+
124
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-style-sketch-line.png)
125
+
126
+ ### Mirror/Flip
127
+
128
+ Check mirror and/or flip to apply punk transformations. Can be combined with different palettes and styles.
129
+
130
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-no-mirror-no-flip.png)
131
+
132
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-mirror.png)
133
+
134
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-flip.png)
135
+
136
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-mirror-flip.png)
137
+
138
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-palette-false-style-led-mirror-flip.png)
139
+
140
+ ### Output Location
141
+
142
+ You may select a new output location by clicking on the `...` button.
143
+
144
+ ![Screenshot](/screenshots/cryptopunks-gui-screenshot-output-location.png)
89
145
 
90
146
  ## TODO
91
147
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.6
@@ -1,52 +1,108 @@
1
1
  require 'glimmer-dsl-tk'
2
2
  require 'cryptopunks'
3
+ require 'facets'
3
4
  require 'fileutils'
4
5
  require 'net/http'
5
6
  require 'uri'
6
7
  require 'glimmer/data_binding/observer'
8
+ require 'yaml'
7
9
  require 'puts_debuggerer'
8
10
 
9
11
  class CryptopunksGui
10
12
  include Glimmer
11
13
 
12
- PALETTES = ['Standard'] + (Palette8bit.constants).map(&:name).map {|palette| palette.split('_').map(&:capitalize).join(' ')}.reject { |palette| palette.include?(' ') }
14
+ PALETTES = ['Standard'] + (Palette8bit.constants).map(&:name).map {|palette| palette.split('_').map(&:capitalize).join(' ')}.reject { |palette| palette.include?(' ') }.sort
15
+ STYLES = ['Normal', 'Led', 'Sketch']
13
16
 
14
- attr_accessor :punk_index, :zoom, :palette
17
+ attr_accessor :punk_index, :zoom, :palette, :style, :led_spacing, :led_round_corner, :sketch_line, :flip, :mirror
15
18
 
16
19
  def initialize
17
- @punk_directory = File.join(Dir.home, '.cryptopunks')
20
+ initialize_punks
21
+ load_config
22
+ initialize_defaults
23
+ observe_image_attribute_changes
24
+ create_gui
25
+ self.punk_index = 0
26
+ @root.open
27
+ end
28
+
29
+ def palette_options
30
+ PALETTES
31
+ end
32
+
33
+ def style_options
34
+ STYLES
35
+ end
36
+
37
+ def initialize_punks
38
+ @punk_directory = File.join(Dir.home, 'cryptopunks')
18
39
  FileUtils.mkdir_p(@punk_directory)
19
40
  @punk_file = File.join(@punk_directory, 'punks.png')
20
41
  File.write(@punk_file, Net::HTTP.get(URI('https://raw.githubusercontent.com/larvalabs/cryptopunks/master/punks.png'))) unless File.exist?(@punk_file)
21
42
  @punks = Punks::Image::Composite.read(@punk_file)
43
+ end
44
+
45
+ def load_config
46
+ @punk_config_file = File.join(@punk_directory, 'cryptopunks.yml')
47
+ FileUtils.touch(@punk_config_file)
48
+ @punk_config = YAML.load(File.read(@punk_config_file)) || {punk_directory: @punk_directory}
49
+ @punk_directory = @punk_config[:punk_directory]
50
+ end
51
+
52
+ def save_config
53
+ File.write(@punk_config_file, YAML.dump(@punk_config))
54
+ end
55
+
56
+ def initialize_defaults
22
57
  @zoom = 12
23
- @palette = 'Standard'
24
-
25
- observer = Glimmer::DataBinding::Observer.proc do
26
- generate_image
27
- end
58
+ @palette = PALETTES.first
59
+ @style = STYLES.first
60
+ @led_spacing = 2
61
+ @led_round_corner = false
62
+ @sketch_line = 1
63
+ @mirror = false
64
+ @flip = false
65
+ end
66
+
67
+ def observe_image_attribute_changes
68
+ observer = Glimmer::DataBinding::Observer.proc { generate_image }
28
69
  observer.observe(self, :punk_index)
29
70
  observer.observe(self, :zoom)
30
71
  observer.observe(self, :palette)
31
-
32
- create_gui
33
- self.punk_index = 0
34
- @root.open
35
- end
36
-
37
- def palette_options
38
- PALETTES
72
+ observer.observe(self, :style)
73
+ observer.observe(self, :led_spacing)
74
+ observer.observe(self, :led_round_corner)
75
+ observer.observe(self, :sketch_line)
76
+ observer.observe(self, :mirror)
77
+ observer.observe(self, :flip)
39
78
  end
40
79
 
41
80
  def generate_image
42
- image_location = File.join(@punk_directory, "punk-#{@punk_index}#{"x#{@zoom}" if @zoom.to_i > 1}#{"-#{@palette.downcase.gsub(' ', '_')}" if @palette != 'Standard'}.png")
81
+ return if @punk_index.to_i > @punks.size
82
+ 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")
43
83
  puts "Writing punk image to #{image_location}"
44
84
  selected_punk = @punks[@punk_index.to_i]
45
- selected_punk = selected_punk.change_palette8bit(Palette8bit.const_get(@palette.gsub(' ', '_').upcase.to_sym)) if @palette != 'Standard'
46
- selected_punk = selected_punk.zoom(@zoom.to_i)
85
+ selected_punk = selected_punk.change_palette8bit(Palette8bit.const_get(@palette.gsub(' ', '_').upcase.to_sym)) if @palette != PALETTES.first
86
+ @original_zoom = @zoom
87
+ if @style != STYLES.first
88
+ style_options = {}
89
+ if @style == 'Led'
90
+ style_options[:spacing] = @led_spacing.to_i
91
+ style_options[:round_corner] = @led_round_corner
92
+ end
93
+ if @style == 'Sketch'
94
+ style_options[:line] = @sketch_line.to_i
95
+ end
96
+ selected_punk = selected_punk.send(@style.underscore, @zoom.to_i, **style_options)
97
+ end
98
+ selected_punk = selected_punk.mirror if @mirror
99
+ selected_punk = selected_punk.flip if @flip
100
+ selected_punk = selected_punk.zoom(@zoom.to_i) if @style == STYLES.first
47
101
  selected_punk.save(image_location)
48
102
  @image_label.image = image_location
49
- @message_entry.text = image_location
103
+ @output_location_entry.text = image_location
104
+ @previous_style = @style
105
+ notify_observers(:zoom) if @zoom != @original_zoom
50
106
  end
51
107
 
52
108
  def create_gui
@@ -55,11 +111,6 @@ class CryptopunksGui
55
111
  iconphoto File.expand_path('../icons/cryptopunks-gui.png', __dir__)
56
112
 
57
113
  frame {
58
- label {
59
- text 'Select Punk Index and Zoom To Mint Cryptopunk'
60
- font weight: 'bold'
61
- }
62
-
63
114
  label {
64
115
  text 'Punk Index:'
65
116
  }
@@ -82,16 +133,75 @@ class CryptopunksGui
82
133
  text 'Palette:'
83
134
  }
84
135
  combobox {
85
- # TODO (mirrored, grayscale, sepia, etc...)
86
- readonly true # this applies to text editing only (item selection still triggers a write to model)
136
+ readonly true
87
137
  text <=> [self, :palette]
88
138
  }
89
139
 
90
140
  label {
91
- text 'Output Location:'
141
+ text 'Style:'
92
142
  }
93
- @message_entry = entry {
143
+ combobox {
94
144
  readonly true
145
+ text <=> [self, :style, after_write: ->(val) {add_style_options}]
146
+ }
147
+
148
+ @style_options_frame = frame {
149
+ padding 0
150
+ }
151
+
152
+ frame {
153
+ padding 0
154
+
155
+ checkbutton {
156
+ grid row: 0, column: 0, column_weight: 0
157
+ variable <=> [self, :mirror]
158
+ }
159
+ label {
160
+ grid row: 0, column: 1
161
+ text 'Mirror'
162
+
163
+ on('Button-1') do
164
+ self.mirror = !mirror
165
+ end
166
+ }
167
+
168
+ checkbutton {
169
+ grid row: 0, column: 2
170
+ variable <=> [self, :flip]
171
+ }
172
+ label {
173
+ grid row: 0, column: 3
174
+ text 'Flip'
175
+
176
+ on('Button-1') do
177
+ self.flip = !flip
178
+ end
179
+ }
180
+ }
181
+
182
+ label {
183
+ text 'Output Location:'
184
+ }
185
+ frame {
186
+ padding 0
187
+
188
+ @output_location_entry = entry {
189
+ grid row: 0, column: 0
190
+ readonly true
191
+ width 35
192
+ }
193
+ button {
194
+ grid row: 0, column: 1
195
+ text '...'
196
+ width 1.1
197
+
198
+ on('command') do
199
+ @punk_directory = choose_directory(parent: @root)
200
+ @punk_config[:punk_directory] = @punk_directory
201
+ save_config
202
+ generate_image
203
+ end
204
+ }
95
205
  }
96
206
 
97
207
  @image_label = label {
@@ -100,6 +210,62 @@ class CryptopunksGui
100
210
  }
101
211
  }
102
212
  end
213
+
214
+ def add_style_options
215
+ @style_options_frame.content {
216
+ @style_options_frame.children.each(&:destroy)
217
+ if @style == 'Led'
218
+ frame {
219
+ padding 0
220
+
221
+ label {
222
+ grid row: 0, column: 0, column_weight: 0
223
+ text 'Spacing:'
224
+ }
225
+ spinbox {
226
+ grid row: 0, column: 1
227
+ from 1
228
+ to 72
229
+ text <=> [self, :led_spacing]
230
+ }
231
+
232
+ checkbutton {
233
+ grid row: 0, column: 2
234
+ variable <=> [self, :led_round_corner]
235
+ }
236
+ label {
237
+ grid row: 0, column: 3
238
+ text 'Round Corner'
239
+
240
+ on('Button-1') do
241
+ self.led_round_corner = !led_round_corner
242
+ end
243
+ }
244
+ }
245
+ elsif @style == 'Sketch'
246
+ frame {
247
+ padding 0
248
+
249
+ label {
250
+ grid row: 0, column: 0, column_weight: 0
251
+ text 'Line:'
252
+ }
253
+ spinbox {
254
+ grid row: 0, column: 1
255
+ from 1
256
+ to 72
257
+ text <=> [self, :sketch_line]
258
+ }
259
+ }
260
+ else
261
+ frame { # filler
262
+ padding 0
263
+ height 0
264
+ width 0
265
+ }
266
+ end
267
+ }
268
+ end
103
269
  end
104
270
 
105
271
  CryptopunksGui.new.launch
@@ -2,17 +2,17 @@
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.2 ruby app
5
+ # stub: cryptopunks-gui 0.0.6 ruby app
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "cryptopunks-gui".freeze
9
- s.version = "0.0.2"
9
+ s.version = "0.0.6"
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"
15
- s.description = "Cryptopunks GUI for simplified minting built with Glimmer DSL for Tk (requires ActiveTcl to run cryptopunks-gui command)".freeze
14
+ s.date = "2021-10-28"
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]
18
18
  s.extra_rdoc_files = [
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  s.licenses = ["MIT".freeze]
35
35
  s.post_install_message = "To launch CryptoPunks GUI, run command: cryptopunks-gui".freeze
36
36
  s.rubygems_version = "3.2.22".freeze
37
- s.summary = "Cryptopunks GUI for Simplified Minting".freeze
37
+ s.summary = "CryptoPunks GUI for Simplified Minting".freeze
38
38
 
39
39
  if s.respond_to? :specification_version then
40
40
  s.specification_version = 4
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.2
4
+ version: 0.0.6
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
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description: Cryptopunks GUI for simplified minting built with Glimmer DSL for Tk
111
+ description: CryptoPunks GUI for Simplified Minting - Built with Glimmer DSL for Tk
112
112
  (requires ActiveTcl to run cryptopunks-gui command)
113
113
  email: andy.am@gmail.com
114
114
  executables:
@@ -149,5 +149,5 @@ requirements: []
149
149
  rubygems_version: 3.2.22
150
150
  signing_key:
151
151
  specification_version: 4
152
- summary: Cryptopunks GUI for Simplified Minting
152
+ summary: CryptoPunks GUI for Simplified Minting
153
153
  test_files: []