@@ -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
877888void 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,
12911306void 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+
13571379QColor DisplayControls::color (const dbTechLayer* layer)
13581380{
13591381 auto it = layer_color_.find (layer);
0 commit comments