+ BC_WindowBase *cvs_win = get_canvas();
+ if( draw && draw_boundary ) {
+ cvs_win->draw_polygon(&x_points, &y_points);
+ cvs_win->set_opaque();
+ }
+ if( draw && mask_gui && mask_gui->focused ) {
+ float fx = atof(mask_gui->focus_x->get_text());
+ float fy = atof(mask_gui->focus_y->get_text());
+ fx = (fx - half_track_w) * projector_z + projector_x;
+ fy = (fy - half_track_h) * projector_z + projector_y;
+ output_to_canvas(mwindow->edl, 0, fx, fy);
+ float r = bmax(cvs_win->get_w(), cvs_win->get_h());
+ float d = 0.005*r;
+#if 1
+ int fw = 2*d+3, fh = fw;
+ VFrame focus(fw,fh, BC_RGBA8888);
+ focus.transfer_from(gui->focus_frame);
+ fx -= fw/2.f; fy -= fh/2.f;
+ BC_Pixmap focus_pixmap(cvs_win, &focus, PIXMAP_ALPHA);
+ cvs_win->draw_pixmap(&focus_pixmap,fx,fy);
+#else
+ cvs_win->set_line_width((int)(0.0025*r) + 1);
+ cvs_win->set_color(BLUE);
+ cvs_win->draw_line(fx-d,fy-d, fx+d, fy+d);
+ cvs_win->draw_line(fx-d,fy+d, fx+d, fy-d);
+ cvs_win->set_line_width(0);
+ cvs_win->set_color(WHITE);
+#endif
+ }
+ if( draw && mask_gui && draw_markers && points.size() ) {
+ float cx = 0, cy = 0;
+ int n = points.size();
+ for( int i=0; i<n; ++i ) {
+ MaskPoint *point = points.get(i);
+ cx += point->x; cy += point->y;
+ }
+ cx /= n; cy /= n;
+ if( !mask_gui->focused )
+ mask_gui->set_focused(0, cx, cy);
+ cx = (cx - half_track_w) * projector_z + projector_x;
+ cy = (cy - half_track_h) * projector_z + projector_y;
+ output_to_canvas(mwindow->edl, 0, cx, cy);
+ float r = bmax(cvs_win->get_w(), cvs_win->get_h());
+ float d = 0.007*r;
+ cvs_win->set_line_width((int)(0.002*r) + 1);
+ cvs_win->set_color(ORANGE);
+ cvs_win->draw_line(cx-d,cy, cx+d, cy);
+ cvs_win->draw_line(cx,cy-d, cx, cy+d);
+ cvs_win->set_line_width(0);
+ cvs_win->set_color(WHITE);