#
#  Created by Boyd Multerer on 2018-06-06.
#  Copyright © 2018-2021 Kry10 Limited. All rights reserved.
#

defmodule Scenic.Primitive.Style.Scissor do
  @moduledoc """
  Define a "Scissor Rectangle" that drawing will be clipped to.

  Example:

  ```elixir
  graph
    |> triangle({{0, 40}, {40, 40}, {40, 0}},
      miter_limit: 2,
      fill: :green,
      scissor: {20, 40}
    )
  ```

  ### Data Format

  `{width, height}`

  * `width` - Width of the scissor rectangle.
  * `height` - Height of the scissor rectangle.
  """

  use Scenic.Primitive.Style

  # ============================================================================
  # data verification and serialization

  @doc false
  def validate({w, h}) when is_number(w) and is_number(h) do
    {:ok, {w, h}}
  end

  def validate(data) do
    {
      :error,
      """
      #{IO.ANSI.red()}Invalid Scissor specification
      Received: #{inspect(data)}
      #{IO.ANSI.yellow()}
      The :scissor style must be {width, height}#{IO.ANSI.default_color()}
      """
    }
  end
end
