root:
  items:
    # Tests sticky-positioned items with previously-applied-offsets.

    # This item is bottom-sticky; we indicate to WR that it already has had
    # a sticky offset of y=-50 applied, and then scroll down by 50 pixels. WR
    # should unapply the entire 50px that was applied, and leave the rect
    # visually in the same spot.
    - type: scroll-frame
      id: 2
      bounds: [10, 10, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, 50]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [10, 10, 50, 50]
        margin-bottom: 0
        vertical-offset-bounds: [-500, 0]
        previously-applied-offset: [0, -50]
        items:
        - type: rect
          bounds: [10, 10, 50, 50]
          color: green
          clip-chain: [2]
    # Same as above, but this time we only indicate a previous-applied-offset
    # of 40 pixels, so that's the maximum WR will unapply
    - type: scroll-frame
      id: 3
      bounds: [10, 70, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, 50]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [10, 70, 50, 50]
        margin-bottom: 0
        vertical-offset-bounds: [-500, 0]
        previously-applied-offset: [0, -40]
        items:
        - type: rect
          bounds: [10, 70, 50, 50]
          color: green
          clip-chain: [3]
    # This time we indicate a previously-applied-offset of 50 pixels, but only
    # scroll by 40 pixels. In this case 40 of the 50 applied-offset pixels will
    # be unapplied
    - type: scroll-frame
      id: 4
      bounds: [10, 130, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, 40]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [10, 130, 50, 50]
        margin-bottom: 0
        vertical-offset-bounds: [-500, 0]
        previously-applied-offset: [0, -50]
        items:
        - type: rect
          bounds: [10, 130, 50, 50]
          color: green
          clip-chain: [4]
    # Here we indicate a previously-applied-offset of 50 pixels, but continue
    # scrolling in WR in the same direction by another 10 pixels. This effectively
    # increases the applied offset to 60 pixels.
    - type: scroll-frame
      id: 5
      bounds: [10, 190, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, -10]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [10, 190, 50, 50]
        margin-bottom: 0
        vertical-offset-bounds: [-500, 0]
        previously-applied-offset: [0, -50]
        items:
        - type: rect
          bounds: [10, 190, 50, 50]
          color: green
          clip-chain: [5]
    # Same as previous case, but this time with the vertical-offset-bounds
    # adjusted to limit the applied offset to only 55 pixels.
    - type: scroll-frame
      id: 6
      bounds: [10, 250, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, -10]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [10, 250, 50, 50]
        margin-bottom: 0
        vertical-offset-bounds: [-55, 0]
        previously-applied-offset: [0, -50]
        items:
        - type: rect
          bounds: [10, 250, 50, 50]
          color: green
          clip-chain: [6]

    # Repeat all the above cases, for top-sticky

    - type: scroll-frame
      id: 7
      bounds: [70, 10, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, -50]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [70, 10, 50, 50]
        margin-top: 0
        vertical-offset-bounds: [0, 500]
        previously-applied-offset: [0, 50]
        items:
        - type: rect
          bounds: [70, 10, 50, 50]
          color: green
          clip-chain: [7]
    - type: scroll-frame
      id: 8
      bounds: [70, 70, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, -50]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [70, 70, 50, 50]
        margin-top: 0
        vertical-offset-bounds: [0, 500]
        previously-applied-offset: [0, 40]
        items:
        - type: rect
          bounds: [70, 70, 50, 50]
          color: green
          clip-chain: [8]
    - type: scroll-frame
      id: 9
      bounds: [70, 130, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, -40]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [70, 130, 50, 50]
        margin-top: 0
        vertical-offset-bounds: [0, 500]
        previously-applied-offset: [0, 50]
        items:
        - type: rect
          bounds: [70, 130, 50, 50]
          color: green
          clip-chain: [9]
    - type: scroll-frame
      id: 10
      bounds: [70, 190, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, 10]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [70, 190, 50, 50]
        margin-top: 0
        vertical-offset-bounds: [0, 500]
        previously-applied-offset: [0, 50]
        items:
        - type: rect
          bounds: [70, 190, 50, 50]
          color: green
          clip-chain: [10]
    - type: scroll-frame
      id: 11
      bounds: [70, 250, 50, 50]
      content-size: [200, 200]
      scroll-offset: [0, 10]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [70, 250, 50, 50]
        margin-top: 0
        vertical-offset-bounds: [0, 55]
        previously-applied-offset: [0, 50]
        items:
        - type: rect
          bounds: [70, 250, 50, 50]
          color: green
          clip-chain: [11]

    # Repeat all the above cases, for right-sticky

    - type: scroll-frame
      id: 12
      bounds: [130, 10, 50, 50]
      content-size: [200, 200]
      scroll-offset: [50, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [130, 10, 50, 50]
        margin-right: 0
        horizontal-offset-bounds: [-500, 0]
        previously-applied-offset: [-50, 0]
        items:
        - type: rect
          bounds: [130, 10, 50, 50]
          color: green
          clip-chain: [12]
    - type: scroll-frame
      id: 13
      bounds: [130, 70, 50, 50]
      content-size: [200, 200]
      scroll-offset: [50, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [130, 70, 50, 50]
        margin-right: 0
        horizontal-offset-bounds: [-500, 0]
        previously-applied-offset: [-40, 0]
        items:
        - type: rect
          bounds: [130, 70, 50, 50]
          color: green
          clip-chain: [13]
    - type: scroll-frame
      id: 14
      bounds: [130, 130, 50, 50]
      content-size: [200, 200]
      scroll-offset: [40, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [130, 130, 50, 50]
        margin-right: 0
        horizontal-offset-bounds: [-500, 0]
        previously-applied-offset: [-50, 0]
        items:
        - type: rect
          bounds: [130, 130, 50, 50]
          color: green
          clip-chain: [14]
    - type: scroll-frame
      id: 15
      bounds: [130, 190, 50, 50]
      content-size: [200, 200]
      scroll-offset: [-10, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [130, 190, 50, 50]
        margin-right: 0
        horizontal-offset-bounds: [-500, 0]
        previously-applied-offset: [-50, 0]
        items:
        - type: rect
          bounds: [130, 190, 50, 50]
          color: green
          clip-chain: [15]
    - type: scroll-frame
      id: 16
      bounds: [130, 250, 50, 50]
      content-size: [200, 200]
      scroll-offset: [-10, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [130, 250, 50, 50]
        margin-right: 0
        horizontal-offset-bounds: [-55, 0]
        previously-applied-offset: [-50, 0]
        items:
        - type: rect
          bounds: [130, 250, 50, 50]
          color: green
          clip-chain: [16]

    # Repeat all the above cases, for left-sticky

    - type: scroll-frame
      id: 17
      bounds: [190, 10, 50, 50]
      content-size: [200, 200]
      scroll-offset: [-50, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [190, 10, 50, 50]
        margin-left: 0
        horizontal-offset-bounds: [0, 500]
        previously-applied-offset: [50, 0]
        items:
        - type: rect
          bounds: [190, 10, 50, 50]
          color: green
          clip-chain: [17]
    - type: scroll-frame
      id: 18
      bounds: [190, 70, 50, 50]
      content-size: [200, 200]
      scroll-offset: [-50, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [190, 70, 50, 50]
        margin-left: 0
        horizontal-offset-bounds: [0, 500]
        previously-applied-offset: [40, 0]
        items:
        - type: rect
          bounds: [190, 70, 50, 50]
          color: green
          clip-chain: [18]
    - type: scroll-frame
      id: 19
      bounds: [190, 130, 50, 50]
      content-size: [200, 200]
      scroll-offset: [-40, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [190, 130, 50, 50]
        margin-left: 0
        horizontal-offset-bounds: [0, 500]
        previously-applied-offset: [50, 0]
        items:
        - type: rect
          bounds: [190, 130, 50, 50]
          color: green
          clip-chain: [19]
    - type: scroll-frame
      id: 20
      bounds: [190, 190, 50, 50]
      content-size: [200, 200]
      scroll-offset: [10, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [190, 190, 50, 50]
        margin-left: 0
        horizontal-offset-bounds: [0, 500]
        previously-applied-offset: [50, 0]
        items:
        - type: rect
          bounds: [190, 190, 50, 50]
          color: green
          clip-chain: [20]
    - type: scroll-frame
      id: 21
      bounds: [190, 250, 50, 50]
      content-size: [200, 200]
      scroll-offset: [10, 0]
      clip-to-frame: true
      items:
      - type: sticky-frame
        bounds: [190, 250, 50, 50]
        margin-left: 0
        horizontal-offset-bounds: [0, 55]
        previously-applied-offset: [50, 0]
        items:
        - type: rect
          bounds: [190, 250, 50, 50]
          color: green
          clip-chain: [21]
