Пример #1
0
static void
animation_done_cb (GstyleSlidein *self)
{
  GstyleSlideinDirectionType animation_direction;

  g_assert (GSTYLE_IS_SLIDEIN (self));

  if (self->is_opening)
    {
      animate_stop (self);
      animation_direction = self->direction_type;
      self->revealed = TRUE;

      gtk_grab_add (GTK_WIDGET (self));
      gtk_event_box_set_above_child (GTK_EVENT_BOX (self), TRUE);
      gtk_widget_set_can_focus (self->overlay_child, TRUE);
      gtk_widget_grab_focus (self->overlay_child);
    }
  else if (self->is_closing)
    {
      animate_stop (self);
      animation_direction = self->direction_type_reverse;
      self->revealed = FALSE;

      gtk_event_box_set_above_child (GTK_EVENT_BOX (self), FALSE);
    }
  else
    g_assert_not_reached ();

  self->is_closing = self->is_opening = FALSE;
  self->offset = self->dst_offset;

  g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_REVEALED]);
  g_signal_emit (self, signals [REVEALED], 0, animation_direction, self->revealed);
}
Пример #2
0
/// update the scene during animation playback
void animate_update() {
    float dt = update_timer.elapsed();
    if(fixed_dt) dt = clamp(1/30.0f,0.0f,animate_interval.max-draw_opts.time);
    else dt = clamp(dt,0.0f,animate_interval.max-draw_opts.time);
    if(dt > 0) {
        draw_opts.time += dt;
        scene_simulation_update(scene,dt);
        update_timer.start();
    } else {
        if(draw_opts.time >= animate_interval.max) animate_stop();
    }

    if(time_init_advance > 0.0f and draw_opts.time >= time_init_advance) {
        animate_stop();
        time_init_advance = 0.0f;
    }
}
Пример #3
0
/* src_offset and dst_offset need to be in [0.0, 1.0] range */
static gboolean
animate (GstyleSlidein *self,
         gdouble        target_offset)
{
  GtkWidget *child;

  g_assert (GSTYLE_IS_SLIDEIN (self));
  g_assert (0.0 <= target_offset && target_offset <= 1.0);

  child = gtk_bin_get_child (GTK_BIN (self));
  if (child == NULL || self->overlay_child == NULL)
    return FALSE;

  animate_stop (self);

  if (!self->duration_set)
    self->duration = gstyle_animation_check_enable_animation () ? compute_duration (self) : 0;

  self->src_offset = self->offset;
  self->dst_offset = target_offset;
  gtk_widget_set_child_visible (child, TRUE);

  if (self->src_offset == self->dst_offset)
    return FALSE;

  if (self->src_offset < self->dst_offset)
    {
      self->is_opening = TRUE;
      g_signal_emit (self, signals [OPENING], 0);
    }
  else
    {
      self->is_closing = TRUE;
      g_signal_emit (self, signals [CLOSING], 0);
    }

  if (self->duration == 0)
    {
      self->offset = target_offset;
      animation_done_cb (self);
      gtk_widget_queue_resize (GTK_WIDGET (self));
    }
  else if (!self->animation_handler_id)
    {
      self->animation_starttime = g_get_monotonic_time();
      self->animation_handler_id = gtk_widget_add_tick_callback (GTK_WIDGET (self),
                                                                 animation_tick_cb,
                                                                 self,
                                                                 NULL);
    }

  return TRUE;
}
Пример #4
0
/// keyboard event handler
void keyboard(unsigned char c, int x, int y) {
	switch(c) {
        case 27: exit(0); break;
        case 'h': print_help(); break;
        case '1': draw_opts.faces = not draw_opts.faces; break;
        case '2': draw_opts.edges = not draw_opts.edges; break;
        case '3': draw_opts.lines = not draw_opts.lines; break;
        case '4': draw_opts.control = not draw_opts.control; break;
        case '$': draw_opts.control_no_depth = not draw_opts.control_no_depth; break;
        case '5': draw_opts.gizmos = not draw_opts.gizmos; break;
        case '7': draw_opts.cameralights = not draw_opts.cameralights; break;
        case '8': tesselation_level = max(-1,tesselation_level-1); init(); break;
        case '9': tesselation_level = min(88,tesselation_level+1); init(); break;
        case '0': tesselation_smooth = !tesselation_smooth; init(); break;
        case '`': draw_opts.doublesided = not draw_opts.doublesided; break;
        case ' ': if(animating) animate_stop(); else animate_start(); break;
        case '/': init(); break;
        case '?': animate_loop = !animate_loop; break;
        case ',': animate_step(false); break;
        case '.': animate_step(true); break;
        case 'j': hud = not hud; break;
        case 'f': frame(); break;
        case 'r': reload(); break;
        case 'i': screenshot(filename_image.c_str()); break;
#ifdef AUTORELOAD
        case 'R': reload_auto = not reload_auto; break;
#endif
        case '[': selection_element_next(false); break;
        case ']': selection_element_next(true); break;
        case '\\': selection_element_clear(); break;
        case '{': selection_subelement_next(false); break;
        case '}': selection_subelement_next(true); break;
        case '|': selection_subelement_clear(); break;
        case 'a': selection_move( - x3f * selecion_speed_keyboard_translate ); break;
        case 'd': selection_move(   x3f * selecion_speed_keyboard_translate ); break;
        case 'w': selection_move(   z3f * selecion_speed_keyboard_translate ); break;
        case 's': selection_move( - z3f * selecion_speed_keyboard_translate ); break;
        case 'q': selection_move( - y3f * selecion_speed_keyboard_translate ); break;
        case 'e': selection_move(   y3f * selecion_speed_keyboard_translate ); break;
        case 'A': selection_rotate( - x3f * selecion_speed_keyboard_rotate ); break;
        case 'D': selection_rotate(   x3f * selecion_speed_keyboard_rotate ); break;
        case 'W': selection_rotate(   z3f * selecion_speed_keyboard_rotate ); break;
        case 'S': selection_rotate( - z3f * selecion_speed_keyboard_rotate ); break;
        case 'Q': selection_rotate( - y3f * selecion_speed_keyboard_rotate ); break;
        case 'E': selection_rotate(   y3f * selecion_speed_keyboard_rotate ); break;
		default: break;
	}
    
	glutPostRedisplay();
}