101 lines
2.5 KiB
Python
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
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|