2016-08-10 07:23:04 -07:00
|
|
|
mixin Efl.Gfx.Map (Efl.Interface, Efl.Object)
|
2016-06-27 22:12:17 -07:00
|
|
|
{
|
|
|
|
[[Texture UV mapping for all objects (rotation, perspective, 3d, ...).
|
|
|
|
|
|
|
|
Evas allows different transformations to be applied to all kinds of
|
|
|
|
objects. These are applied by means of UV mapping.
|
|
|
|
|
|
|
|
With UV mapping, one maps points in the source object to a 3D space
|
|
|
|
positioning at target. This allows rotation, perspective, scale and
|
|
|
|
lots of other effects, depending on the map that is used.
|
|
|
|
|
|
|
|
Each map point may carry a multiplier color. If properly
|
|
|
|
calculated, these can do shading effects on the object, producing
|
|
|
|
3D effects.
|
2016-06-27 23:40:41 -07:00
|
|
|
|
|
|
|
At the moment of writing, maps can only have 4 points (no more, no less).
|
|
|
|
Usually, it will be necessary to update the map points (start afresh with
|
|
|
|
@.map_populate) whenever the object geometry changes.
|
|
|
|
|
|
|
|
Note: For now this mixin is only compatible with $Efl.Canvas.Object and
|
|
|
|
shouldn't be used anywhere else.
|
|
|
|
|
|
|
|
Note: There are a few differences with legacy $Evas_Map:
|
|
|
|
- A map is now a property of an object, rather than a separate entity.
|
|
|
|
- @.map_move_sync is enabled by default
|
|
|
|
- @.map_populate will be called automatically if another map function
|
|
|
|
is called while the object has no map info.
|
2016-06-27 22:12:17 -07:00
|
|
|
]]
|
|
|
|
data: null;
|
|
|
|
methods {
|
|
|
|
@property map_enable @virtual_pure {
|
|
|
|
[[Whether map transformation is enabled on this object.
|
|
|
|
|
2016-06-27 23:40:41 -07:00
|
|
|
The default map enable state is off ($false). The other
|
|
|
|
properties and methods in this class have no effect until
|
|
|
|
this property is enabled.
|
2016-06-27 22:12:17 -07:00
|
|
|
]]
|
|
|
|
set {
|
|
|
|
[[Enable or disable the use of map for this object. On
|
|
|
|
enable, the object geometry will be saved, and the new
|
|
|
|
geometry will change (position and size) to reflect the
|
|
|
|
map geometry set.
|
|
|
|
]]
|
|
|
|
}
|
|
|
|
get {
|
|
|
|
legacy: evas_object_map_enable_get;
|
|
|
|
}
|
|
|
|
values {
|
|
|
|
enabled: bool; [[Enabled state.]]
|
|
|
|
}
|
|
|
|
}
|
2016-06-27 23:40:41 -07:00
|
|
|
@property map_clockwise {
|
|
|
|
[[Clockwise state of a map (read-only).
|
|
|
|
|
|
|
|
This determines if the output points (X and Y. Z is not used) are
|
|
|
|
clockwise or counter-clockwise. This can be used for "back-face culling". This
|
|
|
|
is where you hide objects that "face away" from you. In this case objects
|
|
|
|
that are not clockwise.
|
|
|
|
]]
|
|
|
|
get {}
|
|
|
|
values {
|
2016-11-15 07:04:03 -08:00
|
|
|
cw: bool; [[$true if clockwise, $false if counter clockwise]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_smooth {
|
|
|
|
[[Smoothing state for map rendering.
|
|
|
|
|
|
|
|
This sets smoothing for map rendering. If the object is a type that has
|
|
|
|
its own smoothing settings, then both the smooth settings for this object
|
|
|
|
and the map must be turned off. By default smooth maps are enabled.
|
|
|
|
]]
|
|
|
|
values {
|
|
|
|
smooth: bool; [[$true by default.]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_alpha {
|
|
|
|
[[Alpha flag for map rendering.
|
|
|
|
|
|
|
|
This sets alpha flag for map rendering. If the object is a type that has
|
|
|
|
its own alpha settings, then this will take precedence. Only image objects
|
|
|
|
have this currently ($Efl.Canvas.Image and its friends).
|
|
|
|
Setting this off stops alpha blending of the map area, and is
|
|
|
|
useful if you know the object and/or all sub-objects is 100% solid.
|
|
|
|
]]
|
|
|
|
values {
|
|
|
|
alpha: bool; [[$true by default.]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_point_coord {
|
|
|
|
[[Map point's coordinate.
|
|
|
|
|
|
|
|
This sets/gets the fixed point's coordinate in the map. Note that points
|
|
|
|
describe the outline of a quadrangle and are ordered either clockwise
|
|
|
|
or counter-clockwise. It is suggested to keep your quadrangles concave and
|
|
|
|
non-complex, though these polygon modes may work, they may not render
|
|
|
|
a desired set of output. The quadrangle will use points 0 and 1 , 1 and 2,
|
|
|
|
2 and 3, and 3 and 0 to describe the edges of the quadrangle.
|
|
|
|
|
|
|
|
The X and Y and Z coordinates are in canvas units. Z is optional and may
|
|
|
|
or may not be honored in drawing. Z is a hint and does not affect the
|
|
|
|
X and Y rendered coordinates. It may be used for calculating fills with
|
|
|
|
perspective correct rendering.
|
|
|
|
|
|
|
|
Remember all coordinates are canvas global ones like with move and resize
|
|
|
|
in the canvas.
|
|
|
|
]]
|
|
|
|
keys {
|
|
|
|
idx: int; [[ID of the point, from 0 to 3 (included).]]
|
|
|
|
}
|
|
|
|
values {
|
|
|
|
x: double; [[Point X Coordinate.]]
|
|
|
|
y: double; [[Point Y Coordinate.]]
|
|
|
|
z: double; [[Point Z Coordinate hint (pre-perspective transform).]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_point_image_uv {
|
|
|
|
[[Map point's U and V texture source point.
|
|
|
|
|
|
|
|
This sets/gets the U and V coordinates for the point. This determines which
|
|
|
|
coordinate in the source image is mapped to the given point, much like
|
|
|
|
OpenGL and textures. Notes that these points do select the pixel, but
|
|
|
|
are double floating point values to allow for accuracy and sub-pixel
|
|
|
|
selection.
|
|
|
|
]]
|
|
|
|
keys {
|
|
|
|
idx: int; [[ID of the point, from 0 to 3 (included).]]
|
|
|
|
}
|
|
|
|
values {
|
|
|
|
u: double; [[X coordinate within the image/texture source.]]
|
|
|
|
v: double; [[Y coordinate within the image/texture source.]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_color {
|
|
|
|
[[Color of a vertex in the map.
|
|
|
|
|
|
|
|
This sets the color of the vertex in the map. Colors will be linearly
|
|
|
|
interpolated between vertex points through the map. Color will multiply
|
|
|
|
the "texture" pixels (like GL_MODULATE in OpenGL). The default color of
|
|
|
|
a vertex in a map is white solid (255, 255, 255, 255) which means it will
|
|
|
|
have no affect on modifying the texture pixels.
|
|
|
|
|
|
|
|
The color values must be premultiplied (ie. $a >= {$r, $g, $b}).
|
|
|
|
]]
|
|
|
|
keys {
|
|
|
|
idx: int; [[ID of the point, from 0 to 3 (included).
|
|
|
|
-1 can be used to set the color for all points,
|
|
|
|
but it is invalid for get().]]
|
|
|
|
}
|
|
|
|
values {
|
|
|
|
r: int; [[Red (0 - 255)]]
|
|
|
|
g: int; [[Green (0 - 255)]]
|
|
|
|
b: int; [[Blue (0 - 255)]]
|
|
|
|
a: int; [[Alpha (0 - 255)]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_move_sync {
|
|
|
|
[[Status of object move synchronization for map rendering.
|
|
|
|
|
|
|
|
If the flag is set as enabled, the map will be moved as the object
|
|
|
|
is moved.
|
|
|
|
]]
|
|
|
|
values {
|
|
|
|
enable: bool; [[$true by default.]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@property map_point_z {
|
|
|
|
[[Value of Z coordinate of point $idx.
|
|
|
|
|
|
|
|
Useful to call @.map_populate without changing Z.
|
|
|
|
]]
|
|
|
|
get {}
|
|
|
|
keys {
|
2016-11-15 07:04:03 -08:00
|
|
|
idx: int; [[Point]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
values {
|
2016-11-15 07:04:03 -08:00
|
|
|
z: double; [[Z coordinate for point]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
map_populate {
|
|
|
|
[[Populate source and destination map points to match this object.
|
|
|
|
]]
|
|
|
|
params {
|
2016-11-15 07:04:03 -08:00
|
|
|
z: double @optional; [[Point Z coordinate (pre-pesrpective transform),
|
2016-06-27 23:40:41 -07:00
|
|
|
used for all 4 points. 0 by default.]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_populate_manual {
|
|
|
|
[[Populate source and destination map points to match given geometry.
|
|
|
|
|
|
|
|
Similar to @.map_populate, this call takes raw values instead of
|
|
|
|
querying this object's unmapped geometry. The given size will be
|
|
|
|
used to calculate destination points (@.map_point_coord) and set the
|
|
|
|
image uv (@.map_point_image_uv).
|
|
|
|
]]
|
|
|
|
params {
|
2016-11-15 07:04:03 -08:00
|
|
|
x: double; [[X coordinate]]
|
|
|
|
y: double; [[Y coordinate]]
|
|
|
|
w: double; [[Width]]
|
|
|
|
h: double; [[Height]]
|
|
|
|
z: double @optional; [[Point Z coordinate (pre-perspective transform),
|
2016-06-27 23:40:41 -07:00
|
|
|
used for all 4 points. 0 by default.]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_rotate {
|
|
|
|
[[Change the map to apply the given rotation.
|
|
|
|
|
|
|
|
This rotates the indicated map's coordinates around the center coordinate
|
|
|
|
given by $cx and $cy as the rotation center. The points will have their
|
|
|
|
X and Y coordinates rotated clockwise by $degrees degrees (360.0 is a
|
|
|
|
full rotation). Negative values for degrees will rotate counter-clockwise
|
|
|
|
by that amount. All coordinates are canvas global coordinates.
|
|
|
|
]]
|
|
|
|
params {
|
|
|
|
degrees: double; [[CCW rotation in degrees.]]
|
|
|
|
cx: double; [[X coordinate of the rotation center.]]
|
|
|
|
cy: double; [[Y coordinate of the rotation center.]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_zoom {
|
|
|
|
[[Change the map to apply the given zooming.
|
|
|
|
|
|
|
|
Like evas_map_util_rotate(), this zooms the points of the map from a center
|
|
|
|
point. That center is defined by $cx and $cy. The $zoomx and $zoomy
|
|
|
|
parameters specify how much to zoom in the X and Y direction respectively.
|
|
|
|
A value of 1.0 means "don't zoom". 2.0 means "double the size". 0.5 is
|
|
|
|
"half the size" etc. All coordinates are canvas global coordinates.
|
|
|
|
]]
|
|
|
|
params {
|
2016-11-15 07:04:03 -08:00
|
|
|
zoomx: double; [[Zoom in X direction]]
|
|
|
|
zoomy: double; [[Zoom in Y direction]]
|
2016-06-27 23:40:41 -07:00
|
|
|
cx: double; [[X coordinate of the center point.]]
|
|
|
|
cy: double; [[Y coordinate of the center point.]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_rotate_3d {
|
|
|
|
[[Rotate the map around 3 axes in 3D
|
|
|
|
|
|
|
|
This will rotate not just around the "Z" axis as in evas_map_util_rotate()
|
|
|
|
(which is a convenience call for those only wanting 2D). This will rotate
|
|
|
|
around the X, Y and Z axes. The Z axis points "into" the screen with low
|
|
|
|
values at the screen and higher values further away. The X axis runs from
|
|
|
|
left to right on the screen and the Y axis from top to bottom. Like with
|
|
|
|
evas_map_util_rotate() you provide a center point to rotate around (in 3D).
|
|
|
|
]]
|
|
|
|
params {
|
|
|
|
dx: double; [[Rotation in degrees around X axis (0 to 360).]]
|
|
|
|
dy: double; [[Rotation in degrees around Y axis (0 to 360).]]
|
|
|
|
dz: double; [[Rotation in degrees around Z axis (0 to 360).]]
|
|
|
|
cx: double; [[Rotation's center X position.]]
|
|
|
|
cy: double; [[Rotation's center Y position.]]
|
|
|
|
cz: double; [[Rotation's center Z position.]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_quat_rotate {
|
|
|
|
[[Rotate the map in 3D using a unit quaternion.
|
|
|
|
|
|
|
|
This will rotate in 3D using a unit quaternion. Like with
|
|
|
|
evas_map_util_3d_rotate() you provide a center point
|
|
|
|
to rotate around (in 3D).
|
|
|
|
]]
|
|
|
|
params {
|
2016-11-15 07:04:03 -08:00
|
|
|
qx: double; [[The x component of the imaginary part of the quaternion.]]
|
|
|
|
qy: double; [[The y component of the imaginary part of the quaternion.]]
|
|
|
|
qz: double; [[The z component of the imaginary part of the quaternion.]]
|
|
|
|
qw: double; [[The w component of the real part of the quaternion.]]
|
|
|
|
cx: double; [[Rotation's center x.]]
|
|
|
|
cy: double; [[Rotation's center y.]]
|
|
|
|
cz: double; [[Rotation's center z.]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_lightning_3d {
|
|
|
|
[[Perform lighting calculations on the given Map
|
|
|
|
|
|
|
|
This is used to apply lighting calculations (from a single light source)
|
|
|
|
to a given map. The R, G and B values of each vertex will be modified to
|
|
|
|
reflect the lighting based on the light point coordinates, the light
|
|
|
|
color and the ambient color, and at what angle the map is facing the
|
|
|
|
light source. A surface should have its points be declared in a
|
|
|
|
clockwise fashion if the face is "facing" towards you (as opposed to
|
|
|
|
away from you) as faces have a "logical" side for lighting.
|
|
|
|
]]
|
|
|
|
params {
|
|
|
|
lx: double; [[X coordinate in space of light point.]]
|
|
|
|
ly: double; [[Y coordinate in space of light point.]]
|
|
|
|
lz: double; [[Z coordinate in space of light point.]]
|
2016-11-15 07:04:03 -08:00
|
|
|
lr: int; [[Light red value (0 - 255).]]
|
|
|
|
lg: int; [[Light green value (0 - 255).]]
|
|
|
|
lb: int; [[Light blue value (0 - 255).]]
|
|
|
|
ar: int; [[Ambient color red value (0 - 255).]]
|
|
|
|
ag: int; [[Ambient color green value (0 - 255).]]
|
|
|
|
ab: int; [[Ambient color blue value (0 - 255).]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_perspective_3d {
|
|
|
|
[[Apply a perspective transform to the map
|
|
|
|
|
|
|
|
This applies a given perspective (3D) to the map coordinates. X, Y and Z
|
|
|
|
values are used. The px and py points specify the "infinite distance" point
|
|
|
|
in the 3D conversion (where all lines converge to like when artists draw
|
|
|
|
3D by hand). The $z0 value specifies the z value at which there is a 1:1
|
|
|
|
mapping between spatial coordinates and screen coordinates. Any points
|
|
|
|
on this z value will not have their X and Y values modified in the transform.
|
|
|
|
Those further away (Z value higher) will shrink into the distance, and
|
|
|
|
those less than this value will expand and become bigger. The $foc value
|
|
|
|
determines the "focal length" of the camera. This is in reality the distance
|
|
|
|
between the camera lens plane itself (at or closer than this rendering
|
|
|
|
results are undefined) and the "z0" z value. This allows for some "depth"
|
|
|
|
control and $foc must be greater than 0.
|
|
|
|
]]
|
|
|
|
params {
|
|
|
|
px: double; [[The perspective distance X coordinate]]
|
|
|
|
py: double; [[The perspective distance Y coordinate]]
|
|
|
|
z0: double; [[The "0" z plane value]]
|
|
|
|
foc: double; [[The focal distance]]
|
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
|
|
|
map_dup {
|
|
|
|
[[Duplicate the map information from another object.]]
|
|
|
|
params {
|
2016-11-15 07:04:03 -08:00
|
|
|
other: const(Efl.Gfx.Map); [[Map object to duplicate]]
|
2016-06-27 23:40:41 -07:00
|
|
|
}
|
|
|
|
return: bool; [[$false in case of error.]]
|
|
|
|
}
|
2016-06-27 22:12:17 -07:00
|
|
|
}
|
|
|
|
implements {
|
|
|
|
}
|
|
|
|
}
|
2016-06-27 23:40:41 -07:00
|
|
|
|
|
|
|
|
|
|
|
// Porting notes:
|
|
|
|
|
|
|
|
// Skipped APIs:
|
|
|
|
// evas_map_util_object_move_sync_{set,get}
|