Midstream on #8 : TilesetEditor, TilesetProperties and GridDisplay all interact as expected at this point

This commit is contained in:
2014-05-20 21:53:32 -07:00
parent 684e5ff265
commit 1bd207adc4
3 changed files with 54 additions and 84 deletions

View File

@@ -8,63 +8,55 @@ module Tailor
def initialize(*args) def initialize(*args)
super(*args) super(*args)
@imageGrid = nil @imageGrid = nil
@padX = 0 @pristineImage = nil
@padY = 0
@pitchX = 0
@pitchY = 0
@gridX = 32
@gridY = 32
end end
def set_image(image) def set_image(image)
_super.set_image(image) @pristineImage = image
@imageGrid = Wx::Bitmap.new(@image.get_width(), set_grid(0, 0, 0, 0, 32, 32)
@image.get_height(),
32
)
set_grid(@padX, @padY, @pitchX, @pitchY, @gridX, @gridY)
end end
def set_grid(padX, padY, pitchX, pitchY, gridX, gridY) def set_grid(padX, padY, pitchX, pitchY, gridX, gridY)
@padX = padX @imageGrid = Wx::Bitmap.new(@pristineImage.get_width(),
@padY = padY @pristineImage.get_height(),
@pitchX = pitchX @pristineImage.get_depth()
@pitchY = pitchY )
@gridX = gridX
@gridY = gridY
@imageGrid.draw() { |dc| @imageGrid.draw() { |dc|
dc.draw_bitmap(@image, 0, 0, true) dc.clear
stepx = @gridX + @pitchX dc.draw_bitmap(@pristineImage, 0, 0, true)
stepx = gridX + pitchX
stepx = 1 unless stepx != 0 stepx = 1 unless stepx != 0
stepy = @gridY + @pitchY stepy = gridY + pitchY
stepy = 1 unless stepy != 0 stepy = 1 unless stepy != 0
rows = ( (@image.height - @padY) / stepy ) rows = ( (@pristineImage.height - padY) / stepy )
columns = ( (@image.width - @padX) / stepx ) columns = ( (@pristineImage.width - padX) / stepx )
points = [] puts "Grid will be #{rows} tall and #{columns} wide"
curX = @padX curX = padX
curY = @padY curY = padY
dc.set_brush(Wx::TRANSPARENT_BRUSH) dc.set_brush(Wx::TRANSPARENT_BRUSH)
dc.set_pen(Wx::RED_PEN) dc.set_pen(Wx::RED_PEN)
for row in 0..rows for row in 0..rows
for column in 0..columns 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 curX += stepx
end end
curX = @padX curX = padX
curY += stepy curY += stepy
end end
} }
_super.set_image(@imageGrid)
end end
def on_draw(dc) def on_draw(dc)
_super.on_draw(dc) dc.set_background Wx::WHITE_BRUSH
tmp=@image dc.clear
@image=@imageGrid return if @imageGrid == nil
_super.on_draw(dc) dc.draw_bitmap(@imageGrid, 0, 0, true)
@image=tmp
end end
end end

View File

@@ -98,12 +98,13 @@ module Tailor
end end
def on_tilepropsChanged(event) def on_tilepropsChanged(event)
@tilesetSlicer.set_grid(event.padX, puts "Tileset properties changed : #{event.inspect} #{event.client_data}"
event.padY, @tilesetSlicer.set_grid(event.client_data['padX'],
event.pitchX, event.client_data['padY'],
event.pitchY, event.client_data['pitchX'],
event.gridX, event.client_data['pitchY'],
event.gridY event.client_data['gridX'],
event.client_data['gridY']
) )
end end

View File

@@ -4,34 +4,16 @@ module Tailor
module GUI module GUI
class TilesetPropertiesChangedEvent < Wx::CommandEvent class TilesetPropertiesChangedEvent < Wx::CommandEvent
attr_accessor :padX EVT_TILEPROPS_CHANGED = Wx::EvtHandler.register_class(self,
attr_accessor :padY nil,
attr_accessor :pitchX "evt_tileprops_changed",
attr_accessor :pitchY 1)
attr_accessor :gridX def initialize(source, grid)
attr_accessor :gridY super(EVT_TILEPROPS_CHANGED)
self.id = source.get_id
def initialize(*args) self.client_data = grid
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']
end end
def clone
TilesetPropertiesChangedEvent.new(self.id,
self.eventType,
{ 'padX' => @padX,
'padY' => @padY,
'pitchX' => @pitchX,
'pitchY' => @pitchY,
'gridX' => @gridX,
'gridY' => @gridY }
)
end
end end
class TilesetProperties < Wx::Panel class TilesetProperties < Wx::Panel
@@ -59,8 +41,9 @@ module Tailor
flag = Wx::EXPAND|Wx::ALIGN_LEFT) flag = Wx::EXPAND|Wx::ALIGN_LEFT)
elemCtrl = Wx::TextCtrl.new(self, elemCtrl = Wx::TextCtrl.new(self,
Wx::ID_ANY, Wx::ID_ANY,
value.to_s) value.to_s,
evt_text(elemCtrl) { |event| on_textChanged(event) } :style => Wx::TE_PROCESS_ENTER)
evt_text_enter(elemCtrl) { |event| on_textChanged(event) }
tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT) tmpsizer.add(elemCtrl, flag = Wx::EXPAND|Wx::ALIGN_RIGHT)
rubyname = elem.gsub(/ /, '') rubyname = elem.gsub(/ /, '')
@@ -68,7 +51,7 @@ module Tailor
elemCtrl.set_value(val) elemCtrl.set_value(val)
} }
create_method( "#{rubyname}".to_sym ) { create_method( "#{rubyname}".to_sym ) {
elemCtrl.get_value elemCtrl.get_value.to_i
} }
@sizer.add(tmpsizer) @sizer.add(tmpsizer)
end end
@@ -76,23 +59,17 @@ module Tailor
end end
def on_textChanged(event) def on_textChanged(event)
add_pending_event(TilesetPropertiesChangedEvent.new(Wx::ID_ANY, grid = { 'gridX' => self.TileX,
EVT_TILEPROPS_CHANGED, 'gridY' => self.TileY,
{ 'PadX' => @TileX, 'pitchX' => self.SpaceX,
'PadY' => @TileY, 'pitchY' => self.SpaceY,
'PitchX' => @SpaceX, 'padX' => self.PadX,
'PitchY' => @SpaceY, 'padY' => self.PadY }
'GridX' => @TileX, evt = TilesetPropertiesChangedEvent.new(self, grid)
'GridY' => @TileY } event_handler.process_event(evt)
) puts "Emitted TilesetPropertiesChangedEvent #{evt.inspect} (#{evt.client_data}) from (#{grid})"
)
end end
end end
EVT_TILEPROPS_CHANGED = Wx::Event.new_event_type
Wx::EvtHandler.register_class(TilesetPropertiesChangedEvent,
EVT_TILEPROPS_CHANGED,
"evt_tileprops_changed",
1)
end end
end end