Ejemplo n.º 1
0
// Down click handler
static void prv_down_click_handler(ClickRecognizerRef recognizer, void *ctx) {
  // rewind timer if clicked while timer is going off
  if (main_timer_rewind() || main_data.control_mode == ControlModeCounting) {
    return;
  }
  // increment timer
  int64_t increment;
  if (main_data.control_mode == ControlModeEditHr) {
    increment = -MSEC_IN_HR;
  } else if (main_data.control_mode == ControlModeEditMin) {
    increment = -MSEC_IN_MIN;
  } else {
    increment = -MSEC_IN_SEC;
  }
  timer_increment(increment);
  // check if switched out of ControlModeEditHr
  if (timer_get_value_ms() / MSEC_IN_HR == 0 && main_data.control_mode == ControlModeEditHr) {
    main_data.control_mode = ControlModeEditMin;
  }
  // animate and refresh
  if (!click_recognizer_is_repeating(recognizer)) {
    drawing_start_bounce_animation(false);
  }
  drawing_update();
  layer_mark_dirty(main_data.layer);
}
Ejemplo n.º 2
0
// Select long click handler
static void prv_select_long_click_handler(ClickRecognizerRef recognizer, void *ctx) {
  main_data.control_mode = ControlModeEditMin;
  timer_reset();
  // animate and refresh
  drawing_update();
  layer_mark_dirty(main_data.layer);
}
Ejemplo n.º 3
0
// Select click handler
static void prv_select_click_handler(ClickRecognizerRef recognizer, void *ctx) {
  // rewind timer if clicked while timer is going off
  if (main_timer_rewind()) {
    return;
  }
  // change timer mode
  switch (main_data.control_mode) {
    case ControlModeEditHr:
      main_data.control_mode = ControlModeEditMin;
      break;
    case ControlModeEditMin:
      main_data.control_mode = ControlModeEditSec;
      break;
    case ControlModeEditSec:
      main_data.control_mode = ControlModeCounting;
      timer_toggle_play_pause();
      if (!main_data.app_timer) {
        prv_app_timer_callback(NULL);
      }
      break;
    case ControlModeCounting:
      main_data.control_mode = ControlModeEditSec;
      timer_toggle_play_pause();
      break;
  }
  // refresh
  drawing_update();
  layer_mark_dirty(main_data.layer);
}
Ejemplo n.º 4
0
int main (int argc, char **argv) {
    cpSpace *space = cpSpaceNew();
    cpSpaceSetGravity(space, cpv(0, GRAVITY));
    cpEnableSegmentToSegmentCollisions();
    
    cpShape *ground = cpSpaceAddShape(space, cpSegmentShapeNew(space->staticBody, cpv(0, 5), cpv(10, -5), 0));
    cpShapeSetFriction(ground, 0.3);
    
    cpBody *drawing = drawing_new(2, 7, 0);
    drawing = drawing_update(space, drawing, 3, 8);
    drawing = drawing_update(space, drawing, 3, 9);
    drawing = drawing_update(space, drawing, 2, 9);
    //cpBody *drawing = drawing_new(0, 0, 0);
    //drawing = drawing_update(space, drawing, 2, 0);
    //drawing = drawing_update(space, drawing, 2, 2);
    //drawing = drawing_update(space, drawing, 0, 2);
    print_positions(drawing);
    
    //drawing_activate(drawing);
    //print_positions(drawing);
    
    cpVect vel, pos;
    int i = 0;
    for(cpFloat time = 0; time < 2; time += TIMESTEP){
        pos = cpBodyGetPos(drawing);
        vel = cpBodyGetVel(drawing);
        
        printf( "Time = %2.2f Position = (%2.2f, %2.2f) Velocity = (%2.2f, %2.2f)\n",
            time, pos.x, pos.y, vel.x, vel.y);
        cpSpaceStep(space, TIMESTEP);
        
        i++;
        if (i == 20) {
            drawing_activate(space, drawing);
            print_positions(drawing);
        }
    }
    print_positions(drawing);
    
    free_body_full(drawing);
    cpShapeFree(ground);
    cpSpaceFree(space);
    return EXIT_SUCCESS;
}
Ejemplo n.º 5
0
static gboolean motion_notify_event_cb(GtkWidget *widget, GdkEventMotion *event, Gui *gui){
  //only add to the body if it is not NULL
  if ((event->state && GDK_BUTTON1_MASK) && (gui->current_body != NULL)){
    float x = (float)event->x / (float)PIXELS_PER_METER;
    float y = (float)(-event->y + WINDOW_HEIGHT) / (float)PIXELS_PER_METER ;
    
    gui->current_body = drawing_update(gui->space, gui->current_body, x, y);
  }	
  
  return TRUE;
}
Ejemplo n.º 6
0
// Rewind timer if button is clicked to stop vibration
static bool main_timer_rewind(void) {
  // check if timer is vibrating
  if (timer_is_vibrating()) {
    vibes_cancel();
    main_data.control_mode = ControlModeEditSec;
    timer_rewind();
    drawing_update();
    return true;
  }
  return false;
}
Ejemplo n.º 7
0
// AppTimer callback
static void prv_app_timer_callback(void *data) {
  // check if timer is complete
  timer_check_elapsed();
  // refresh
  drawing_update();
  layer_mark_dirty(main_data.layer);
  // schedule next call
  main_data.app_timer = NULL;
  if (main_data.control_mode == ControlModeCounting) {
    uint32_t duration = timer_get_value_ms() % MSEC_IN_SEC;
    if (timer_is_chrono()) {
      duration = MSEC_IN_SEC - duration;
    }
    main_data.app_timer = app_timer_register(duration + 5, prv_app_timer_callback, NULL);
  }
}
Ejemplo n.º 8
0
// Back click handler
static void prv_back_click_handler(ClickRecognizerRef recognizer, void *ctx) {
  // cancel vibrations
  vibes_cancel();
  // get time parts
  uint16_t hr, min, sec;
  timer_get_time_parts(&hr, &min, &sec);
  // change control mode
  if ((hr && main_data.control_mode == ControlModeEditMin) ||
      main_data.control_mode == ControlModeEditSec) {
    main_data.control_mode--;
  } else {
    window_stack_pop(true);
  }
  // refresh
  drawing_update();
  layer_mark_dirty(main_data.layer);
}
Ejemplo n.º 9
0
// Up click handler
static void prv_up_click_handler(ClickRecognizerRef recognizer, void *ctx) {
  // rewind timer if clicked while timer is going off
  if (main_timer_rewind() || main_data.control_mode == ControlModeCounting) {
    return;
  }
  // increment timer
  int64_t increment;
  if (main_data.control_mode == ControlModeEditHr) {
    increment = MSEC_IN_HR;
  } else if (main_data.control_mode == ControlModeEditMin) {
    increment = MSEC_IN_MIN;
  } else {
    increment = MSEC_IN_SEC;
  }
  // get starting time components
  uint16_t o_hr, o_min, o_sec;
  timer_get_time_parts(&o_hr, &o_min, &o_sec);
  // increment timer
  timer_increment(increment);
  // compare final time parts and switch into edit hr mode
  uint16_t n_hr, n_min, n_sec;
  timer_get_time_parts(&n_hr, &n_min, &n_sec);
  if (o_min > n_min && !o_hr) {
    timer_increment(MSEC_IN_HR);
    main_data.control_mode = ControlModeEditHr;
  }
  // check if switched out of ControlModeEditHr
  if (timer_get_value_ms() / MSEC_IN_HR == 0 && main_data.control_mode == ControlModeEditHr) {
    main_data.control_mode = ControlModeEditMin;
  }
  // animate and refresh
  if (!click_recognizer_is_repeating(recognizer)) {
    drawing_start_bounce_animation(true);
  }
  drawing_update();
  layer_mark_dirty(main_data.layer);
}