Base
Base is the foundation upon which all Merz layer types are built. All layers have the properties and methods of Base. Visually, Base is a frame that can be filled, bordered and more. It is often used on its own as a grouping layer.
Topics
Discussion
Properties
Refer to the properties concepts section for an overview of properties.
- Base.setPropertiesByName(properties, **kwargs)
- Set the value of multiple properties by name. - propertiesmust be a dict of form- {property name : value}.- Any key word arguments given will be used to create a property group that manages the timing of the property setting. 
- Base.setPropertyByName(name, value, **kwargs)
- Set property - namewith- value.- Any key word arguments given will be used to create a property group that manages the timing of the property setting. 
- Base.propertyGroup(name=None, duration=0, timing=None, delay=0, repeatCount=0, reverse=False, restore=False, animationFinishedCallback=None, preliminaryProperties=None, finalProperties=None)
- Create a context manager that allows setting multiple properties in an efficient way. The property changes can be static or animated. - To statically apply set the properties, call the - propertyGroupmethod without any arguments:- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup(): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - To apply properties with animation, supply one or more of the following arguments. - name(optional) A unique name to assign to the animation created by this group.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( name="myAnimation" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - durationThe length of the animation.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2 ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - timingThe animation timing function. Options:- NoneThe default.
- "linear"
- "easeIn"
- "easeOut"
- "easeInEaseOut"
 - delayThe amount of time to delay the start of the animation.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2, delay=1 ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - repeatCountThe number of times the animation should repeat. The value- "loop"indicates that the animation should repeat indefinitely.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2, repeatCount=2 ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - reverseIf- Truethe animation will reverse before repeating.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2, repeatCount="loop", reverse=True ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - restoreIf- Truethe animation will restore the property values from the start of the animation.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2, restore=True ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - animationFinishedCallbackA callback that will be called when the animation is completed.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) def myAnimationFinished(sender): sender.setPosition((100, 100)) with layer.propertyGroup( duration=2, animationFinishedCallback=myAnimationFinished ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) - Private options: - privateProperties
- preliminaryProperties
- finalProperties
 - These should not be used externally. 
Identification
- Base.getName(makeIfNeeded=False)
- Get the name assigned to this layer during - __init__. If a name was not assigned, and- makeIfNeededis- Truea random name will be assigned and returned.
- Base.setInfoValue(key, value)
- Set - key : valuein this layer’s info dictionary. This dictionary is a publicly available for storage of arbitrary information.- layer = container.appendBaseSublayer() layer.setInfoValue("foo", "bar") foo = layer.getInfoValue("foo", 123) 
- Base.getInfoValue(key, fallback=None)
- Set - keyfrom the arbitrary info dictionary. Return- fallbackif no value is defined for- key.
Geometry
Refer to the geometry concepts section for an overview of geometry.
- Base.getAnchor()
- Get the anchor of the layer. 
- Base.setAnchor(value)
- Set the anchor of the layer. The anchor defines the origin and alignment point for the layer. The value is a tuple of (x, y) values between 0 and 1.0. These values are relative to the bounds of the layer. A value of 0 means left/bottom and 1.0 means right/top. - Animatable. - layer = container.appendBaseSublayer( position=(250, 100), size=(200, 100), backgroundColor=(1, 0, 0, 0.5) ) layer.setAnchor((0.25, 0.25)) layer = container.appendBaseSublayer( position=(250, 100), size=(200, 100), backgroundColor=(0, 0, 1, 0.5) ) layer.setAnchor((0.75, 0.75))   
- Base.getPosition()
- Get the position of this layer. 
- Base.setPosition(position)
- Set the position of this layer. The value should be a tuple containing two values representing (x, y). Each value may be one of the following types: - int/float representing a fixed coordinate. 
- dictionary with the relative positioning form defined below. 
- string representing a - pointas defined in the relative positioning dictionary form. The- relativewill be- "super", the- relativePointwill be the same as- point,- offsetwill be- 0and- scalewill be- 1.0
 - Relative positioning dictionary key/value pairs: - point: One of the point values defined below.
- relative: A layer object, a layer name or- "super"indicating the super layer of this layer. If specifying a layer other than the super layer, the specified layer must belong to the same super layer as this layer.
- relativePoint: One of the point values defined below.
- scale: A positive number indicating the value scale.
- offset: The amount to offset this layer defined by- relativeand the location of- relativePoint.
 - X Point Values: - "left"
- "center"
- "right"
 - Y Point Values: - "top"
- "center"
- "bottom"
 - Animatable. - baseLayer = container.appendBaseSublayer( size=(500, 200) ) # Fixed Positioning layer = baseLayer.appendBaseSublayer( size=(100, 100), backgroundColor=(1, 0, 0, 1) ) layer.setPosition((50, 50)) # Relative Positioning layer = baseLayer.appendBaseSublayer( size=(100, 100), backgroundColor=(0, 1, 0, 1) ) layer.setPosition(("left", "bottom")) layer = baseLayer.appendBaseSublayer( name="blueLayer", size=(100, 100), backgroundColor=(0, 0, 1, 1) ) layer.setPosition( ( dict(point="right", offset=-100), dict(point="top", offset=-100) ) ) layer = baseLayer.appendBaseSublayer( size=(100, 100), backgroundColor=(1, 1, 0, 1) ) layer.setPosition( ( dict( point="center", relative="blueLayer", relativePoint="left" ), dict( point="center", relative="blueLayer", relativePoint="top" ) ) )   
- Base.getZPosition()
- Get the z-position of this layer. 
- Base.setZPosition(value)
- Set the z-position offset for this layer. - Animatable. - firstLayer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1) ) layers = 10 for i in range(layers): f = i / (layers -1) container.appendBaseSublayer( position=(50 + 10 * i, 50 + 10 * i), size=(100, 100), backgroundColor=(f, 1-f, 0, 1), zPosition=i ) with firstLayer.propertyGroup(duration=1, reverse=True, restore=True): firstLayer.setZPosition(layers + 1) firstLayer.setBackgroundColor((0, 0, 1, 1)) 
- Base.getSize()
- Get the size of this layer. 
- Base.setSize(size)
- Set the Size of this layer. The value should be a tuple containing two values representing (width, height). Each value may be one of the following types: - int/float representing a fixed value. 
- dictionary with the relative size form defined below. 
- string representing a - pointas defined in the relative size dictionary form. The- relativewill be- "super", the- relativePointwill be the same as- point,- offsetwill be- 0and- scalewill be- 1.0
 - Relative size dictionary key/value pairs: - point: One of the point values defined below.
- relative: A layer object, a layer name or- "super"indicating the super layer of this layer. If specifying a layer other than the super layer, the specified layer must belong to the same super layer as this layer.
- relativePoint: One of the point values defined below.
- scale: A positive number indicating the value scale.
- offset: The amount to offset this layer defined by- relativeand the location of- relativePoint.
 - Horizontal Size Values: - "width"
 - Vertical Size Values: - "height"
 - Note: If you specify a layer’s size using relative values you must also define the layer’s position with relative values. - Animatable. - baseLayer = container.appendBaseSublayer( size=(500, 200) ) # Fixed Positioning layer = baseLayer.appendBaseSublayer( position=(50, 50), backgroundColor=(1, 0, 0, 1) ) layer.setSize((100, 100)) # Relative Size layer = baseLayer.appendBaseSublayer( position=("center", "center"), backgroundColor=(0, 1, 0, 0.5) ) layer.setSize(("width", "height")) layer = baseLayer.appendBaseSublayer( position=("center", "center"), backgroundColor=(0, 0, 1, 0.5) ) layer.setSize( ( dict(point="width", offset=-50), dict(point="height", offset=-50) ) ) layer = baseLayer.appendBaseSublayer( name="yellowLayer", position=("center", "center"), backgroundColor=(1, 1, 0, 0.5) ) layer.setSize( ( dict(point="width", scale=0.5), dict(point="height", scale=0.5) ) ) layer = baseLayer.appendBaseSublayer( position=("center", "center"), backgroundColor=(0, 1, 1, 0.5) ) layer.setSize( ( dict( point="width", relative="yellowLayer", scale=0.75 ), dict( point="height", relative="yellowLayer", scale=0.75 ) ) )   - Special Situation: - If you try to set a relative size to a layer with a fixed position, the layer will not display correctly. (This is a CALayer limitation.) For example, this will only display the red layer: - baseLayer = container.appendBaseSublayer( size=(500, 200) ) baseLayer.appendBaseSublayer( position=(0, 0), size=( dict(point="width"), dict(point="height") ), backgroundColor=(0, 0, 1, 0.5) ) baseLayer.appendBaseSublayer( position=("left", "bottom"), size=( dict(point="width"), dict(point="height") ), backgroundColor=(1, 0, 0, 0.5) )   
Transformations
- Base.getTransformations()
- Get a list of all transformations. 
- Base.addTransformation(transformation, name, center=(0, 0))
- Add a transformation with - namethat applies to this layer and all of its sublayers. If a transformation with- namealready exists, the previous transformation will be updated with the new value. The transformation will be performed around the point- center.
- Base.removeTransformation(name)
- Remove the transformation with - name.
- Base.addTranslationTransformation(value, name='translate')
- Add a translate transformation with - name.- valueis tuple of (x, y) values.
- Base.addScaleTransformation(value, name='scale', center=(0, 0))
- Add a scale transformation with - nameand- center.- valuecan be a single number or tuple of (x, y) values.
- Base.addRotationTransformation(value, name='rotate', center=(0, 0))
- Add a rotation transformation with - nameand- center.- valueis an angle in degrees.
- Base.addSkewTransformation(value, name='skew', center=(0, 0))
- Add a skew transformation with - nameand- center.- valuecan be a tuple of (x, y) values or a single number indicating an x value.
- Base.addSublayerTransformation(transformation, name, center=(0, 0))
- Add a transformation with - namethat applies to all of this layer’s sublayers. If a transformation with- namealready exists, the previous transformation will be updated with the new value. The transformation will be performed around the point- center.
- Base.removeSublayerTransformation(name)
- Remove the transformation with - name.
- Base.addSublayerTranslationTransformation(value, name='translate')
- Add a sublayer translate transformation with - name.- valueis tuple of (x, y) values.
- Base.addSublayerScaleTransformation(value, name='scale', center=(0, 0))
- Add a sublayer scale transformation with - nameand- center.- valuecan be a single number or tuple of (x, y) values.
- Base.addSublayerRotationTransformation(value, name='rotate', center=(0, 0))
- Add a sublayer scale transformation with - nameand- center.- valueis an angle in degrees.
- Base.addSublayerSkewTransformation(value, name='skew', center=(0, 0))
- Add a sublayer skew transformation with - nameand- center.- valuecan be a tuple of (x, y) values or a single number indicating an x value.
Frame
- Base.getVisible()
- Get if the layer is visible. 
- Base.setVisible(value)
- Set if the layer is visible. - layer = container.appendBaseSublayer( position=(50, 50), size=(200, 100), backgroundColor=(1, 0, 0, 1) ) layer.setVisible(False) layer = container.appendBaseSublayer( position=(250, 50), size=(200, 100), backgroundColor=(0, 0, 1, 1) ) layer.setVisible(True)   
- Base.getMaskToFrame()
- Get if the layer hides any sublayer data outside of its frame. 
- Base.setMaskToFrame(value)
- set if the layer hides any sublayer data outside of its frame. - layer = container.appendBaseSublayer( position=(50, 50), size=(400, 100), backgroundColor=(1, 0, 0, 1) ) layer.appendOvalSublayer( position=(100, -50), size=(200, 200), fillColor=(1, 1, 0, 1) ) layer.setMaskToFrame(True)   
- Base.getOpacity()
- Get the opacity of this layer. 
- Base.setOpacity(value)
- Set the opacity of this layer, - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 0, 0, 1) ) layer.setOpacity(1.0) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(0, 1, 0, 1) ) layer.setOpacity(0.5) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(0, 0, 1, 1) ) layer.setOpacity(0)   
- Base.getBackgroundColor()
- Get the background color for this layer. 
- Base.setBackgroundColor(color)
- Set the background color for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100) ) layer.setBackgroundColor((1, 0, 0, 1)) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100) ) layer.setBackgroundColor((0, 1, 0, 1)) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100) ) layer.setBackgroundColor((0, 0, 1, 1))   
- Base.getBorderColor()
- Get the border color for this layer. 
- Base.setBorderColor(color)
- Set the border color for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderWidth=20 ) layer.setBorderColor((1, 0, 0, 1)) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderWidth=20 ) layer.setBorderColor((0, 1, 0, 1)) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderWidth=20 ) layer.setBorderColor((0, 0, 1, 0.5))   
- Base.getBorderWidth()
- Get the border width for this layer. 
- Base.setBorderWidth(value)
- Set the border width for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderColor=(1, 0, 0, 1) ) layer.setBorderWidth(20) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderColor=(1, 0, 0, 1) ) layer.setBorderWidth(5) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 1, 1), borderColor=(1, 0, 0, 1) ) layer.setBorderWidth(0)   
- Base.getCornerRadius()
- Get this corner radius of this layer. 
- Base.setCornerRadius(value)
- Set the corner radius of this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 0, 0, 1) ) layer.setCornerRadius(0) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(0, 1, 0, 1) ) layer.setCornerRadius(10) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(0, 0, 1, 1) ) layer.setCornerRadius(30)   
Shadow
- Base.getShadowColor()
- Get the shadow color for this layer. 
- Base.setShadowColor(color)
- Set the shadow color for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowOpacity=1.0 ) layer.setShadowColor((1, 0, 0, 1)) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowOpacity=1.0 ) layer.setShadowColor((0, 1, 0, 0.5)) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowOpacity=1.0 ) layer.setShadowColor((0, 0, 1, 0.1))   
- Base.getShadowOpacity()
- Get the shadow opacity for this layer. 
- Base.setShadowOpacity(value)
- Set the shadow opacity for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowColor=(1, 0, 0, 1) ) layer.setShadowOpacity(1.0) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowColor=(1, 0, 0, 1) ) layer.setShadowOpacity(0.5) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowOffset=(-10, -10), shadowColor=(1, 0, 0, 1) ) layer.setShadowOpacity(0)   
- Base.getShadowOffset()
- Get the shadow offset for this layer. 
- Base.setShadowOffset(offset)
- Set the shadow offset for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0 ) layer.setShadowOffset((-10, -10)) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0 ) layer.setShadowOffset((10, 10)) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0 ) layer.setShadowOffset((0, 0))   
- Base.getShadowBlurRadius()
- Get the shadow blur radius for this layer. 
- Base.setShadowBlurRadius(value)
- Set the shadow blur radius for this layer. - Animatable. - layer = container.appendBaseSublayer( position=(50, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0, shadowOffset=(-10, -10) ) layer.setShadowBlurRadius(10) layer = container.appendBaseSublayer( position=(200, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0, shadowOffset=(-10, -10) ) layer.setShadowBlurRadius(5) layer = container.appendBaseSublayer( position=(350, 50), size=(100, 100), backgroundColor=(1, 1, 0, 1), shadowColor=(1, 0, 0, 1), shadowOpacity=1.0, shadowOffset=(-10, -10) ) layer.setShadowBlurRadius(0)   
Filters
There are two types of filters:
Filters that apply to the layer and all of its sublayers.
bottomLayer = container.appendBaseSublayer(
    position=(200, 25),
    size=(100, 150),
    backgroundColor=(0, 0, 1, 1)
)
topLayer = container.appendBaseSublayer(
    position=(50, 50),
    size=(350, 100),
    backgroundColor=(1, 0, 0, 0.5)
)
topLayer.appendOvalSublayer(
    position=("center", "center"),
    size=(50, 50),
    fillColor=(1, 1, 0, 1)
)
topLayer.appendFilter(
    dict(
        name="topFilter",
        filterType="gaussianBlur",
        radius=5
    )
)
Filters that apply to any layers underneath the layer. These are indicated with “background” in the method names.
bottomLayer = container.appendBaseSublayer(
    position=(200, 25),
    size=(100, 150),
    backgroundColor=(0, 0, 1, 1)
)
topLayer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    backgroundColor=(1, 0, 0, 0.5),
    maskToFrame=True
)
topLayer.appendOvalSublayer(
    position=("center", "center"),
    size=(50, 50),
    fillColor=(1, 1, 0, 1)
)
topLayer.appendBackgroundFilter(
    dict(
        name="topFilter",
        filterType="gaussianBlur",
        radius=5
    )
)
Filters are defined as dictionaries with this form:
{
    "name" : string,
    "filterType" : string,
    # key / value pairs for settings
}
- nameis an arbitrary name. It must be a unique value within the names for filters on this layer.
- filterTypeis the type of filter to use, for example- "colorControls". The available filters are listed below.
- Settings for the filter type are detailed as key / value pairs following the keys and value types defined for the specified - filterType.
If you need a type of CIFilter that is not available through
Merz, you can use the CIFilter directly with a dictionary
of this form instead of the form defined above:
{
    "name" : string,
    "CIFilter" : filterObject
}
- namefollows the same definition as above.
- CIFiltermust be an instantiated instance of- CIFilter
Here’s a list of all CIFilter types.
Built-In Filters
colorControls
See the documentation for CIColorControls.
- "saturation": number
- "brightness": number
- "contrast": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="colorControls",
        saturation=1.0,
        brightness=0.5,
        contrast=2.0
    )
)
falseColor
See the documentation for CIFalseColor.
- "color0": color definition
- "color1": color definition
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="falseColor",
        color0=(0, 1, 0, 1),
        color1=(0, 0, 0, 1),
    )
)
gaussianBlur
See the documentation for CIGaussianBlur.
- "radius": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="gaussianBlur",
        radius=10.0
    )
)
motionBlur
See the documentation for CIMotionBlur.
- "radius": number
- "angle": number
    layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="motionBlur",
        radius=10.0,
        angle=10
    )
)
unsharpMask
See the documentation for CIUnsharpMask.
- "radius": number
- "intensity": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="unsharpMask",
        radius=10.0,
        intensity=5
    )
)
noiseReduction
See the documentation for CINoiseReduction.
- "noiseLevel": number
- "sharpness": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="noiseReduction",
        noiseLevel=1,
        sharpness=1
    )
)
dotScreen
See the documentation for CIDotScreen.
- "center": (x, y)
- "angle": number
- "width": number
- "sharpness": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="dotScreen",
        center=(50, 50),
        angle=45,
        width=10,
        sharpness=10
    )
)
pixellate
See the documentation for CIPixellate.
- "center": (x, y)
- "scale": number
layer = container.appendBaseSublayer(
    position=(50, 50),
    size=(400, 100),
    cornerRadius=25,
    backgroundColor=(1, 0, 0, 1),
    borderColor=(1, 1, 0, 1),
    borderWidth=10
)
layer.appendFilter(
    dict(
        name="demo",
        filterType="pixellate",
        center=(50, 50),
        scale=5
    )
)
Filter Methods
- Base.getCompositingMode()
- Set the compositing filter for the layer. 
- Base.setCompositingMode(filterType)
- Set the compositing filter for the layer. - filterTypeoptions:- None
- "multiply"
- "sourceAtop"
- "sourceIn"
- "sourceOut"
- "sourceOver"
- An instance of a - CIFilter.
 - layer1 = container.appendBaseSublayer( position=(50, 50), size=(300, 75), backgroundColor=(1, 0, 0, 1) ) layer2 = container.appendBaseSublayer( position=(150, 75), size=(300, 75), backgroundColor=(0, 0, 1, 1) ) layer2.setCompositingMode("multiply") 
- Base.getFilters()
- Get a list of the filters for this layer. 
- Base.setFilters(allFilterSettings)
- Set a list of the filters for this layer. 
- Base.appendFilter(filterSettings)
- Append a filter to this layer. 
- Base.getFilter(name)
- Get the filter with - namefrom this layer.
- Base.removeFilter(name)
- Remove the filter with - namefrom this layer.
- Base.clearFilters()
- Clear all background filters from this layer. 
- Base.getBackgroundFilters()
- Get a list of the background filters for this layer. 
- Base.setBackgroundFilters(allFilterSettings)
- Set a list of the background filters for this layer. 
- Base.appendBackgroundFilter(filterSettings)
- Append a background filter to this layer. 
- Base.getBackgroundFilter(name)
- Get the background filter with - namefrom this layer.
- Base.removeBackgroundFilter(name)
- Remove the background filter with - namefrom this layer.
Animation
Refer to the animation concepts section for an overview of animation.
- Base.clearAnimation()
- Remove all animations from this layer. - layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( duration=2, repeatCount="loop" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) layer.clearAnimation() 
- Base.stopAnimation(name)
- Stop the animation with the - namegiven when the animation was created with a property group.- layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( name="myAnimation", duration=2, repeatCount="loop" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) layer.stopAnimation("myAnimation") 
- Base.isAnimationPaused()
- Get if animation is currently paused for this layer. - layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( name="myAnimation", duration=2, repeatCount="loop" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) paused = layer.isAnimationPaused() 
- Base.pauseAnimation()
- Pause the animation of this layer. - layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( name="myAnimation", duration=2, repeatCount="loop" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) layer.pauseAnimation() 
- Base.resumeAnimation()
- Resume the animation of the layer. - layer = container.appendBaseSublayer( position=(0, 0), size=(300, 300), cornerRadius=0, backgroundColor=(0, 0, 0, 1), borderColor=(0, 0, 1, 1), borderWidth=5 ) with layer.propertyGroup( name="myAnimation", duration=2, repeatCount="loop" ): layer.setCornerRadius(50) layer.setBackgroundColor((1, 0, 0, 1)) layer.setBorderWidth(50) layer.pauseAnimation() layer.resumeAnimation() 
Sublayers
Refer to the layer hierarchy concepts section for an overview of sublayers.
- Base.sublayerGroup(sublayers=None)
- Place a hold on adding the sublayers to this layer’s CALayer until the context manager exits. This is useful when you need to add a lot of sublayers to a layer at the same time. - baseLayer = container.appendBaseSublayer( size=(500, 200) ) with baseLayer.sublayerGroup(): for i in range(1, 10): scale = 1.0 / i baseLayer.appendBaseSublayer( position=("center", "center"), size=( dict(point="width", scale=scale), dict(point="height", scale=scale), ), backgroundColor=(1, 0, 0, 0.2) )   
- Base.getSublayers()
- Get all sublayers within this layer. - for sublayer in container.getSublayers(): sublayer.setBackgroundColor((1, 0, 0, 0.1)) 
- Base.getSublayer(name)
- Get the sublayer with - name.
- Base.clearSublayers()
- Remove all sublayers within this layer. - container.clearSublayers() 
- Base.removeSublayer(sublayer)
- Remove the given sublayer from the layer. - sublayermay be an object or a layer name.
- Base.appendSublayer(sublayer)
- Append an instantiated sublayer to this layer. - sublayermust be an instance of Base or a subclass of Base.
- Base.appendSublayerOfClass(layerClass, **kwargs)
- Append a sublayer to this layer. The sublayer will be created with layerClass and all kwargs will be set in the sublayer. The kwargs may be any property of the sublayer that has a - setPropertymethod.
- Base.appendBaseSublayer(**kwargs)
- Append a base layer. kwargs may be any property of Base. - layer = container.appendBaseSublayer( position=(50, 50), size=(400, 100), backgroundColor=(1, 0, 0, 1) )   
- Base.appendPathSublayer(**kwargs)
- Append a path layer. kwargs may be any property of Path. - layer = container.appendPathSublayer( fillColor=(1, 0, 0, 1) ) pen = layer.getPen() pen.moveTo((50, 50)) pen.lineTo((450, 150)) pen.lineTo((450, 50)) pen.lineTo((50, 150)) pen.closePath()   
- Base.appendLineSublayer(**kwargs)
- Append a line layer. kwargs may be any property of Line. - layer = container.appendLineSublayer( startPoint=(50, 50), endPoint=(450, 150), strokeColor=(1, 0, 0, 1), strokeWidth=5 )   
- Base.appendOvalSublayer(**kwargs)
- Append a oval layer. kwargs may be any property of Oval. - layer = container.appendOvalSublayer( position=(50, 50), size=(400, 100), fillColor=(1, 0, 0, 1) )   
- Base.appendRectangleSublayer(**kwargs)
- Append a rectangle layer. kwargs may be any property of Rectangle. - layer = container.appendRectangleSublayer( position=(50, 50), size=(400, 100), fillColor=(1, 0, 0, 1) )   
- Base.appendImageSublayer(**kwargs)
- Append an image layer. kwargs may be any property of Image. - import AppKit image = AppKit.NSImage.imageNamed_(AppKit.NSImageNameTrashFull) layer = container.appendImageSublayer( position=(50, 50), size=(400, 100), image=image )   
- Base.appendTextBoxSublayer(**kwargs)
- Append a text box. kwargs may be any property of TextBox. - layer = container.appendTextBoxSublayer( position=(50, 50), size=(400, 100), text="Hi.", fillColor=(1, 1, 1, 1), backgroundColor=(1, 0, 0, 1) )   
- Base.appendTextLineSublayer(**kwargs)
- Append a text line. kwargs may be any property of TextLine. - layer = container.appendTextLineSublayer( position=(50, 150), fillColor=(1, 1, 1, 1), backgroundColor=(1, 0, 0, 1), text="Hi." )   
- Base.appendSymbolSublayer(**kwargs)
- Append a symbol. kwargs may be any property of Symbol. - layer = container.appendSymbolSublayer( position=(50, 100), imageSettings=dict( name="triangle", size=(30, 30), fillColor=(1, 0, 0, 1) ) )   
- Base.drawingTools(clear=True)
- This creates a context manager that provides a sublayer creation syntax that supports a subset of the DrawBot API. Refer to the drawingTools concepts section for full details. - with container.drawingTools() as bot: bot.fill(1, 0, 0, 1) bot.rect(50, 50, 400, 100)   
Superlayers
Refer to the layer hierarchy concepts section for an overview of superlayers.
- Base.getContainer()
- Get the Container that this layer belongs to. 
- Base.getSuperlayer()
- Get the layer that this layer belongs to. 
Hit Testing
CoreAnimation Object
- Base.getCALayer()
- Get the CALayer that this object wraps.