app/cryptopunks_gui.rb in cryptopunks-gui-0.0.1 vs app/cryptopunks_gui.rb in cryptopunks-gui-0.0.2
- old
+ new
@@ -7,35 +7,44 @@
require 'puts_debuggerer'
class CryptopunksGui
include Glimmer
- attr_accessor :punk_index, :zoom
+ PALETTES = ['Standard'] + (Palette8bit.constants).map(&:name).map {|palette| palette.split('_').map(&:capitalize).join(' ')}.reject { |palette| palette.include?(' ') }
+ attr_accessor :punk_index, :zoom, :palette
+
def initialize
@punk_directory = File.join(Dir.home, '.cryptopunks')
FileUtils.mkdir_p(@punk_directory)
@punk_file = File.join(@punk_directory, 'punks.png')
File.write(@punk_file, Net::HTTP.get(URI('https://raw.githubusercontent.com/larvalabs/cryptopunks/master/punks.png'))) unless File.exist?(@punk_file)
@punks = Punks::Image::Composite.read(@punk_file)
@zoom = 12
+ @palette = 'Standard'
observer = Glimmer::DataBinding::Observer.proc do
generate_image
end
observer.observe(self, :punk_index)
observer.observe(self, :zoom)
+ observer.observe(self, :palette)
create_gui
self.punk_index = 0
@root.open
end
+ def palette_options
+ PALETTES
+ end
+
def generate_image
- image_location = File.join(@punk_directory, "punk-#{@punk_index}#{"x#{@zoom}" if @zoom.to_i > 1}.png")
+ image_location = File.join(@punk_directory, "punk-#{@punk_index}#{"x#{@zoom}" if @zoom.to_i > 1}#{"-#{@palette.downcase.gsub(' ', '_')}" if @palette != 'Standard'}.png")
puts "Writing punk image to #{image_location}"
selected_punk = @punks[@punk_index.to_i]
+ selected_punk = selected_punk.change_palette8bit(Palette8bit.const_get(@palette.gsub(' ', '_').upcase.to_sym)) if @palette != 'Standard'
selected_punk = selected_punk.zoom(@zoom.to_i)
selected_punk.save(image_location)
@image_label.image = image_location
@message_entry.text = image_location
end
@@ -65,9 +74,18 @@
}
spinbox {
from 1
to 72
text <=> [self, :zoom]
+ }
+
+ label {
+ text 'Palette:'
+ }
+ combobox {
+ # TODO (mirrored, grayscale, sepia, etc...)
+ readonly true # this applies to text editing only (item selection still triggers a write to model)
+ text <=> [self, :palette]
}
label {
text 'Output Location:'
}