49 _scissor_rectangle(scissor_rectangle),
50 _flat_vertices(&flatVertices),
51 _box_vertices(&boxVertices),
52 _image_vertices(&imageVertices),
53 _sdf_vertices(&sdfVertices),
54 _clipping_rectangle(window.
extent)
56 _flat_vertices->clear();
57 _box_vertices->clear();
58 _image_vertices->clear();
59 _sdf_vertices->clear();
65 auto new_context = *
this;
66 new_context._scissor_rectangle =
aarectangle{parent_to_local * this->_scissor_rectangle};
67 new_context._clipping_rectangle = clipping_rectangle;
68 new_context._transform = local_to_window;
72 [[nodiscard]]
aarectangle clipping_rectangle()
const noexcept
74 return _clipping_rectangle;
77 void set_clipping_rectangle(
aarectangle clipping_rectangle)
noexcept
79 _clipping_rectangle = clipping_rectangle;
82 [[nodiscard]]
matrix3 transform()
const noexcept
95 auto device = window().device();
109 tt_axiom(_flat_vertices !=
nullptr);
110 _flat_vertices->emplace_back(
aarectangle{_transform * _clipping_rectangle}, _transform * p1, fill_color);
111 _flat_vertices->emplace_back(
aarectangle{_transform * _clipping_rectangle}, _transform * p2, fill_color);
112 _flat_vertices->emplace_back(
aarectangle{_transform * _clipping_rectangle}, _transform * p3, fill_color);
113 _flat_vertices->emplace_back(
aarectangle{_transform * _clipping_rectangle}, _transform * p4, fill_color);
143 float line_width = 1.0,
146 tt_axiom(_box_vertices !=
nullptr);
148 pipeline_box::device_shared::place_vertices(
160 draw_box(box, fill_color, line_color, 1.0, corner_shapes);
165 draw_box(box, fill_color, fill_color, 0.0, corner_shapes);
187 float line_width = 1.0,
190 tt_axiom(_box_vertices !=
nullptr);
192 ttlet shrink_value = line_width * 0.5f;
194 ttlet new_rectangle = shrink(
rectangle, shrink_value);
198 pipeline_box::device_shared::place_vertices(
201 _transform * new_rectangle,
236 float line_width = 1.0,
239 tt_axiom(_box_vertices !=
nullptr);
241 ttlet expand_value = line_width * 0.5f;
243 ttlet new_rectangle = expand(
rectangle, expand_value);
247 pipeline_box::device_shared::place_vertices(
250 _transform * new_rectangle,
271 tt_axiom(_image_vertices !=
nullptr);
273 image.place_vertices(*_image_vertices,
aarectangle{_transform * _clipping_rectangle}, _transform * image_transform);
288 tt_axiom(_sdf_vertices !=
nullptr);
291 narrow_cast<gui_device_vulkan &>(device()).SDFPipeline->place_vertices(
292 *_sdf_vertices, aarectangle{_transform * _clipping_rectangle}, _transform *
transform, text, *text_color);
294 narrow_cast<gui_device_vulkan &>(device()).SDFPipeline->place_vertices(
295 *_sdf_vertices, aarectangle{_transform * _clipping_rectangle}, _transform *
transform, text);
299 void draw_glyph(font_glyph_ids
const &glyph, rectangle box, color text_color)
const noexcept
301 tt_axiom(_sdf_vertices !=
nullptr);
303 narrow_cast<gui_device_vulkan &>(device()).SDFPipeline->place_vertices(
304 *_sdf_vertices, aarectangle{_transform * _clipping_rectangle}, _transform * box, glyph, text_color);
307 [[nodiscard]]
friend bool overlaps(draw_context
const &context, aarectangle
const &rectangle)
noexcept
309 return overlaps(context._scissor_rectangle, rectangle);
315 vspan<pipeline_flat::vertex> *_flat_vertices;
316 vspan<pipeline_box::vertex> *_box_vertices;
317 vspan<pipeline_image::vertex> *_image_vertices;
318 vspan<pipeline_SDF::vertex> *_sdf_vertices;
323 aarectangle _scissor_rectangle;
328 aarectangle _clipping_rectangle;
334 matrix3 _transform = geo::identity{};
void draw_filled_quad(point3 p1, point3 p2, point3 p3, point3 p4, color fill_color) const noexcept
Draw a polygon with four corners of one color.
Definition draw_context.hpp:107
void draw_box_with_border_inside(rectangle rectangle, color fill_color, color line_color, float line_width=1.0, tt::corner_shapes corner_shapes=tt::corner_shapes{}) const noexcept
Draw an axis aligned box This function will shrink to include the size of the border inside the given...
Definition draw_context.hpp:183
void draw_box_with_border_outside(rectangle rectangle, color fill_color, color line_color, float line_width=1.0, tt::corner_shapes corner_shapes=tt::corner_shapes{}) const noexcept
Draw an axis aligned box This function will expand to include the size of the border outside the give...
Definition draw_context.hpp:232
void draw_image(pipeline_image::Image &image, matrix3 image_transform) const noexcept
Draw an image This function will draw an image.
Definition draw_context.hpp:269
void draw_box(rectangle box, color fill_color, color line_color, float line_width=1.0, tt::corner_shapes corner_shapes=tt::corner_shapes{}) const noexcept
Draw an axis aligned box This function will draw the given box.
Definition draw_context.hpp:139