trunk/src/emu/rendlay.c
| r242227 | r242228 | |
| 677 | 677 | else if (strcmp(compnode.name, "led7seg") == 0) |
| 678 | 678 | m_type = CTYPE_LED7SEG; |
| 679 | 679 | |
| 680 | // led8seg nodes |
| 681 | else if (strcmp(compnode.name, "led8seg") == 0) |
| 682 | m_type = CTYPE_LED8SEG; |
| 683 | |
| 680 | 684 | // led14seg nodes |
| 681 | 685 | else if (strcmp(compnode.name, "led14seg") == 0) |
| 682 | 686 | m_type = CTYPE_LED14SEG; |
| r242227 | r242228 | |
| 749 | 753 | draw_led7seg(dest, bounds, state); |
| 750 | 754 | break; |
| 751 | 755 | |
| 756 | case CTYPE_LED8SEG: |
| 757 | draw_led8seg(dest, bounds, state); |
| 758 | break; |
| 759 | |
| 752 | 760 | case CTYPE_LED14SEG: |
| 753 | 761 | draw_led14seg(dest, bounds, state); |
| 754 | 762 | break; |
| r242227 | r242228 | |
| 1399 | 1407 | } |
| 1400 | 1408 | |
| 1401 | 1409 | |
| 1410 | //------------------------------------------------------ |
| 1411 | // draw_led8seg - draw a 8-segment fluorescent (Futaba) |
| 1412 | //------------------------------------------------------ |
| 1413 | |
| 1414 | void layout_element::component::draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern) |
| 1415 | { |
| 1416 | const rgb_t onpen = rgb_t(0xff,0xff,0xff,0xff); |
| 1417 | const rgb_t offpen = rgb_t(0xff,0x20,0x20,0x20); |
| 1418 | const rgb_t backpen = rgb_t(0xff,0x00,0x00,0x00); |
| 1419 | |
| 1420 | // sizes for computation |
| 1421 | int bmwidth = 250; |
| 1422 | int bmheight = 400; |
| 1423 | int segwidth = 40; |
| 1424 | int skewwidth = 40; |
| 1425 | |
| 1426 | // allocate a temporary bitmap for drawing |
| 1427 | bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight); |
| 1428 | tempbitmap.fill(backpen); |
| 1429 | |
| 1430 | // top bar |
| 1431 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 0)) ? onpen : offpen); |
| 1432 | |
| 1433 | // top-right bar |
| 1434 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 1)) ? onpen : offpen); |
| 1435 | |
| 1436 | // bottom-right bar |
| 1437 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 2)) ? onpen : offpen); |
| 1438 | |
| 1439 | // bottom bar |
| 1440 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, segwidth, (pattern & (1 << 3)) ? onpen : offpen); |
| 1441 | |
| 1442 | // bottom-left bar |
| 1443 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 4)) ? onpen : offpen); |
| 1444 | |
| 1445 | // top-left bar |
| 1446 | draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 5)) ? onpen : offpen); |
| 1447 | |
| 1448 | // horizontal bars |
| 1449 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, 2*bmwidth/3 - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen); |
| 1450 | draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3 + bmwidth/2, bmwidth - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen); |
| 1451 | |
| 1452 | // vertical bars |
| 1453 | draw_segment_vertical(tempbitmap, 0 + segwidth/3 - 8, bmheight/2 - segwidth/3 + 2, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen); |
| 1454 | draw_segment_vertical(tempbitmap, 0 + segwidth/3, bmheight/2 - segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen); |
| 1455 | |
| 1456 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3 - 2, bmheight - 2*segwidth/3 + 4, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen); |
| 1457 | draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen); |
| 1458 | |
| 1459 | // apply skew |
| 1460 | apply_skew(tempbitmap, 40); |
| 1461 | |
| 1462 | // resample to the target size |
| 1463 | render_resample_argb_bitmap_hq(dest, tempbitmap, m_color); |
| 1464 | } |
| 1465 | |
| 1402 | 1466 | //------------------------------------------------- |
| 1403 | 1467 | // draw_led14seg - draw a 14-segment LCD |
| 1404 | 1468 | //------------------------------------------------- |