> void tmouse_button< sdl_button_down , sdl_button_up , button_down , button_up , button_click , button_double_click >::signal_handler_sdl_button_up( const event::tevent event , bool& handled , const tpoint& coordinate) { if(signal_handler_sdl_button_up_entered_) { return; } tlock lock(signal_handler_sdl_button_up_entered_); DBG_GUI_E << LOG_HEADER << event << ".\n"; if(!is_down_) { WRN_GUI_E << LOG_HEADER << event << ". The mouse button is already up, we missed an event.\n"; return; } is_down_ = false; if(focus_) { DBG_GUI_E << LOG_HEADER << "Firing: " << sdl_button_up << ".\n"; if(!owner_.fire(sdl_button_up, *focus_, coordinate)) { DBG_GUI_E << LOG_HEADER << "Firing: " << button_up << ".\n"; owner_.fire(button_up, *focus_); } } twidget* mouse_over = owner_.find_at(coordinate, true); if(mouse_captured_) { const unsigned mask = SDL_BUTTON_LMASK | SDL_BUTTON_MMASK | SDL_BUTTON_RMASK; if((SDL_GetMouseState(NULL, NULL) & mask ) == 0) { mouse_captured_ = false; } if(mouse_focus_ == mouse_over) { mouse_button_click(mouse_focus_); } else if(!mouse_captured_) { mouse_leave(); if(mouse_over) { mouse_enter(mouse_over); } } } else if(focus_ && focus_ == mouse_over) { mouse_button_click(focus_); } focus_ = NULL; handled = true; }
void tmouse_motion::signal_handler_sdl_mouse_motion( const event::tevent event , bool& handled , const tpoint& coordinate) { if(signal_handler_sdl_mouse_motion_entered_) { return; } tlock lock(signal_handler_sdl_mouse_motion_entered_); DBG_GUI_E << LOG_HEADER << event << ".\n"; if(mouse_captured_) { assert(mouse_focus_); if(!owner_.fire(event, *mouse_focus_, coordinate)) { mouse_motion(mouse_focus_, coordinate); } } else { twidget* mouse_over = owner_.find_at(coordinate, true); if(mouse_over) { DBG_GUI_E << LOG_HEADER << "Firing: " << event << ".\n"; if(owner_.fire(event, *mouse_over, coordinate)) { return; } } if(!mouse_focus_ && mouse_over) { mouse_enter(mouse_over); } else if (mouse_focus_ && !mouse_over) { mouse_leave(); } else if(mouse_focus_ && mouse_focus_ == mouse_over) { mouse_motion(mouse_over, coordinate); } else if(mouse_focus_ && mouse_over) { // moved from one widget to the next mouse_leave(); mouse_enter(mouse_over); } else { assert(!mouse_focus_ && !mouse_over); } } handled = true; }
void Special_Label::enterEvent(QEvent *) { emit mouse_enter(); }
int main(int argc, char **argv) { char imgpath[50]; ///////////////////////////////////Get app Path/////////////////////////////////// char path_save[PATH_MAX]; char abs_exe_path[PATH_MAX]; char *p; if(!(p = strrchr(argv[0], '/'))) getcwd(abs_exe_path, sizeof(abs_exe_path)); else { *p = '\0'; getcwd(path_save, sizeof(path_save)); chdir(argv[0]); getcwd(abs_exe_path, sizeof(abs_exe_path)); chdir(path_save); } //////////////////////////////////////////////////////////////////////////////// printf("\n\n-*-*-*-*-* A piece of Gtk+ code by MAhezh -*-*-*-*-*-*\n\n"); gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 10, 10); gtk_window_set_title(GTK_WINDOW(window), "Win orb"); g_signal_connect(G_OBJECT(window), "delete-event", gtk_main_quit, NULL); gtk_widget_set_app_paintable(window, TRUE); g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(draw), NULL); g_signal_connect(G_OBJECT(window), "screen-changed", G_CALLBACK(screen_changed), NULL); gtk_window_set_decorated(GTK_WINDOW(window), FALSE); gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(on_button_press), NULL); //g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(clicked), NULL); GtkWidget* fixed_container = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), fixed_container); sprintf(imgpath,"%s/img/metronew.png",abs_exe_path); GtkWidget *image = gtk_image_new_from_file(imgpath); gtk_container_add(GTK_CONTAINER(fixed_container), image); screen_changed(window, NULL, NULL); ////////////////////////////////////// Window 2 ////////////////////////////////////////////// GtkWidget *window2 = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window2), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window2), 10, 10); gtk_window_set_title(GTK_WINDOW(window2), "Win orb"); gtk_window_set_opacity(GTK_WINDOW(window2),0.0); g_signal_connect(G_OBJECT(window2), "delete-event", gtk_main_quit, NULL); gtk_widget_set_app_paintable(window2, TRUE); g_signal_connect(G_OBJECT(window2), "draw", G_CALLBACK(draw), NULL); g_signal_connect(G_OBJECT(window2), "screen-changed", G_CALLBACK(screen_changed), NULL); gtk_window_set_decorated(GTK_WINDOW(window2), FALSE); gtk_widget_add_events(window2, GDK_BUTTON_PRESS_MASK); // g_signal_connect(G_OBJECT(window2), "button-press-event", // G_CALLBACK(on_button_press), NULL); g_signal_connect_swapped(G_OBJECT(window2), "button-press-event", G_CALLBACK(on_button_press), window2); //g_signal_connect(G_OBJECT(window2), "button-press-event", G_CALLBACK(clicked), NULL); GtkWidget* fixed_container2 = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window2), fixed_container2); sprintf(imgpath,"%s/img/metroglow.png",abs_exe_path); GtkWidget *image2 = gtk_image_new_from_file(imgpath); gtk_container_add(GTK_CONTAINER(fixed_container2), image2); screen_changed(window2, NULL, NULL); //////////////////////////////////////////////////////////////////////////////////////////////// gtk_widget_show_all(window); gtk_widget_show_all(window2); //window_2(); /////////////////////////////////////OPACITY/////////////////////////////////////////////////////// int timer; float vl = 0.0; int tnt; gboolean mouse_enter() { if(tnt==1) { timer = g_timeout_add ( 3, mouse_enter, NULL ); vl = vl + 0.008; gtk_window_set_opacity(GTK_WINDOW(window2), vl); if (vl >= 1.0) { g_source_remove (timer); return FALSE; printf("Still running\n"); //vl = 0; } } } gboolean mouse_leave() //function for timeouts must be a boolean { if(tnt==0) { timer = g_timeout_add ( 3, mouse_leave, NULL ); vl = vl - 0.008; gtk_window_set_opacity(GTK_WINDOW(window2), vl); if (vl <= 0.0) { g_source_remove (timer); return FALSE; //vl = 1.0; } } } int me() { //g_source_remove (timer); tnt=1; printf("Entered %d\n", tnt); mouse_enter(); }