#!/usr/bin/python -tt # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Display for bmpblock object.""" import wx class MyPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, wx.ID_ANY) self.Bind(wx.EVT_PAINT, self.OnPaint) self.parent = parent self.imglist = () def OnPaint(self, evt=None): if (evt): dc = wx.PaintDC(self) else: dc = wx.ClientDC(self) done_first = False # The first image in the sequence may be used by the BIOS to set the # display resolution. Regardless, it should match the desired or default # resolution so that any previous screens get cleared. for x, y, filename in self.imglist: img = wx.Image(filename, wx.BITMAP_TYPE_ANY) if (not done_first): size = img.GetSize() self.SetMinSize(size) self.SetSize(size) self.Fit() w,h = self.parent.GetBestSize() self.parent.SetDimensions(-1, -1, w, h, wx.SIZE_AUTO) done_first = True bmp = img.ConvertToBitmap() dc.DrawBitmap(bmp, x, y) def OnSave(self, name): """Draw the current image sequence into a file.""" dc = wx.MemoryDC() done_first = False for x, y, filename in self.imglist: img = wx.Image(filename, wx.BITMAP_TYPE_ANY) if (not done_first): w,h = img.GetSize() base = wx.EmptyBitmap(w,h) dc.SelectObject(base) done_first = True bmp = img.ConvertToBitmap() dc.DrawBitmap(bmp, x, y) new = wx.ImageFromBitmap(base) outfile = name + '.png' new.SaveFile(outfile, wx.BITMAP_TYPE_PNG) print "wrote", outfile class Frame(wx.Frame): def __init__(self, bmpblock=None, title=None): wx.Frame.__init__(self, None, wx.ID_ANY, title=title) self.CreateStatusBar() self.SetStatusText(title) self.Bind(wx.EVT_CLOSE, self.OnQuit) self.bmpblock = bmpblock if self.bmpblock: self.bmpblock.RegisterScreenDisplayObject(self) self.p = MyPanel(self) def OnQuit(self, event): wx.GetApp().ExitMainLoop() def DisplayScreen(self, name, imglist): self.SetStatusText(name) self.p.imglist = imglist self.p.OnPaint() def SaveScreen(self, name, imglist): self.p.imglist = imglist self.p.OnSave(name)