Attempting to speed up layer list for many layers

This commit is contained in:
Matthias Koefferlein 2022-12-17 20:34:22 +01:00
parent 884203149a
commit 24b8526361
3 changed files with 26 additions and 12 deletions

View File

@ -239,6 +239,7 @@ const double animation_interval = 0.5;
LayoutViewBase::LayoutViewBase (db::Manager *manager, bool editable, lay::Plugin *plugin_parent, unsigned int options)
: lay::Dispatcher (plugin_parent, false /*not standalone*/),
mp_ui (0),
dm_redraw (this, &LayoutViewBase::redraw),
m_editable (editable),
m_options (options),
m_annotation_shapes (manager)
@ -252,6 +253,7 @@ LayoutViewBase::LayoutViewBase (db::Manager *manager, bool editable, lay::Plugin
LayoutViewBase::LayoutViewBase (lay::LayoutView *ui, db::Manager *manager, bool editable, lay::Plugin *plugin_parent, unsigned int options)
: lay::Dispatcher (plugin_parent, false /*not standalone*/),
mp_ui (ui),
dm_redraw (this, &LayoutViewBase::redraw),
m_editable (editable),
m_options (options),
m_annotation_shapes (manager)
@ -265,6 +267,7 @@ LayoutViewBase::LayoutViewBase (lay::LayoutView *ui, db::Manager *manager, bool
LayoutViewBase::LayoutViewBase (lay::LayoutView *ui, lay::LayoutViewBase *source, db::Manager *manager, bool editable, lay::Plugin *plugin_parent, unsigned int options)
: lay::Dispatcher (plugin_parent, false /*not standalone*/),
mp_ui (ui),
dm_redraw (this, &LayoutViewBase::redraw),
m_editable (editable),
m_options (options),
m_annotation_shapes (manager)
@ -769,7 +772,7 @@ LayoutViewBase::configure (const std::string &name, const std::string &value)
// keep a shadow state to correctly issue the redraw call
m_default_font_size = df;
lay::FixedFont::set_default_font_size (df);
redraw ();
redraw_later ();
}
// do not take - let others have the event for the redraw call
return false;
@ -1814,7 +1817,7 @@ LayoutViewBase::set_properties (unsigned int index, const LayerPropertiesList &p
if (index == current_layer_list ()) {
end_layer_updates ();
layer_list_changed_event (3);
redraw ();
redraw_later ();
m_prop_changed = true;
}
}
@ -1875,7 +1878,7 @@ LayoutViewBase::replace_layer_node (unsigned int index, const LayerPropertiesCon
end_layer_updates ();
layer_list_changed_event (2);
// TODO: check, if redraw is actually necessary (this is complex!)
redraw ();
redraw_later ();
m_prop_changed = true;
}
}
@ -1909,7 +1912,7 @@ LayoutViewBase::set_properties (unsigned int index, const LayerPropertiesConstIt
layer_list_changed_event (1);
if (need_redraw) {
redraw ();
redraw_later ();
}
if (visible_changed) {
@ -1945,7 +1948,7 @@ LayoutViewBase::insert_layer (unsigned int index, const LayerPropertiesConstIter
if (index == current_layer_list ()) {
end_layer_updates ();
layer_list_changed_event (2);
redraw ();
redraw_later ();
m_prop_changed = true;
}
@ -1978,7 +1981,7 @@ LayoutViewBase::delete_layer (unsigned int index, LayerPropertiesConstIterator &
if (index == current_layer_list ()) {
end_layer_updates ();
layer_list_changed_event (2);
redraw ();
redraw_later ();
m_prop_changed = true;
}
@ -2174,7 +2177,7 @@ void
LayoutViewBase::signal_hier_changed ()
{
// schedule a redraw request for all layers
redraw ();
redraw_later ();
// forward this event to our observers
hier_changed_event ();
}
@ -2206,7 +2209,7 @@ void
LayoutViewBase::signal_bboxes_changed ()
{
// schedule a redraw request for all layers
redraw ();
redraw_later ();
// forward this event to our observers
geom_changed_event ();
@ -2216,7 +2219,7 @@ void
LayoutViewBase::signal_cell_name_changed ()
{
cell_visibility_changed_event (); // HINT: that is not what actually is intended, but it serves the function ...
redraw (); // needs redraw
redraw_later (); // needs redraw
}
void
@ -2229,7 +2232,7 @@ LayoutViewBase::signal_layer_properties_changed ()
}
// schedule a redraw request - since the layer views might not have changed, this is necessary
redraw ();
redraw_later ();
}
void
@ -2271,7 +2274,7 @@ LayoutViewBase::finish_cellviews_changed ()
cellviews_changed_event ();
redraw ();
redraw_later ();
}
std::list<lay::CellView>::iterator
@ -3896,6 +3899,12 @@ LayoutViewBase::redraw_deco_layer ()
do_redraw (lay::draw_custom_queue_entry);
}
void
LayoutViewBase::redraw_later ()
{
dm_redraw ();
}
void
LayoutViewBase::redraw ()
{
@ -5463,6 +5472,7 @@ LayoutViewBase::current_pos (double /*x*/, double /*y*/)
void
LayoutViewBase::stop_redraw ()
{
dm_redraw.cancel ();
mp_canvas->stop_redraw ();
}

View File

@ -51,6 +51,7 @@
#include "tlException.h"
#include "tlEvents.h"
#include "tlTimer.h"
#include "tlDeferredExecution.h"
#include "dbInstElement.h"
namespace rdb {
@ -2650,6 +2651,7 @@ public:
// called by children and owner
void redraw ();
void redraw_later ();
void redraw_layer (unsigned int index);
void redraw_deco_layer ();
void redraw_cell_boxes ();
@ -2700,6 +2702,7 @@ private:
private:
lay::LayoutView *mp_ui;
tl::DeferredMethod<lay::LayoutViewBase> dm_redraw;
bool m_editable;
int m_disabled_edits;
unsigned int m_options;

View File

@ -70,6 +70,7 @@ LCPTreeWidget::LCPTreeWidget (QWidget *parent, lay::LayerTreeModel *model, const
{
setObjectName (QString::fromUtf8 (name));
setModel (model);
setUniformRowHeights (true);
#if QT_VERSION >= 0x040200
setAllColumnsShowFocus (true);
#endif
@ -1702,7 +1703,7 @@ LayerControlPanel::cancel_updates ()
void
LayerControlPanel::end_updates ()
{
do_update_content ();
m_do_update_content_dm ();
}
void