aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/util/sizing_bin.vala
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui/util/sizing_bin.vala')
-rw-r--r--main/src/ui/util/sizing_bin.vala38
1 files changed, 20 insertions, 18 deletions
diff --git a/main/src/ui/util/sizing_bin.vala b/main/src/ui/util/sizing_bin.vala
index 9c5ff4c7..939022a1 100644
--- a/main/src/ui/util/sizing_bin.vala
+++ b/main/src/ui/util/sizing_bin.vala
@@ -1,7 +1,7 @@
using Gtk;
namespace Dino.Ui {
-public class SizingBin : Bin {
+public class SizingBin : Widget {
public int min_width { get; set; default = -1; }
public int target_width { get; set; default = -1; }
public int max_width { get; set; default = -1; }
@@ -9,27 +9,29 @@ public class SizingBin : Bin {
public int target_height { get; set; default = -1; }
public int max_height { get; set; default = -1; }
- public override void size_allocate(Allocation allocation) {
- if (max_height != -1) allocation.height = int.min(allocation.height, max_height);
- if (max_width != -1) allocation.width = int.min(allocation.width, max_width);
- base.size_allocate(allocation);
+ construct {
+ layout_manager = new BinLayout();
}
- public override void get_preferred_width(out int minimum_width, out int natural_width) {
- base.get_preferred_width(out minimum_width, out natural_width);
- if (min_width != -1) minimum_width = int.max(minimum_width, min_width);
- if (max_width != -1) natural_width = int.min(natural_width, max_width);
- if (target_width != -1) natural_width = int.max(natural_width, target_width);
- natural_width = int.max(natural_width, minimum_width);
+ public override void size_allocate(int width, int height, int baseline) {
+ if (max_height != -1) height = int.min(height, max_height);
+ if (max_width != -1) width = int.min(width, max_width);
+ base.size_allocate(width, height, baseline);
}
- public override void get_preferred_height_for_width(int width, out int minimum_height, out int natural_height) {
- base.get_preferred_height_for_width(width, out minimum_height, out natural_height);
- if (min_height != -1) minimum_height = int.max(minimum_height, min_height);
- if (max_height != -1) natural_height = int.min(natural_height, max_height);
- if (target_height != -1) natural_height = int.max(natural_height, target_height);
- natural_height = int.max(natural_height, minimum_height);
+ public override void measure(Orientation orientation, int for_size, out int minimum, out int natural, out int minimum_baseline, out int natural_baseline) {
+ base.measure(orientation, for_size, out minimum, out natural, out minimum_baseline, out natural_baseline);
+ if (orientation == Orientation.HORIZONTAL) {
+ if (min_width != -1) minimum = int.max(minimum, min_width);
+ if (max_width != -1) natural = int.min(natural, max_width);
+ if (target_width != -1) natural = int.max(natural, target_width);
+ natural = int.max(natural, minimum);
+ } else {
+ if (min_height != -1) minimum = int.max(minimum, min_height);
+ if (max_height != -1) natural = int.min(natural, max_height);
+ if (target_height != -1) natural = int.max(natural, target_height);
+ natural = int.max(natural, minimum);
+ }
}
-
}
}