Resize method and tests

This commit is contained in:
Matthias Koefferlein
2022-05-07 22:12:36 +02:00
parent 7b85bf7de2
commit 42f0a79dee
8 changed files with 100 additions and 24 deletions
@@ -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"
+30 -21
View File
@@ -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 ()
+7 -3
View File
@@ -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 ();
};
+8
View File
@@ -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)
{