diff options
Diffstat (limited to 'src/editorui.py')
-rw-r--r-- | src/editorui.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/editorui.py b/src/editorui.py index 5055f69..7f2a7f7 100644 --- a/src/editorui.py +++ b/src/editorui.py @@ -1,5 +1,63 @@ from common import * +class KPMapScene(QtGui.QGraphicsScene): + def drawBackground(self, painter, rect): + painter.fillRect(rect, Qt.white) + + areaLeft, areaTop = rect.x(), rect.y() + areaWidth, areaHeight = rect.width(), rect.height() + areaRight, areaBottom = areaLeft+areaWidth, areaTop+areaHeight + + areaLeftT = areaLeft / 24 + areaTopT = areaTop / 24 + areaRightT = areaRight / 24 + areaBottomT = areaBottom / 24 + + for layer in KP.map.layers: + left, top = layer.cacheBasePos + width, height = layer.cacheSize + right, bottom = left+width, top+height + + if width == 0 and height == 0: continue + + if right < areaLeftT: continue + if left > areaRightT: continue + + if bottom < areaTopT: continue + if top > areaBottomT: continue + + # decide how much of the layer we'll actually draw + drawLeft = max(areaLeftT, left) + drawRight = min(areaRightT, right) + + drawTop = max(areaTopT, top) + drawBottom = max(areaBottomT, bottom) + + srcY = drawTop - top + destY = drawTop * 24 + + baseSrcX = drawLeft - left + baseDestX = drawLeft * 24 + + rows = layer.cache + tileset = KP.map.tilesets[layer.tileset] + tileList = tileset.tiles + + for y in xrange(drawTop, drawBottom): + srcX = baseSrcX + destX = baseDestX + row = rows[srcY] + + for x in xrange(drawLeft, drawRight): + tile = row[srcX] + if tile != -1: + painter.drawPixmap(destX, destY, tileList[tile]) + + srcX += 1 + destX += 24 + + srcY += 1 + destY += 24 class KPEditorWidget(QtGui.QGraphicsView): pass |