diff options
author | Marvin W <git@larma.de> | 2023-01-24 18:57:04 +0100 |
---|---|---|
committer | Marvin W <git@larma.de> | 2023-01-25 11:02:02 +0100 |
commit | e35df88d4a00c3a34f2b4d9fb7f10bb5d877bd29 (patch) | |
tree | 46ee23485775399b56409aab88755319bfc80a23 /main/src/ui/widgets/natural_size_increase.vala | |
parent | cc7db3b85f7b29bfac333937d8bf09a81d8dc4a5 (diff) | |
download | dino-e35df88d4a00c3a34f2b4d9fb7f10bb5d877bd29.tar.gz dino-e35df88d4a00c3a34f2b4d9fb7f10bb5d877bd29.zip |
Fix UI for libadwaita
Diffstat (limited to 'main/src/ui/widgets/natural_size_increase.vala')
-rw-r--r-- | main/src/ui/widgets/natural_size_increase.vala | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/main/src/ui/widgets/natural_size_increase.vala b/main/src/ui/widgets/natural_size_increase.vala new file mode 100644 index 00000000..2b04d748 --- /dev/null +++ b/main/src/ui/widgets/natural_size_increase.vala @@ -0,0 +1,59 @@ +using Gtk; + +public class Dino.Ui.NaturalSizeIncrease : Gtk.Widget { + public int min_natural_height { get; set; default = -1; } + public int min_natural_width { get; set; default = -1; } + + construct { + this.notify.connect(queue_resize); + } + + public override void measure(Orientation orientation, int for_size, out int minimum, out int natural, out int minimum_baseline, out int natural_baseline) { + minimum = 0; + if (orientation == Orientation.HORIZONTAL) { + natural = min_natural_width; + } else { + natural = min_natural_height; + } + natural = int.max(0, natural); + minimum_baseline = -1; + natural_baseline = -1; + Widget child = get_first_child(); + while (child != null) { + if (child.should_layout()) { + int child_min = 0; + int child_nat = 0; + int child_min_baseline = -1; + int child_nat_baseline = -1; + child.measure(orientation, -1, out child_min, out child_nat, out child_min_baseline, out child_nat_baseline); + minimum = int.max(minimum, child_min); + natural = int.max(natural, child_nat); + if (child_min_baseline > 0) { + minimum_baseline = int.max(minimum_baseline, child_min_baseline); + } + if (child_nat_baseline > 0) { + natural_baseline = int.max(natural_baseline, child_nat_baseline); + } + } + child = child.get_next_sibling(); + } + } + + public override void size_allocate(int width, int height, int baseline) { + Widget child = get_first_child(); + while (child != null) { + if (child.should_layout()) { + child.allocate(width, height, baseline, null); + } + child = child.get_next_sibling(); + } + } + + public override SizeRequestMode get_request_mode() { + Widget child = get_first_child(); + if (child != null) { + return child.get_request_mode(); + } + return SizeRequestMode.CONSTANT_SIZE; + } +}
\ No newline at end of file |