mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add support for Canvas
This commit is contained in:
parent
ee4052cfdc
commit
868feda207
@ -228,6 +228,8 @@ TAG_INFO = dict(
|
|||||||
oddsidemargin = (0xF524, writeWord),
|
oddsidemargin = (0xF524, writeWord),
|
||||||
textheight = (0xF525, writeWord),
|
textheight = (0xF525, writeWord),
|
||||||
textwidth = (0xF526, writeWord),
|
textwidth = (0xF526, writeWord),
|
||||||
|
canvaswidth = (0xF551, writeWord),
|
||||||
|
canvasheight = (0xF552, writeWord),
|
||||||
footspace = (0xF527, writeWord),
|
footspace = (0xF527, writeWord),
|
||||||
footheight = (0xF528, writeWord),
|
footheight = (0xF528, writeWord),
|
||||||
bgimage = (0xF529, writeBgImage),
|
bgimage = (0xF529, writeBgImage),
|
||||||
@ -489,6 +491,9 @@ class LrfObject(object):
|
|||||||
raise LrfError, "object name %s not recognized" % name
|
raise LrfError, "object name %s not recognized" % name
|
||||||
|
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return 'LRFObject: ' + self.name + ", " + str(self.objId)
|
||||||
|
|
||||||
def appendLrfTag(self, tag):
|
def appendLrfTag(self, tag):
|
||||||
self.tags.append(tag)
|
self.tags.append(tag)
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
# and/or sell copies of the Software, and to permit persons to whom the
|
# and/or sell copies of the Software, and to permit persons to whom the
|
||||||
# Software is furnished to do so, subject to the following conditions:
|
# Software is furnished to do so, subject to the following conditions:
|
||||||
|
from copy import copy
|
||||||
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
# The above copyright notice and this permission notice shall be included in
|
||||||
# all copies or substantial portions of the Software.
|
# all copies or substantial portions of the Software.
|
||||||
@ -1250,7 +1251,7 @@ class Page(LrsObject, LrsContainer):
|
|||||||
def __init__(self, pageStyle=defaultPageStyle, **settings):
|
def __init__(self, pageStyle=defaultPageStyle, **settings):
|
||||||
LrsObject.__init__(self)
|
LrsObject.__init__(self)
|
||||||
LrsContainer.__init__(self, [TextBlock, BlockSpace, RuledLine,
|
LrsContainer.__init__(self, [TextBlock, BlockSpace, RuledLine,
|
||||||
ImageBlock])
|
ImageBlock, Canvas])
|
||||||
|
|
||||||
self.pageStyle = pageStyle
|
self.pageStyle = pageStyle
|
||||||
|
|
||||||
@ -1445,7 +1446,6 @@ class TextBlock(LrsObject, LrsContainer):
|
|||||||
|
|
||||||
def toLrfContainer(self, lrfWriter, container):
|
def toLrfContainer(self, lrfWriter, container):
|
||||||
# id really belongs to the outer block
|
# id really belongs to the outer block
|
||||||
|
|
||||||
extraId = LrsObject.getNextObjId()
|
extraId = LrsObject.getNextObjId()
|
||||||
|
|
||||||
b = LrfObject("Block", self.objId)
|
b = LrfObject("Block", self.objId)
|
||||||
@ -2051,17 +2051,60 @@ class Header(HeaderOrFooter):
|
|||||||
class Footer(HeaderOrFooter):
|
class Footer(HeaderOrFooter):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class Canvas(LrsObject, LrsContainer, LrsAttributes):
|
||||||
|
defaults = dict(framemode="square", layout="LrTb", framewidth="0",
|
||||||
|
framecolor="0x00000000", bgcolor="0xFF000000",
|
||||||
|
canvasheight=0, canvaswidth=0)
|
||||||
|
|
||||||
|
def __init__(self, width, height, **settings):
|
||||||
|
LrsObject.__init__(self)
|
||||||
|
LrsContainer.__init__(self, [PutObj])
|
||||||
|
LrsAttributes.__init__(self, self.defaults, **settings)
|
||||||
|
|
||||||
|
self.settings = self.defaults.copy()
|
||||||
|
self.settings.update(settings)
|
||||||
|
self.settings['canvasheight'] = height
|
||||||
|
self.settings['canvaswidth'] = width
|
||||||
|
|
||||||
|
def put_object(self, obj, x, y):
|
||||||
|
self.append(PutObj(obj, x=x, y=y))
|
||||||
|
|
||||||
|
def toElement(self, source_encoding):
|
||||||
|
el = self.lrsObjectElement("Canvas", **self.settings)
|
||||||
|
for po in self.contents:
|
||||||
|
el.append(po.toElement(source_encoding))
|
||||||
|
return el
|
||||||
|
|
||||||
|
def toLrf(self, lrfWriter):
|
||||||
|
self.toLrfContainer(lrfWriter, lrfWriter)
|
||||||
|
|
||||||
|
|
||||||
|
def toLrfContainer(self, lrfWriter, container):
|
||||||
|
c = LrfObject("Canvas", self.objId)
|
||||||
|
c.appendTagDict(self.settings)
|
||||||
|
stream = LrfTagStream(STREAM_COMPRESSED)
|
||||||
|
for content in self.contents:
|
||||||
|
content.toLrfContainer(lrfWriter, stream)
|
||||||
|
if lrfWriter.saveStreamTags: # true only if testing
|
||||||
|
c.saveStreamTags = stream.tags
|
||||||
|
|
||||||
|
c.appendLrfTags(
|
||||||
|
stream.getStreamTags(lrfWriter.getSourceEncoding(),
|
||||||
|
optimizeTags=lrfWriter.optimizeTags,
|
||||||
|
optimizeCompression=lrfWriter.optimizeCompression))
|
||||||
|
container.addLrfObject(c.objId)
|
||||||
|
lrfWriter.append(c)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PutObj(LrsContainer):
|
class PutObj(LrsContainer):
|
||||||
""" PutObj holds other objects that are drawn on a Canvas or Header. """
|
""" PutObj holds other objects that are drawn on a Canvas or Header. """
|
||||||
|
|
||||||
def __init__(self, content, x1=0, y1=0, x=0, y=0):
|
def __init__(self, content, x=0, y=0):
|
||||||
LrsContainer.__init__(self, [])
|
LrsContainer.__init__(self, [TextBlock, ImageBlock])
|
||||||
self.content = content
|
self.content = content
|
||||||
if x1 == 0 and x != 0: x1 = x
|
self.x1 = x
|
||||||
if y1 == 0 and y != 0: y1 = y
|
self.y1 = y
|
||||||
self.x1 = x1
|
|
||||||
self.y1 = y1
|
|
||||||
|
|
||||||
|
|
||||||
def appendReferencedObjects(self, parent):
|
def appendReferencedObjects(self, parent):
|
||||||
@ -2075,8 +2118,10 @@ class PutObj(LrsContainer):
|
|||||||
|
|
||||||
|
|
||||||
def toElement(self, se):
|
def toElement(self, se):
|
||||||
return Element("PutObj", x1=str(self.x1), y1=str(self.y1),
|
el = Element("PutObj", x1=str(self.x1), y1=str(self.y1),
|
||||||
refobj=str(self.content.objId))
|
refobj=str(self.content.objId))
|
||||||
|
return el
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user