## -*- mode: tcl ; fill-column: 90 -*-
# # # ## ### ##### ######## ############# #####################
## Transformer -- Change viewport into the image plane

operator op::view {
    section transform

    example {
	butterfly
	@1 port {190 125 380 250}
    }

    example {
	butterfly
	@1 port {-190 -125 380 250}
    }
    example {
	butterfly
	@1 port {80 80 80 80}
    }

    note Returns image arbitrarily offset and sized compared to the input domain. \
	In other words, an arbitrary rectangular view (port) into the input.

    note Beware, the requested area may fall __anywhere__ with respect to the \
	input's domain. Same, inside (subset), outside, partially overlapping, etc.

    note This is useful to add after an application of "<!xref: aktive op transform by>," \
	as a means of focusing on the desired part of the transformation's result.

    input
    rect port  The specific area to view in the plane. \
	A rectangle of the form \{x y w h\}.

    state -setup {
	aktive_geometry_set (domain,
			     param->port.x,
			     param->port.y,
			     param->port.width,
			     param->port.height,
			     aktive_image_get_depth (srcs->v[0]));
    }
    pixels {
	// pass-through operation ...
	// - Requested area passes unchanged to input ...
	// - Returned pixels pass unchanged to caller ...
	//
	// CONSIDER :: A reworked fetch API enabling zero copy full pass-through
	//          :: (full area, requested area, pixel memory)
	//          :: Maybe move aktive_block out of region ? Caller-owned ?
	//          :: ops not passing through => block is standard region state ?!
	//
	// assert: result.used == block.used
	// assert: result.geo  == block.geo

	aktive_blit_copy0 (block, dst, aktive_region_fetch_area (srcs->v[0], request));
    }
}

##
# # ## ### ##### ######## ############# #####################
::return
