X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fcrikey%2Fcrikeywindow.C;h=9b7bd82e69463275397080f9f2534eea48af5686;hb=9dc94ff0a716a04cdec4ef2466ed20227b79c114;hp=f8fcd1ffab9b61ea0e07e2821aaa1055d264b5e6;hpb=63ced327c156ea7fe4448a18b0b1b0f2571dce7e;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/crikey/crikeywindow.C b/cinelerra-5.1/plugins/crikey/crikeywindow.C index f8fcd1ff..9b7bd82e 100644 --- a/cinelerra-5.1/plugins/crikey/crikeywindow.C +++ b/cinelerra-5.1/plugins/crikey/crikeywindow.C @@ -75,15 +75,15 @@ void CriKeyDrawMode::create_objects() { for( int i=0; iplugin->config.draw_mode); + update(gui->plugin->config.draw_mode, 0); } -void CriKeyDrawMode::update(int mode) +void CriKeyDrawMode::update(int mode, int send) { if( this->mode == mode ) return; this->mode = mode; set_text(draw_modes[mode]); gui->plugin->config.draw_mode = mode; - gui->plugin->send_configure_change(); + if( send ) gui->plugin->send_configure_change(); } int CriKeyKeyModeItem::handle_event() @@ -104,15 +104,15 @@ void CriKeyKeyMode::create_objects() { for( int i=0; iplugin->config.key_mode); + update(gui->plugin->config.key_mode, 0); } -void CriKeyKeyMode::update(int mode) +void CriKeyKeyMode::update(int mode, int send) { if( this->mode == mode ) return; this->mode = mode; set_text(key_modes[mode]); gui->draw_key(mode); - gui->plugin->send_configure_change(); + if( send ) gui->plugin->send_configure_change(); } CriKeyColorButton::CriKeyColorButton(CriKeyWindow *gui, int x, int y) @@ -155,6 +155,8 @@ int CriKeyColorPicker::handle_new_color(int color, int alpha) gui->lock_window("CriKeyColorPicker::handle_new_color"); gui->update_color(this->color = color); gui->flush(); + gui->plugin->config.color = color; + gui->plugin->send_configure_change(); gui->unlock_window(); return 1; } @@ -215,6 +217,15 @@ int CriKeyWindow::grab_event(XEvent *event) { if( key_mode->mode != KEY_POINT ) return 0; + MWindow *mwindow = plugin->server->mwindow; + CWindowGUI *cwindow_gui = mwindow->cwindow->gui; + CWindowCanvas *canvas = cwindow_gui->canvas; + int cx, cy; canvas->get_canvas()->get_relative_cursor_xy(cx, cy); + if( cx < mwindow->theme->ccanvas_x ) return 0; + if( cx >= mwindow->theme->ccanvas_x+mwindow->theme->ccanvas_w ) return 0; + if( cy < mwindow->theme->ccanvas_y ) return 0; + if( cy >= mwindow->theme->ccanvas_y+mwindow->theme->ccanvas_h ) return 0; + switch( event->type ) { case ButtonPress: if( dragging ) return 0; @@ -229,11 +240,8 @@ int CriKeyWindow::grab_event(XEvent *event) default: return 0; } - MWindow *mwindow = plugin->server->mwindow; - CWindowGUI *cwindow_gui = mwindow->cwindow->gui; - CWindowCanvas *canvas = cwindow_gui->canvas; - float cursor_x = canvas->get_canvas()->get_relative_cursor_x(); - float cursor_y = canvas->get_canvas()->get_relative_cursor_y(); + + float cursor_x = cx, cursor_y = cy; canvas->canvas_to_output(mwindow->edl, 0, cursor_x, cursor_y); int64_t position = plugin->get_source_position(); float projector_x, projector_y, projector_z;