Packages
vix
0.16.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.1
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
retired
0.1.0
NIF based bindings for libvips
Current section
Files
Jump to
Current section
Files
lib/vix/g_object/g_param_spec.ex
defmodule Vix.GObject.GParamSpec do
@moduledoc false
@type t :: %{}
defstruct [:param_name, :desc, :spec_type, :value_type, :data, :priority, :flags, :type]
alias __MODULE__
def new(opt) do
pspec = %GParamSpec{
param_name: opt.name,
desc: opt.desc,
spec_type: to_string(opt.spec_type),
value_type: to_string(opt.value_type),
data: opt.data,
priority: opt.priority,
flags: opt.flags,
type: nil
}
%GParamSpec{pspec | type: type(pspec)}
end
def type(%GParamSpec{spec_type: "GParamEnum", value_type: value_type}) do
{:enum, value_type}
end
def type(%GParamSpec{spec_type: "GParamFlags", value_type: value_type}) do
{:flags, value_type}
end
# for array of enum, libvips does not pass required information to
# properly expose it to elixir world with correct spec and
# validation. libvips marks array of enum as array of int.
#
# To address this we try to recognize common type of enums
# explicitly and handle casting in elixir side.
def type(%GParamSpec{param_name: "mode", desc: "Array of VipsBlendMode " <> _}) do
{:vips_array, "Enum.VipsBlendMode"}
end
def type(%GParamSpec{value_type: "VipsArray" <> nested_type}) do
{:vips_array, nested_type}
end
def type(%GParamSpec{value_type: "VipsImage", flags: flags}) do
if :vips_argument_modify in flags do
"MutableVipsImage"
else
"VipsImage"
end
end
def type(%GParamSpec{value_type: value_type}) do
value_type
end
end