# HG changeset patch # User Pantxo Diribarne # Date 1429217529 -7200 # Node ID e05fe4260252fa9b3cb71cb975559771a41d2b90 # Parent a42de4173533b1476fdfb85f192278d9f11384d0 Handle mouse interaction with image objects (bug #44691) * gl-select.h (opengl_selector::draw_image): new method * gl-select.cc (opengl_selector::draw_image): draw a GL_QUAD to indicate the image area in GL_SELECT mode diff -r a42de4173533 -r e05fe4260252 libgui/graphics/gl-select.cc --- a/libgui/graphics/gl-select.cc Fri Apr 24 22:31:21 2015 -0400 +++ b/libgui/graphics/gl-select.cc Thu Apr 16 22:52:09 2015 +0200 @@ -201,3 +201,35 @@ return Matrix (1, 4, 0.0); #endif } + +void +opengl_selector::draw_image (const image::properties& props) +{ + Matrix xd = props.get_xdata ().matrix_value (); + octave_idx_type nc = props.get_cdata ().matrix_value ().columns (); + double x_pix_size = (xd(1) - xd(0)) / (nc - 1); + + Matrix yd = props.get_ydata ().matrix_value (); + octave_idx_type nr = props.get_cdata ().matrix_value ().rows (); + double y_pix_size = (yd(1) - yd(0)) / (nr - 1); + + ColumnVector p1(3, 0.0), p2(3, 0.0), p3(3, 0.0), p4(3, 0.0); + p1(0) = xd(0) - x_pix_size/2; + p1(1) = yd(0) - y_pix_size/2; + + p2(0) = xd(1) + x_pix_size/2; + p2(1) = yd(0) - y_pix_size/2; + + p3(0) = xd(1) + x_pix_size/2; + p3(1) = yd(1) + y_pix_size/2; + + p4(0) = xd(0) - x_pix_size/2; + p4(1) = yd(1) + y_pix_size/2; + + glBegin (GL_QUADS); + glVertex3dv (p1.data ()); + glVertex3dv (p2.data ()); + glVertex3dv (p3.data ()); + glVertex3dv (p4.data ()); + glEnd (); +} diff -r a42de4173533 -r e05fe4260252 libgui/graphics/gl-select.h --- a/libgui/graphics/gl-select.h Fri Apr 24 22:31:21 2015 -0400 +++ b/libgui/graphics/gl-select.h Thu Apr 16 22:52:09 2015 +0200 @@ -48,6 +48,8 @@ protected: virtual void draw_text (const text::properties& props); + virtual void draw_image (const image::properties& props); + virtual void setup_opengl_transformation (const axes::properties& props); virtual void init_marker (const std::string& m, double size, float width);