[libcamera-devel] [PATCH] qcam: Decrease minimum width of selector dialog

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Mar 6 11:20:29 CET 2023


On Mon, Mar 06, 2023 at 12:07:47PM +0200, Laurent Pinchart via libcamera-devel wrote:
> On Mon, Jan 30, 2023 at 06:58:29PM +0100, Luca Weiss via libcamera-devel wrote:
> > On Montag, 30. Jänner 2023 15:11:16 CET Kieran Bingham wrote:
> > > Quoting Luca Weiss via libcamera-devel (2023-01-28 16:24:03)
> > > 
> > > > On phone screens the default width is too wide, so the OK button cannot
> > > > be clicked.
> > > > 
> > > > Fix this by decreasing the minimum size of the dialog so it fits nicely.
> > > > 
> > > > Signed-off-by: Luca Weiss <luca at z3ntu.xyz>
> > > > ---
> > > > 
> > > >  src/apps/qcam/cam_select_dialog.cpp | 3 +++
> > > >  1 file changed, 3 insertions(+)
> > > > 
> > > > diff --git a/src/apps/qcam/cam_select_dialog.cpp
> > > > b/src/apps/qcam/cam_select_dialog.cpp index 3c8b12a9..2a600383 100644
> > > > --- a/src/apps/qcam/cam_select_dialog.cpp
> > > > +++ b/src/apps/qcam/cam_select_dialog.cpp
> > > > @@ -25,6 +25,9 @@
> > > > CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager
> > > > *cameraManag> 
> > > >         /* Use a QFormLayout for the dialog. */
> > > >         QFormLayout *layout = new QFormLayout(this);
> > > > 
> > > > +       /* Decrease minimum width of dialog to fit on narrow screens */
> > > > +       setMinimumSize(250, 100);
> > > > +
> > > 
> > > This looks reasonable, and when applying here - it doesn't break my
> > > view, but my screen is large.
> > > 
> > > Is there any way to reproduce this issue otherwise? I suspect not easily
> > > without getting a small screen. But to me this is ok.
> > 
> > Not really I think because the window manager prohibits resizing the window 
> > below the minimum size. Perhaps setting some insane scaling (if the window 
> > manager allows this) so everything's just super big.
> > 
> > From what I could tell the minimum size gets set as the size the combobox 
> > takes up which can be quite a big with a long identification string as happens 
> > on ARM which includes the path to the dt node.
> 
> By default the minimum size will be set by the dialog box's QLayout,
> which indeed should size it based on the largest element. We could
> reduce the minimum size of the combo box, but I don't think that's
> better than changing the dialog's minimum size.
> 
> Do we need to reduce both the minimum width and height, or could we
> avoid touching the height ? Also, would it make sense to only lower the
> minimum size on small screens ? You can get the desktop's geometry from
> the QDesktopWidget class (accessible from QApplication::desktop()), see
> [1]. We could then compare it with the layout's minimum size, and only
> set a manual minimum size when the desktop's geometry is small.

QApplication::desktop() seems deprecated, and replaced with
primaryScreen(). The following code is what I have in mind.

diff --git a/src/apps/qcam/cam_select_dialog.cpp b/src/apps/qcam/cam_select_dialog.cpp
index 3c8b12a9c174..750e5f5df682 100644
--- a/src/apps/qcam/cam_select_dialog.cpp
+++ b/src/apps/qcam/cam_select_dialog.cpp
@@ -15,7 +15,9 @@
 #include <QComboBox>
 #include <QDialogButtonBox>
 #include <QFormLayout>
+#include <QGuiApplication>
 #include <QLabel>
+#include <QScreen>
 #include <QString>

 CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManager,
@@ -53,6 +55,14 @@ CameraSelectorDialog::CameraSelectorDialog(libcamera::CameraManager *cameraManag
 	layout->addRow("Location:", cameraLocation_);
 	layout->addRow("Model:", cameraModel_);
 	layout->addWidget(buttonBox);
+
+	/*
+	 * Decrease the minimum width of dialog to fit on narrow screens, with a
+	 * 20 pixels margin.
+	 */
+	QRect screenGeometry = qGuiApp->primaryScreen()->availableGeometry();
+	if (screenGeometry.width() < minimumWidth())
+		setMinimumWidth(screenGeometry.width() - 20);
 }

 CameraSelectorDialog::~CameraSelectorDialog() = default;

> [1] https://doc.qt.io/qt-5/qdesktopwidget.html#availableGeometry
> 
> > But if you want I can also send you screenshots from the phone where I tested 
> > this.
> 
> A screenshot that demonstrates the problem would be nice.
> 
> > > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > > 
> > > >         /* Setup the camera id combo-box. */
> > > >         cameraIdComboBox_ = new QComboBox;
> > > >         for (const auto &cam : cm_->cameras())

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list