lib/cimg_display.ex

defmodule CImgDisplay do
  @moduledoc """
  Display the CImg objects on PC screen. This module also provides the functionality
  to handle mouse-event, key-board-event, window-close-event, timer-event etc.
  
  Note: You can only use these features in :dev or :test mode.
  """

  alias __MODULE__
  alias CImg.NIF

  # display object

  #   :handle - Erlang resource object pointing to the CImgDisplay object.

  defstruct handle: nil

  @doc """
  Create display object.
  
  ## Parameters
  
  ## Examples
  
    ```Elixir
    iex> img = CImg.load("sample.jpg")
    iex> display = CImgDisplay(img, "Sample image")
    iex> 
    ```
  """
  def create(cimg, title \\ "", normalization \\ 3, is_fullscreen \\ false, is_closed \\ false) do
    with {:ok, h} <- CImg.NIF.cimgdisplay_create(cimg, title, normalization, is_fullscreen, is_closed),
      do: %CImgDisplay{handle: h}
  end

  defdelegate wait(cimgdisplay),
    to: NIF, as: :cimgdisplay_wait
  defdelegate wait(cimgdisplay, milliseconds),
    to: NIF, as: :cimgdisplay_wait_time
  defdelegate is_closed(cimgdisplay),
    to: NIF, as: :cimgdisplay_is_closed
  defdelegate button(cimgdisplay),
    to: NIF, as: :cimgdisplay_button
  defdelegate mouse_y(cimgdisplay),
    to: NIF, as: :cimgdisplay_mouse_y
end