Skip to content

Commit 4597d96

Browse files
committed
gui: add background controls to display controls
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
1 parent 9d59854 commit 4597d96

8 files changed

Lines changed: 72 additions & 23 deletions

File tree

src/gui/src/displayControls.cpp

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ DisplayControls::DisplayControls(QWidget* parent)
489489

490490
region_color_ = QColor(0x70, 0x70, 0x70, 0x70); // semi-transparent mid-gray
491491
region_pattern_ = Qt::SolidPattern;
492+
background_color_ = Qt::black;
492493
makeLeafItem(misc_.scale_bar, "Scale bar", misc, Qt::Checked);
493494
makeLeafItem(misc_.access_points, "Access points", misc, Qt::Unchecked);
494495
makeLeafItem(
@@ -499,6 +500,8 @@ DisplayControls::DisplayControls(QWidget* parent)
499500
makeLeafItem(
500501
misc_.manufacturing_grid, "Manufacturing grid", misc, Qt::Unchecked);
501502
makeLeafItem(misc_.gcell_grid, "GCell grid", misc, Qt::Unchecked);
503+
makeLeafItem(
504+
misc_.background, "Background", misc, {}, false, background_color_);
502505
toggleParent(misc_group_);
503506

504507
checkLiberty();
@@ -523,6 +526,8 @@ DisplayControls::DisplayControls(QWidget* parent)
523526
this,
524527
&DisplayControls::itemContextMenu);
525528

529+
connect(
530+
this, &DisplayControls::colorChanged, this, &DisplayControls::changed);
526531
// register renderers
527532
if (gui::Gui::get() != nullptr) {
528533
for (auto renderer : gui::Gui::get()->renderers()) {
@@ -604,7 +609,9 @@ void DisplayControls::writeSettingsForRow(QSettings* settings,
604609
name->child(r, Selectable));
605610
}
606611
} else {
607-
settings->setValue("visible", asBool(visible));
612+
if (visible != nullptr) {
613+
settings->setValue("visible", asBool(visible));
614+
}
608615
if (selectable != nullptr) {
609616
settings->setValue("selectable", asBool(selectable));
610617
}
@@ -643,7 +650,9 @@ void DisplayControls::readSettingsForRow(QSettings* settings,
643650
name->child(r, Selectable));
644651
}
645652
} else {
646-
visible->setCheckState(getChecked(settings, "visible", visible));
653+
if (visible != nullptr) {
654+
visible->setCheckState(getChecked(settings, "visible", visible));
655+
}
647656
if (selectable != nullptr) {
648657
selectable->setCheckState(getChecked(settings, "selectable", selectable));
649658
}
@@ -680,6 +689,7 @@ void DisplayControls::readSettings(QSettings* settings)
680689

681690
settings->beginGroup("other");
682691
settings->beginGroup("color");
692+
getColor(misc_.background, background_color_, "background");
683693
getColor(
684694
blockages_.blockages, placement_blockage_color_, "blockages_placement");
685695
getColor(rulers_, ruler_color_, "ruler");
@@ -753,6 +763,7 @@ void DisplayControls::writeSettings(QSettings* settings)
753763

754764
settings->beginGroup("other");
755765
settings->beginGroup("color");
766+
settings->setValue("background", background_color_);
756767
settings->setValue("blockages_placement", placement_blockage_color_);
757768
settings->setValue("ruler", ruler_color_);
758769
settings->setValue("instance_name", instance_name_color_);
@@ -876,7 +887,9 @@ void DisplayControls::toggleParent(const QStandardItem* parent,
876887

877888
void DisplayControls::toggleParent(ModelRow& row)
878889
{
879-
toggleParent(row.name, row.visible, Visible);
890+
if (row.visible != nullptr) {
891+
toggleParent(row.name, row.visible, Visible);
892+
}
880893
if (row.selectable != nullptr) {
881894
toggleParent(row.name, row.selectable, Selectable);
882895
}
@@ -1001,7 +1014,9 @@ void DisplayControls::displayItemDblClicked(const QModelIndex& index)
10011014
bool has_sibling = false;
10021015

10031016
// check if placement
1004-
if (color_item == blockages_.blockages.swatch) {
1017+
if (color_item == misc_.background.swatch) {
1018+
item_color = &background_color_;
1019+
} else if (color_item == blockages_.blockages.swatch) {
10051020
item_color = &placement_blockage_color_;
10061021
item_pattern = &placement_blockage_pattern_;
10071022
} else if (color_item == misc_.regions.swatch) {
@@ -1065,7 +1080,7 @@ void DisplayControls::displayItemDblClicked(const QModelIndex& index)
10651080
*item_pattern = display_dialog->getSelectedPattern();
10661081
}
10671082
view_->repaint();
1068-
emit changed();
1083+
emit colorChanged();
10691084
}
10701085
}
10711086
}
@@ -1291,7 +1306,7 @@ QStandardItem* DisplayControls::makeParentItem(ModelRow& row,
12911306
void DisplayControls::makeLeafItem(ModelRow& row,
12921307
const QString& text,
12931308
QStandardItem* parent,
1294-
Qt::CheckState checked,
1309+
std::optional<Qt::CheckState> checked,
12951310
bool add_selectable,
12961311
const QColor& color,
12971312
const QVariant& user_data)
@@ -1309,16 +1324,18 @@ void DisplayControls::makeLeafItem(ModelRow& row,
13091324
row.swatch->setData(user_data, user_data_item_idx_);
13101325
}
13111326

1312-
row.visible = new QStandardItem("");
1313-
row.visible->setCheckable(true);
1314-
row.visible->setEditable(false);
1315-
row.visible->setCheckState(checked);
1327+
if (checked.has_value()) {
1328+
row.visible = new QStandardItem("");
1329+
row.visible->setCheckable(true);
1330+
row.visible->setEditable(false);
1331+
row.visible->setCheckState(checked.value());
1332+
}
13161333

13171334
if (add_selectable) {
13181335
row.selectable = new QStandardItem("");
13191336
row.selectable->setCheckable(true);
13201337
row.selectable->setEditable(false);
1321-
row.selectable->setCheckState(checked);
1338+
row.selectable->setCheckState(checked.value_or(Qt::Unchecked));
13221339
}
13231340

13241341
parent->appendRow({row.name, row.swatch, row.visible, row.selectable});
@@ -1354,6 +1371,11 @@ QIcon DisplayControls::makeSwatchIcon(const QColor& color)
13541371
return QIcon(swatch);
13551372
}
13561373

1374+
QColor DisplayControls::background()
1375+
{
1376+
return background_color_;
1377+
}
1378+
13571379
QColor DisplayControls::color(const dbTechLayer* layer)
13581380
{
13591381
auto it = layer_color_.find(layer);

src/gui/src/displayControls.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <QVBoxLayout>
2121
#include <functional>
2222
#include <map>
23+
#include <optional>
2324
#include <set>
2425
#include <string>
2526
#include <vector>
@@ -166,6 +167,7 @@ class DisplayControls : public QDockWidget,
166167
void restoreTclCommands(std::vector<std::string>& cmds);
167168

168169
// From the Options API
170+
QColor background() override;
169171
QColor color(const odb::dbTechLayer* layer) override;
170172
Qt::BrushStyle pattern(const odb::dbTechLayer* layer) override;
171173
QColor placementBlockageColor() override;
@@ -236,6 +238,7 @@ class DisplayControls : public QDockWidget,
236238
signals:
237239
// The display options have changed and clients need to update
238240
void changed();
241+
void colorChanged();
239242

240243
// Emit a selected tech layer
241244
void selected(const Selected& selected);
@@ -368,6 +371,7 @@ class DisplayControls : public QDockWidget,
368371
ModelRow module;
369372
ModelRow manufacturing_grid;
370373
ModelRow gcell_grid;
374+
ModelRow background;
371375
};
372376

373377
struct InstanceShapeModels
@@ -415,7 +419,7 @@ class DisplayControls : public QDockWidget,
415419
void makeLeafItem(ModelRow& row,
416420
const QString& text,
417421
QStandardItem* parent,
418-
Qt::CheckState checked,
422+
std::optional<Qt::CheckState> checked,
419423
bool add_selectable = false,
420424
const QColor& color = Qt::transparent,
421425
const QVariant& user_data = QVariant());
@@ -530,6 +534,8 @@ class DisplayControls : public QDockWidget,
530534

531535
std::map<const odb::dbSite*, QColor> site_color_;
532536

537+
QColor background_color_;
538+
533539
QColor placement_blockage_color_;
534540
Qt::BrushStyle placement_blockage_pattern_;
535541

src/gui/src/layoutTabs.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ LayoutTabs::LayoutTabs(Options* options,
4343
connect(this, &QTabWidget::currentChanged, this, &LayoutTabs::tabChange);
4444
}
4545

46+
void LayoutTabs::updateBackgroundColors()
47+
{
48+
for (LayoutViewer* viewer : viewers_) {
49+
updateBackgroundColor(viewer);
50+
viewer->fullRepaint();
51+
}
52+
}
53+
54+
void LayoutTabs::updateBackgroundColor(LayoutViewer* viewer)
55+
{
56+
QPalette palette;
57+
palette.setColor(QPalette::Window, options_->background());
58+
viewer->setPalette(palette);
59+
viewer->setAutoFillBackground(true);
60+
}
61+
4662
void LayoutTabs::blockLoaded(odb::dbBlock* block)
4763
{
4864
// Check if we already have a tab for this block
@@ -80,12 +96,7 @@ void LayoutTabs::blockLoaded(odb::dbBlock* block)
8096
const auto name = fmt::format("{} ({})", block->getName(), tech->getName());
8197
addTab(scroll, name.c_str());
8298

83-
// This has to be done after addTab. For unexplained reasons it
84-
// doesn't work for all users if done in LayoutViewer::LayoutViewer.
85-
QPalette palette;
86-
palette.setColor(QPalette::Window, LayoutViewer::background());
87-
viewer->setPalette(palette);
88-
viewer->setAutoFillBackground(true);
99+
updateBackgroundColor(viewer);
89100

90101
// forward signals from the viewer upward
91102
connect(viewer, &LayoutViewer::location, this, &LayoutTabs::location);

src/gui/src/layoutTabs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class LayoutTabs : public QTabWidget
7777

7878
public slots:
7979
void tabChange(int index);
80+
void updateBackgroundColors();
81+
void updateBackgroundColor(LayoutViewer* viewer);
8082

8183
// These are just forwarding to the current LayoutViewer
8284
void zoomIn();

src/gui/src/layoutViewer.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,10 +1733,15 @@ void LayoutViewer::updatePixmap(const QImage& image, const QRect& bounds)
17331733
void LayoutViewer::drawLoadingIndicator(QPainter* painter, const QRect& bounds)
17341734
{
17351735
const QRect background = computeIndicatorBackground(painter, bounds);
1736+
const QColor background_color = options_->background();
17361737

1737-
painter->fillRect(background, Qt::black); // to help visualize
1738+
painter->fillRect(background, background_color); // to help visualize
17381739

1739-
painter->setPen(QPen(Qt::white, 2));
1740+
const QColor text_color(255 - background_color.red(),
1741+
255 - background_color.green(),
1742+
255 - background_color.blue());
1743+
1744+
painter->setPen(QPen(text_color, 2));
17401745
painter->drawText(background.left(),
17411746
background.bottom(),
17421747
QString::fromStdString(loading_indicator_));
@@ -2096,7 +2101,7 @@ void LayoutViewer::saveImage(const QString& filepath,
20962101
highlighted_,
20972102
rulers_,
20982103
render_ratio,
2099-
background());
2104+
options_->background());
21002105
pixels_per_dbu_ = old_pixels_per_dbu;
21012106

21022107
if (!img.save(save_filepath)) {

src/gui/src/layoutViewer.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,6 @@ class LayoutViewer : public QWidget
254254
void commandFinishedExecuting();
255255
void executionPaused();
256256

257-
static QColor background() { return Qt::black; }
258-
259257
private slots:
260258
void setBlock(odb::dbBlock* block);
261259
void updatePixmap(const QImage& image, const QRect& bounds);

src/gui/src/mainWindow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ MainWindow::MainWindow(bool load_settings, QWidget* parent)
150150
&LayoutTabs::executionPaused);
151151
connect(
152152
controls_, &DisplayControls::changed, viewers_, &LayoutTabs::fullRepaint);
153+
connect(controls_,
154+
&DisplayControls::colorChanged,
155+
viewers_,
156+
&LayoutTabs::updateBackgroundColors);
153157
connect(controls_,
154158
&DisplayControls::changed,
155159
hierarchy_widget_,

src/gui/src/options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class Options
2121
{
2222
public:
2323
virtual ~Options() {}
24+
virtual QColor background() = 0;
2425
virtual QColor color(const odb::dbTechLayer* layer) = 0;
2526
virtual Qt::BrushStyle pattern(const odb::dbTechLayer* layer) = 0;
2627
virtual QColor placementBlockageColor() = 0;

0 commit comments

Comments
 (0)