Минимальный размер группы FLTK

Можно ли в FLTK (версия 1.4.0) установить минимальный размер для виджета Fl_Group? Либо явно, либо автоматически, чтобы его размер не уменьшался меньше, чем необходимо для отображения всех его дочерних элементов? В классе Fl_Window есть метод size_range, который позволяет задать наименьший размер окна, а в классе Fl_Group такого метода нет.

Если это недоступно, то, возможно, есть какой-то другой способ применить ограничение на то, насколько маленьким может быть виджет группы без окон?

Частично этого можно добиться, используя метод size_range самого верхнего окна, однако, если мы используем Fl_Tile, то каждая плитка не будет иметь никаких ограничений. Да, виджет Fl_Box внутри Fl_Tile может ограничивать минимальные размеры внешних плиток, но это не совсем то, что мне здесь нужно.


person scrutari    schedule 07.03.2021    source источник


Ответы (1)


Вы можете переопределить метод изменения размера виджета Fl_Group. Метод изменения размера запускается автоматически при изменении размера, даже если он не вызывается явно.

#include <FL/Enumerations.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Group.H>
#include <FL/Fl.H>

struct MyGroup : public Fl_Group {
    MyGroup(int x, int y, int w, int h, const char *label = 0): Fl_Group(x, y, w, h, label) {
        box(FL_ENGRAVED_FRAME);
    }
    virtual void resize(int x, int y, int w, int h) override {
        Fl_Group::resize(x, y, w, h);
        if (w < 300 || h < 200) {
            resize(x, y, 300, 200);
        }
        
    }
};

int main() {
    Fl_Double_Window w(400, 300);
    MyGroup g(20, 20, 360, 260);
    w.end();
    w.resizable(&w);
    w.show();
    return Fl::run();
}

Вы заметите, что размер окна можно изменить, и если вы попытаетесь уменьшить его размер, виджет группы уменьшится только до определенной точки.

person xev    schedule 16.03.2021
comment
Спасибо, вместе с size_range для главного окна достигается желаемое поведение. - person scrutari; 16.03.2021