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:' }