WindMessAnlage/Display/Screen.py

101 lines
2.5 KiB
Python

import os
import platform
import pygame
class DriverException(Exception):
def __init__(self, driverName):
self.driverName = driverName
def __str__(self):
return repr(self.driverName)
class Screen():
screen = None
bgColor = None
def __init__(self, width, height, fullscreen):
size = (width, height)
disp_no = os.getenv('DISPLAY')
if disp_no:
print ("I'm running under X display = {0}".format(disp_no))
self.screen = pygame.display.init()
else:
print("Try to run from framebuffer...")
drivers = ['fbcon','directfb', 'svgalib']
found = False
for driver in drivers:
print(driver)
if not os.getenv('SDL_VIDEODRIVER'):
os.putenv('SDL_VIDEODRIVER', driver)
try:
self.screen = pygame.display.init()
except pygame.error:
print("Driver: {0} failed.".format(driver))
continue
found = True
break
if not found:
raise Exception('No suitable video driver found!')
self.realSize = (pygame.display.Info().current_w, pygame.display.Info().current_h)
if size[0] > self.realSize[0]:
size = (self.realSize[0], size[1])
if size[1] > self.realSize[1]:
size = (size[0], self.realSize[1])
if not fullscreen:
self.screen = pygame.display.set_mode(size)
else:
self.screen = pygame.display.set_mode((0,0), pygame.FULLSCREEN|pygame.DOUBLEBUF|pygame.HWSURFACE)
def quit(self):
pygame.display.quit()
def update(self):
pygame.display.flip()
def blit(self, surface, x, y):
self.screen.blit( surface, (x, y) )
def background(self, color):
try:
self.screen.fill( pygame.Color(color) )
except:
self.screen.fill( pygame.Color("white"))
finally:
self.bgColor = color
def reset(self):
self.background(self.bgColor)
def setCaption(self, title):
pygame.display.set_caption(title)
def test(self):
# Fill the screen with red (255, 0, 0)
self.screen.fill(pygame.Color("red"))
# Update the display
self.update()
def getSize(self):
return self.screen.get_size()
def getRealSize(self):
return self.realSize