From cd69f29508f81470af5dd9db1cb85e1c8a52c37a Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 3 Aug 2024 09:55:59 +0200 Subject: [PATCH] Basic feature implemented. Needs improvement. --- src/laybasic/laybasic/layLayoutCanvas.cc | 17 +++++++--- src/laybasic/laybasic/layLayoutCanvas.h | 14 ++++++++ src/laybasic/laybasic/layLayoutViewBase.cc | 7 ++++ src/laybasic/laybasic/layLayoutViewConfig.cc | 1 + src/laybasic/laybasic/laybasicConfig.h | 1 + src/layui/layui/LayoutViewConfigPage7.ui | 34 +++++++++++++------- src/layui/layui/layLayerControlPanel.cc | 20 ------------ src/layui/layui/layLayerControlPanel.h | 12 ------- src/layui/layui/layLayoutViewConfigPages.cc | 5 +++ src/layview/layview/layLayoutView_qt.cc | 18 ----------- 10 files changed, 62 insertions(+), 67 deletions(-) diff --git a/src/laybasic/laybasic/layLayoutCanvas.cc b/src/laybasic/laybasic/layLayoutCanvas.cc index 78f17f1bc..811d4040c 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.cc +++ b/src/laybasic/laybasic/layLayoutCanvas.cc @@ -151,6 +151,7 @@ LayoutCanvas::LayoutCanvas (lay::LayoutViewBase *view) m_background (0), m_foreground (0), m_active (0), m_oversampling (1), m_hrm (false), + m_srm (false), m_need_redraw (false), m_redraw_clearing (false), m_redraw_force_update (true), @@ -201,11 +202,7 @@ LayoutCanvas::~LayoutCanvas () double LayoutCanvas::resolution () const { - if (m_hrm) { - return 1.0 / m_oversampling; - } else { - return 1.0 / (m_oversampling * dpr ()); - } + return (m_srm ? 1.0 : 1.0 / m_oversampling) * (m_hrm ? 1.0 : 1.0 / dpr ()); } #if defined(HAVE_QT) @@ -283,6 +280,16 @@ LayoutCanvas::set_highres_mode (bool hrm) } } +void +LayoutCanvas::set_subres_mode (bool srm) +{ + if (srm != m_srm) { + m_image_cache.clear (); + m_srm = srm; + do_redraw_all (); + } +} + double LayoutCanvas::dpr () const { diff --git a/src/laybasic/laybasic/layLayoutCanvas.h b/src/laybasic/laybasic/layLayoutCanvas.h index ae4655dc4..a841bb5ee 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.h +++ b/src/laybasic/laybasic/layLayoutCanvas.h @@ -277,6 +277,19 @@ public: return m_hrm; } + /** + * @brief Set sub resolution mode (sub-pixel resolution in oversampling mode) + */ + void set_subres_mode (bool srm); + + /** + * @brief Gets the sub resolution mode flag + */ + bool subres_mode () const + { + return m_srm; + } + /** * @brief Gets the default device pixel ratio for this canvas */ @@ -412,6 +425,7 @@ private: std::map > m_scaled_view_ops; unsigned int m_oversampling; bool m_hrm; + bool m_srm; double m_gamma; bool m_need_redraw; diff --git a/src/laybasic/laybasic/layLayoutViewBase.cc b/src/laybasic/laybasic/layLayoutViewBase.cc index 108644c5e..af25ce5cb 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.cc +++ b/src/laybasic/laybasic/layLayoutViewBase.cc @@ -790,6 +790,13 @@ LayoutViewBase::configure (const std::string &name, const std::string &value) mp_canvas->set_highres_mode (hrm); return true; + } else if (name == cfg_subres_mode) { + + bool srm = false; + tl::from_string (value, srm); + mp_canvas->set_subres_mode (srm); + return true; + } else if (name == cfg_image_cache_size) { int sz = 0; diff --git a/src/laybasic/laybasic/layLayoutViewConfig.cc b/src/laybasic/laybasic/layLayoutViewConfig.cc index d1372d966..4d879a024 100644 --- a/src/laybasic/laybasic/layLayoutViewConfig.cc +++ b/src/laybasic/laybasic/layLayoutViewConfig.cc @@ -114,6 +114,7 @@ public: options.push_back (std::pair (cfg_array_border_instances, "false")); options.push_back (std::pair (cfg_bitmap_oversampling, "1")); options.push_back (std::pair (cfg_highres_mode, "false")); + options.push_back (std::pair (cfg_subres_mode, "false")); options.push_back (std::pair (cfg_image_cache_size, "1")); options.push_back (std::pair (cfg_default_font_size, "0")); options.push_back (std::pair (cfg_color_palette, lay::ColorPalette ().to_string ())); diff --git a/src/laybasic/laybasic/laybasicConfig.h b/src/laybasic/laybasic/laybasicConfig.h index 9fb24ee86..a9b654c2d 100644 --- a/src/laybasic/laybasic/laybasicConfig.h +++ b/src/laybasic/laybasic/laybasicConfig.h @@ -126,6 +126,7 @@ static const std::string cfg_tip_window_hidden ("tip-window-hidden"); static const std::string cfg_bitmap_oversampling ("bitmap-oversampling"); static const std::string cfg_highres_mode ("highres-mode"); +static const std::string cfg_subres_mode ("subres-mode"); static const std::string cfg_image_cache_size ("image-cache-size"); static const std::string cfg_default_font_size ("default-font-size"); diff --git a/src/layui/layui/LayoutViewConfigPage7.ui b/src/layui/layui/LayoutViewConfigPage7.ui index c5f922f10..279f88998 100644 --- a/src/layui/layui/LayoutViewConfigPage7.ui +++ b/src/layui/layui/LayoutViewConfigPage7.ui @@ -6,8 +6,8 @@ 0 0 - 791 - 403 + 613 + 496 @@ -50,18 +50,14 @@ 6 - - - - Oversampling mode - - - - + High resolution mode utilizes the full pixel density on high-DPI displays. Features may look small but rich in details. + + true + @@ -83,6 +79,13 @@ + + + + Oversampling mode + + + @@ -99,20 +102,27 @@ - Oversampling increases the image quality by using an internal resolution larger than the image resolution. Drawing speed is somewhat reduced and lines may appear thinner. + Oversampling increases the image quality by using an internal resolution larger than the image resolution. Drawing speed is somewhat reduced. true - + High resolution mode enabled + + + + Subresolution mode - scale down line widths and stipples with oversampling + + + diff --git a/src/layui/layui/layLayerControlPanel.cc b/src/layui/layui/layLayerControlPanel.cc index e5a41832b..5b501993f 100644 --- a/src/layui/layui/layLayerControlPanel.cc +++ b/src/layui/layui/layLayerControlPanel.cc @@ -210,8 +210,6 @@ LayerControlPanel::LayerControlPanel (lay::LayoutViewBase *view, db::Manager *ma m_hidden_flags_need_update (true), m_in_update (false), m_phase (0), - m_oversampling (1), - m_hrm (false), m_do_update_content_dm (this, &LayerControlPanel::do_update_content), m_do_update_visibility_dm (this, &LayerControlPanel::do_update_visibility), m_no_stipples (false), @@ -1792,24 +1790,6 @@ LayerControlPanel::set_phase (int phase) } } -void -LayerControlPanel::set_highres_mode (bool hrm) -{ - if (m_hrm != hrm) { - m_hrm = hrm; - m_do_update_content_dm (); - } -} - -void -LayerControlPanel::set_oversampling (int os) -{ - if (m_oversampling != os) { - m_oversampling = os; - m_do_update_content_dm (); - } -} - static void set_hidden_flags_rec (LayerTreeModel *model, QTreeView *tree_view, const QModelIndex &parent) { diff --git a/src/layui/layui/layLayerControlPanel.h b/src/layui/layui/layLayerControlPanel.h index 390c2aea3..acd6617d9 100644 --- a/src/layui/layui/layLayerControlPanel.h +++ b/src/layui/layui/layLayerControlPanel.h @@ -220,16 +220,6 @@ public: */ void set_phase (int phase); - /** - * @brief Sets highres mode - */ - void set_highres_mode (bool hrm); - - /** - * @brief Sets oversampling mode - */ - void set_oversampling (int os); - /** * @brief Tell, if the model has been updated already (true) or if it is still under construction (false) */ @@ -373,8 +363,6 @@ private: bool m_in_update; std::vector m_new_sel; int m_phase; - int m_oversampling; - bool m_hrm; tl::DeferredMethod m_do_update_content_dm; tl::DeferredMethod m_do_update_visibility_dm; bool m_no_stipples; diff --git a/src/layui/layui/layLayoutViewConfigPages.cc b/src/layui/layui/layLayoutViewConfigPages.cc index 81d7cbf1e..761144037 100644 --- a/src/layui/layui/layLayoutViewConfigPages.cc +++ b/src/layui/layui/layLayoutViewConfigPages.cc @@ -1501,6 +1501,10 @@ LayoutViewConfigPage7::setup (lay::Dispatcher *root) root->config_get (cfg_highres_mode, highres_mode); mp_ui->highres_mode->setChecked (highres_mode); + bool subres_mode = false; + root->config_get (cfg_subres_mode, subres_mode); + mp_ui->subres_mode->setChecked (subres_mode); + int default_font_size = 0; root->config_get (cfg_default_font_size, default_font_size); mp_ui->default_font_size->setCurrentIndex (default_font_size); @@ -1525,6 +1529,7 @@ LayoutViewConfigPage7::commit (lay::Dispatcher *root) { root->config_set (cfg_bitmap_oversampling, mp_ui->oversampling->currentIndex () + 1); root->config_set (cfg_highres_mode, mp_ui->highres_mode->isChecked ()); + root->config_set (cfg_subres_mode, mp_ui->subres_mode->isChecked ()); root->config_set (cfg_default_font_size, mp_ui->default_font_size->currentIndex ()); root->config_set (cfg_global_trans, db::DCplxTrans (db::DFTrans (mp_ui->global_trans->currentIndex ())).to_string ()); root->config_set (cfg_initial_hier_depth, mp_ui->def_depth->value ()); diff --git a/src/layview/layview/layLayoutView_qt.cc b/src/layview/layview/layLayoutView_qt.cc index a63b74492..86aeaf774 100644 --- a/src/layview/layview/layLayoutView_qt.cc +++ b/src/layview/layview/layLayoutView_qt.cc @@ -873,24 +873,6 @@ LayoutView::update_menu (lay::LayoutView *view, lay::AbstractMenu &menu) bool LayoutView::configure (const std::string &name, const std::string &value) { - if (name == cfg_bitmap_oversampling) { - - int os = 1; - tl::from_string (value, os); - if (mp_control_panel) { - mp_control_panel->set_oversampling (os); - } - - } else if (name == cfg_highres_mode) { - - bool hrm = false; - tl::from_string (value, hrm); - if (mp_control_panel) { - mp_control_panel->set_highres_mode (hrm); - } - - } - if (LayoutViewBase::configure (name, value)) { return true; }