mirror of https://github.com/KLayout/klayout.git
Fixed issue #1438 (Provide a configuration option to switch back to old-style text selection (at origin only)
This commit is contained in:
parent
ae3c8c27f6
commit
6014ba9fed
|
|
@ -853,7 +853,7 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &hit_box, co
|
||||||
|
|
||||||
db::Point tp (shape->text_trans () * db::Point ());
|
db::Point tp (shape->text_trans () * db::Point ());
|
||||||
|
|
||||||
if (text_info ()) {
|
if (text_info () && ! text_info ()->point_mode ()) {
|
||||||
|
|
||||||
db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t;
|
db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t;
|
||||||
db::Text text;
|
db::Text text;
|
||||||
|
|
@ -1004,7 +1004,7 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &hit_box, co
|
||||||
|
|
||||||
db::Point tp (shape->text_trans () * db::Point ());
|
db::Point tp (shape->text_trans () * db::Point ());
|
||||||
|
|
||||||
if (text_info ()) {
|
if (text_info () && ! text_info ()->point_mode ()) {
|
||||||
|
|
||||||
db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t;
|
db::CplxTrans t_dbu = db::CplxTrans (layout ().dbu ()) * t;
|
||||||
db::Text text;
|
db::Text text;
|
||||||
|
|
|
||||||
|
|
@ -432,7 +432,7 @@ ShapeFinder::find_internal (lay::LayoutViewBase *view, unsigned int cv_index, co
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if ((m_flags & db::ShapeIterator::Texts) != 0 && mp_text_info) {
|
if ((m_flags & db::ShapeIterator::Texts) != 0 && mp_text_info && ! mp_text_info->point_mode ()) {
|
||||||
|
|
||||||
m_flags = db::ShapeIterator::Texts;
|
m_flags = db::ShapeIterator::Texts;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -345,6 +345,7 @@ LayoutViewBase::init (db::Manager *mgr)
|
||||||
m_show_properties = false;
|
m_show_properties = false;
|
||||||
m_apply_text_trans = true;
|
m_apply_text_trans = true;
|
||||||
m_default_text_size = 0.1;
|
m_default_text_size = 0.1;
|
||||||
|
m_text_point_mode = false;
|
||||||
m_text_font = 0;
|
m_text_font = 0;
|
||||||
m_show_markers = true;
|
m_show_markers = true;
|
||||||
m_no_stipples = false;
|
m_no_stipples = false;
|
||||||
|
|
@ -984,6 +985,13 @@ LayoutViewBase::configure (const std::string &name, const std::string &value)
|
||||||
default_text_size (sz);
|
default_text_size (sz);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
} else if (name == cfg_text_point_mode) {
|
||||||
|
|
||||||
|
bool flag;
|
||||||
|
tl::from_string (value, flag);
|
||||||
|
text_point_mode (flag);
|
||||||
|
return true;
|
||||||
|
|
||||||
} else if (name == cfg_text_font) {
|
} else if (name == cfg_text_font) {
|
||||||
|
|
||||||
int n;
|
int n;
|
||||||
|
|
@ -5174,7 +5182,16 @@ LayoutViewBase::default_text_size (double fs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
LayoutViewBase::text_point_mode (bool pm)
|
||||||
|
{
|
||||||
|
if (m_text_point_mode != pm) {
|
||||||
|
m_text_point_mode = pm;
|
||||||
|
redraw ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
LayoutViewBase::clear_ruler_new_cell (bool f)
|
LayoutViewBase::clear_ruler_new_cell (bool f)
|
||||||
{
|
{
|
||||||
m_clear_ruler_new_cell = f;
|
m_clear_ruler_new_cell = f;
|
||||||
|
|
|
||||||
|
|
@ -1188,6 +1188,22 @@ public:
|
||||||
return m_default_text_size;
|
return m_default_text_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets text point mode
|
||||||
|
*
|
||||||
|
* In point mode, the text is treated like a point.
|
||||||
|
* Selection happens at the texts' origin.
|
||||||
|
*/
|
||||||
|
void text_point_mode (bool pm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets text point mode
|
||||||
|
*/
|
||||||
|
bool text_point_mode () const
|
||||||
|
{
|
||||||
|
return m_text_point_mode;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Show or hide markers
|
* @brief Show or hide markers
|
||||||
*/
|
*/
|
||||||
|
|
@ -2804,6 +2820,7 @@ private:
|
||||||
tl::Color m_text_color;
|
tl::Color m_text_color;
|
||||||
bool m_apply_text_trans;
|
bool m_apply_text_trans;
|
||||||
double m_default_text_size;
|
double m_default_text_size;
|
||||||
|
bool m_text_point_mode;
|
||||||
unsigned int m_text_font;
|
unsigned int m_text_font;
|
||||||
bool m_show_markers;
|
bool m_show_markers;
|
||||||
bool m_no_stipples;
|
bool m_no_stipples;
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ public:
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_apply_text_trans, "true"));
|
options.push_back (std::pair<std::string, std::string> (cfg_apply_text_trans, "true"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_global_trans, "r0"));
|
options.push_back (std::pair<std::string, std::string> (cfg_global_trans, "r0"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_default_text_size, "0.1"));
|
options.push_back (std::pair<std::string, std::string> (cfg_default_text_size, "0.1"));
|
||||||
|
options.push_back (std::pair<std::string, std::string> (cfg_text_point_mode, "false"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_text_font, "0"));
|
options.push_back (std::pair<std::string, std::string> (cfg_text_font, "0"));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_sel_color, cc.to_string (tl::Color ())));
|
options.push_back (std::pair<std::string, std::string> (cfg_sel_color, cc.to_string (tl::Color ())));
|
||||||
options.push_back (std::pair<std::string, std::string> (cfg_sel_line_width, "1"));
|
options.push_back (std::pair<std::string, std::string> (cfg_sel_line_width, "1"));
|
||||||
|
|
|
||||||
|
|
@ -640,7 +640,9 @@ ShapeMarker::render (const Viewport &vp, ViewObjectCanvas &canvas)
|
||||||
db::Text t;
|
db::Text t;
|
||||||
m_shape.text (t);
|
m_shape.text (t);
|
||||||
db::DBox box = ti.bbox (trans () * t, vp_trans).enlarged (text_box_enlargement (vp_trans));
|
db::DBox box = ti.bbox (trans () * t, vp_trans).enlarged (text_box_enlargement (vp_trans));
|
||||||
r.draw (box, vp_trans, 0, text, 0, 0);
|
if (! box.is_point ()) {
|
||||||
|
r.draw (box, vp_trans, 0, text, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
r.draw (m_shape, t, fill, contour, vertex, text);
|
r.draw (m_shape, t, fill, contour, vertex, text);
|
||||||
r.draw_propstring (m_shape, &ly->properties_repository (), text, t);
|
r.draw_propstring (m_shape, &ly->properties_repository (), text, t);
|
||||||
|
|
@ -653,7 +655,9 @@ ShapeMarker::render (const Viewport &vp, ViewObjectCanvas &canvas)
|
||||||
db::Text t;
|
db::Text t;
|
||||||
m_shape.text (t);
|
m_shape.text (t);
|
||||||
db::DBox box = ti.bbox (trans () * t, vp.trans ()).enlarged (text_box_enlargement (vp.trans ()));
|
db::DBox box = ti.bbox (trans () * t, vp.trans ()).enlarged (text_box_enlargement (vp.trans ()));
|
||||||
r.draw (box, vp.trans (), 0, text, 0, 0);
|
if (! box.is_point ()) {
|
||||||
|
r.draw (box, vp.trans (), 0, text, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
r.draw (m_shape, t, fill, contour, vertex, text);
|
r.draw (m_shape, t, fill, contour, vertex, text);
|
||||||
r.draw_propstring (m_shape, &ly->properties_repository (), text, t);
|
r.draw_propstring (m_shape, &ly->properties_repository (), text, t);
|
||||||
|
|
@ -1114,7 +1118,9 @@ Marker::draw (lay::Renderer &r, const db::CplxTrans &t, lay::CanvasPlane *fill,
|
||||||
lay::TextInfo ti (view ());
|
lay::TextInfo ti (view ());
|
||||||
db::DCplxTrans dt (t);
|
db::DCplxTrans dt (t);
|
||||||
db::DBox box = ti.bbox (*m_object.dtext, dt).enlarged (text_box_enlargement (dt));
|
db::DBox box = ti.bbox (*m_object.dtext, dt).enlarged (text_box_enlargement (dt));
|
||||||
r.draw (box, dt, 0, text, 0, 0);
|
if (! box.is_point ()) {
|
||||||
|
r.draw (box, dt, 0, text, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
r.draw (*m_object.dtext, db::DCplxTrans (t), fill, contour, vertex, text);
|
r.draw (*m_object.dtext, db::DCplxTrans (t), fill, contour, vertex, text);
|
||||||
} else if (m_type == Edge) {
|
} else if (m_type == Edge) {
|
||||||
|
|
@ -1316,7 +1322,9 @@ DMarker::render (const Viewport &vp, ViewObjectCanvas &canvas)
|
||||||
// draw a frame around the text
|
// draw a frame around the text
|
||||||
lay::TextInfo ti (view ());
|
lay::TextInfo ti (view ());
|
||||||
db::DBox box = ti.bbox (*m_object.text, t).enlarged (text_box_enlargement (t));
|
db::DBox box = ti.bbox (*m_object.text, t).enlarged (text_box_enlargement (t));
|
||||||
r.draw (box, t, 0, text, 0, 0);
|
if (! box.is_point ()) {
|
||||||
|
r.draw (box, t, 0, text, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
r.draw (*m_object.text, t, fill, contour, vertex, text);
|
r.draw (*m_object.text, t, fill, contour, vertex, text);
|
||||||
} else if (m_type == Edge) {
|
} else if (m_type == Edge) {
|
||||||
|
|
|
||||||
|
|
@ -33,16 +33,8 @@ TextInfo::TextInfo (const LayoutViewBase *view)
|
||||||
: m_default_text_size (view->default_text_size ()),
|
: m_default_text_size (view->default_text_size ()),
|
||||||
m_default_font (db::Font (view->text_font ())),
|
m_default_font (db::Font (view->text_font ())),
|
||||||
m_apply_text_trans (view->apply_text_trans ()),
|
m_apply_text_trans (view->apply_text_trans ()),
|
||||||
m_resolution (view->canvas ()->resolution ())
|
m_resolution (view->canvas ()->resolution ()),
|
||||||
{
|
m_point_mode (view->text_point_mode ())
|
||||||
// .. nothing yet ..
|
|
||||||
}
|
|
||||||
|
|
||||||
TextInfo::TextInfo (double default_text_size, const db::Font &default_font, bool apply_text_trans, double resolution)
|
|
||||||
: m_default_text_size (default_text_size),
|
|
||||||
m_default_font (default_font),
|
|
||||||
m_apply_text_trans (apply_text_trans),
|
|
||||||
m_resolution (resolution)
|
|
||||||
{
|
{
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
@ -50,6 +42,10 @@ TextInfo::TextInfo (double default_text_size, const db::Font &default_font, bool
|
||||||
db::DBox
|
db::DBox
|
||||||
TextInfo::bbox (const db::DText &text, const db::DCplxTrans &vp_trans) const
|
TextInfo::bbox (const db::DText &text, const db::DCplxTrans &vp_trans) const
|
||||||
{
|
{
|
||||||
|
if (m_point_mode) {
|
||||||
|
return text.box ();
|
||||||
|
}
|
||||||
|
|
||||||
// offset in pixels (space between origin and text)
|
// offset in pixels (space between origin and text)
|
||||||
const double offset = 2.0 / vp_trans.mag ();
|
const double offset = 2.0 / vp_trans.mag ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,17 +49,6 @@ public:
|
||||||
*/
|
*/
|
||||||
TextInfo (const LayoutViewBase *view);
|
TextInfo (const LayoutViewBase *view);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Constructor
|
|
||||||
*
|
|
||||||
* @param default_text_size The default text size in micron
|
|
||||||
* @param default_font The default font
|
|
||||||
* @param apply_text_trans True if text transformations are to be applied
|
|
||||||
* @param resolution The resolution value (logical pixel size per physical unit pixel)
|
|
||||||
* @param vp_trans The effective micron-to-pixel transformation
|
|
||||||
*/
|
|
||||||
TextInfo (double default_text_size, const db::Font &default_font, bool apply_text_trans, double resolution);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Gets the visual bounding box of the given DText object
|
* @brief Gets the visual bounding box of the given DText object
|
||||||
*
|
*
|
||||||
|
|
@ -71,12 +60,23 @@ public:
|
||||||
* @param vp_trans The effective micron-to-pixel transformation
|
* @param vp_trans The effective micron-to-pixel transformation
|
||||||
*/
|
*/
|
||||||
db::DBox bbox (const db::DText &text, const db::DCplxTrans &vp_trans) const;
|
db::DBox bbox (const db::DText &text, const db::DCplxTrans &vp_trans) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets a value indicating whether the text info uses point mode
|
||||||
|
*
|
||||||
|
* In point mode, a text is considered a point-like object.
|
||||||
|
*/
|
||||||
|
bool point_mode () const
|
||||||
|
{
|
||||||
|
return m_point_mode;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double m_default_text_size;
|
double m_default_text_size;
|
||||||
db::Font m_default_font;
|
db::Font m_default_font;
|
||||||
bool m_apply_text_trans;
|
bool m_apply_text_trans;
|
||||||
double m_resolution;
|
double m_resolution;
|
||||||
|
bool m_point_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ static const std::string cfg_global_trans ("global-trans");
|
||||||
static const std::string cfg_no_stipple ("no-stipple");
|
static const std::string cfg_no_stipple ("no-stipple");
|
||||||
static const std::string cfg_stipple_offset ("stipple-offset");
|
static const std::string cfg_stipple_offset ("stipple-offset");
|
||||||
static const std::string cfg_default_text_size ("default-text-size");
|
static const std::string cfg_default_text_size ("default-text-size");
|
||||||
|
static const std::string cfg_text_point_mode ("text-point-mode");
|
||||||
static const std::string cfg_text_font ("text-font");
|
static const std::string cfg_text_font ("text-font");
|
||||||
static const std::string cfg_full_hier_new_cell ("full-hierarchy-new-cell");
|
static const std::string cfg_full_hier_new_cell ("full-hierarchy-new-cell");
|
||||||
static const std::string cfg_initial_hier_depth ("initial-hier-depth");
|
static const std::string cfg_initial_hier_depth ("initial-hier-depth");
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="text_point_mode_cb">
|
||||||
|
<property name="text">
|
||||||
|
<string>Texts are points (active area is origin)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="sel_inside_pcells_cb">
|
<widget class="QCheckBox" name="sel_inside_pcells_cb">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
|
||||||
|
|
@ -372,6 +372,10 @@ LayoutViewConfigPage2c::setup (lay::Dispatcher *root)
|
||||||
root->config_get (cfg_sel_inside_pcells_mode, ipm);
|
root->config_get (cfg_sel_inside_pcells_mode, ipm);
|
||||||
mp_ui->sel_inside_pcells_cb->setChecked (ipm);
|
mp_ui->sel_inside_pcells_cb->setChecked (ipm);
|
||||||
|
|
||||||
|
bool tpm = 0;
|
||||||
|
root->config_get (cfg_text_point_mode, tpm);
|
||||||
|
mp_ui->text_point_mode_cb->setChecked (tpm);
|
||||||
|
|
||||||
unsigned int sr = 0;
|
unsigned int sr = 0;
|
||||||
root->config_get (cfg_search_range, sr);
|
root->config_get (cfg_search_range, sr);
|
||||||
mp_ui->search_range_spinbx->setValue (sr);
|
mp_ui->search_range_spinbx->setValue (sr);
|
||||||
|
|
@ -392,6 +396,7 @@ LayoutViewConfigPage2c::commit (lay::Dispatcher *root)
|
||||||
root->config_set (cfg_sel_halo, mp_ui->halo_cb->isChecked ());
|
root->config_set (cfg_sel_halo, mp_ui->halo_cb->isChecked ());
|
||||||
root->config_set (cfg_sel_transient_mode, mp_ui->transient_mode_cb->isChecked ());
|
root->config_set (cfg_sel_transient_mode, mp_ui->transient_mode_cb->isChecked ());
|
||||||
root->config_set (cfg_sel_inside_pcells_mode, mp_ui->sel_inside_pcells_cb->isChecked ());
|
root->config_set (cfg_sel_inside_pcells_mode, mp_ui->sel_inside_pcells_cb->isChecked ());
|
||||||
|
root->config_set (cfg_text_point_mode, mp_ui->text_point_mode_cb->isChecked ());
|
||||||
root->config_set (cfg_search_range, (unsigned int) mp_ui->search_range_spinbx->value ());
|
root->config_set (cfg_search_range, (unsigned int) mp_ui->search_range_spinbx->value ());
|
||||||
root->config_set (cfg_search_range_box, (unsigned int) mp_ui->search_range_box_spinbx->value ());
|
root->config_set (cfg_search_range_box, (unsigned int) mp_ui->search_range_box_spinbx->value ());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue