diff --git a/lib/tailor/GUI/GridDisplay.rb b/lib/tailor/GUI/GridDisplay.rb index 24bb1bb..9cf9f8a 100644 --- a/lib/tailor/GUI/GridDisplay.rb +++ b/lib/tailor/GUI/GridDisplay.rb @@ -8,63 +8,55 @@ module Tailor def initialize(*args) super(*args) @imageGrid = nil - @padX = 0 - @padY = 0 - @pitchX = 0 - @pitchY = 0 - @gridX = 32 - @gridY = 32 + @pristineImage = nil end def set_image(image) - _super.set_image(image) - @imageGrid = Wx::Bitmap.new(@image.get_width(), - @image.get_height(), - 32 - ) - set_grid(@padX, @padY, @pitchX, @pitchY, @gridX, @gridY) + @pristineImage = image + set_grid(0, 0, 0, 0, 32, 32) end def set_grid(padX, padY, pitchX, pitchY, gridX, gridY) - @padX = padX - @padY = padY - @pitchX = pitchX - @pitchY = pitchY - @gridX = gridX - @gridY = gridY - + @imageGrid = Wx::Bitmap.new(@pristineImage.get_width(), + @pristineImage.get_height(), + @pristineImage.get_depth() + ) @imageGrid.draw() { |dc| - dc.draw_bitmap(@image, 0, 0, true) - stepx = @gridX + @pitchX + dc.clear + dc.draw_bitmap(@pristineImage, 0, 0, true) + stepx = gridX + pitchX stepx = 1 unless stepx != 0 - stepy = @gridY + @pitchY + stepy = gridY + pitchY stepy = 1 unless stepy != 0 - rows = ( (@image.height - @padY) / stepy ) - columns = ( (@image.width - @padX) / stepx ) - points = [] - curX = @padX - curY = @padY + rows = ( (@pristineImage.height - padY) / stepy ) + columns = ( (@pristineImage.width - padX) / stepx ) + puts "Grid will be #{rows} tall and #{columns} wide" + curX = padX + curY = padY dc.set_brush(Wx::TRANSPARENT_BRUSH) dc.set_pen(Wx::RED_PEN) for row in 0..rows for column in 0..columns - dc.draw_rectangle(curX, curY, @gridX, @gridY) + next if ((curX + stepx + padX) > @imageGrid.get_width) + next if ((curY + stepy + padY) > @imageGrid.get_height) + dc.draw_rectangle(curX, curY, gridX, gridY) + puts "Drew (#{curX}, #{curY}, #{gridX}, #{gridY})" curX += stepx end - curX = @padX + curX = padX curY += stepy end } + _super.set_image(@imageGrid) end def on_draw(dc) - _super.on_draw(dc) - tmp=@image - @image=@imageGrid - _super.on_draw(dc) - @image=tmp + dc.set_background Wx::WHITE_BRUSH + dc.clear + return if @imageGrid == nil + dc.draw_bitmap(@imageGrid, 0, 0, true) end end diff --git a/lib/tailor/GUI/TilesetEditor.rb b/lib/tailor/GUI/TilesetEditor.rb index 69b38b2..01ac92c 100644 --- a/lib/tailor/GUI/TilesetEditor.rb +++ b/lib/tailor/GUI/TilesetEditor.rb @@ -98,12 +98,13 @@ module Tailor end def on_tilepropsChanged(event) - @tilesetSlicer.set_grid(event.padX, - event.padY, - event.pitchX, - event.pitchY, - event.gridX, - event.gridY + puts "Tileset properties changed : #{event.inspect} #{event.client_data}" + @tilesetSlicer.set_grid(event.client_data['padX'], + event.client_data['padY'], + event.client_data['pitchX'], + event.client_data['pitchY'], + event.client_data['gridX'], + event.client_data['gridY'] ) end diff --git a/lib/tailor/GUI/TilesetProperties.rb b/lib/tailor/GUI/TilesetProperties.rb index 993723b..578e5f6 100644 --- a/lib/tailor/GUI/TilesetProperties.rb +++ b/lib/tailor/GUI/TilesetProperties.rb @@ -4,34 +4,16 @@ module Tailor module GUI class TilesetPropertiesChangedEvent < Wx::CommandEvent - attr_accessor :padX - attr_accessor :padY - attr_accessor :pitchX - attr_accessor :pitchY - attr_accessor :gridX - attr_accessor :gridY - - def initialize(*args) - super(args[0]) - @padX = args[2]['padX'] - @padY = args[2]['padY'] - @pitchX = args[2]['pitchX'] - @pitchY = args[2]['pitchY'] - @gridX = args[2]['gridX'] - @gridY = args[2]['gridY'] + EVT_TILEPROPS_CHANGED = Wx::EvtHandler.register_class(self, + nil, + "evt_tileprops_changed", + 1) + def initialize(source, grid) + super(EVT_TILEPROPS_CHANGED) + self.id = source.get_id + self.client_data = grid end - def clone - TilesetPropertiesChangedEvent.new(self.id, - self.eventType, - { 'padX' => @padX, - 'padY' => @padY, - 'pitchX' => @pitchX, - 'pitchY' => @pitchY, - 'gridX' => @gridX, - 'gridY' => @gridY } - ) - end end class TilesetProperties < Wx::Panel @@ -59,8 +41,9 @@ module Tailor flag = Wx::EXPAND|Wx::ALIGN_LEFT) elemCtrl = Wx::TextCtrl.new(self, Wx::ID_ANY, - value.to_s) - evt_text(elemCtrl) { |event| on_textChanged(event) } + value.to_s, + :style => Wx::TE_PROCESS_ENTER) + evt_text_enter(elemCtrl) { |event| on_textChanged(event) } tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT) rubyname = elem.gsub(/ /, '') @@ -68,7 +51,7 @@ module Tailor elemCtrl.set_value(val) } create_method( "#{rubyname}".to_sym ) { - elemCtrl.get_value + elemCtrl.get_value.to_i } @sizer.add(tmpsizer) end @@ -76,23 +59,17 @@ module Tailor end def on_textChanged(event) - add_pending_event(TilesetPropertiesChangedEvent.new(Wx::ID_ANY, - EVT_TILEPROPS_CHANGED, - { 'PadX' => @TileX, - 'PadY' => @TileY, - 'PitchX' => @SpaceX, - 'PitchY' => @SpaceY, - 'GridX' => @TileX, - 'GridY' => @TileY } - ) - ) + grid = { 'gridX' => self.TileX, + 'gridY' => self.TileY, + 'pitchX' => self.SpaceX, + 'pitchY' => self.SpaceY, + 'padX' => self.PadX, + 'padY' => self.PadY } + evt = TilesetPropertiesChangedEvent.new(self, grid) + event_handler.process_event(evt) + puts "Emitted TilesetPropertiesChangedEvent #{evt.inspect} (#{evt.client_data}) from (#{grid})" end end - EVT_TILEPROPS_CHANGED = Wx::Event.new_event_type - Wx::EvtHandler.register_class(TilesetPropertiesChangedEvent, - EVT_TILEPROPS_CHANGED, - "evt_tileprops_changed", - 1) end end