Esempio n. 1
0
void update_results_display(void)
{ 
    char entry_str[1024] = "\0";
    char result_str[MAXENTRYLEN] = "\0";
    char disp_str[MAXENTRY*1024] = "\0";
    int pos = 0;

    char fmt[32]; 
    char val_str[32]; 
    int i = 0;
    ExprEntryDispPos[0] = 0;
    
    for (i = 0; i < Result; i++) {
        render_item(result_str, &ResultList[i]);
        sprintf(entry_str, "%s = %s", ExprEntry_str[i], result_str);
        if (strlen(Note_str[i])) {
            strcat(entry_str, " ; ");
            strcat(entry_str, Note_str[i]);
        }
        strcat(entry_str, "\n");
        pos += strlen(entry_str);
        ExprEntryDispPos[i+1] = pos;
        strcat(disp_str, entry_str);
    }
//    printf("disp_str is now '%s'\n", disp_str); fflush(0);
    WorkArea_p->value(disp_str);
    update_main_win_title();
}
Esempio n. 2
0
static void scene_video_render(void *data, gs_effect_t *effect)
{
	DARRAY(struct obs_scene_item*) remove_items;
	struct obs_scene *scene = data;
	struct obs_scene_item *item;

	da_init(remove_items);

	video_lock(scene);
	item = scene->first_item;

	gs_blend_state_push();
	gs_reset_blend_state();

	while (item) {
		if (obs_source_removed(item->source)) {
			struct obs_scene_item *del_item = item;
			item = item->next;

			remove_without_release(del_item);
			da_push_back(remove_items, &del_item);
			continue;
		}

		if (source_size_changed(item))
			update_item_transform(item);

		if (item->user_visible)
			render_item(item);

		item = item->next;
	}

	gs_blend_state_pop();

	video_unlock(scene);

	for (size_t i = 0; i < remove_items.num; i++)
		obs_sceneitem_release(remove_items.array[i]);
	da_free(remove_items);

	UNUSED_PARAMETER(effect);
}
Esempio n. 3
0
/**
 * The main render loop of the GUI
 */
void GUI::render() {

  if(m_sleeping) {
//     process_keys();
    return;
  }

  if(m_displaying_dialog) {
    if(m_dialog_buzz) buzzer_nonblocking_buzz(1);
    return;
  }

  if(m_displaying_dialog_complete) {
    m_displaying_dialog_complete=false;
    m_pause_display_updates = false;
    display_clear(0);
    clear_pending_keys();
    redraw();
  }

  if(m_repeating) {
    // This would be better incremented in a timer, but I don't want to use another timer.
    if(m_repeat_time == m_repeat_delay) {
      // verify button still pressed
      if(cap_ispressed(m_repeat_key) == false) {
        m_repeating=false;
        m_repeat_time=0;
      } else {
        if(m_repeat_key == KEY_DOWN) { receive_key(KEY_DOWN,KEY_PRESSED); }
        if(m_repeat_key == KEY_UP  ) { receive_key(KEY_UP  ,KEY_PRESSED); }
        m_repeat_time = 0;
        m_repeated = true;
      }
    }
    m_repeat_time++;
  }


  // following two items really need to be atomic...
  int32_t cscreen = current_screen;

  if(clear_next_render) {
    clear_next_render=false;
    clear_screen(clear_screen_screen,clear_screen_selected);
    first_render=true;
  }

  bool do_redraw = false;
  if(m_redraw) do_redraw = true;
  m_redraw = false;

  render_lock(m_screen_lock);
  for(int32_t n=0;n<screens_layout[cscreen].item_count;n++) {

    if(first_render) {
      if(screens_layout[current_screen].items[n].type == ITEM_TYPE_ACTION) {
        receive_gui_events.receive_gui_event(screens_layout[cscreen].items[n].text,
                                             screens_layout[cscreen].items[n].text);
      }
    }

    //bool selected = false;
    bool select_render = false;
    if(n == selected_item     ) select_render = true;
    if(n == last_selected_item) select_render = true;

    if(first_render || select_render || do_redraw) {
      //bool do_render = true;

      // don't render labels, just because they are near other things...
      //if(!first_render && select_render && (screens_layout[cscreen].items[n].type == ITEM_TYPE_LABEL)) {
      //  do_render = false;
      //}

      //if(do_render)
      bool selected = false;
      if(selected_item == n) selected=true;
      render_item(screens_layout[cscreen].items[n],selected);
    }
  }
  //last_selected_item = selected_item;

  first_render=false;
  process_keys();
}
Esempio n. 4
0
int main(int argc, char **argv) {
    // Check command-line options
    char *p;
    int a = 1;
    Fl::args(argc, argv, a);
    Fl::scheme(NULL);  // NULL causes libr. to look up style in .Xdefaults

    memset(ExprEntry_str, '\0', sizeof(ExprEntry_str));
    clear_content();

/*    
    printf("fround(0.0) is %1.2lf\n", fround(0.0));
    printf("fround(0.1) is %1.2lf\n", fround(0.1));
    printf("fround(0.49) is %1.2lf\n", fround(0.49));
    printf("fround(0.50) is %1.2lf\n", fround(0.50));
    printf("fround(0.51) is %1.2lf\n", fround(0.51));
    printf("fround(0.9) is %1.2lf\n", fround(0.9));
    printf("fround(1.0) is %1.2lf\n", fround(1.0));
    printf("fround(1.1) is %1.2lf\n", fround(1.1));
    printf("fround(-0.1) is %1.2lf\n", fround(-0.1));
    printf("fround(-0.4) is %1.2lf\n", fround(-0.4));
    printf("fround(-0.5) is %1.2lf\n", fround(-0.5));
    printf("fround(-0.51) is %1.2lf\n", fround(-0.51));
    printf("fround(-0.9) is %1.2lf\n", fround(-0.9));
    printf("fround(-1.0) is %1.2lf\n", fround(-1.0));
    printf("fround(-1.1) is %1.2lf\n", fround(-1.1));
    printf("fround(-1.4) is %1.2lf\n", fround(-1.4));
    printf("fround(-1.5) is %1.2lf\n", fround(-1.5));
    printf("fround(-1.6) is %1.2lf\n", fround(-1.6));
    printf("fround(-1.9) is %1.2lf\n", fround(-1.9));
    printf("\n");
    
    printf("123.34 has %d significant digits\n", sig_digits(123.45));
    printf("7 has %d significant digits\n", sig_digits(7));
    printf("654.00001 has %d significant digits\n", sig_digits(654.00001));
    printf("-123.34 has %d significant digits\n", sig_digits(-123.45));
    printf("-7 has %d significant digits\n", sig_digits(-7));
    printf("-654.00001 has %d significant digits\n", sig_digits(-654.00001));
    printf("1.234e10 has %d significant digits\n", sig_digits(1.234e10));
    printf("0.0001200560000 has %d significant digits\n", sig_digits(0.0001200560000));
    printf("-1.20056e-4 has %d significant digits\n", sig_digits(-1.20056e-4));

    //return 0;
*/    
    char num_str[8];
    int i;
    for(i = 0; i < MAXENTRY; i++) {
        sprintf(num_str, "%d\n", i);
        strcat(RowLabels_str, num_str);
    }

    //printf("argc is %d\n", argc); fflush(0);
    char cmdline_expr[MAXENTRYLEN] = "";
    char expr_prepped_str[MAXENTRYLEN] = "";
    while (a < argc) {
        p = argv[a];
        if (*p == '-' && *(p+1) == '-') {
            // OK, it's some kind of option
            char option = *(p+2);
            if (option == 't') {
                // Change terseness/verbosity threshold
                if (*(p+3)) {
                    SayThreshold = *(p+3) - '0';
                    SAY(1, "Terseness level is %d\n", SayThreshold); 
                }
                else if (a+1 < argc) {
                    a++;
                    p = argv[a];
                    SayThreshold = *p - '0';
                    SAY(1, "Terseness level is %d\n", SayThreshold); 
                }
            }
            else if (option == 'd') {
                // Change angle encoding to degrees 
                AngleUnitsAreDegrees = 1;
                SAY(1, "Angles expressed as degrees\n"); 
            }
            else if (option == 'r') {
                // Change angle encoding to radians 
                AngleUnitsAreDegrees = 0;
                SAY(1, "Angles expressed as radians\n"); 
            }
            else if (option == 'p') {
                // Switch to Reverse Polish Notation (RPN) entry syntax
                InputMode = RPN_INPUT;
                SAY(1, "Input syntanx mode is RPN (Reverse Polish Notation)\n"); fflush(0);
            }
            else if (option == 'v') {
                // Print name and version 
                update_main_win_title();
                printf("%s\n", Title_str); fflush(0);
            }
            else if (option == 'f') {
                // Pre-load a specific workspace content file 
                char filespec_str[MAXENTRYLEN] = "";
                if (*(p+3)) {
                    strcpy (CurrentFileSpec_str, (p+3));
                }
                else {
                    a++;
                    if (*argv[a]) {
                        strcpy (CurrentFileSpec_str, argv[a]);
                    }
                }
                if (!*CurrentFileSpec_str) {
                    fl_alert("File not specified!\n");
                }
            }
            a++;
        }
        else {
            // assume the remainder of command-line is math expression
            while (a < argc) {
                strncat(cmdline_expr, argv[a], 32);
                strcat(cmdline_expr, " ");
                a++;
            }
            SAY(1, "Commandline expression is '%s'\n", cmdline_expr);
            if (strlen(cmdline_expr)) {
                int rc = calculate_expr(cmdline_expr, ExprEntry_str[Result], Result);
                if (rc == CALC_SUCCESS) {
                    char result_str[64];
                    render_item(result_str, &ResultList[Result]);
                    printf("%s = %s\n", ExprEntry_str[Result], result_str);
                    return 0;
                }
                else {
                    if (rc == CALC_UNBALANCED) {
                        printf("Expression is unbalanced! Check parentheses carefully.\n");
                    }
                    else if (rc == CALC_ERROR) {
                        printf("Expression cannot be calculated!\n");
                    }
                    return 1;
                }
            }
        }
    }
    //fl_register_images();
    update_main_win_title();
    MainWin_p = new Fl_Window(560,352, Title_str);

    MainWin_p->begin();
    
    Fl_Scroll expr_win_scroll(6, 12, 546, 258);
    expr_win_scroll.begin();    
    Fl_Pack expr_win_group(6, 12, 546, 1024);
    expr_win_group.type(FL_HORIZONTAL);
    expr_win_group.begin();
  
    RowLabels_p = new Fl_Multiline_Output(6, 12,  30, 1024 );
    RowLabels_p->box(FL_FLAT_BOX);
    RowLabels_p->color(FL_BACKGROUND_COLOR);
    RowLabels_p->align(FL_ALIGN_RIGHT);
    RowLabels_p->value(RowLabels_str);
    
    WorkArea_p = new Fl_Multiline_Input(40, 10,  500, 1024 );
    WorkArea_p->box(FL_FLAT_BOX);
    WorkArea_p->label("");
    WorkArea_p->when(FL_WHEN_ENTER_KEY);
    WorkArea_p->callback(workarea_callback);
    WorkArea_p->take_focus();
    update_results_display();
    WorkArea_p->position(0,0);
    expr_win_group.end();
    expr_win_scroll.end();
    
    QuitBtn_p =  new Fl_Button(30, 280, 60, 30, "Quit");
    QuitBtn_p->callback(quit_callback);
    QuitBtn_p->shortcut(FL_Escape);
        
    OpenBtn_p =  new Fl_Button(120, 280, 60, 30, "Open...");
    OpenBtn_p->callback(open_callback);
    OpenBtn_p->shortcut(FL_CTRL + 'o');
        
    SaveBtn_p =  new Fl_Button(210, 280, 60, 30, "Save...");
    SaveBtn_p->callback(save_callback);
    SaveBtn_p->deactivate();
    SaveBtn_p->shortcut(FL_CTRL + 's');
        
    ClearBtn_p =  new Fl_Button(300, 280, 60, 30, "Clear");
    ClearBtn_p->callback(clear_callback);
    ClearBtn_p->shortcut(FL_CTRL + 'c');

    HintBtn_p =  new Fl_Button(420, 280, 30, 30, "!");
    HintBtn_p->callback(hint_callback);
    HintBtn_p->tooltip("Hints");
    HintBtn_p->shortcut(FL_CTRL + 'i');

    AboutBtn_p =  new Fl_Button(460, 280, 30, 30, "a");
    AboutBtn_p->callback(about_callback);
    AboutBtn_p->tooltip("About Flume");
    AboutBtn_p->shortcut(FL_CTRL + 'a');

    HelpBtn_p =  new Fl_Button(500, 280, 30, 30, "?");
    HelpBtn_p->callback(help_callback);
    HelpBtn_p->tooltip("Help (F1)");
    HelpBtn_p->shortcut(FL_F + 1);

    Fl_Box* pAngleLabel = new Fl_Box(20, 325, 40, 12, "Angles:");
    pAngleLabel->box(FL_FLAT_BOX);
    RadAngleBtn_p = new Fl_Round_Button(72, 324, 80, 16, "Radians");
    RadAngleBtn_p->value(AngleUnitsAreDegrees ? 0 : 1);
    RadAngleBtn_p->callback(radians_callback);

    DegAngleBtn_p = new Fl_Round_Button(152, 324, 80, 16, "Degrees");
    DegAngleBtn_p->value(AngleUnitsAreDegrees ? 1 : 0);
    DegAngleBtn_p->callback(degrees_callback);
    
    RpnModeChk_p = new Fl_Check_Button(280, 324, 96, 16, "RPN mode");
    RpnModeChk_p->value((InputMode == RPN_INPUT) ? 1 : 0);
    RpnModeChk_p->callback(rpn_callback);
    
    TrackSigChk_p = new Fl_Check_Button(392, 324, 140, 16, "Track significance");
    TrackSigChk_p->value(TrackSignificance);
    TrackSigChk_p->callback(track_sig_callback);
    
    MainWin_p->end();
    
    if (*CurrentFileSpec_str) {
        if (!load_content(CurrentFileSpec_str)) {
            fl_alert("File not loadable!\n");
        }
    }
    
    MainWin_p->show(argc, argv);
    Running = 1;
    while(Running && Fl::wait());
    return 0;
}
Esempio n. 5
0
void render_world(void) {
    // posicion absoluta en el mundo de la izquierda de la pantalla
    t_pos left_absolute_x=world_get_left_absolute_x();
    t_pos block_width=500.0;
    
    int iblock=(int)(left_absolute_x/block_width);
    int i;
//    int ibackblock=(int)((left_absolute_x/2.0)/(block_width*2.0));
	
    //background
    
    render_background();
    
    t_pos tile_x;
    
    float slow_factor=1/10.0;  // 1 = foreground speed  0 = static background
    float level_factor=10.0;  // 1 = foreground speed  n = 1 background por cada n de foreground
    
    t_pos back_tile_x;
    t_pos back_tile_w=assets_tiles[4].out_bounds.w;
    back_tile_x= back_tile_w*(int)(world.player.x*slow_factor/back_tile_w) - world.player.x*slow_factor +(world.cam_x+200)*slow_factor -world.cam_x;

    back_tile_x= (int)((world.player.x+world.cam_x)/(back_tile_w*level_factor)) + (world.player.x+world.cam_x)/level_factor -world.player.x - world.cam_x;

    back_tile_x= back_tile_w*(int)((world.player.x+world.cam_x)/(back_tile_w*level_factor)) + (world.player.x+world.cam_x)*(1.0-1.0/level_factor) -world.player.x - world.cam_x;

    int back_i;
    back_i=(int)((world.player.x+world.cam_x)/(back_tile_w*level_factor));
    
    back_tile_x=round(back_tile_x);
//    back_tile_x+=400;
    
//    glBlendColor(0.8,0.8,0.8,0.6);
//    glBlendFunc(GL_CONSTANT_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_FOG);
    glPushMatrix();
    glTranslatef(0, 0, 0.4);
    
    int fondo_id_ant,fondo_id,fondo_id_sig,fondo_id_sigsig;
    fondo_id=((back_i/3)%2)==0?AST_TILE_FONDO:AST_TILE_FONDO2;
    fondo_id_ant=(((back_i-1)/3)%2)==0?AST_TILE_FONDO:AST_TILE_FONDO2;
    fondo_id_sig=(((back_i+1)/3)%2)==0?AST_TILE_FONDO:AST_TILE_FONDO2;
    fondo_id_sigsig=(((back_i+2)/3)%2)==0?AST_TILE_FONDO:AST_TILE_FONDO2;
    
    render_tile_num(back_tile_x-back_tile_w, c_floor_level-20.0, fondo_id_ant);
    render_tile_num(back_tile_x, c_floor_level-20.0, fondo_id);
    render_tile_num(back_tile_x+back_tile_w, c_floor_level-20.0, fondo_id_sig);
    if (fondo_id_ant==AST_TILE_FONDO && fondo_id==AST_TILE_FONDO2) {
        render_tile_num(back_tile_x-145, c_floor_level-20.0 -1 , AST_TILE_FONDO_TRANS12);
    } else if (fondo_id_ant==AST_TILE_FONDO2 && fondo_id==AST_TILE_FONDO) {
        render_tile_num(back_tile_x-134, c_floor_level-30.0 +9 , AST_TILE_FONDO_TRANS21);
    }
    if (fondo_id==AST_TILE_FONDO && fondo_id_sig==AST_TILE_FONDO2) {
        render_tile_num(back_tile_x+back_tile_w-145, c_floor_level-20.0 -1 , AST_TILE_FONDO_TRANS12);
    } else if (fondo_id==AST_TILE_FONDO2 && fondo_id_sig==AST_TILE_FONDO) {
//        glColor3f(1,1,1);
//        render_box(back_tile_x+back_tile_w-134+134-340 +340/2, c_floor_level-30.0 +9 +100 +390/2,340/2,390/2);
        render_tile_num(back_tile_x+back_tile_w-134, c_floor_level-30.0 +9 , AST_TILE_FONDO_TRANS21);
    }
    if (fondo_id_sig==AST_TILE_FONDO && fondo_id_sigsig==AST_TILE_FONDO2) {
        render_tile_num(back_tile_x+2*back_tile_w-145, c_floor_level-20.0 -1 , AST_TILE_FONDO_TRANS12);
    } else if (fondo_id_sig==AST_TILE_FONDO2 && fondo_id_sigsig==AST_TILE_FONDO) {
        //        glColor3f(1,1,1);
        //        render_box(back_tile_x+back_tile_w-134+134-340 +340/2, c_floor_level-30.0 +9 +100 +390/2,340/2,390/2);
        render_tile_num(back_tile_x+2*back_tile_w-134, c_floor_level-30.0 +9 , AST_TILE_FONDO_TRANS21);
    }
    glPopMatrix();
    glDisable(GL_FOG);
//    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

    
    // solo provisional por ver tres planos
//    slow_factor=0.6;
//    back_tile_w=assets_tiles[1].out_bounds.w+100;
//    back_tile_x=-left_absolute_x*slow_factor+back_tile_w*(int)(left_absolute_x*slow_factor/back_tile_w);
//    render_tile_num(back_tile_x, c_floor_level, AST_TILE_CASAS1);
//    render_tile_num(back_tile_x+back_tile_w, c_floor_level, AST_TILE_CASAS1);

    
    glColor4f(1,0,0,1);
    render_back_zone(1,0);
    glColor4f(0,1,0,1);
    render_back_zone(1,1);
    glColor4f(0,0,1,1);
    render_back_zone(1,2);    
    
    glColor4f(1,0,0,1);
    render_back_zone(0,0);
    glColor4f(0,1,0,1);
    render_back_zone(0,1);
    glColor4f(0,0,1,1);
    render_back_zone(0,2);
    
    
//    for (i=0;i<2;i++) {
//        tile_x=(ibackblock+i)*block_width*2.0-(world.player.x+world.cam_x)/2.0;
//        glColor4f(0,.3,0,1);
//        render_mountain(tile_x,c_floor_level+50,470,150);
//    }
		
//    for (i=0;i<3;i++) {
//        tile_x=(iblock+i)*block_width-world.player.x-world.cam_x - 100.0;
//     //   render_tile_num(tile_x, c_floor_level-70, AST_TILE_SUELO);
//     //   glColor4f(.5,.3,.3,1);
//     //   render_tile(tile_x,c_floor_level-30,block_width-10,40);
//     //   glColor4f(.3,.3,.3,1);
//        //        render_tile(tile_x+110,c_floor_level,100,100);
//        //        render_tile_num(tile_x+110,c_floor_level,AST_TILE_ARBOL2);
//    }	
	
	
    // items
    t_item_iterator iter_i;
    item_iterate_init(&iter_i);
    t_itemPtr item;
    while ( NULL != (item=item_iterate_next(&world, &iter_i)) ) {
        render_item(item);
    }

    // cansados
    t_sprite_iterator iter;
    world_iterate_sprites(&iter);
    t_spritePtr sprite;
    while ( NULL != (sprite=world_iterate_next(&iter)) ) {
        if (sprite->sprite_class->id==SPRCLS_ID_CANSADO) {
            render_sprite(sprite);
        }
    }
    
    // walkers pero no bicis
    world_iterate_sprites(&iter);
    while ( NULL != (sprite=world_iterate_next(&iter)) ) {
        if (sprite->sprite_class->id==SPRCLS_ID_PEREGRINO || sprite->sprite_class->id==SPRCLS_ID_BORDONERO) {
            render_sprite(sprite);
        }
    }
    
    
    //player
    render_sprite(&world.player);

	
    // bicis aparte
    world_iterate_sprites(&iter);
    while ( NULL != (sprite=world_iterate_next(&iter)) ) {
        if (sprite->sprite_class->id==SPRCLS_ID_BICI) {
            render_sprite(sprite);
        }
    }

    
    
    for (i=0;i<3;i++) {
        tile_x=(iblock+i)*block_width-world.player.x-world.cam_x;
        glColor4f(0,1,0,1);
        //        render_tile(tile_x,c_floor_level-40,block_width-10,40);
        render_tile_num(tile_x, c_floor_level-100.0, AST_TILE_SUELO);
        glColor4f(.3,.3,.3,1);
        //        render_tile(tile_x+110,c_floor_level,100,100);
        //        render_tile_num(tile_x+110,c_floor_level,AST_TILE_ARBOL2);
    }
    
    
    render_bocina();
    
    int pading=30, hpading=10;
    render_tile_num(pading,pading-hpading*game_salto_pressed,AST_TILE_BTN_SALTAR);
    render_tile_num(160+pading,pading-hpading*game_esquivar_pressed,AST_TILE_BTN_ESQUIVAR);
    render_tile_num(810+pading,pading-hpading*game_hit_pressed,AST_TILE_BTN_PEGAR);
    render_tile_num(660+pading,pading-hpading*game_stop_pressed,AST_TILE_BTN_ANDAR);
    
    render_tile_num(860, 535, AST_TILE_BTN_PAUSE);
    
    if ( world.player.anim_state_id==STID_PLAYER_TIRED ) {
        //render_label_num(250, 300, 15);
        //render_tile(300, 300, &text_gameover_tile);
        render_tile_num(180,300,AST_TILE_GAMEOVER);
    }
    
    if (world.t<2.8) {
        render_tile_num(305,300,AST_TILE_READY);
    } else if (world.t<3.6) {
        render_tile_num(390/*-world.player.x+500.0*/,300,AST_TILE_GO);        
    }

}