mirror of
https://github.com/Kozea/WeasyPrint.git
synced 2024-10-05 00:21:15 +03:00
Clean weasy/replaced
This commit is contained in:
parent
7abb2d09ed
commit
daa8bf96fa
@ -17,8 +17,11 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
Classes and helpers for HTML replaced elements.
|
||||
|
||||
Replaced elements (eg. <img> elements) are rendered externally and behave
|
||||
as an atomic opaque box in CSS. They may or may not have intrinsic dimensions.
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import division
|
||||
@ -30,44 +33,36 @@ from .draw.helpers import get_image_surface_from_uri
|
||||
|
||||
|
||||
def get_replaced_element(element):
|
||||
"""
|
||||
Take a DOM element, determines whether it is replaced, and return a
|
||||
Replacement object if it is, None if it is not.
|
||||
"""
|
||||
"""Return a :class:`Replacement` object if ``element`` is replaced."""
|
||||
# TODO: maybe allow registering new replaced elements
|
||||
if element.tag == 'img':
|
||||
return ImageReplacement(element)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class Replacement(object):
|
||||
"""
|
||||
Abstract base class for replaced elements
|
||||
"""
|
||||
|
||||
"""Abstract base class for replaced elements. """
|
||||
def __init__(self, element):
|
||||
self.element = element
|
||||
|
||||
def intrinsic_width(self):
|
||||
return None
|
||||
"""Intrinsic width if defined."""
|
||||
|
||||
def intrinsic_height(self):
|
||||
return None
|
||||
"""Intrinsic height if defined."""
|
||||
|
||||
def intrinsic_ratio(self):
|
||||
"""Intrinsic ratio if defined."""
|
||||
if (self.intrinsic_width() is not None and
|
||||
self.intrinsic_width() != 0 and
|
||||
self.intrinsic_height() is not None and
|
||||
self.intrinsic_height() != 0):
|
||||
self.intrinsic_width() != 0 and
|
||||
self.intrinsic_height() is not None and
|
||||
self.intrinsic_height() != 0):
|
||||
return self.intrinsic_width() / self.intrinsic_height()
|
||||
|
||||
|
||||
class ImageReplacement(Replacement):
|
||||
"""
|
||||
A replaced <img> element.
|
||||
"""
|
||||
"""Replaced ``<img>`` element."""
|
||||
def __init__(self, element):
|
||||
self.element = element
|
||||
super(ImageReplacement, self).__init__(element)
|
||||
self.src = get_url_attribute(element, 'src')
|
||||
self.alt_text = element.get('alt')
|
||||
self.surface = get_image_surface_from_uri(self.src)
|
||||
@ -82,7 +77,7 @@ class ImageReplacement(Replacement):
|
||||
return self.surface.get_height()
|
||||
|
||||
def draw(self, context):
|
||||
"""Draw the element on the Cairo context."""
|
||||
pattern = cairo.SurfacePattern(self.surface)
|
||||
context.set_source(pattern)
|
||||
context.paint()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user