# HG changeset patch
# User Laman
# Date 2017-02-20 22:04:07
# Node ID d138366bd4bbc9bb4a9c0c59a293504d51c25396
# Parent  928d9a0edc058641b90da4404667bba233408bed

resizing BoardView

diff --git a/src/gui/__init__.py b/src/gui/__init__.py
--- a/src/gui/__init__.py
+++ b/src/gui/__init__.py
@@ -14,6 +14,8 @@ class GUI:
 		self._coreMessages=None
 
 		self.mainWindow = MainWindow(self, master=self.root)
+		self.root.columnconfigure(0,weight=1)
+		self.root.rowconfigure(0,weight=1)
 
 		self.root.bind("<<redrawImgView>>", lambda e: self.mainWindow.redrawImgView())
 		self.root.bind("<<receiveState>>", lambda e: print("fired receiveState"))
diff --git a/src/gui/boardview.py b/src/gui/boardview.py
--- a/src/gui/boardview.py
+++ b/src/gui/boardview.py
@@ -1,37 +1,46 @@
 import tkinter as tk
 
-import go
+from go import BLACK,WHITE
 
 
 ## Handles and presents the game state as detected by the program.
 class BoardView(tk.Canvas):
 	def __init__(self, master=None):
-		tk.Canvas.__init__(self, master)
-		self.configure(width=360,height=360,background="#ffcc00")
+		self._master=master
+		tk.Canvas.__init__(self, master, highlightthickness=0)
+
+		self.width=360
+		self.height=360
+		self.padding=18
+		self.cellWidth=(self.width-2*self.padding)/18
+		self.cellHeight=(self.height-2*self.padding)/18
+		self.configure(width=self.width,height=self.height,background="#ffcc00")
 
 		self.drawGrid()
-
-		self.grid()
+		master.bind("<Configure>", self._onResize)
 
 	def redrawState(self,gameState):
-		# !! will need to remove old stones or redraw the widget completely
+		self.delete("black","white")
 		for r,row in enumerate(gameState):
 			for c,point in enumerate(row):
 				self.drawStone(r,c,point)
 
-		self.grid()
-
 	def drawGrid(self):
+		padding=self.padding
 		for i in range(19):
-			self.create_line(18,18*(i+1),360-18,18*(i+1),fill="#000000") # rows
-			self.create_line(18*(i+1),18,18*(i+1),360-18,fill="#000000") # cols
+			self.create_line(padding,18*i+padding,self.width-padding,18*i+padding,tags="row",fill="#000000") # rows
+			self.create_line(18*i+padding,padding,18*i+padding,self.height-padding,tags="col",fill="#000000") # cols
 
 		self.drawStars()
 
 	def drawStars(self):
-		for r in range(4,19,6):
-			for c in range(4,19,6):
-				self.create_oval(r*18-2,c*18-2,r*18+2,c*18+2,fill='#000000')
+		radius=2
+
+		for r in range(3,19,6):
+			for c in range(3,19,6):
+				x=c*self.cellHeight+self.padding
+				y=r*self.cellWidth+self.padding
+				self.create_oval(x-radius,y-radius,x+radius,y+radius,tags="star",fill='#000000')
 
 	## Draws a stone at provided coordinates.
 	#
@@ -41,9 +50,31 @@ class BoardView(tk.Canvas):
 	#  @param c column coordinate, [0-18], counted from left
 	#  @param color color indicator, go.BLACK or go.WHITE
 	def drawStone(self,r,c,color):
-		if color==go.BLACK: hexCode='#000000'
-		elif color==go.WHITE: hexCode='#ffffff'
+		if color==BLACK:
+			hexCode='#000000'
+			tag="black"
+		elif color==WHITE:
+			hexCode='#ffffff'
+			tag="white"
 		else: return False
-		r+=1
-		c+=1
-		self.create_oval(c*18-9,r*18-9,c*18+9,r*18+9,fill=hexCode)
+
+		x=c*self.cellWidth+self.padding
+		y=r*self.cellHeight+self.padding
+		radius=self.cellWidth/2
+		self.create_oval(x-radius,y-radius,x+radius,y+radius,tags=tag,fill=hexCode)
+
+	def _onResize(self, event):
+		wScale=float(event.width)/self.width
+		hScale=float(event.height)/self.height
+		scale=min(wScale,hScale)
+
+		self.width*=scale
+		self.height*=scale
+		self.scale("all",0,0,scale,scale) # rescale all the objects tagged with the "all" tag
+
+		x=(event.width-self.width)/2
+		y=(event.height-self.height)/2
+
+		# place the window, giving it an explicit size
+		self.place(in_=self._master, x=x, y=y,
+				width=self.width, height=self.height)
diff --git a/src/gui/mainwindow.py b/src/gui/mainwindow.py
--- a/src/gui/mainwindow.py
+++ b/src/gui/mainwindow.py
@@ -1,7 +1,7 @@
 import logging as log
 import tkinter as tk
+from tkinter import N,S,E,W
 
-import PIL
 from PIL import ImageTk
 
 import config
@@ -25,7 +25,7 @@ class MainWindow(tk.Frame):
 		self._imgShift=EPoint(0,0)
 
 		tk.Frame.__init__(self, master)
-		self.grid(column=0,row=0)
+		self.grid(column=0,row=0,sticky=(N,S,E,W))
 		self._createWidgets()
 
 	def setCurrentFrame(self,frame):
@@ -46,15 +46,16 @@ class MainWindow(tk.Frame):
 	def _createWidgets(self):
 		# a captured frame with overlay graphics
 		self.imgView=tk.Canvas(self)
-		self.imgView.configure(width=480,height=360)
+		self.imgView.configure(width=480,height=360,background="#ff00ff")
 
 		self.imgView.bind('<1>',lambda e: self.addCorner(e.x,e.y))
 
-		self.imgView.grid(column=0,row=0)
+		self.imgView.grid(column=0,row=0,sticky=(N,S,E,W))
 
 		# board with detected stones
-		self.boardView= BoardView(self)
-		self.boardView.grid(column=1,row=0)
+		self._boardWrapper=tk.Frame(self,width=360,height=360)
+		self.boardView=BoardView(self._boardWrapper)
+		self._boardWrapper.grid(column=1,row=0,sticky=(N,S,E,W))
 
 		# more controls below the board
 		self.scaleTresB=tk.Scale(self, orient=tk.HORIZONTAL, length=200, from_=0.0, to=100.0, command=self.refreshTresholds)
@@ -64,6 +65,10 @@ class MainWindow(tk.Frame):
 		self.scaleTresB.grid(column=0,row=1,columnspan=2)
 		self.scaleTresW.grid(column=0,row=2,columnspan=2)
 
+		self.columnconfigure(0,weight=1)
+		self.columnconfigure(1,weight=1)
+		self.rowconfigure(0,weight=1)
+
 		# render everything
 		self.redrawImgView()
 
diff --git a/src/imageanalyzer.py b/src/imageanalyzer.py
--- a/src/imageanalyzer.py
+++ b/src/imageanalyzer.py
@@ -38,7 +38,7 @@ class ImageAnalyzer:
 
 				I=(red+green+blue)/255/3
 				m=min(red,green,blue)
-				S=1-m/I
+				S=1-m/I if I!=0 else 0
 				if 100*I<self.tresB: b+=1
 				elif 100*I>self.tresW: w+=1
 				else: e+=1