modules refactoring + slight changes to folder structure
This commit is contained in:
		
							
								
								
									
										102
									
								
								inkycal/config/layout.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								inkycal/config/layout.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| #!/usr/bin/python3 | ||||
| # -*- coding: utf-8 -*- | ||||
| """ | ||||
| Layout module for Inky-Calendar software. | ||||
| Copyright by aceisace | ||||
| """ | ||||
|  | ||||
| import logging | ||||
|  | ||||
| class layout: | ||||
|   """Page layout handling""" | ||||
|  | ||||
|   logger = logging.getLogger(__name__) | ||||
|   logging.basicConfig(level=logging.DEBUG) | ||||
|  | ||||
|   def __init__(self, model=None, width=None, height=None, | ||||
|                supports_colour=False): | ||||
|     """Initialize parameters for specified epaper model | ||||
|     Use model parameter to specify display OR | ||||
|     Crate a custom display with given width and height""" | ||||
|  | ||||
|     self.background_colour = 'white' | ||||
|     self.text_colour = 'black' | ||||
|  | ||||
|     if (model != None) and (width == None) and (height == None): | ||||
|       display_dimensions = { | ||||
|       'epd_7_in_5_v2_colour': (800, 400), | ||||
|       'epd_7_in_5_v2': (800, 400), | ||||
|       'epd_7_in_5_colour': (640, 384), | ||||
|       'epd_7_in_5': (640, 384), | ||||
|       'epd_5_in_83_colour': (600, 448), | ||||
|       'epd_5_in_83': (600, 448), | ||||
|       'epd_4_in_2_colour': (400, 300), | ||||
|       'epd_4_in_2': (400, 300), | ||||
|       } | ||||
|  | ||||
|       self.display_height, self.display_width = display_dimensions[model] | ||||
|       if 'colour' in model: | ||||
|         self.three_colour_support = True | ||||
|  | ||||
|     elif width and height: | ||||
|       self.display_height = width | ||||
|       self.display_width = height | ||||
|       self.supports_colour = supports_colour | ||||
|  | ||||
|     else: | ||||
|       print("Can't create a layout without given sizes") | ||||
|       raise | ||||
|  | ||||
|     self.top_section_width = self.display_width | ||||
|     self.middle_section_width = self.display_width | ||||
|     self.bottom_section_width = self.display_width | ||||
|     self.create_sections() | ||||
|  | ||||
|   def create_sections(self, top_section=0.10, middle_section=0.65, | ||||
|                       bottom_section=0.25): | ||||
|     """Allocate fixed percentage height for top and middle section | ||||
|     e.g. 0.2 = 20% (Leave empty for default values) | ||||
|     Set top/bottom_section to 0 to allocate more space for the middle section | ||||
|     """ | ||||
|     scale = lambda percentage: round(percentage * self.display_height) | ||||
|  | ||||
|     if top_section == 0 or bottom_section == 0: | ||||
|       if top_section == 0: | ||||
|         self.top_section_height = 0 | ||||
|  | ||||
|       if bottom_section == 0: | ||||
|         self.bottom_section_height = 0 | ||||
|  | ||||
|       self.middle_section_height = scale(1 - top_section - bottom_section) | ||||
|     else: | ||||
|       if top_section + middle_section + bottom_section > 1.0: | ||||
|         print('All percentages should add up to max 100%, not more!') | ||||
|         raise | ||||
|  | ||||
|       self.top_section_height = scale(top_section) | ||||
|       self.middle_section_height = scale(middle_section) | ||||
|       self.bottom_section_height = (self.display_height - | ||||
|         self.top_section_height - self.middle_section_height) | ||||
|  | ||||
|     logging.debug('top-section size: {} x {} px'.format( | ||||
|       self.top_section_width, self.top_section_height)) | ||||
|     logging.debug('middle-section size: {} x {} px'.format( | ||||
|       self.middle_section_width, self.middle_section_height)) | ||||
|     logging.debug('bottom-section size: {} x {} px'.format( | ||||
|       self.bottom_section_width, self.bottom_section_height)) | ||||
|  | ||||
|  | ||||
|   def get_section_size(self, section): | ||||
|     """Enter top/middle/bottom to get the size of the section as a tuple: | ||||
|     (width, height)""" | ||||
|  | ||||
|     if section not in ['top','middle','bottom']: | ||||
|       raise Exception('Invalid section: ', section) | ||||
|     else: | ||||
|       if section == 'top': | ||||
|         size = (self.top_section_width, self.top_section_height) | ||||
|       elif section == 'middle': | ||||
|         size = (self.middle_section_width, self.middle_section_height) | ||||
|       elif section == 'bottom': | ||||
|         size = (self.bottom_section_width, self.bottom_section_height) | ||||
|       return size | ||||
		Reference in New Issue
	
	Block a user