adamdruppe / arsd

This is a collection of modules that I've released over the years. Most of them stand alone, or have just one or two dependencies in here, so you don't have to download this whole repo.
http://arsd-official.dpldocs.info/arsd.html
530 stars 127 forks source link

Unexpectedly huge paddings when wrapping a checkbox inside a blank widget #294

Open WebFreak001 opened 3 years ago

WebFreak001 commented 3 years ago

using wrapped checkbox: grafik

using checkbox: grafik

code:

/+ dub.sdl:
dependency "arsd-official:minigui" version="~>10.1.0"
+/

import arsd.minigui;
import std.conv;
import std.stdio;

void main(string[] args)
{
    auto window = new MainWindow();

    auto layout = new VerticalLayout(window);

    foreach (i; 0 .. 4)
    {
        auto pair = new HorizontalLayout(layout);
        new LineEdit(pair).content = text("Checkbox ", i + 1);
        // new Checkbox("active", pair);
        new WrappedCheckbox(pair, i);
    }

    window.loop();
}

class WrappedCheckbox : Widget
{
    // mixin Padding!"1";

    Checkbox cb;
    int i;

    this(Widget parent, int i)
    {
        super(parent);
        cb = new Checkbox("active", this);
        cb.addEventListener(EventType.change, &this.update);
        this.i = i;
    }

    void update()
    {
        writeln("change ", i, " to ", cb.isChecked);
    }
}

it seems it somehow resizes to fill all space now

adamdruppe commented 3 years ago

The checkbox class has a max height, the widget class does not. so the wrapped one ends up flexing to 25% of the available window.

WebFreak001 commented 3 years ago

while that's logical I think it might be a bit unreasonable to require people to clone widgets exactly with all their properties properly. Would it be possible to make the paddings and other styles changable? My use-case was that I just wanted to give the checkbox a little bit of padding

adamdruppe commented 3 years ago

it isn't padding, it is maxHeight. change that in your wrapper and you'll see the behavior magically change

class YourWidget { override int maxHeight() { return 30; } }

that kind of thing

(I think. haven't tried)

WebFreak001 commented 3 years ago

sorry I think you misunderstood, I wanted to say:

I'm making this wrapper class because I want to add padding.

I don't want to reimplement all the specifics of my padded widget (checkbox -> maxHeight, etc.)

Would it be reasonable to allow users to change margin/padding/etc on layouts if not on widgets?

adamdruppe commented 3 years ago

oh yeah i do want to change the spacing from the parent too, i was thinking about adding that pretty soon as a kind of like grid spacing or something