mirror of https://github.com/KLayout/klayout.git
Resize method and tests
This commit is contained in:
parent
7b85bf7de2
commit
42f0a79dee
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -454,6 +454,23 @@ class LAYLayoutView_TestClass < TestBase
|
|||
|
||||
end
|
||||
|
||||
def test_5
|
||||
|
||||
lv = RBA::LayoutView::new
|
||||
lv.load_layout(File.join($ut_testsrc, "testdata/gds/t10.gds"), true)
|
||||
|
||||
lv.resize(42, 117)
|
||||
img = lv.get_screenshot_pixels
|
||||
assert_equal(img.width, 42)
|
||||
assert_equal(img.height, 117)
|
||||
|
||||
lv.resize(142, 217)
|
||||
img = lv.get_screenshot_pixels
|
||||
assert_equal(img.width, 142)
|
||||
assert_equal(img.height, 217)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
load("test_epilogue.rb")
|
||||
|
|
|
|||
Loading…
Reference in New Issue