Esempio n. 1
0
def GetSafeSize(tlw: QW.QWidget, min_size: QC.QSize, gravity) -> QC.QSize:

    min_width = min_size.width()
    min_height = min_size.height()

    frame_padding = tlw.frameGeometry().size() - tlw.size()

    parent = tlw.parentWidget()

    if parent is None:

        width = min_width
        height = min_height

    else:

        parent_window = parent.window()

        # when we initialise, we might not have a frame yet because we haven't done show() yet
        # so borrow main gui's
        if frame_padding.isEmpty():

            main_gui = HG.client_controller.gui

            if main_gui is not None and QP.isValid(
                    main_gui) and not main_gui.isFullScreen():

                frame_padding = main_gui.frameGeometry().size(
                ) - main_gui.size()

        if parent_window.isFullScreen():

            parent_available_size = parent_window.size()

        else:

            parent_frame_size = parent_window.frameGeometry().size()

            parent_available_size = parent_frame_size - frame_padding

        parent_available_width = parent_available_size.width()
        parent_available_height = parent_available_size.height()

        (width_gravity, height_gravity) = gravity

        if width_gravity == -1:

            width = min_width

        else:

            max_width = parent_available_width - (2 * CHILD_POSITION_PADDING)

            width = int(width_gravity * max_width)

        if height_gravity == -1:

            height = min_height

        else:

            max_height = parent_available_height - (2 * CHILD_POSITION_PADDING)

            height = int(height_gravity * max_height)

    display_size = GetDisplaySize(tlw)

    display_available_size = display_size - frame_padding

    width = min(display_available_size.width() - 2 * CHILD_POSITION_PADDING,
                width)
    height = min(display_available_size.height() - 2 * CHILD_POSITION_PADDING,
                 height)

    return QC.QSize(width, height)