Quick search

Table Of Contents

Scissor Instructions

New in version 1.9.1.

Scissor instructions clip your drawing area into a rectangular region.

The area provided to clip is in screenspace pixels and must be provided as integer values not floats.

The following code will draw a circle ontop of our widget while clipping the circle so it does not expand beyond the widget borders.

with self.canvas.after:
    #If our widget is inside another widget that modified the coordinates
    #spacing (such as ScrollView) we will want to convert to Window coords
    x,y = self.to_window(*self.pos)
    width, height = self.size
    #We must convert from the possible float values provided by kivy
    #widgets to an integer screenspace, in python3 round returns an int so
    #the int cast will be unnecessary.
    ScissorPush(x=int(round(x)), y=int(round(y)),
        width=int(round(width)), height=int(round(height)))
    Color(rgba=(1., 0., 0., .5))
    Ellipse(size=(width*2., height*2.),
class kivy.graphics.scissor_instructions.Rect

Bases: builtins.object

Rect class used internally by ScissorStack and ScissorPush to determine correct clipping area.

class kivy.graphics.scissor_instructions.ScissorPop

Bases: kivy.graphics.instructions.Instruction

Pop the scissor stack. Call after ScissorPush, once you have completed the drawing you wish to be clipped.

class kivy.graphics.scissor_instructions.ScissorPush

Bases: kivy.graphics.instructions.Instruction

Push the scissor stack. Provide kwargs of ‘x’, ‘y’, ‘width’, ‘height’ to control the area and position of the scissoring region. Defaults to 0, 0, 100, 100

Scissor works by clipping all drawing outside of a rectangle starting at int x, int y position and having sides of int width by int height in Window space coordinates

class kivy.graphics.scissor_instructions.ScissorStack

Bases: builtins.object

Class used internally to keep track of the current state of glScissors regions. Do not instantiate, prefer to inspect the module’s scissor_stack.