Changeset 1527 for trunk/core/gui_osd.c
- Timestamp:
- 01/04/12 10:53:44 (17 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
core/gui_osd.c (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/reyalp-flt merged: 1466,1468-1470,1478-1480,1482,1484-1487,1490-1492,1496-1497,1499-1526
- Property svn:mergeinfo changed
-
trunk/core/gui_osd.c
r1505 r1527 15 15 #include "gui_grid.h" 16 16 #include "gui_osd.h" 17 18 //------------------------------------------------------------------- 19 void gui_osd_kbd_process(); 20 void gui_osd_draw(int enforce_redraw); 21 22 gui_handler layoutGuiHandler = { GUI_MODE_OSD, gui_osd_draw, gui_osd_kbd_process, gui_default_kbd_process_menu_btn, 0, GUI_MODE_MAGICNUM }; // THIS IS OSD LAYOUT EDITOR 17 23 18 24 //------------------------------------------------------------------- … … 102 108 step = 10; 103 109 draw_restore(); 110 } 111 112 //------------------------------------------------------------------- 113 void gui_draw_osd_le(int arg) { 114 gui_set_mode(&layoutGuiHandler); 115 gui_osd_init(); 104 116 } 105 117 … … 128 140 } 129 141 sprintf(osd_buf, " %s: x:%d y:%d s:%d ", lang_str(osd[curr_item].title), osd[curr_item].pos->x, osd[curr_item].pos->y, step); 130 draw_string(0, (osd[curr_item].pos->x<strlen(osd_buf)*FONT_WIDTH+4 && osd[curr_item].pos->y<FONT_HEIGHT+4)? screen_height-FONT_HEIGHT:0,142 draw_string(0, (osd[curr_item].pos->x<strlen(osd_buf)*FONT_WIDTH+4 && osd[curr_item].pos->y<FONT_HEIGHT+4)?camera_screen.height-FONT_HEIGHT:0, 131 143 osd_buf, MAKE_COLOR(COLOR_RED, COLOR_WHITE)); 132 144 osd_to_draw = 0; … … 144 156 break; 145 157 case KEY_RIGHT: 146 if (osd[curr_item].pos->x < screen_width-osd[curr_item].size.x) {147 osd[curr_item].pos->x+=( screen_width-osd[curr_item].size.x-osd[curr_item].pos->x>step)?step:screen_width-osd[curr_item].size.x-osd[curr_item].pos->x;158 if (osd[curr_item].pos->x < camera_screen.width-osd[curr_item].size.x) { 159 osd[curr_item].pos->x+=(camera_screen.width-osd[curr_item].size.x-osd[curr_item].pos->x>step)?step:camera_screen.width-osd[curr_item].size.x-osd[curr_item].pos->x; 148 160 osd_to_draw = 1; 149 161 } else 150 osd[curr_item].pos->x = screen_width-osd[curr_item].size.x;162 osd[curr_item].pos->x = camera_screen.width-osd[curr_item].size.x; 151 163 break; 152 164 case KEY_UP: … … 157 169 break; 158 170 case KEY_DOWN: 159 if (osd[curr_item].pos->y < screen_height-osd[curr_item].size.y) {160 osd[curr_item].pos->y+=( screen_height-osd[curr_item].size.y-osd[curr_item].pos->y>step)?step:screen_height-osd[curr_item].size.y-osd[curr_item].pos->y;171 if (osd[curr_item].pos->y < camera_screen.height-osd[curr_item].size.y) { 172 osd[curr_item].pos->y+=(camera_screen.height-osd[curr_item].size.y-osd[curr_item].pos->y>step)?step:camera_screen.height-osd[curr_item].size.y-osd[curr_item].pos->y; 161 173 osd_to_draw = 1; 162 174 } else 163 osd[curr_item].pos->y = screen_height-osd[curr_item].size.y;175 osd[curr_item].pos->y = camera_screen.height-osd[curr_item].size.y; 164 176 break; 165 177 case KEY_SET: … … 255 267 timer = 0; 256 268 #if defined (CAM_ZEBRA_NOBUF) 257 buffer_size= screen_buffer_size-ZEBRA_HMARGIN0*screen_buffer_width;269 buffer_size=camera_screen.buffer_size-ZEBRA_HMARGIN0*camera_screen.buffer_width; 258 270 buf=vid_get_bitmap_fb(); 259 271 #elif defined (CAM_ZEBRA_ASPECT_ADJUST) 260 buffer_size= screen_buffer_size-ZEBRA_HMARGIN0*screen_buffer_width;272 buffer_size=camera_screen.buffer_size-ZEBRA_HMARGIN0*camera_screen.buffer_width; 261 273 buf = malloc(buffer_size); 262 274 //~ if (!buf) draw_txt_string(0, 14, "Warn: No space to allocate zebra buffer: restart camera", MAKE_COLOR(COLOR_ALT_BG, COLOR_FG)); … … 265 277 //~ msleep(50); 266 278 #else 267 buf = malloc( screen_buffer_size);279 buf = malloc(camera_screen.buffer_size); 268 280 #endif 269 281 scr_buf = vid_get_bitmap_fb(); 270 282 #if ZEBRA_CANONOSD_BORDER_RESTORE 271 cur_buf_top = malloc( screen_buffer_width * ZFIX_TOP);272 cur_buf_bot = malloc( screen_buffer_width * ZFIX_BOTTOM);283 cur_buf_top = malloc(camera_screen.buffer_width * ZFIX_TOP); 284 cur_buf_bot = malloc(camera_screen.buffer_width * ZFIX_BOTTOM); 273 285 #if defined (CAM_ZEBRA_ASPECT_ADJUST) 274 if (cur_buf_top) memset(cur_buf_top,0, screen_buffer_width * ZFIX_TOP);275 if (cur_buf_bot) memset(cur_buf_bot,0, screen_buffer_width * ZFIX_BOTTOM);286 if (cur_buf_top) memset(cur_buf_top,0,camera_screen.buffer_width * ZFIX_TOP); 287 if (cur_buf_bot) memset(cur_buf_bot,0,camera_screen.buffer_width * ZFIX_BOTTOM); 276 288 #endif 277 289 #else 278 cur_buf = malloc( screen_buffer_size);290 cur_buf = malloc(camera_screen.buffer_size); 279 291 #endif 280 292 // cleanup and disable zebra if any mallocs failed … … 291 303 #if CAM_HAS_VARIABLE_ASPECT 292 304 else // in variable aspect, the borders would never be cleared 293 memset(buf,0, screen_buffer_size);305 memset(buf,0,camera_screen.buffer_size); 294 306 #endif 295 307 } … … 317 329 //------------------------------------------------------------------- 318 330 int draw_guard_pixel() { 319 unsigned char* buffer1 = vid_get_bitmap_fb()+ screen_buffer_size/2;320 unsigned char* buffer2 = buffer1+ screen_buffer_size;331 unsigned char* buffer1 = vid_get_bitmap_fb()+camera_screen.buffer_size/2; 332 unsigned char* buffer2 = buffer1+camera_screen.buffer_size; 321 333 int has_disappeared=0; 322 334 … … 332 344 unsigned int a; 333 345 334 a= screen_buffer_size - screen_buffer_width * ZFIX_BOTTOM;346 a=camera_screen.buffer_size - camera_screen.buffer_width * ZFIX_BOTTOM; 335 347 336 if (idx < screen_buffer_width * ZFIX_TOP) return(cur_buf_top[idx]);337 if (idx >= a && idx < screen_buffer_size) return(cur_buf_bot[idx - a]);348 if (idx < camera_screen.buffer_width * ZFIX_TOP) return(cur_buf_top[idx]); 349 if (idx >= a && idx < camera_screen.buffer_size) return(cur_buf_bot[idx - a]); 338 350 return (COLOR_TRANSPARENT); 339 351 } … … 473 485 if (f) { 474 486 if (viewport_yoffset > 0) { // clear top & bottom areas of buffer if image height if smaller than viewport 475 memset(buf, COLOR_TRANSPARENT, viewport_yoffset* screen_buffer_width);476 memset(buf+(viewport_yoffset+viewport_height)* screen_buffer_width, COLOR_TRANSPARENT, viewport_yoffset*screen_buffer_width);487 memset(buf, COLOR_TRANSPARENT, viewport_yoffset*camera_screen.buffer_width); 488 memset(buf+(viewport_yoffset+viewport_height)*camera_screen.buffer_width, COLOR_TRANSPARENT, viewport_yoffset*camera_screen.buffer_width); 477 489 } 478 490 int step_x, step_v, sy, sx; … … 480 492 if (conf.zebra_multichannel) {step_x=2; step_v=6;} else {step_x=1; step_v=3;} 481 493 for (y=viewport_yoffset, v=viewport_image_offset; y<viewport_yoffset+viewport_height; ++y) { 482 sy=y* screen_buffer_width;494 sy=y*camera_screen.buffer_width; 483 495 sx=viewport_xoffset; 484 496 if (viewport_xoffset > 0) { // clear left & right areas of buffer if image width if smaller than viewport … … 532 544 //~ #if ZEBRA_CANONOSD_BORDER_RESTORE 533 545 //~ // copy rescued Canon OSD to buf[] top/bottom parts and fill center with transparent color: 534 //~ memcpy(buf, cur_buf_top, screen_buffer_width * ZFIX_TOP);535 //~ memcpy(buf + screen_buffer_size - screen_buffer_width * ZFIX_BOTTOM, cur_buf_bot, screen_buffer_width * ZFIX_BOTTOM);536 //~ for (s = screen_buffer_width*ZFIX_TOP; s < screen_buffer_size-screen_buffer_width*ZFIX_BOTTOM; s++) {546 //~ memcpy(buf, cur_buf_top, camera_screen.buffer_width * ZFIX_TOP); 547 //~ memcpy(buf + camera_screen.buffer_size - camera_screen.buffer_width * ZFIX_BOTTOM, cur_buf_bot, camera_screen.buffer_width * ZFIX_BOTTOM); 548 //~ for (s = camera_screen.buffer_width*ZFIX_TOP; s < camera_screen.buffer_size-camera_screen.buffer_width*ZFIX_BOTTOM; s++) { 537 549 //~ buf[s]=COLOR_TRANSPARENT; 538 550 //~ } 539 551 //~ #else 540 552 //~ // copy from a complete Canon OSD rescue screen dump 541 //~ memcpy(buf, cur_buf, screen_buffer_size);553 //~ memcpy(buf, cur_buf, camera_screen.buffer_size); 542 554 //~ #endif 543 555 } else { // Not REC mode … … 551 563 if (buf!=scr_buf) 552 564 memcpy(scr_buf, buf, buffer_size); 553 memcpy(scr_buf+ screen_buffer_size, buf, buffer_size);565 memcpy(scr_buf+camera_screen.buffer_size, buf, buffer_size); 554 566 } 555 567 need_restore=0; … … 563 575 if (buf!=scr_buf) 564 576 memcpy(scr_buf, buf, buffer_size); 565 memcpy(scr_buf+ screen_buffer_size, buf, buffer_size);577 memcpy(scr_buf+camera_screen.buffer_size, buf, buffer_size); 566 578 567 579 need_restore=1; … … 597 609 { 598 610 bWide = 0; 599 //aspOffset = ( screen_width - (screen_width * 12 / 16)) / 2; // = actual calculation, simplified below600 aspOffset = screen_width / 8; // half of the difference in width between equal height 16:9 and 4:3 screens, = black bar width611 //aspOffset = (camera_screen.width - (camera_screen.width * 12 / 16)) / 2; // = actual calculation, simplified below 612 aspOffset = camera_screen.width / 8; // half of the difference in width between equal height 16:9 and 4:3 screens, = black bar width 601 613 } 602 614 #endif … … 620 632 // rescue Canon OSD from scr_buf to cur_buf_top and _bot: 621 633 if (n==1) { 622 memcpy(cur_buf_top, scr_buf, screen_buffer_width*ZFIX_TOP);623 memcpy(cur_buf_bot, scr_buf + screen_buffer_size - screen_buffer_width*ZFIX_BOTTOM, screen_buffer_width*ZFIX_BOTTOM);634 memcpy(cur_buf_top, scr_buf, camera_screen.buffer_width*ZFIX_TOP); 635 memcpy(cur_buf_bot, scr_buf + camera_screen.buffer_size - camera_screen.buffer_width*ZFIX_BOTTOM, camera_screen.buffer_width*ZFIX_BOTTOM); 624 636 } 625 637 else { 626 memcpy(cur_buf_top, scr_buf + screen_buffer_size, screen_buffer_width*ZFIX_TOP);627 memcpy(cur_buf_bot, scr_buf + 2* screen_buffer_size - screen_buffer_width*ZFIX_BOTTOM, screen_buffer_width*ZFIX_BOTTOM);638 memcpy(cur_buf_top, scr_buf + camera_screen.buffer_size, camera_screen.buffer_width*ZFIX_TOP); 639 memcpy(cur_buf_bot, scr_buf + 2*camera_screen.buffer_size - camera_screen.buffer_width*ZFIX_BOTTOM, camera_screen.buffer_width*ZFIX_BOTTOM); 628 640 } 629 641 #else 630 642 // rescue Canon OSD from cur_buf 631 if(n==1) memcpy(cur_buf, scr_buf, screen_buffer_size);632 else memcpy(cur_buf, scr_buf+ screen_buffer_size, screen_buffer_size);643 if(n==1) memcpy(cur_buf, scr_buf, camera_screen.buffer_size); 644 else memcpy(cur_buf, scr_buf+camera_screen.buffer_size, camera_screen.buffer_size); 633 645 #endif 634 646 } … … 674 686 s = aspOffset; 675 687 for (y=1, v=0; y<=viewport_height; ++y) { 676 for (x=0; x< screen_width; x+=step_x, s+=step_x, v+=step_v) {688 for (x=0; x<camera_screen.width; x+=step_x, s+=step_x, v+=step_v) { 677 689 register int yy, uu, vv; 678 690 int sel; 679 691 680 if (!bWide && (x + aspOffset >= screen_width - aspOffset)) continue; // do not draw "outside screen"692 if (!bWide && (x + aspOffset >= camera_screen.width - aspOffset)) continue; // do not draw "outside screen" 681 693 682 694 yy = img_buf[v+1]; … … 706 718 } 707 719 } 708 s+= screen_buffer_width-screen_width;709 if (y* screen_height/viewport_height == (s+screen_buffer_width)/screen_buffer_width) {710 memcpy(buf+s, buf+s- screen_buffer_width, screen_buffer_width);711 s+= screen_buffer_width;720 s+=camera_screen.buffer_width-camera_screen.width; 721 if (y*camera_screen.height/viewport_height == (s+camera_screen.buffer_width)/camera_screen.buffer_width) { 722 memcpy(buf+s, buf+s-camera_screen.buffer_width, camera_screen.buffer_width); 723 s+=camera_screen.buffer_width; 712 724 } 713 725 } … … 724 736 #if ZEBRA_CANONOSD_BORDER_RESTORE 725 737 // copy rescued Canon OSD to buf[] top/bottom parts and fill center with transparent color: 726 memcpy(buf, cur_buf_top, screen_buffer_width * ZFIX_TOP);727 memcpy(buf + screen_buffer_size - screen_buffer_width * ZFIX_BOTTOM, cur_buf_bot, screen_buffer_width * ZFIX_BOTTOM);728 for (s = screen_buffer_width*ZFIX_TOP; s < screen_buffer_size-screen_buffer_width*ZFIX_BOTTOM; s++) {738 memcpy(buf, cur_buf_top, camera_screen.buffer_width * ZFIX_TOP); 739 memcpy(buf + camera_screen.buffer_size - camera_screen.buffer_width * ZFIX_BOTTOM, cur_buf_bot, camera_screen.buffer_width * ZFIX_BOTTOM); 740 for (s = camera_screen.buffer_width*ZFIX_TOP; s < camera_screen.buffer_size-camera_screen.buffer_width*ZFIX_BOTTOM; s++) { 729 741 buf[s]=COLOR_TRANSPARENT; 730 742 } 731 743 #else 732 744 // copy from a complete Canon OSD rescue screen dump 733 memcpy(buf, cur_buf, screen_buffer_size);745 memcpy(buf, cur_buf, camera_screen.buffer_size); 734 746 #endif 735 747 } else { // Not REC mode 736 748 // No Canon OSD restore, fill buf[] with transparent color: 737 memset(buf, COLOR_TRANSPARENT, screen_buffer_size);749 memset(buf, COLOR_TRANSPARENT, camera_screen.buffer_size); 738 750 } 739 751 // draw CHDK osd and histogram to buf[] (if enabled in config) 740 752 gui_osd_draw_zebra_osd(); 741 753 // copy buf[] to both display buffers 742 memcpy(scr_buf, buf, screen_buffer_size);743 memcpy(scr_buf+ screen_buffer_size, buf, screen_buffer_size);754 memcpy(scr_buf, buf, camera_screen.buffer_size); 755 memcpy(scr_buf+camera_screen.buffer_size, buf, camera_screen.buffer_size); 744 756 } 745 757 need_restore=0; … … 751 763 gui_osd_draw_zebra_osd(); 752 764 // copy buf[] to both display buffers 753 memcpy(scr_buf, buf, screen_buffer_size);754 memcpy(scr_buf+ screen_buffer_size, buf, screen_buffer_size);765 memcpy(scr_buf, buf, camera_screen.buffer_size); 766 memcpy(scr_buf+camera_screen.buffer_size, buf, camera_screen.buffer_size); 755 767 756 768 need_restore=1; … … 1154 1166 if ((conf.autoiso_enable && shooting_get_iso_mode()<=0 && !(m==MODE_M || m==MODE_TV) && shooting_get_flash_mode() && (!(conf.override_disable==1 && conf.override_disable_all))) || gui_mode==GUI_MODE_OSD) 1155 1167 gui_print_osd_state_string_chr("AUTOISO:", ((conf.autoiso_enable==1)?"ON":"OFF")); 1156 if ((conf.subj_dist_override_value && conf.subj_dist_override_koef && shooting_can_focus() && !(conf.override_disable==1)) || ((gui_ mode==GUI_MODE_ALT) && shooting_get_common_focus_mode()) || gui_mode==GUI_MODE_OSD) {1168 if ((conf.subj_dist_override_value && conf.subj_dist_override_koef && shooting_can_focus() && !(conf.override_disable==1)) || ((gui_get_mode()==GUI_MODE_ALT) && shooting_get_common_focus_mode()) || gui_mode==GUI_MODE_OSD) { 1157 1169 gui_print_osd_state_string_int("SD:",shooting_get_subject_distance_override_value()); 1158 1170 if (gui_mode==GUI_MODE_ALT)
Note: See TracChangeset
for help on using the changeset viewer.