1
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#include "SkSettingsWidget.h"
11#include <iostream>
12#include <math.h>
13
14// TODO(chudy): See if the layout can't be attached to the frame post construction.
15SkSettingsWidget::SkSettingsWidget() : QWidget()
16    , mainFrameLayout(this)
17    , fVerticalLayout(&mainFrame)
18    , fVisibleFrameLayout(&fVisibleFrame)
19    , fCommandLayout(&fCommandFrame)
20    , fCurrentCommandBox(&fCommandFrame)
21    , fCommandHitBox(&fCommandFrame)
22    , fCanvasLayout(&fCanvasFrame)
23    , fZoomLayout(&fZoomFrame)
24    , fZoomBox(&fZoomFrame)
25{
26    // Sets up the container and it's alignment around the settings widget.
27    mainFrame.setFrameShape(QFrame::StyledPanel);
28    mainFrame.setFrameShadow(QFrame::Raised);
29    mainFrameLayout.setSpacing(6);
30    mainFrameLayout.setContentsMargins(0,0,0,0);
31    mainFrameLayout.addWidget(&mainFrame);
32
33    // Vertical Layout is the alignment inside of the main frame.
34    fVerticalLayout.setContentsMargins(11,11,11,11);
35    fVerticalLayout.setAlignment(Qt::AlignTop);
36
37    // Visible Toggle
38    fVisibleText.setText("Visibility Filter");
39    fVisibleFrame.setFrameShape(QFrame::StyledPanel);
40    fVisibleFrame.setFrameShadow(QFrame::Raised);
41
42    fVisibilityCombo.addItem("Off", QVariant(false));
43    fVisibilityCombo.addItem("On", QVariant(true));
44
45    fVisibleFrameLayout.setContentsMargins(11, 5, 11, 5);
46    fVisibleFrameLayout.addWidget(&fVisibilityCombo);
47    connect(&fVisibilityCombo, SIGNAL(activated(int)), this,
48            SIGNAL(visibilityFilterChanged()));
49
50    // Canvas
51    fCanvasToggle.setText("Render Targets");
52    fCanvasFrame.setFrameShape(QFrame::StyledPanel);
53    fCanvasFrame.setFrameShadow(QFrame::Raised);
54
55    fRasterLabel.setText("Raster: ");
56    fRasterLabel.setMinimumWidth(178);
57    fRasterLabel.setMaximumWidth(178);
58
59    fPathOpsLabel.setText("PathOps: ");
60    fPathOpsLabel.setMinimumWidth(178);
61    fPathOpsLabel.setMaximumWidth(178);
62
63    fRasterCheckBox.setChecked(true);
64
65    fOverdrawVizLabel.setText("     Overdraw Viz: ");
66    fOverdrawVizLabel.setMinimumWidth(178);
67    fOverdrawVizLabel.setMaximumWidth(178);
68
69    fMegaVizLabel.setText("         Mega Viz: ");
70    fMegaVizLabel.setMinimumWidth(178);
71    fMegaVizLabel.setMaximumWidth(178);
72
73#if SK_SUPPORT_GPU
74    fGLLabel.setText("OpenGL: ");
75    fGLLabel.setMinimumWidth(178);
76    fGLLabel.setMaximumWidth(178);
77
78    fGLMSAAButtonGroup.setTitle("MSAA");
79    fGLMSAAButtonGroup.setMinimumWidth(178);
80    fGLMSAAButtonGroup.setMaximumWidth(178);
81    fGLMSAAButtonGroup.setEnabled(fGLCheckBox.isChecked());
82
83    fGLMSAACombo.addItem("Off", QVariant(0));
84    fGLMSAACombo.addItem("4", QVariant(4));
85    fGLMSAACombo.addItem("16", QVariant(16));
86
87    fGLMSAALayout.addWidget(&fGLMSAACombo);
88    fGLMSAAButtonGroup.setLayout(&fGLMSAALayout);
89
90    connect(&fGLCheckBox, SIGNAL(toggled(bool)), &fGLMSAAButtonGroup,
91            SLOT(setEnabled(bool)));
92    connect(&fGLCheckBox, SIGNAL(toggled(bool)), this,
93            SIGNAL(glSettingsChanged()));
94    connect(&fGLMSAACombo, SIGNAL(activated(int)), this,
95            SIGNAL(glSettingsChanged()));
96#endif
97
98    {
99        // set up filter buttons
100        fFilterButtonGroup.setTitle("Filtering");
101        fFilterButtonGroup.setMinimumWidth(178);
102        fFilterButtonGroup.setMaximumWidth(178);
103
104        fFilterCombo.addItem("As encoded", QVariant(SkPaint::kNone_FilterLevel));
105        fFilterCombo.addItem("None", QVariant(SkPaint::kNone_FilterLevel));
106        fFilterCombo.addItem("Low", QVariant(SkPaint::kLow_FilterLevel));
107        fFilterCombo.addItem("Medium", QVariant(SkPaint::kMedium_FilterLevel));
108        fFilterCombo.addItem("High", QVariant(SkPaint::kHigh_FilterLevel));
109
110        fFilterLayout.addWidget(&fFilterCombo);
111        fFilterButtonGroup.setLayout(&fFilterLayout);
112
113        connect(&fFilterCombo, SIGNAL(activated(int)), this,
114                SIGNAL(texFilterSettingsChanged()));
115    }
116
117    fRasterLayout.addWidget(&fRasterLabel);
118    fRasterLayout.addWidget(&fRasterCheckBox);
119    fRasterLayout.addWidget(&fPathOpsLabel);
120    fRasterLayout.addWidget(&fPathOpsCheckBox);
121
122    fVizLayout.addWidget(&fOverdrawVizLabel);
123    fVizLayout.addWidget(&fOverdrawVizCheckBox);
124    fVizLayout.addWidget(&fMegaVizLabel);
125    fVizLayout.addWidget(&fMegaVizCheckBox);
126
127#if SK_SUPPORT_GPU
128    fGLLayout.addWidget(&fGLLabel);
129    fGLLayout.addWidget(&fGLCheckBox);
130#endif
131
132    fCanvasLayout.setSpacing(6);
133    fCanvasLayout.setContentsMargins(11,11,11,11);
134    fCanvasLayout.addLayout(&fRasterLayout);
135    fCanvasLayout.addLayout(&fVizLayout);
136#if SK_SUPPORT_GPU
137    fCanvasLayout.addLayout(&fGLLayout);
138    fCanvasLayout.addWidget(&fGLMSAAButtonGroup);
139#endif
140    fCanvasLayout.addWidget(&fFilterButtonGroup);
141
142    // Command Toggle
143    fCommandToggle.setText("Command Scrolling Preferences");
144    fCommandFrame.setFrameShape(QFrame::StyledPanel);
145    fCommandFrame.setFrameShadow(QFrame::Raised);
146
147    fCurrentCommandLabel.setText("Current Command: ");
148    fCurrentCommandLabel.setMinimumWidth(178);
149    fCurrentCommandLabel.setMaximumWidth(178);
150    fCurrentCommandBox.setText("0");
151    fCurrentCommandBox.setMinimumSize(QSize(50,25));
152    fCurrentCommandBox.setMaximumSize(QSize(50,25));
153    fCurrentCommandBox.setAlignment(Qt::AlignRight);
154
155    fCurrentCommandLayout.setSpacing(0);
156    fCurrentCommandLayout.setContentsMargins(0,0,0,0);
157    fCurrentCommandLayout.setAlignment(Qt::AlignLeft);
158    fCurrentCommandLayout.addWidget(&fCurrentCommandLabel);
159    fCurrentCommandLayout.addWidget(&fCurrentCommandBox);
160
161    fCommandHitLabel.setText("Command HitBox: ");
162    fCommandHitLabel.setMinimumWidth(178);
163    fCommandHitLabel.setMaximumWidth(178);
164    fCommandHitBox.setText("0");
165    fCommandHitBox.setMinimumSize(QSize(50,25));
166    fCommandHitBox.setMaximumSize(QSize(50,25));
167    fCommandHitBox.setAlignment(Qt::AlignRight);
168    fCommandHitLayout.setSpacing(0);
169    fCommandHitLayout.setContentsMargins(0,0,0,0);
170    fCommandHitLayout.setAlignment(Qt::AlignLeft);
171    fCommandHitLayout.addWidget(&fCommandHitLabel);
172    fCommandHitLayout.addWidget(&fCommandHitBox);
173
174    fCommandLayout.setSpacing(6);
175    fCommandLayout.setContentsMargins(11,11,11,11);
176    fCommandLayout.addLayout(&fCurrentCommandLayout);
177    fCommandLayout.addLayout(&fCommandHitLayout);
178
179    // Zoom Info
180    fZoomSetting.setText("Zoom Level: ");
181    fZoomSetting.setMinimumWidth(178);
182    fZoomSetting.setMaximumWidth(178);
183    fZoomFrame.setFrameShape(QFrame::StyledPanel);
184    fZoomFrame.setFrameShadow(QFrame::Raised);
185    fZoomBox.setText("100%");
186    fZoomBox.setMinimumSize(QSize(50,25));
187    fZoomBox.setMaximumSize(QSize(50,25));
188    fZoomBox.setAlignment(Qt::AlignRight);
189    fZoomLayout.setSpacing(6);
190    fZoomLayout.setContentsMargins(11,11,11,11);
191    fZoomLayout.addWidget(&fZoomSetting);
192    fZoomLayout.addWidget(&fZoomBox);
193
194    // Adds all widgets to settings container
195    fVerticalLayout.addWidget(&fVisibleText);
196    fVerticalLayout.addWidget(&fVisibleFrame);
197    fVerticalLayout.addWidget(&fCommandToggle);
198    fVerticalLayout.addWidget(&fCommandFrame);
199    fVerticalLayout.addWidget(&fCanvasToggle);
200    fVerticalLayout.addWidget(&fCanvasFrame);
201    fVerticalLayout.addWidget(&fZoomFrame);
202
203    this->setDisabled(true);
204}
205
206
207void SkSettingsWidget::updateCommand(int newCommand) {
208    fCurrentCommandBox.setText(QString::number(newCommand));
209}
210
211void SkSettingsWidget::updateHit(int newHit) {
212    fCommandHitBox.setText(QString::number(newHit));
213}
214
215void SkSettingsWidget::setZoomText(float scale) {
216    fZoomBox.setText(QString::number(scale*100, 'f', 0).append("%"));
217}
218