mirror of
https://github.com/KLayout/klayout.git
synced 2026-08-22 14:07:15 +02:00
Resize method and tests
This commit is contained in:
@@ -1136,6 +1136,11 @@ Class<lay::LayoutView> decl_LayoutView (QT_EXTERNAL_BASE (QWidget) "lay", "Layou
|
||||
"Show the layout in full depth down to the deepest level of hierarchy. "
|
||||
"This method may cause a redraw."
|
||||
) +
|
||||
gsi::method ("resize", static_cast<void (lay::LayoutView::*) (unsigned int, unsigned int)> (&lay::LayoutView::resize),
|
||||
"@brief Resizes the layout view to the given dimension\n"
|
||||
"\n"
|
||||
"This method has been made available in all builds in 0.28.\n"
|
||||
) +
|
||||
#if defined(HAVE_QT) && defined(HAVE_QTBINDINGS)
|
||||
gsi::method ("get_screenshot", static_cast<QImage (lay::LayoutView::*) ()> (&lay::LayoutView::get_screenshot),
|
||||
"@brief Gets a screenshot as a \\QImage\n"
|
||||
|
||||
@@ -1007,38 +1007,47 @@ LayoutCanvas::screenshot ()
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
|
||||
void
|
||||
LayoutCanvas::resizeEvent (QResizeEvent *)
|
||||
{
|
||||
// clear the image cache
|
||||
m_image_cache.clear ();
|
||||
|
||||
// set the viewport to the new size
|
||||
m_viewport.set_size (width () * m_dpr, height () * m_dpr);
|
||||
m_viewport_l.set_size (width () * m_oversampling * m_dpr, height () * m_oversampling * m_dpr);
|
||||
mouse_event_trans (db::DCplxTrans (1.0 / double (m_dpr)) * m_viewport.trans ());
|
||||
do_redraw_all (true);
|
||||
viewport_changed_event ();
|
||||
do_resize (width (), height ());
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
|
||||
void
|
||||
LayoutCanvas::resize (unsigned int width, unsigned int height)
|
||||
{
|
||||
// clear the image cache
|
||||
m_image_cache.clear ();
|
||||
// don't wait until the layout system informs us - which may never take place when
|
||||
// the widget isn't shown.
|
||||
do_resize (width, height);
|
||||
|
||||
// set the viewport to the new size
|
||||
m_viewport.set_size (width * m_dpr, height * m_dpr);
|
||||
m_viewport_l.set_size (width * m_oversampling * m_dpr, height * m_oversampling * m_dpr);
|
||||
mouse_event_trans (db::DCplxTrans (1.0 / double (m_dpr)) * m_viewport.trans ());
|
||||
do_redraw_all (true);
|
||||
viewport_changed_event ();
|
||||
#if defined(HAVE_QT)
|
||||
QWidget::resize (width, height);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
void
|
||||
LayoutCanvas::do_resize (unsigned int width, unsigned int height)
|
||||
{
|
||||
unsigned int w = width * m_dpr, h = height * m_dpr;
|
||||
unsigned int wl = width * m_oversampling * m_dpr, hl = height * m_oversampling * m_dpr;
|
||||
|
||||
if (m_viewport.width () != w || m_viewport.height () != h ||
|
||||
m_viewport_l.width () != wl || m_viewport_l.height () != hl) {
|
||||
|
||||
// clear the image cache
|
||||
m_image_cache.clear ();
|
||||
|
||||
// set the viewport to the new size
|
||||
m_viewport.set_size (width * m_dpr, height * m_dpr);
|
||||
m_viewport_l.set_size (width * m_oversampling * m_dpr, height * m_oversampling * m_dpr);
|
||||
|
||||
mouse_event_trans (db::DCplxTrans (1.0 / double (m_dpr)) * m_viewport.trans ());
|
||||
do_redraw_all (true);
|
||||
viewport_changed_event ();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutCanvas::update_viewport ()
|
||||
|
||||
@@ -341,6 +341,11 @@ public:
|
||||
return m_viewport;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resizes the canvas object in the Qt-less case
|
||||
*/
|
||||
void resize (unsigned int width, unsigned int height);
|
||||
|
||||
/**
|
||||
* @brief An event indicating that the viewport was changed.
|
||||
* If the viewport (the rectangle that is shown) changes, this event is fired.
|
||||
@@ -361,7 +366,7 @@ private:
|
||||
lay::LayoutViewBase *mp_view;
|
||||
lay::PixelBuffer *mp_image;
|
||||
lay::PixelBuffer *mp_image_bg;
|
||||
#if defined(HAVE_QT) // @@@
|
||||
#if defined(HAVE_QT)
|
||||
QPixmap *mp_pixmap;
|
||||
#endif
|
||||
db::DBox m_precious_box;
|
||||
@@ -396,8 +401,6 @@ private:
|
||||
virtual void paintEvent (QPaintEvent *);
|
||||
virtual void resizeEvent (QResizeEvent *);
|
||||
virtual bool event (QEvent *e);
|
||||
#else
|
||||
void resize (unsigned int width, unsigned int height);
|
||||
#endif
|
||||
|
||||
virtual void key_event (unsigned int key, unsigned int buttons);
|
||||
@@ -411,6 +414,7 @@ private:
|
||||
void do_update_image ();
|
||||
void do_end_of_drawing ();
|
||||
void do_redraw_all (bool force_redraw = true);
|
||||
void do_resize (unsigned int width, unsigned int height);
|
||||
|
||||
void prepare_drawing ();
|
||||
};
|
||||
|
||||
@@ -413,6 +413,14 @@ public:
|
||||
return mp_editor_options_frame;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resizes the view to the given width and height in pixels
|
||||
*/
|
||||
void resize (unsigned int width, unsigned int height)
|
||||
{
|
||||
LayoutViewBase::resize (width, height);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copies to clipboard
|
||||
*
|
||||
|
||||
@@ -485,6 +485,11 @@ LayoutViewBase::~LayoutViewBase ()
|
||||
mp_canvas = 0;
|
||||
}
|
||||
|
||||
void LayoutViewBase::resize (unsigned int width, unsigned int height)
|
||||
{
|
||||
mp_canvas->resize (width, height);
|
||||
}
|
||||
|
||||
void LayoutViewBase::update_event_handlers ()
|
||||
{
|
||||
tl::Object::detach_from_all_events ();
|
||||
|
||||
@@ -1637,6 +1637,11 @@ public:
|
||||
return mp_canvas->viewport ();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resizes the view to the given width and height in pixels
|
||||
*/
|
||||
void resize (unsigned int width, unsigned int height);
|
||||
|
||||
/**
|
||||
* @brief Background color property
|
||||
*/
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "tlUnitTest.h"
|
||||
#include "tlTimer.h"
|
||||
#include "tlSleep.h"
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
|
||||
@@ -150,6 +151,28 @@ TEST(3)
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST(4)
|
||||
{
|
||||
lay::LayoutView lv (0, false, 0);
|
||||
lv.set_drawing_workers (2);
|
||||
lv.cell_box_color (lay::Color (0, 0, 0));
|
||||
|
||||
lv.load_layout (tl::testsrc () + "/testdata/gds/t10.gds", true);
|
||||
|
||||
lv.resize (42, 117);
|
||||
tl::msleep (250);
|
||||
|
||||
lay::PixelBuffer img = lv.get_screenshot_pb ();
|
||||
EXPECT_EQ (img.width (), 42);
|
||||
EXPECT_EQ (img.height (), 117);
|
||||
|
||||
lv.resize (142, 217);
|
||||
|
||||
img = lv.get_screenshot_pb ();
|
||||
EXPECT_EQ (img.width (), 142);
|
||||
EXPECT_EQ (img.height (), 217);
|
||||
}
|
||||
|
||||
#if defined(HAVE_PNG)
|
||||
TEST(11)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user