58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
import interpreter.imageWrapper as imageWrapper
|
|
|
|
|
|
class canvasManager():
|
|
def __init__(self, canvas, image, programState, scaleSize):
|
|
self.canvas = canvas
|
|
self.image = image
|
|
self.programState = programState
|
|
self.scaleSize = scaleSize
|
|
|
|
def updateImage(self, newImage):
|
|
self.image = newImage
|
|
|
|
def updateScaleSize(self, scaleSize):
|
|
self.scaleSize = scaleSize
|
|
|
|
def updateProgramState(self, newProgramState):
|
|
self.programState = newProgramState
|
|
|
|
def pixelToHexString(self, pixel) -> str:
|
|
return '#%02x%02x%02x' %(pixel[0], pixel[1], pixel[2])
|
|
|
|
def updateCanvas(self):
|
|
if self.image is None or self.canvas is None or self.programState is None or self.scaleSize is None:
|
|
return False
|
|
self.drawImage()
|
|
self.highlightCodel()
|
|
# Draw breakpoint
|
|
return True
|
|
|
|
def drawImage(self):
|
|
self.clearCanvas()
|
|
for raw_y, row in enumerate(self.image):
|
|
for raw_x, pixel in enumerate(row):
|
|
x = raw_x * self.scaleSize
|
|
y = raw_y * self.scaleSize
|
|
color = self.pixelToHexString(pixel)
|
|
self.canvas.create_rectangle(x,y, x+self.scaleSize, y+self.scaleSize, fill=color, outline=color)
|
|
|
|
|
|
def clearCanvas(self):
|
|
width = self.canvas.winfo_width()
|
|
height = self.canvas.winfo_height()
|
|
self.canvas.create_rectangle(0,0, width, height, fill="#FFFFFF")
|
|
|
|
|
|
def highlightCodel(self):
|
|
codel = imageWrapper.getCodel(self.image, self.programState.position)
|
|
pixel = imageWrapper.getPixel(self.image, self.programState.position)
|
|
color = self.pixelToHexString(pixel)
|
|
self.colorCodel(codel, color, "#000000")
|
|
|
|
def colorCodel(self, codel, fill, outline):
|
|
for position in codel.codel:
|
|
x = position.coords[0] * self.scaleSize
|
|
y = position.coords[1] * self.scaleSize
|
|
self.canvas.create_rectangle(x,y, x+self.scaleSize - 1, y+self.scaleSize - 1, fill=fill, outline=outline)
|