void redraw_windows(void) { // center select_clear(); main_wind_center_position_in_map(); // some defaults magnify_factor=magnify_factor_default; main_wind_set_view(vw_3_panel); main_wind_set_perspective(ps_perspective); // redraw main_wind_tool_default(); menu_fix_enable(); main_wind_tool_fix_enable(); SelectWindow(mainwind); main_wind_draw(); texture_palette_reset(); }
void piece_tesselate(bool mesh) { int n,sel_count,type,mesh_idx,poly_idx; map_undo_push(); sel_count=select_count(); for (n=0;n!=sel_count;n++) { select_get(n,&type,&mesh_idx,&poly_idx); if (type==item_map_mesh) { if (mesh) { map_mesh_tesselate(&map,mesh_idx); } else { map_mesh_poly_tesselate(&map,mesh_idx,poly_idx); } view_vbo_mesh_rebuild(mesh_idx); } } select_clear(); main_wind_draw(); }
void piece_poly_hole(void) { int n,sel_count,type,mesh_idx,poly_idx; sel_count=select_count(); for (n=0;n!=sel_count;n++) { select_get(n,&type,&mesh_idx,&poly_idx); if (type==item_map_mesh) { map_mesh_poly_punch_hole(&map,mesh_idx,poly_idx,NULL,FALSE,normal_mode_in); view_vbo_mesh_rebuild(mesh_idx); } } select_clear(); main_wind_draw(); }
gboolean mouse_xy_movement(GtkWidget *widget, GdkEventMotion *event) { // caught a mouse movement event double coordx, coordy; gchar *buffer; int excode; select_t *new_select = select_create(); select_t *select_added = select_create(); select_t *select_omitted = select_create(); if (!fldstate.mouse_selection) fldstate.mouse_selection = select_create(); coordx = event->x; coordy = event->y; pixel_to_field(&coordx, &coordy); if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) { coordx = round(coordx); coordy = round(coordy); } if (fldstate.mouse_clicked == 0x1 && mouse_currentMode == SELECTONE) { // click drag // get what's currently in selection rectangle new_select = field_select_in_rectangle(new_select, fldstate.mouse_clickx, fldstate.mouse_clicky, coordx, coordy, false); // then find what's been added, what's gone select_add_multiple(select_added, new_select); select_add_multiple(select_omitted, fldstate.mouse_selection); select_remove_multiple(select_added, fldstate.mouse_selection); select_remove_multiple(select_omitted, new_select); // Store new set select_clear(fldstate.mouse_selection); select_add_multiple(fldstate.mouse_selection, new_select); select_update_center(fldstate.mouse_selection); // add new dots if (event->state == (GDK_BUTTON_PRESS_MASK | GDK_CONTROL_MASK)) { //select_push_all(&pstate.select, &select_added, true); //select_add_multiple(&pstate.select, &select_omitted, true); select_toggle_multiple(pstate.select, select_added); select_toggle_multiple(pstate.select, select_omitted); } else if (event->state == GDK_BUTTON_PRESS_MASK) { // normal or shift-clicked //select_push_all(&pstate.select, &select_added, false); //pstate.select = select_drop_multiple(pstate.select, select_omitted); select_add_multiple(pstate.select, select_added); // drop ommitted dots select_remove_multiple(pstate.select, select_omitted); } } else fldstate.mouse_selection = NULL; fldstate.mousex = coordx; fldstate.mousey = coordy; // store mouse event excode = fieldrel_convert_xy_to_relation(&coordx, &coordy, &buffer); select_added = select_destroy(select_added); select_omitted = select_destroy(select_omitted); new_select = select_destroy(new_select); if (excode == -1) return FALSE; gtk_statusbar_pop(GTK_STATUSBAR(statusbar), GPOINTER_TO_INT(context_id)); gtk_statusbar_push(GTK_STATUSBAR(statusbar), GPOINTER_TO_INT(context_id), buffer); g_free(buffer); dr_canvas_refresh(drill); return TRUE; }
gboolean mouse_clicked(GtkWidget *widget, GdkEventButton *event) { // Handle click event on canvas int index; double coordx, coordy; select_t *select = NULL; // Length from click location to nearest dot mouse_discarded = 0; if (event->button == 8) { // back button if (event->state == GDK_SHIFT_MASK) set_prev_count(); else if (event->state == GDK_CONTROL_MASK) set_first(); else set_prev(); fldstate.mouse_clicked = 0x0; } else if (event->button == 9) { // forward button if (event->state == GDK_SHIFT_MASK) set_next_count(); else if (event->state == GDK_CONTROL_MASK) set_last(); else set_next(); fldstate.mouse_clicked = 0x0; } else if (event->button == 1) { fldstate.mouse_clicked = 0x1; mouse_clickx = event->x; mouse_clicky = event->y; pixel_to_field(&mouse_clickx, &mouse_clicky); fldstate.mouse_clickx = mouse_clickx; fldstate.mouse_clicky = mouse_clicky; switch(mouse_currentMode) { case SELECTONE: // select 1 performer select = field_get_in_area(mouse_clickx, mouse_clicky); if (event->state == GDK_CONTROL_MASK) { // ctrl-click select_toggle_multiple(pstate.select, select); } else if ((event->state & ~GDK_SHIFT_MASK)== 0) { // regular click if (select_empty(select)) { //select_dots_discard(); select_clear(pstate.select); mouse_discarded = 1; break; } index = select_get_form(select); if (!select_form_empty(select) && !select_check_form(pstate.select, index)) { // select form with ability to scale form select_clear(pstate.select); mouse_discarded = 1; select_add_form(pstate.select, select_get_form(select)); select_update_center(pstate.select); } else if (select_form_empty(select) && isSelected(select_get_dot(select)) != 1) { // dot is not selected select_clear(pstate.select); mouse_discarded = 1; if ((index = select_get_dot(select))!= -1) { select_add_dot(pstate.select, index); } } else { // hold click; dots being moved fldstate.mouse_clicked |= 0x2; } } dr_canvas_refresh(drill); break; case ADDPERF: // Add performers by clicking on canvas coordx = event->x; coordy = event->y; pixel_to_field(&coordx, &coordy); index = perf_add(); //coords_set_coord(pshow, index, coordx, coordy); coords_set(pshow->sets->currset->coords[index], coordx, coordy); dr_canvas_refresh(drill); break; case ADDFORM: break; } } else fldstate.mouse_clicked = 0; return TRUE; }
OSStatus tool_wind_event_callback(EventHandlerCallRef eventhandler,EventRef event,void *userdata) { int i,k; ControlRef ctrl; GetEventParameter(event,kEventParamDirectObject,typeControlRef,NULL,sizeof(ControlRef),NULL,&ctrl); // group combo if (ctrl==group_combo) { k=GetControl32BitValue(ctrl); // no group if (k==1) { group_set(-1); return(noErr); } // set a group group_set(k-3); return(noErr); } // buttons k=-1; for ((i=0);(i!=maxtool);i++) { if (ctrl==tool_ctrl[i]) { k=i; break; } } if (k!=-1) undo_clear(); switch (k) { case 0: vertex_mode=vm_none; SetControlValue(tool_ctrl[0],1); SetControlValue(tool_ctrl[1],0); SetControlValue(tool_ctrl[2],0); break; case 1: vertex_mode=vm_lock; SetControlValue(tool_ctrl[0],0); SetControlValue(tool_ctrl[1],1); SetControlValue(tool_ctrl[2],0); break; case 2: vertex_mode=vm_snap; SetControlValue(tool_ctrl[0],0); SetControlValue(tool_ctrl[1],0); SetControlValue(tool_ctrl[2],1); break; case 3: dp_primitive=!dp_primitive; break; case 4: dp_auto_texture=!dp_auto_texture; break; case 5: SetControlValue(tool_ctrl[k],0); // pop back up main_wind_rotate_view(); main_wind_draw(); break; case 6: select_clear(); dp_wall=!dp_wall; break; case 7: select_clear(); dp_floor=!dp_floor; break; case 8: select_clear(); dp_ceiling=!dp_ceiling; break; case 9: select_clear(); dp_liquid=!dp_liquid; break; case 10: select_clear(); dp_ambient=!dp_ambient; break; case 11: select_clear(); dp_object=!dp_object; break; case 12: select_clear(); dp_lightsoundparticle=!dp_lightsoundparticle; break; case 13: select_clear(); dp_node=!dp_node; break; case 14: dp_textured=!dp_textured; break; case 15: dp_y_hide=!dp_y_hide; break; case 16: SetControlValue(tool_ctrl[k],0); // pop back up segment_sub_point(); break; case 17: SetControlValue(tool_ctrl[k],0); // pop back up segment_add_point(); break; case 18: SetControlValue(tool_ctrl[k],0); // pop back up segment_tesselate(); break; case 19: SetControlValue(tool_ctrl[k],0); // pop back up launch_map_script_editor(); break; case 20: SetControlValue(tool_ctrl[k],0); // pop back up launch_engine(); break; } menu_fix_enable(); main_wind_draw(); return(noErr); }
void node_link_select(int node_idx) { select_clear(); select_add(item_map_node,node_idx,-1); }
void piece_delete(void) { int n,i,k,nsel_count, type,main_idx,sub_idx; unsigned char *mesh_mask; map_undo_push(); // sort segment so higher indexes are deleted first select_sort(); // selections have multiple polygons in them // so keep a mesh list mesh_mask=(unsigned char*)malloc(map.mesh.nmesh); if (mesh_mask==NULL) return; bzero(mesh_mask,map.mesh.nmesh); // delete selection nsel_count=select_count(); for (n=0;n!=nsel_count;n++) { select_get(n,&type,&main_idx,&sub_idx); switch (type) { case item_map_mesh: if (state.map.select_mode==select_mode_polygon) { map_mesh_delete_poly(&map,main_idx,sub_idx); select_delete_move_index(item_map_mesh,main_idx,sub_idx); break; } if (state.map.select_mode==select_mode_mesh) { if (mesh_mask[main_idx]==0x0) map_mesh_delete(&map,main_idx); mesh_mask[main_idx]=0x1; break; } break; case item_map_liquid: map_liquid_delete(&map,main_idx); break; case item_map_spot: for (i=main_idx;i<map.nspot;i++) { map.spots[i]=map.spots[i+1]; } map.nspot--; break; case item_map_scenery: for (i=main_idx;i<map.nscenery;i++) { map.sceneries[i]=map.sceneries[i+1]; } map.nscenery--; break; case item_map_node: for (i=0;i!=map.nnode;i++) { // clear all linkage if (i==main_idx) continue; for (k=0;k!=max_node_link;k++) { if (map.nodes[i].link[k]==main_idx) map.nodes[i].link[k]=-1; if (map.nodes[i].link[k]>main_idx) map.nodes[i].link[k]--; } } for (i=main_idx;i<map.nnode;i++) { map.nodes[i]=map.nodes[i+1]; } map.nnode--; break; case item_map_light: for (i=main_idx;i<map.nlight;i++) { map.lights[i]=map.lights[i+1]; } map.nlight--; break; case item_map_sound: for (i=main_idx;i<map.nsound;i++) { map.sounds[i]=map.sounds[i+1]; } map.nsound--; break; case item_map_particle: for (i=main_idx;i<map.nparticle;i++) { map.particles[i]=map.particles[i+1]; } map.nparticle--; break; } } free(mesh_mask); select_clear(); map_palette_reset(); main_wind_draw(); }