Added highlight box around current day.

This commit is contained in:
Maximilian Giller 2019-02-28 20:41:14 +01:00
parent e19bfa0b0b
commit 60b94c6783

View file

@ -6,15 +6,18 @@ from datetime import datetime, timedelta
from WeatherHeaderDesign import WeatherHeaderDesign from WeatherHeaderDesign import WeatherHeaderDesign
from PIL import ImageDraw from PIL import ImageDraw
from TextDesign import TextDesign from TextDesign import TextDesign
from BoxDesign import BoxDesign
from EllipseDesign import EllipseDesign
weatherheadersize = (1,0.113) weatherheadersize = (1,0.113)
seperatorplace = (0, 0.113) seperatorplace = (0, 0.113)
monthplace = (0, 0.11) monthplace = (0, 0.12)
monthboxsize = (1, 0.085) monthboxsize = (1, 0.085)
daynumberboxsize = (0.143, 0.143) daynumberboxsize = (0.143, 0.143)
dayhighlightboxsize = (0.143, 0.07)
daynumbersize = 25 daynumbersize = 25
monthtextsize = 40 monthtextsize = 40
monthovposition = (0, 0.225) monthovposition = (0, 0.23)
monthovsize = (1, 0.5) monthovsize = (1, 0.5)
weekdayrowpos = (0, 0.209) weekdayrowpos = (0, 0.209)
weekrowboxsize = (1, 0.044) weekrowboxsize = (1, 0.044)
@ -38,7 +41,7 @@ class MonthOvPanel (PanelDesign):
self.__draw_seperator__() self.__draw_seperator__()
self.__draw_month_overview__() self.__draw_month_overview__()
self.__draw_week_row__() self.__draw_week_row__()
def add_weather (self, weather): def add_weather (self, weather):
self.draw_design(WeatherHeaderDesign(self.__abs_pos__(weatherheadersize), weather)) self.draw_design(WeatherHeaderDesign(self.__abs_pos__(weatherheadersize), weather))
@ -48,23 +51,23 @@ class MonthOvPanel (PanelDesign):
def add_rssfeed (self, rss): def add_rssfeed (self, rss):
raise NotImplementedError("Functions needs to be implemented") raise NotImplementedError("Functions needs to be implemented")
def __abs_pos__(self, pos, size=None): def __abs_pos__ (self, pos, size = None):
if size is None: if size is None:
size = self.size size = self.size
return (int(pos[0] * size[0]), int(pos[1] * size[1])) return (int(pos[0] * size[0]), int(pos[1] * size[1]))
def __draw_seperator__(self): def __draw_seperator__ (self):
"""Draw a line seperating the weather and Calendar section""" """Draw a line seperating the weather and Calendar section"""
ImageDraw.Draw(self.__image__).line( [self.__abs_pos__(seperatorplace), self.__abs_pos__((1, seperatorplace[1]))], fill='red', width=5) ImageDraw.Draw(self.__image__).line([ self.__abs_pos__(seperatorplace), self.__abs_pos__((1, seperatorplace[1])) ], fill='red', width=5)
def __draw_day_number__(self, number, pos): def __draw_day_number__ (self, number, pos):
if number <= 0: if number <= 0:
return return
txt = TextDesign(self.__abs_pos__(daynumberboxsize), fontsize=daynumbersize, text=str(number), verticalalignment="center", horizontalalignment="center") txt = TextDesign(self.__abs_pos__(daynumberboxsize), fontsize=daynumbersize, text=str(number), verticalalignment="center", horizontalalignment="center")
txt.pos = pos txt.pos = pos
self.draw_design(txt) self.draw_design(txt)
def __draw_month_name__(self): def __draw_month_name__ (self):
"""Draw the icon with the current month's name""" """Draw the icon with the current month's name"""
month = datetime.now().strftime("%B") month = datetime.now().strftime("%B")
txt = TextDesign(self.__abs_pos__(monthboxsize), fontsize=monthtextsize, text=month, verticalalignment="center", horizontalalignment="center") txt = TextDesign(self.__abs_pos__(monthboxsize), fontsize=monthtextsize, text=month, verticalalignment="center", horizontalalignment="center")
@ -76,7 +79,7 @@ class MonthOvPanel (PanelDesign):
partialwidth = maxwidth / 7 partialwidth = maxwidth / 7
partialheight = maxheight / 5 partialheight = maxheight / 5
posx, posy = self.__abs_pos__(monthovposition) posx, posy = self.__abs_pos__(monthovposition)
return (posx + day_of_week * partialwidth, posy + week_in_month * partialheight) return (int(posx + day_of_week * partialwidth), int(posy + week_in_month * partialheight))
def __draw_month_overview__ (self): def __draw_month_overview__ (self):
"""Using the built-in calendar function, draw icons for each """Using the built-in calendar function, draw icons for each
@ -86,6 +89,8 @@ class MonthOvPanel (PanelDesign):
for numbers in week: for numbers in week:
self.__draw_day_number__(numbers, self.__get_day_pos__(cal.index(week), week.index(numbers))) self.__draw_day_number__(numbers, self.__get_day_pos__(cal.index(week), week.index(numbers)))
self.__draw_highlight_box__(self.__abs_pos__(dayhighlightboxsize), self.__get_today_box_pos__(), width=3)
def __draw_week_row__ (self): def __draw_week_row__ (self):
week_days = self.__get_week_days_ordered__() week_days = self.__get_week_days_ordered__()
@ -94,25 +99,29 @@ class MonthOvPanel (PanelDesign):
txt.pos = self.__get_week_day_pos__(day_of_week) txt.pos = self.__get_week_day_pos__(day_of_week)
self.draw_design(txt) self.draw_design(txt)
self.__draw_highlight_box__(self.__abs_pos__(weekrownameboxsize), self.__get_week_day_pos__(datetime.now().weekday())) self.__draw_highlight_box__(self.__abs_pos__(weekrownameboxsize), self.__get_week_day_pos__(datetime.now().weekday()), width=1)
def __get_week_day_pos__(self, day_of_week): def __get_week_day_pos__ (self, day_of_week):
maxwidth, _ = self.__abs_pos__(monthovsize) maxwidth, _ = self.__abs_pos__(monthovsize)
partialwidth = maxwidth / 7 partialwidth = maxwidth / 7
posx, posy = self.__abs_pos__(weekdayrowpos) posx, posy = self.__abs_pos__(weekdayrowpos)
return (posx + day_of_week * partialwidth, posy) return (int(posx + day_of_week * partialwidth), int(posy))
def __draw_highlight_box__(self, size, pos, color='black'): def __get_today_box_pos__ (self):
topleft = pos x, y = self.__get_day_pos__(int(datetime.now().day / 7), datetime.now().weekday())
bottomright = (pos[0] + size[0], pos[1] + size[1]) return (x, y + (self.__abs_pos__(daynumberboxsize)[1] - self.__abs_pos__(dayhighlightboxsize)[1]) / 2)
ImageDraw.Draw(self.__image__).rectangle([topleft, bottomright], outline=color)
def __draw_highlight_circle__(self, size, pos, color='black'): def __draw_highlight_box__ (self, size, pos, color='black', width=1):
topleft = pos design = BoxDesign(size, outline=color, width = width)
bottomright = (pos[0] + size[0], pos[1] + size[1]) design.pos = pos
ImageDraw.Draw(self.__image__).ellipse([topleft, bottomright], outline=color) self.draw_design(design)
def __get_week_days_ordered__(self): def __draw_highlight_circle__ (self, size, pos, color = 'black', width=1):
design = EllipseDesign(size, outline=color, width = width)
design.pos = pos
self.draw_design(design)
def __get_week_days_ordered__ (self):
cur_weekday = datetime.now().weekday() cur_weekday = datetime.now().weekday()
correction = -cur_weekday correction = -cur_weekday
if week_starts_on == "Sunday": if week_starts_on == "Sunday":