mirror of https://github.com/KLayout/klayout.git
WIP: added vertical zoom factor slider, some enhancements
This commit is contained in:
parent
f82e22c5c2
commit
4a3e694b9b
|
|
@ -85,9 +85,28 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="zoom_factor">
|
||||
<widget class="QLabel" name="percent_label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>x</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="zoom_factor">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
|
|
@ -98,8 +117,76 @@
|
|||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>70</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>8</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>%</string>
|
||||
<string>Z</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="vzoom_slider">
|
||||
<property name="minimum">
|
||||
<number>-300</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>300</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>x</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="vzoom_factor">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>70</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace lay
|
|||
|
||||
D25Camera::D25Camera ()
|
||||
{
|
||||
init ();
|
||||
camera_init ();
|
||||
}
|
||||
|
||||
D25Camera::~D25Camera ()
|
||||
|
|
@ -41,7 +41,7 @@ D25Camera::~D25Camera ()
|
|||
}
|
||||
|
||||
void
|
||||
D25Camera::init ()
|
||||
D25Camera::camera_init ()
|
||||
{
|
||||
m_fov = 45.0;
|
||||
m_cam_azimuth = m_cam_elevation = 0.0;
|
||||
|
|
@ -51,7 +51,7 @@ D25Camera::init ()
|
|||
void
|
||||
D25Camera::camera_reset ()
|
||||
{
|
||||
init ();
|
||||
camera_init ();
|
||||
camera_changed ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,11 @@ public:
|
|||
*/
|
||||
void camera_reset ();
|
||||
|
||||
/**
|
||||
* @brief Resets the camera's orientation but does not call "camera_changed"
|
||||
*/
|
||||
void camera_init ();
|
||||
|
||||
protected:
|
||||
virtual void camera_changed () { }
|
||||
virtual double aspect_ratio () const { return 1.0; }
|
||||
|
|
@ -133,7 +138,6 @@ private:
|
|||
QVector3D m_displacement;
|
||||
double m_fov;
|
||||
|
||||
void init ();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,9 @@ D25View::D25View (QWidget *parent)
|
|||
connect (mp_ui->fit_top, SIGNAL (clicked ()), this, SLOT (fit_button_clicked ()));
|
||||
connect (mp_ui->fit_bottom, SIGNAL (clicked ()), this, SLOT (fit_button_clicked ()));
|
||||
connect (mp_ui->zoom_slider, SIGNAL (valueChanged (int)), this, SLOT (scale_slider_changed (int)));
|
||||
connect (mp_ui->vzoom_slider, SIGNAL (valueChanged (int)), this, SLOT (vscale_slider_changed (int)));
|
||||
connect (mp_ui->d25_view, SIGNAL (scale_factor_changed (double)), this, SLOT (scale_factor_changed (double)));
|
||||
connect (mp_ui->d25_view, SIGNAL (vscale_factor_changed (double)), this, SLOT (vscale_factor_changed (double)));
|
||||
connect (mp_ui->d25_view, SIGNAL (init_failed ()), this, SLOT (init_failed ()));
|
||||
|
||||
mp_ui->gl_stack->setCurrentIndex (0);
|
||||
|
|
@ -67,7 +69,7 @@ D25View::~D25View ()
|
|||
static QString scale_factor_to_string (double f)
|
||||
{
|
||||
QString s;
|
||||
s.sprintf ("x %.3g", f);
|
||||
s.sprintf ("%.3g", f);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
@ -96,7 +98,25 @@ D25View::scale_factor_changed (double f)
|
|||
mp_ui->zoom_slider->blockSignals (false);
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
D25View::vscale_slider_changed (int value)
|
||||
{
|
||||
double f = exp (log (10.0) * -0.01 * value);
|
||||
mp_ui->vzoom_factor->setText (scale_factor_to_string (f));
|
||||
mp_ui->d25_view->set_vscale_factor (f);
|
||||
}
|
||||
|
||||
void
|
||||
D25View::vscale_factor_changed (double f)
|
||||
{
|
||||
mp_ui->vzoom_factor->setText (scale_factor_to_string (f));
|
||||
int v = floor (0.5 - log10 (f) * 100.0);
|
||||
mp_ui->vzoom_slider->blockSignals (true);
|
||||
mp_ui->vzoom_slider->setValue (v);
|
||||
mp_ui->vzoom_slider->blockSignals (false);
|
||||
}
|
||||
|
||||
int
|
||||
D25View::exec_dialog (lay::LayoutView *view)
|
||||
{
|
||||
mp_view.reset (view);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ private slots:
|
|||
void fit_button_clicked ();
|
||||
void scale_factor_changed (double f);
|
||||
void scale_slider_changed (int value);
|
||||
void vscale_factor_changed (double f);
|
||||
void vscale_slider_changed (int value);
|
||||
void init_failed ();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -200,6 +200,8 @@ D25ViewWidget::D25ViewWidget (QWidget *parent)
|
|||
|
||||
m_zmin = m_zmax = 0.0;
|
||||
mp_view = 0;
|
||||
|
||||
reset_viewport ();
|
||||
}
|
||||
|
||||
D25ViewWidget::~D25ViewWidget ()
|
||||
|
|
@ -214,12 +216,22 @@ D25ViewWidget::~D25ViewWidget ()
|
|||
}
|
||||
|
||||
void
|
||||
D25ViewWidget::reset ()
|
||||
D25ViewWidget::reset_viewport ()
|
||||
{
|
||||
m_scale_factor = 1.0;
|
||||
m_vscale_factor = 1.0;
|
||||
mp_mode.reset (0);
|
||||
|
||||
camera_reset ();
|
||||
camera_init ();
|
||||
}
|
||||
|
||||
void
|
||||
D25ViewWidget::reset ()
|
||||
{
|
||||
reset_viewport ();
|
||||
emit scale_factor_changed (m_scale_factor);
|
||||
emit vscale_factor_changed (m_vscale_factor);
|
||||
refresh ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -438,6 +450,13 @@ D25ViewWidget::refresh ()
|
|||
update ();
|
||||
}
|
||||
|
||||
void
|
||||
D25ViewWidget::showEvent (QShowEvent *)
|
||||
{
|
||||
// NOTE: This should happen automatically, but apparently the OpenGL widget doesn't do an automatic refresh:
|
||||
update ();
|
||||
}
|
||||
|
||||
void
|
||||
D25ViewWidget::camera_changed ()
|
||||
{
|
||||
|
|
@ -898,7 +917,7 @@ D25ViewWidget::paintGL ()
|
|||
QMatrix4x4 scene_trans, scene_trans_wo_y;
|
||||
|
||||
// provide the displacement and scaling (in this order!)
|
||||
scene_trans.scale (m_scale_factor);
|
||||
scene_trans.scale (m_scale_factor, m_scale_factor * m_vscale_factor, m_scale_factor);
|
||||
scene_trans.translate (m_displacement);
|
||||
// this way we can use y as z coordinate when drawing
|
||||
scene_trans.scale (1.0, 1.0, -1.0);
|
||||
|
|
|
|||
|
|
@ -104,6 +104,14 @@ public:
|
|||
refresh ();
|
||||
}
|
||||
|
||||
double vscale_factor () const { return m_vscale_factor; }
|
||||
|
||||
void set_vscale_factor (double f)
|
||||
{
|
||||
m_vscale_factor = f;
|
||||
refresh ();
|
||||
}
|
||||
|
||||
const std::string &error () const
|
||||
{
|
||||
return m_error;
|
||||
|
|
@ -111,11 +119,13 @@ public:
|
|||
|
||||
signals:
|
||||
void scale_factor_changed (double f);
|
||||
void vscale_factor_changed (double f);
|
||||
void init_failed ();
|
||||
|
||||
protected:
|
||||
virtual void camera_changed ();
|
||||
virtual double aspect_ratio () const;
|
||||
virtual void showEvent (QShowEvent *);
|
||||
|
||||
public slots:
|
||||
void fit ();
|
||||
|
|
@ -127,6 +137,7 @@ private:
|
|||
QOpenGLShaderProgram *m_shapes_program, *m_gridplane_program;
|
||||
std::string m_error;
|
||||
double m_scale_factor;
|
||||
double m_vscale_factor;
|
||||
QVector3D m_displacement;
|
||||
lay::LayoutView *mp_view;
|
||||
db::DBox m_bbox;
|
||||
|
|
@ -152,6 +163,7 @@ private:
|
|||
void render_layout (D25ViewWidget::chunks_type &chunks, const db::Layout &layout, const db::Cell &cell, const db::Box &clip_box, unsigned int layer, double zstart, double zstop);
|
||||
void render_polygon (D25ViewWidget::chunks_type &chunks, const db::Polygon &poly, double dbu, double zstart, double zstop);
|
||||
void render_wall (D25ViewWidget::chunks_type &chunks, const db::Edge &poly, double dbu, double zstart, double zstop);
|
||||
void reset_viewport ();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue