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(); }
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); }
/** * 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(); }
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; }
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); } }