X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fvicon.C;h=f27791f94c06767bd12f0fc318093e2842319685;hb=66e8a774858a7bfefc565d77cde63bbc15769991;hp=296b3b08f7b4205974552e0ffaada438215fa74e;hpb=debf38f78ae5ce154f54183b1638278bf8a24736;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/vicon.C b/cinelerra-5.1/guicast/vicon.C index 296b3b08..f27791f9 100644 --- a/cinelerra-5.1/guicast/vicon.C +++ b/cinelerra-5.1/guicast/vicon.C @@ -8,10 +8,10 @@ #include "condition.h" VIcon:: -VIcon(int vw, int vh, double rate) +VIcon(int w, int h, double rate) { - this->vw = vw; - this->vh = vh; + this->w = w; + this->h = h; this->frame_rate = rate; cycle_start = 0; @@ -47,12 +47,12 @@ draw_vframe(VIconThread *vt, BC_WindowBase *wdw, int x, int y) if( !vfrm ) return; int sx0 = 0, sx1 = sx0 + vt->vw; int sy0 = 0, sy1 = sy0 + vt->vh; - int dx0 = x, dx1 = dx0 + vw; - int dy0 = y, dy1 = dy0 + vh; - if( (x=vt->draw_x0-dx0) > 0 ) { sx0 += (x*vt->vw)/vw; dx0 = vt->draw_x0; } - if( (x=dx1-vt->draw_x1) > 0 ) { sx1 -= (x*vt->vw)/vw; dx1 = vt->draw_x1; } - if( (y=vt->draw_y0-dy0) > 0 ) { sy0 += (y*vt->vh)/vh; dy0 = vt->draw_y0; } - if( (y=dy1-vt->draw_y1) > 0 ) { sy1 -= (y*vt->vh)/vh; dy1 = vt->draw_y1; } + int dx0 = x, dx1 = dx0 + w; + int dy0 = y, dy1 = dy0 + h; + if( (x=vt->draw_x0-dx0) > 0 ) { sx0 += (x*vt->vw)/w; dx0 = vt->draw_x0; } + if( (x=dx1-vt->draw_x1) > 0 ) { sx1 -= (x*vt->vw)/w; dx1 = vt->draw_x1; } + if( (y=vt->draw_y0-dy0) > 0 ) { sy0 += (y*vt->vh)/h; dy0 = vt->draw_y0; } + if( (y=dy1-vt->draw_y1) > 0 ) { sy1 -= (y*vt->vh)/h; dy1 = vt->draw_y1; } int sw = sx1 - sx0, sh = sy1 - sy0; int dw = dx1 - dx0, dh = dy1 - dy0; if( dw > 0 && dh > 0 && sw > 0 && sh > 0 ) @@ -179,9 +179,9 @@ bool VIconThread:: visible(VIcon *vicon, int x, int y) { if( vicon->hidden ) return false; - if( y+vicon->vh <= draw_y0 ) return false; + if( y+vicon->h <= draw_y0 ) return false; if( y >= draw_y1 ) return false; - if( x+vicon->vw <= draw_x0 ) return false; + if( x+vicon->w <= draw_x0 ) return false; if( x >= draw_x1 ) return false; return true; } @@ -193,7 +193,7 @@ int ViewPopup::keypress_event() } -ViewPopup::ViewPopup(VIconThread *vt, VFrame *frame, int x, int y, int w, int h) +ViewPopup::ViewPopup(VIconThread *vt, int x, int y, int w, int h) : BC_Popup(vt->wdw, x, y, w, h, BLACK) { this->vt = vt; @@ -204,7 +204,7 @@ ViewPopup::~ViewPopup() vt->wdw->set_active_subwindow(0); } -ViewPopup *VIconThread::new_view_window(VFrame *frame) +ViewPopup *VIconThread::new_view_window() { BC_WindowBase *parent = wdw->get_parent(); XineramaScreenInfo *info = parent->get_xinerama_info(-1); @@ -213,23 +213,13 @@ ViewPopup *VIconThread::new_view_window(VFrame *frame) int vx = viewing->get_vx(), rx = 0; int vy = viewing->get_vy(), ry = 0; wdw->get_root_coordinates(vx, vy, &rx, &ry); - rx += (rx >= cx ? -view_w : viewing->vw); - ry += (ry >= cy ? -view_h : viewing->vh); - ViewPopup *vwin = new ViewPopup(this, frame, rx, ry, view_w, view_h); + rx += (rx >= cx ? -view_w+viewing->w/4 : viewing->w-viewing->w/4); + ry += (ry >= cy ? -view_h+viewing->h/4 : viewing->h-viewing->h/4); + ViewPopup *vwin = new ViewPopup(this, rx, ry, view_w, view_h); wdw->set_active_subwindow(vwin); return vwin; } -int ViewPopup::zoom_scale(int dir) -{ - int view_h = vt->view_h + dir*vt->view_h/10 + dir; - bclamp(view_h, 16,512); - vt->view_h = view_h; - vt->view_w = view_h * vt->vw/vt->vh; - vt->stop_viewing(); - return 1; -} - void VIconThread:: reset_images() @@ -279,8 +269,9 @@ update_view() if( viewing ) viewing->stop_audio(); delete view_win; view_win = 0; if( (viewing=vicon) != 0 ) { - VFrame *frame = viewing->frame(); - view_win = new_view_window(frame); + view_win = new_view_window(); + view_win->draw_vframe(viewing->frame()); + view_win->flash(0); view_win->show_window(); vicon->start_audio(); } @@ -288,6 +279,17 @@ update_view() return 1; } +int VIconThread::zoom_scale(int dir) +{ + int view_h = this->view_h; + view_h += dir*view_h/10 + dir; + bclamp(view_h, 16,512); + this->view_h = view_h; + this->view_w = view_h * vw/vh; + stop_viewing(); + return 1; +} + void VIconThread:: draw_images()