@@ -483,6 +483,56 @@ namespace cycfi::elements
483
483
ctx.bounds .width (_size);
484
484
}
485
485
486
+ // //////////////////////////////////////////////////////////////////////////
487
+ template <concepts::Element Subject>
488
+ class vmax_size_element : public proxy <Subject>
489
+ {
490
+ public:
491
+
492
+ using base_type = proxy<Subject>;
493
+
494
+ vmax_size_element (float size, Subject subject);
495
+
496
+ view_limits limits (basic_context const & ctx) const override ;
497
+ void prepare_subject (context& ctx) override ;
498
+
499
+ void vmax_size (float size) { _size = size; }
500
+ float vmax_size () const { return _size; }
501
+
502
+ private:
503
+
504
+ float _size;
505
+ };
506
+
507
+ template <concepts::Element Subject>
508
+ inline vmax_size_element<Subject>::vmax_size_element(float size, Subject subject)
509
+ : base_type(std::move(subject))
510
+ , _size(size)
511
+ {}
512
+
513
+ template <concepts::Element Subject>
514
+ inline vmax_size_element<remove_cvref_t <Subject>>
515
+ vmax_size (float size, Subject&& subject)
516
+ {
517
+ return {size, std::forward<Subject>(subject)};
518
+ }
519
+
520
+ template <concepts::Element Subject>
521
+ inline view_limits vmax_size_element<Subject>::limits(basic_context const & ctx) const
522
+ {
523
+ auto e_limits = this ->subject ().limits (ctx);
524
+ float size_y = _size;
525
+ clamp (size_y, e_limits.min .y , e_limits.max .y );
526
+ return {{e_limits.min .x , e_limits.min .y }, {size_y, e_limits.max .y }};
527
+ }
528
+
529
+ template <concepts::Element Subject>
530
+ inline void vmax_size_element<Subject>::prepare_subject(context& ctx)
531
+ {
532
+ if (ctx.bounds .height () > _size)
533
+ ctx.bounds .height (_size);
534
+ }
535
+
486
536
// //////////////////////////////////////////////////////////////////////////
487
537
// Stretch elements
488
538
// //////////////////////////////////////////////////////////////////////////
0 commit comments