skia2/debugger/QT/SkSettingsWidget.h
kkinnunen 41c79cc0ff debugger: Make settings widget resizeable
The settings widget was laid out by hand, eg. the widths of most
elements were hardcoded. This prevented it from being laid out by the Qt
widget system. This in turn prevents the widget from shrinking to its
optimal size. This in turn causes cascading effect where the geometry of
many of the UI widgets has to be hard-coded. This in turn prevents
proper resizing of the UI.

Make Qt layout the settings widget by following changes:

a) Group settings in QGroupBox groups instead of hand-written
layouts and labels hardcoded in certain places.

b) Remove "Expanding" size policy from settings widget. The widget
calculates its own size based on the widgets inside. Thus "Preferred"
is the correct policy to use, as expanding the widget will not
bring any new content visible.

c) Remove maximum width 250 from Settings widget

d) Make "canvas settings and image layout", eg. the horizontal layout
holding the settings widget divide the space between the picture and
settings like so: settings uses up only as much as it needs (stretch
factor 0), while picture uses up everything else (stretch factor 1).

In order to do a) reasonably, reorganize the UI and the code a bit:

a1) Rename settings group "visual filter" to "Visualizations".
a2) Make "visual filter: on/off" combo box a checkbox in
"Visualizations".
a3) Move "Mega viz" setting checkbox from "raster" (or "render targets")
section to "Visualizations"
a4) Move "PathOps" setting checkbox from "raster" to "Visualizations"

a5) Make Raster and GL checkboxes use QGroupBox checkbox feature

a6) Move "current command", "command hitbox" and "zoom level" from
"Settings" widget to part of "Inspector" concept. These pieces of
information are now visualized as their own box in the right-hand
bar, below settings.

a7) Do not expose settings user selects through the UI widgets
state that record the user interacts with. Instead, expose it as state
of the "settings widget". Thus settings widget provides "raster settings
changed" signal, which the client hook to and then query the state
through the object API.

This makes the full window a bit shorter.

This commit is part of work that tries to make the
debugger window to be a bit more resizeable, so that it would fit
1900x1200 screen.

Review URL: https://codereview.chromium.org/829933002
2014-12-30 22:49:58 -08:00

117 lines
2.4 KiB
C++

/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SKSETTINGSWIDGET_H_
#define SKSETTINGSWIDGET_H_
#include <QWidget>
#include <QHBoxLayout>
#include <QTextEdit>
#include <QFrame>
#include <QGroupBox>
#include <QLabel>
#include <QCheckBox>
#include <QLineEdit>
#include <QComboBox>
#include <QFormLayout>
#include "SkPaint.h"
/** \class SkSettingsWidget
The SettingsWidget contains multiple checkboxes and toggles for altering
the visualizations.
*/
class SkSettingsWidget : public QFrame {
Q_OBJECT
public:
/**
Constructs a widget with the specified parent for layout purposes.
@param parent The parent container of this widget
*/
SkSettingsWidget();
#if SK_SUPPORT_GPU
// GL settings.
bool isGLActive() const {
return fGLGroup.isChecked();
}
int getGLSampleCount() const {
return fGLMSAACombo.itemData(fGLMSAACombo.currentIndex()).toInt();
}
#endif
bool getFilterOverride(SkPaint::FilterLevel* filterLevel) const {
int index = fFilterCombo.currentIndex();
*filterLevel = (SkPaint::FilterLevel)fFilterCombo.itemData(index).toUInt();
return index > 0;
}
// Raster settings.
bool isRasterEnabled() {
return fRasterGroup.isChecked();
}
bool isOverdrawVizEnabled() {
return fOverdrawVizCheckBox.isChecked();
}
// Visualizations.
bool isVisibilityFilterEnabled() const {
return fVisibilityFilterCheckBox.isChecked();
}
bool isMegaVizEnabled() {
return fMegaVizCheckBox.isChecked();
}
bool isPathOpsEnabled() {
return fPathOpsCheckBox.isChecked();
}
private slots:
signals:
void visualizationsChanged();
void texFilterSettingsChanged();
#if SK_SUPPORT_GPU
void glSettingsChanged();
#endif
void rasterSettingsChanged();
private:
QFormLayout fVerticalLayout;
QGroupBox fVisualizationsGroup;
QVBoxLayout fVisualizationsLayout;
QCheckBox fVisibilityFilterCheckBox;
QGroupBox fRasterGroup;
QVBoxLayout fRasterLayout;
QCheckBox fOverdrawVizCheckBox;
QCheckBox fMegaVizCheckBox;
QCheckBox fPathOpsCheckBox;
#if SK_SUPPORT_GPU
QGroupBox fGLGroup;
QFormLayout fGLLayout;
QComboBox fGLMSAACombo;
#endif
QComboBox fFilterCombo;
};
#endif /* SKSETTINGSWIDGET_H_ */