# Path: vocto/frame.py
# X, Y = 0, 1
# L, T, R, B = 0, 1, 2, 3
# class Frame:
#     def __init__(self, key=False, alpha=255, zorder=None, rect=[0, 0, 0, 0], crop=[0, 0, 0, 0]):
#     def __repr__(self):
#     def str_title():
#     def __str__(self):
#     def __eq__(self, other):
#     def zoomx(self):
#     def zoomy(self):
#     def zoom(self):
#     def cropped(self):
#     def corner(self, ix, iy): return [self.rect[ix], self.rect[iy]]
#     def left(self): return self.rect[L]
#     def top(self): return self.rect[T]
#     def width(self): return self.rect[R] - self.rect[L]
#     def height(self): return self.rect[B] - self.rect[T]
#     def float_alpha(self):
#     def size(self): return self.width(), self.height()
#     def invisible(self):
#     def mirrored(self):
#     def duplicate(self):


import logging
import copy
import re
from vocto.frame import Frame, X, Y, L, T, R, B
        elif attr == 'default-b':
            self.default[1] = value
        elif attr == 'alpha-a':
            self.frame[0].alpha = str2alpha(value)
        elif attr == 'alpha-b':
            self.frame[1].alpha = str2alpha(value)
        elif attr == 'inter':
            self.inter = value
        elif attr == 'noswap':
            self.noswap = value
        elif attr == 'mirror':
            self.mirror = value
        self.frame[0].original_size = size
        self.frame[1].original_size = size

    def covered(self):
        """ check if below (A) is invisible or covered by above (B)
            (considers shape with cropping and transparency)
        """
        below, above = self.frame
        if below.invisible():
            return True
        if above.invisible():
            return False
        bc = below.cropped()
        ac = above.cropped()
        # return if above is (semi-)transparent or covers below completely
        return (above.alpha == 255 and
                bc[L] >= ac[L] and
                bc[T] >= ac[T] and

# Path: vocto/frame.py
# X, Y = 0, 1
# L, T, R, B = 0, 1, 2, 3
# class Frame:
#     def __init__(self, key=False, alpha=255, zorder=None, rect=[0, 0, 0, 0], crop=[0, 0, 0, 0]):
#     def __repr__(self):
#     def str_title():
#     def __str__(self):
#     def __eq__(self, other):
#     def zoomx(self):
#     def zoomy(self):
#     def zoom(self):
#     def cropped(self):
#     def corner(self, ix, iy): return [self.rect[ix], self.rect[iy]]
#     def left(self): return self.rect[L]
#     def top(self): return self.rect[T]
#     def width(self): return self.rect[R] - self.rect[L]
#     def height(self): return self.rect[B] - self.rect[T]
#     def float_alpha(self):
#     def size(self): return self.width(), self.height()
#     def invisible(self):
#     def mirrored(self):
#     def duplicate(self):


# Path: vocto/composites.py
import logging
import copy
import re
from vocto.frame import Frame, X, Y, L, T, R, B

        elif attr == 'default-b':
            self.default[1] = value
        elif attr == 'alpha-a':
            self.frame[0].alpha = str2alpha(value)
        elif attr == 'alpha-b':
            self.frame[1].alpha = str2alpha(value)
        elif attr == 'inter':
            self.inter = value
        elif attr == 'noswap':
            self.noswap = value
        elif attr == 'mirror':
            self.mirror = value
        self.frame[0].original_size = size
        self.frame[1].original_size = size

    def covered(self):
        """ check if below (A) is invisible or covered by above (B)
            (considers shape with cropping and transparency)
        """
        below, above = self.frame
        if below.invisible():
            return True
        if above.invisible():
            return False
        bc = below.cropped()
        ac = above.cropped()
        # return if above is (semi-)transparent or covers below completely
        return (above.alpha == 255 and
                bc[L] >= ac[L] and
                bc[T] >= ac[T] and

                bc[R] <= ac[R] and