···
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
120
-
wc.hbrBackground = CreateSolidBrush(RGB(101, 67, 33)); // Wood grain brown
120
+
wc.hbrBackground = CreateSolidBrush(RGB(24, 24, 24)); // Dark Winamp-style background
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
···
void DrawRadioInterface(HDC hdc, RECT* rect) {
413
-
// Create vintage radio background
414
-
HBRUSH woodBrush = CreateSolidBrush(RGB(101, 67, 33));
415
-
FillRect(hdc, rect, woodBrush);
416
-
DeleteObject(woodBrush);
413
+
// Winamp-style dark gradient background
414
+
HBRUSH darkBrush = CreateSolidBrush(RGB(24, 24, 24));
415
+
FillRect(hdc, rect, darkBrush);
416
+
DeleteObject(darkBrush);
418
-
// Draw radio panel (darker inset)
419
-
RECT panel = {50, 50, rect->right - 50, rect->bottom - 50};
420
-
HBRUSH panelBrush = CreateSolidBrush(RGB(80, 50, 25));
421
-
FillRect(hdc, &panel, panelBrush);
422
-
DeleteObject(panelBrush);
418
+
// Main panel with metallic gradient effect
419
+
RECT panel = {10, 10, rect->right - 10, rect->bottom - 10};
421
+
// Create gradient effect by drawing multiple rectangles
422
+
for (int i = 0; i < 20; i++) {
423
+
int gray = 45 + i * 2;
424
+
HBRUSH gradBrush = CreateSolidBrush(RGB(gray, gray, gray));
425
+
RECT gradRect = {panel.left + i, panel.top + i, panel.right - i, panel.bottom - i};
426
+
FrameRect(hdc, &gradRect, gradBrush);
427
+
DeleteObject(gradBrush);
424
-
// Draw panel border (raised effect)
425
-
HPEN lightPen = CreatePen(PS_SOLID, 2, RGB(140, 100, 60));
426
-
HPEN darkPen = CreatePen(PS_SOLID, 2, RGB(40, 25, 15));
430
+
// Inner panel with darker metallic look
431
+
RECT innerPanel = {30, 30, rect->right - 30, rect->bottom - 30};
432
+
HBRUSH innerBrush = CreateSolidBrush(RGB(32, 32, 32));
433
+
FillRect(hdc, &innerPanel, innerBrush);
434
+
DeleteObject(innerBrush);
436
+
// Winamp-style beveled border
437
+
HPEN lightPen = CreatePen(PS_SOLID, 1, RGB(128, 128, 128));
438
+
HPEN darkPen = CreatePen(PS_SOLID, 1, RGB(16, 16, 16));
SelectObject(hdc, lightPen);
429
-
MoveToEx(hdc, panel.left, panel.bottom, NULL);
430
-
LineTo(hdc, panel.left, panel.top);
431
-
LineTo(hdc, panel.right, panel.top);
441
+
MoveToEx(hdc, innerPanel.left, innerPanel.bottom, NULL);
442
+
LineTo(hdc, innerPanel.left, innerPanel.top);
443
+
LineTo(hdc, innerPanel.right, innerPanel.top);
SelectObject(hdc, darkPen);
434
-
LineTo(hdc, panel.right, panel.bottom);
435
-
LineTo(hdc, panel.left, panel.bottom);
446
+
LineTo(hdc, innerPanel.right, innerPanel.bottom);
447
+
LineTo(hdc, innerPanel.left, innerPanel.bottom);
440
-
// Draw frequency display
452
+
// Draw frequency display with Winamp-style LCD
DrawFrequencyDisplay(hdc, 200, 80, g_radio.frequency);
443
-
// Draw tuning dial
455
+
// Draw tuning dial with metallic look
DrawTuningDial(hdc, 150, 200, 60, g_radio.frequency);
446
-
// Draw volume knob
458
+
// Draw volume knob with chrome effect
DrawVolumeKnob(hdc, 350, 200, 30, g_radio.volume);
449
-
// Draw signal meter
461
+
// Draw signal meter with neon bars
DrawSignalMeter(hdc, 450, 170, g_radio.signalStrength);
464
+
// Draw VU meter with classic Winamp style
DrawVUMeter(hdc, 450, 200, g_audio.vuLevelLeft, g_audio.vuLevelRight);
455
-
// Draw power button
467
+
// Draw power button with LED glow
DrawPowerButton(hdc, 500, 120, 25, g_radio.power);
458
-
// Draw station info if tuned to a station
470
+
// Draw station info with Winamp-style ticker
RadioStation* currentStation = FindNearestStation(g_radio.frequency);
if (currentStation && g_radio.signalStrength > 30) {
461
-
RECT stationRect = {80, 320, 520, 360};
462
-
HBRUSH stationBrush = CreateSolidBrush(RGB(0, 0, 0));
463
-
FillRect(hdc, &stationRect, stationBrush);
464
-
DeleteObject(stationBrush);
473
+
RECT stationRect = {50, 320, 550, 360};
475
+
// Winamp-style display background
476
+
HBRUSH displayBrush = CreateSolidBrush(RGB(0, 0, 0));
477
+
FillRect(hdc, &stationRect, displayBrush);
478
+
DeleteObject(displayBrush);
466
-
HPEN stationPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
467
-
SelectObject(hdc, stationPen);
468
-
Rectangle(hdc, stationRect.left, stationRect.top, stationRect.right, stationRect.bottom);
469
-
DeleteObject(stationPen);
481
+
HPEN lightBorderPen = CreatePen(PS_SOLID, 1, RGB(64, 64, 64));
482
+
HPEN darkBorderPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
484
+
SelectObject(hdc, darkBorderPen);
485
+
MoveToEx(hdc, stationRect.left, stationRect.bottom, NULL);
486
+
LineTo(hdc, stationRect.left, stationRect.top);
487
+
LineTo(hdc, stationRect.right, stationRect.top);
489
+
SelectObject(hdc, lightBorderPen);
490
+
LineTo(hdc, stationRect.right, stationRect.bottom);
491
+
LineTo(hdc, stationRect.left, stationRect.bottom);
493
+
DeleteObject(lightBorderPen);
494
+
DeleteObject(darkBorderPen);
496
+
// Winamp-style green text
SetTextColor(hdc, RGB(0, 255, 0));
472
-
HFONT stationFont = CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
498
+
SetBkMode(hdc, TRANSPARENT);
499
+
HFONT stationFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
475
-
DEFAULT_PITCH | FF_SWISS, "Arial");
502
+
DEFAULT_PITCH | FF_MODERN, "Tahoma");
SelectObject(hdc, stationFont);
···
currentStation->frequency, currentStation->name, currentStation->description);
SetTextAlign(hdc, TA_LEFT);
483
-
TextOut(hdc, stationRect.left + 5, stationRect.top + 5, stationText, strlen(stationText));
510
+
TextOut(hdc, stationRect.left + 10, stationRect.top + 12, stationText, strlen(stationText));
DeleteObject(stationFont);
void DrawFrequencyDisplay(HDC hdc, int x, int y, float frequency) {
491
-
// Draw display background (black LCD style)
492
-
RECT display = {x - 80, y - 20, x + 80, y + 20};
517
+
// Winamp-style LCD display with beveled edges
518
+
RECT display = {x - 100, y - 25, x + 100, y + 25};
HBRUSH blackBrush = CreateSolidBrush(RGB(0, 0, 0));
FillRect(hdc, &display, blackBrush);
DeleteObject(blackBrush);
497
-
// Draw display border
498
-
HPEN borderPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
499
-
SelectObject(hdc, borderPen);
500
-
Rectangle(hdc, display.left, display.top, display.right, display.bottom);
501
-
DeleteObject(borderPen);
525
+
// Beveled border effect
526
+
HPEN lightPen = CreatePen(PS_SOLID, 2, RGB(96, 96, 96));
527
+
HPEN darkPen = CreatePen(PS_SOLID, 2, RGB(32, 32, 32));
529
+
SelectObject(hdc, darkPen);
530
+
MoveToEx(hdc, display.left, display.bottom, NULL);
531
+
LineTo(hdc, display.left, display.top);
532
+
LineTo(hdc, display.right, display.top);
503
-
// Draw frequency text
534
+
SelectObject(hdc, lightPen);
535
+
LineTo(hdc, display.right, display.bottom);
536
+
LineTo(hdc, display.left, display.bottom);
538
+
DeleteObject(lightPen);
539
+
DeleteObject(darkPen);
542
+
RECT innerDisplay = {display.left + 3, display.top + 3, display.right - 3, display.bottom - 3};
543
+
HPEN shadowPen = CreatePen(PS_SOLID, 1, RGB(16, 16, 16));
544
+
SelectObject(hdc, shadowPen);
545
+
Rectangle(hdc, innerDisplay.left, innerDisplay.top, innerDisplay.right, innerDisplay.bottom);
546
+
DeleteObject(shadowPen);
548
+
// Frequency text with glow effect
sprintf(freqText, "%.3f MHz", frequency);
SetBkMode(hdc, TRANSPARENT);
508
-
SetTextColor(hdc, RGB(0, 255, 0)); // Green LCD color
509
-
HFONT lcdFont = CreateFont(16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
554
+
// Create glow effect by drawing text multiple times with slight offsets
555
+
HFONT lcdFont = CreateFont(20, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
512
-
FIXED_PITCH | FF_MODERN, "Courier New");
558
+
FIXED_PITCH | FF_MODERN, "Consolas");
SelectObject(hdc, lcdFont);
560
+
SetTextAlign(hdc, TA_CENTER);
515
-
SetTextAlign(hdc, TA_CENTER);
516
-
TextOut(hdc, x, y - 8, freqText, strlen(freqText));
562
+
// Glow effect (dark green)
563
+
SetTextColor(hdc, RGB(0, 128, 0));
564
+
for (int dx = -1; dx <= 1; dx++) {
565
+
for (int dy = -1; dy <= 1; dy++) {
566
+
if (dx != 0 || dy != 0) {
567
+
TextOut(hdc, x + dx, y - 10 + dy, freqText, strlen(freqText));
572
+
// Main text (bright green)
573
+
SetTextColor(hdc, RGB(0, 255, 0));
574
+
TextOut(hdc, x, y - 10, freqText, strlen(freqText));
void DrawTuningDial(HDC hdc, int x, int y, int radius, float frequency) {
522
-
// Draw dial background
523
-
HBRUSH dialBrush = CreateSolidBrush(RGB(160, 120, 80));
580
+
// Metallic dial with chrome gradient
581
+
for (int i = 0; i < 8; i++) {
582
+
int gray = 80 + i * 10;
583
+
HBRUSH gradBrush = CreateSolidBrush(RGB(gray, gray, gray));
584
+
SelectObject(hdc, gradBrush);
585
+
Ellipse(hdc, x - radius + i, y - radius + i, x + radius - i, y + radius - i);
586
+
DeleteObject(gradBrush);
589
+
// Inner dial surface
590
+
HBRUSH dialBrush = CreateSolidBrush(RGB(160, 160, 160));
SelectObject(hdc, dialBrush);
525
-
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
592
+
Ellipse(hdc, x - radius + 8, y - radius + 8, x + radius - 8, y + radius - 8);
528
-
// Draw dial border
529
-
HPEN borderPen = CreatePen(PS_SOLID, 2, RGB(60, 40, 20));
530
-
SelectObject(hdc, borderPen);
596
+
HPEN ringPen = CreatePen(PS_SOLID, 2, RGB(48, 48, 48));
597
+
SelectObject(hdc, ringPen);
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
532
-
DeleteObject(borderPen);
599
+
DeleteObject(ringPen);
534
-
// Draw tick marks and frequency markings (270 degree sweep)
535
-
HPEN tickPen = CreatePen(PS_SOLID, 1, RGB(60, 40, 20));
601
+
// Tick marks with better contrast
602
+
HPEN tickPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
SelectObject(hdc, tickPen);
// Draw major tick marks and frequency labels
SetTextColor(hdc, RGB(0, 0, 0));
540
-
HFONT smallFont = CreateFont(10, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
607
+
SetBkMode(hdc, TRANSPARENT);
608
+
HFONT smallFont = CreateFont(9, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
543
-
DEFAULT_PITCH | FF_SWISS, "Arial");
611
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
SelectObject(hdc, smallFont);
SetTextAlign(hdc, TA_CENTER);
···
float angle = -3.14159f * 0.75f + (float)i * (3.14159f * 1.5f) / 11.0f;
552
-
int tickStartX = x + (int)((radius - 8) * cos(angle));
553
-
int tickStartY = y + (int)((radius - 8) * sin(angle));
554
-
int tickEndX = x + (int)((radius - 2) * cos(angle));
555
-
int tickEndY = y + (int)((radius - 2) * sin(angle));
620
+
int tickStartX = x + (int)((radius - 12) * cos(angle));
621
+
int tickStartY = y + (int)((radius - 12) * sin(angle));
622
+
int tickEndX = x + (int)((radius - 4) * cos(angle));
623
+
int tickEndY = y + (int)((radius - 4) * sin(angle));
MoveToEx(hdc, tickStartX, tickStartY, NULL);
LineTo(hdc, tickEndX, tickEndY);
560
-
int markX = x + (int)((radius - 18) * cos(angle));
561
-
int markY = y + (int)((radius - 18) * sin(angle));
628
+
int markX = x + (int)((radius - 22) * cos(angle));
629
+
int markY = y + (int)((radius - 22) * sin(angle));
sprintf(mark, "%d", 10 + i * 2);
564
-
TextOut(hdc, markX, markY - 5, mark, strlen(mark));
632
+
TextOut(hdc, markX, markY - 4, mark, strlen(mark));
567
-
// Draw minor tick marks between major ones
635
+
// Draw minor tick marks
for (int i = 0; i < 11; i++) {
float angle = -3.14159f * 0.75f + ((float)i + 0.5f) * (3.14159f * 1.5f) / 11.0f;
570
-
int tickStartX = x + (int)((radius - 5) * cos(angle));
571
-
int tickStartY = y + (int)((radius - 5) * sin(angle));
572
-
int tickEndX = x + (int)((radius - 2) * cos(angle));
573
-
int tickEndY = y + (int)((radius - 2) * sin(angle));
638
+
int tickStartX = x + (int)((radius - 8) * cos(angle));
639
+
int tickStartY = y + (int)((radius - 8) * sin(angle));
640
+
int tickEndX = x + (int)((radius - 4) * cos(angle));
641
+
int tickEndY = y + (int)((radius - 4) * sin(angle));
MoveToEx(hdc, tickStartX, tickStartY, NULL);
LineTo(hdc, tickEndX, tickEndY);
578
-
// Draw range limit markers at start and end positions
579
-
HPEN limitPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
580
-
SelectObject(hdc, limitPen);
582
-
// Start position (-135 degrees, 10 MHz)
583
-
float startAngle = -3.14159f * 0.75f;
584
-
int startX = x + (int)((radius - 12) * cos(startAngle));
585
-
int startY = y + (int)((radius - 12) * sin(startAngle));
586
-
int startEndX = x + (int)(radius * cos(startAngle));
587
-
int startEndY = y + (int)(radius * sin(startAngle));
588
-
MoveToEx(hdc, startX, startY, NULL);
589
-
LineTo(hdc, startEndX, startEndY);
591
-
// End position (+135 degrees, 34 MHz)
592
-
float endAngle = 3.14159f * 0.75f;
593
-
int endX = x + (int)((radius - 12) * cos(endAngle));
594
-
int endY = y + (int)((radius - 12) * sin(endAngle));
595
-
int endEndX = x + (int)(radius * cos(endAngle));
596
-
int endEndY = y + (int)(radius * sin(endAngle));
597
-
MoveToEx(hdc, endX, endY, NULL);
598
-
LineTo(hdc, endEndX, endEndY);
601
-
DeleteObject(limitPen);
603
-
// Draw pointer based on frequency (270 degree sweep)
648
+
// Chrome-style pointer with shadow
float normalizedFreq = (frequency - 10.0f) / 24.0f;
float angle = -3.14159f * 0.75f + normalizedFreq * (3.14159f * 1.5f);
606
-
int pointerX = x + (int)((radius - 10) * cos(angle));
607
-
int pointerY = y + (int)((radius - 10) * sin(angle));
651
+
int pointerX = x + (int)((radius - 15) * cos(angle));
652
+
int pointerY = y + (int)((radius - 15) * sin(angle));
655
+
HPEN shadowPen = CreatePen(PS_SOLID, 4, RGB(32, 32, 32));
656
+
SelectObject(hdc, shadowPen);
657
+
MoveToEx(hdc, x + 1, y + 1, NULL);
658
+
LineTo(hdc, pointerX + 1, pointerY + 1);
659
+
DeleteObject(shadowPen);
609
-
HPEN pointerPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
662
+
HPEN pointerPen = CreatePen(PS_SOLID, 3, RGB(255, 64, 64));
SelectObject(hdc, pointerPen);
MoveToEx(hdc, x, y, NULL);
LineTo(hdc, pointerX, pointerY);
DeleteObject(pointerPen);
669
+
HBRUSH centerBrush = CreateSolidBrush(RGB(64, 64, 64));
670
+
SelectObject(hdc, centerBrush);
671
+
Ellipse(hdc, x - 4, y - 4, x + 4, y + 4);
672
+
DeleteObject(centerBrush);
617
-
// Draw label below the dial
618
-
SetBkMode(hdc, TRANSPARENT);
619
-
SetTextColor(hdc, RGB(255, 255, 255));
620
-
HFONT labelFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
676
+
// Label with Winamp style
677
+
SetTextColor(hdc, RGB(192, 192, 192));
678
+
HFONT labelFont = CreateFont(12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
623
-
DEFAULT_PITCH | FF_SWISS, "Arial");
681
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
SelectObject(hdc, labelFont);
SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, x, y + radius + 15, "TUNING", 6);
···
void DrawVolumeKnob(HDC hdc, int x, int y, int radius, float volume) {
631
-
// Draw knob background
632
-
HBRUSH knobBrush = CreateSolidBrush(RGB(140, 100, 60));
689
+
// Chrome gradient knob
690
+
for (int i = 0; i < 6; i++) {
691
+
int gray = 100 + i * 15;
692
+
HBRUSH gradBrush = CreateSolidBrush(RGB(gray, gray, gray));
693
+
SelectObject(hdc, gradBrush);
694
+
Ellipse(hdc, x - radius + i, y - radius + i, x + radius - i, y + radius - i);
695
+
DeleteObject(gradBrush);
698
+
// Inner knob surface
699
+
HBRUSH knobBrush = CreateSolidBrush(RGB(180, 180, 180));
SelectObject(hdc, knobBrush);
634
-
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
701
+
Ellipse(hdc, x - radius + 6, y - radius + 6, x + radius - 6, y + radius - 6);
637
-
// Draw knob border
638
-
HPEN borderPen = CreatePen(PS_SOLID, 1, RGB(60, 40, 20));
639
-
SelectObject(hdc, borderPen);
705
+
HPEN ringPen = CreatePen(PS_SOLID, 1, RGB(64, 64, 64));
706
+
SelectObject(hdc, ringPen);
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
641
-
DeleteObject(borderPen);
708
+
DeleteObject(ringPen);
643
-
// Draw volume indicator
710
+
// Volume indicator with glow
float angle = volume * 3.14159f * 1.5f - 3.14159f * 0.75f;
645
-
int indicatorX = x + (int)((radius - 5) * cos(angle));
646
-
int indicatorY = y + (int)((radius - 5) * sin(angle));
712
+
int indicatorX = x + (int)((radius - 8) * cos(angle));
713
+
int indicatorY = y + (int)((radius - 8) * sin(angle));
715
+
// Indicator shadow
716
+
HPEN shadowPen = CreatePen(PS_SOLID, 3, RGB(32, 32, 32));
717
+
SelectObject(hdc, shadowPen);
718
+
MoveToEx(hdc, x + 1, y + 1, NULL);
719
+
LineTo(hdc, indicatorX + 1, indicatorY + 1);
720
+
DeleteObject(shadowPen);
HPEN indicatorPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
SelectObject(hdc, indicatorPen);
MoveToEx(hdc, x, y, NULL);
LineTo(hdc, indicatorX, indicatorY);
DeleteObject(indicatorPen);
654
-
// Draw label below the knob
730
+
HBRUSH centerBrush = CreateSolidBrush(RGB(64, 64, 64));
731
+
SelectObject(hdc, centerBrush);
732
+
Ellipse(hdc, x - 3, y - 3, x + 3, y + 3);
733
+
DeleteObject(centerBrush);
SetBkMode(hdc, TRANSPARENT);
656
-
SetTextColor(hdc, RGB(255, 255, 255));
657
-
HFONT labelFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
737
+
SetTextColor(hdc, RGB(192, 192, 192));
738
+
HFONT labelFont = CreateFont(12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
660
-
DEFAULT_PITCH | FF_SWISS, "Arial");
741
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
SelectObject(hdc, labelFont);
SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, x, y + radius + 15, "VOLUME", 6);
···
void DrawSignalMeter(HDC hdc, int x, int y, int strength) {
668
-
// Draw meter background
749
+
// Winamp-style meter background with bevel
RECT meter = {x, y, x + 80, y + 20};
670
-
HBRUSH meterBrush = CreateSolidBrush(RGB(0, 0, 0));
753
+
HBRUSH meterBrush = CreateSolidBrush(RGB(16, 16, 16));
FillRect(hdc, &meter, meterBrush);
DeleteObject(meterBrush);
674
-
// Draw meter border
675
-
HPEN borderPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
676
-
SelectObject(hdc, borderPen);
677
-
Rectangle(hdc, meter.left, meter.top, meter.right, meter.bottom);
678
-
DeleteObject(borderPen);
758
+
HPEN lightPen = CreatePen(PS_SOLID, 1, RGB(64, 64, 64));
759
+
HPEN darkPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
761
+
SelectObject(hdc, darkPen);
762
+
MoveToEx(hdc, meter.left, meter.bottom, NULL);
763
+
LineTo(hdc, meter.left, meter.top);
764
+
LineTo(hdc, meter.right, meter.top);
680
-
// Draw signal bars
766
+
SelectObject(hdc, lightPen);
767
+
LineTo(hdc, meter.right, meter.bottom);
768
+
LineTo(hdc, meter.left, meter.bottom);
770
+
DeleteObject(lightPen);
771
+
DeleteObject(darkPen);
773
+
// Neon-style signal bars
int numBars = strength / 10;
for (int i = 0; i < numBars && i < 10; i++) {
684
-
RECT bar = {x + 2 + i * barWidth, y + 2,
685
-
x + 2 + (i + 1) * barWidth - 1, y + 18};
777
+
RECT bar = {x + 3 + i * barWidth, y + 3,
778
+
x + 3 + (i + 1) * barWidth - 1, y + 17};
688
-
if (i < 3) barColor = RGB(0, 255, 0); // Green
689
-
else if (i < 7) barColor = RGB(255, 255, 0); // Yellow
690
-
else barColor = RGB(255, 0, 0); // Red
781
+
if (i < 3) barColor = RGB(0, 255, 64); // Bright green
782
+
else if (i < 7) barColor = RGB(255, 255, 0); // Yellow
783
+
else barColor = RGB(255, 64, 64); // Bright red
HBRUSH barBrush = CreateSolidBrush(barColor);
FillRect(hdc, &bar, barBrush);
790
+
COLORREF glowColor;
791
+
if (i < 3) glowColor = RGB(0, 128, 32);
792
+
else if (i < 7) glowColor = RGB(128, 128, 0);
793
+
else glowColor = RGB(128, 32, 32);
795
+
HPEN glowPen = CreatePen(PS_SOLID, 1, glowColor);
796
+
SelectObject(hdc, glowPen);
797
+
Rectangle(hdc, bar.left - 1, bar.top - 1, bar.right + 1, bar.bottom + 1);
798
+
DeleteObject(glowPen);
697
-
// Draw label above the meter
SetBkMode(hdc, TRANSPARENT);
699
-
SetTextColor(hdc, RGB(255, 255, 255));
700
-
HFONT labelFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
803
+
SetTextColor(hdc, RGB(192, 192, 192));
804
+
HFONT labelFont = CreateFont(11, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
703
-
DEFAULT_PITCH | FF_SWISS, "Arial");
807
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
SelectObject(hdc, labelFont);
SetTextAlign(hdc, TA_LEFT);
706
-
TextOut(hdc, x, y - 18, "SIGNAL", 6);
810
+
TextOut(hdc, x, y - 16, "SIGNAL", 6);
void DrawVUMeter(HDC hdc, int x, int y, float leftLevel, float rightLevel) {
711
-
// Draw VU meter background
815
+
// Winamp-style VU meter with classic look
RECT meterBg = {x, y, x + 80, y + 40};
713
-
HBRUSH bgBrush = CreateSolidBrush(RGB(20, 20, 20));
819
+
HBRUSH bgBrush = CreateSolidBrush(RGB(16, 16, 16));
FillRect(hdc, &meterBg, bgBrush);
718
-
HPEN borderPen = CreatePen(PS_SOLID, 1, RGB(100, 100, 100));
719
-
SelectObject(hdc, borderPen);
720
-
Rectangle(hdc, meterBg.left, meterBg.top, meterBg.right, meterBg.bottom);
721
-
DeleteObject(borderPen);
824
+
HPEN lightPen = CreatePen(PS_SOLID, 1, RGB(64, 64, 64));
825
+
HPEN darkPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
724
-
SetTextColor(hdc, RGB(200, 200, 200));
827
+
SelectObject(hdc, darkPen);
828
+
MoveToEx(hdc, meterBg.left, meterBg.bottom, NULL);
829
+
LineTo(hdc, meterBg.left, meterBg.top);
830
+
LineTo(hdc, meterBg.right, meterBg.top);
832
+
SelectObject(hdc, lightPen);
833
+
LineTo(hdc, meterBg.right, meterBg.bottom);
834
+
LineTo(hdc, meterBg.left, meterBg.bottom);
836
+
DeleteObject(lightPen);
837
+
DeleteObject(darkPen);
839
+
// "VU" label with classic styling
840
+
SetTextColor(hdc, RGB(0, 255, 0));
SetBkMode(hdc, TRANSPARENT);
726
-
HFONT smallFont = CreateFont(10, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
727
-
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
728
-
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
729
-
DEFAULT_PITCH | FF_SWISS, "Arial");
730
-
SelectObject(hdc, smallFont);
731
-
TextOut(hdc, x + 9, y + 2, "VU", 2);
842
+
HFONT vuFont = CreateFont(10, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
843
+
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
844
+
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
845
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
846
+
SelectObject(hdc, vuFont);
847
+
TextOut(hdc, x + 5, y + 2, "VU", 2);
733
-
// Draw left channel meter
734
-
int leftWidth = (int)(leftLevel * 70);
849
+
// Left channel meter with neon effect
850
+
int leftWidth = (int)(leftLevel * 65);
736
-
RECT leftBar = {x + 5, y + 12, x + 5 + leftWidth, y + 18};
737
-
COLORREF leftColor = leftLevel > 0.8f ? RGB(255, 0, 0) :
738
-
leftLevel > 0.6f ? RGB(255, 255, 0) : RGB(0, 255, 0);
852
+
RECT leftBar = {x + 8, y + 12, x + 8 + leftWidth, y + 17};
854
+
// Determine color based on level
855
+
COLORREF leftColor;
856
+
if (leftLevel > 0.8f) leftColor = RGB(255, 64, 64); // Red
857
+
else if (leftLevel > 0.6f) leftColor = RGB(255, 255, 0); // Yellow
858
+
else leftColor = RGB(0, 255, 64); // Green
HBRUSH leftBrush = CreateSolidBrush(leftColor);
FillRect(hdc, &leftBar, leftBrush);
865
+
COLORREF glowColor;
866
+
if (leftLevel > 0.8f) glowColor = RGB(128, 32, 32);
867
+
else if (leftLevel > 0.6f) glowColor = RGB(128, 128, 0);
868
+
else glowColor = RGB(0, 128, 32);
870
+
HPEN glowPen = CreatePen(PS_SOLID, 1, glowColor);
871
+
SelectObject(hdc, glowPen);
872
+
Rectangle(hdc, leftBar.left - 1, leftBar.top - 1, leftBar.right + 1, leftBar.bottom + 1);
873
+
DeleteObject(glowPen);
744
-
// Draw right channel meter
745
-
int rightWidth = (int)(rightLevel * 70);
876
+
// Right channel meter with neon effect
877
+
int rightWidth = (int)(rightLevel * 65);
747
-
RECT rightBar = {x + 5, y + 22, x + 5 + rightWidth, y + 28};
748
-
COLORREF rightColor = rightLevel > 0.8f ? RGB(255, 0, 0) :
749
-
rightLevel > 0.6f ? RGB(255, 255, 0) : RGB(0, 255, 0);
879
+
RECT rightBar = {x + 8, y + 22, x + 8 + rightWidth, y + 27};
881
+
// Determine color based on level
882
+
COLORREF rightColor;
883
+
if (rightLevel > 0.8f) rightColor = RGB(255, 64, 64); // Red
884
+
else if (rightLevel > 0.6f) rightColor = RGB(255, 255, 0); // Yellow
885
+
else rightColor = RGB(0, 255, 64); // Green
HBRUSH rightBrush = CreateSolidBrush(rightColor);
FillRect(hdc, &rightBar, rightBrush);
DeleteObject(rightBrush);
892
+
COLORREF glowColor;
893
+
if (rightLevel > 0.8f) glowColor = RGB(128, 32, 32);
894
+
else if (rightLevel > 0.6f) glowColor = RGB(128, 128, 0);
895
+
else glowColor = RGB(0, 128, 32);
897
+
HPEN glowPen = CreatePen(PS_SOLID, 1, glowColor);
898
+
SelectObject(hdc, glowPen);
899
+
Rectangle(hdc, rightBar.left - 1, rightBar.top - 1, rightBar.right + 1, rightBar.bottom + 1);
900
+
DeleteObject(glowPen);
755
-
// Draw channel labels (better positioned)
756
-
TextOut(hdc, x + 77, y + 12, "L", 1);
757
-
TextOut(hdc, x + 77, y + 22, "R", 1);
904
+
SetTextColor(hdc, RGB(192, 192, 192));
905
+
TextOut(hdc, x + 75, y + 12, "L", 1);
906
+
TextOut(hdc, x + 75, y + 22, "R", 1);
759
-
// Draw scale marks
760
-
HPEN scalePen = CreatePen(PS_SOLID, 1, RGB(80, 80, 80));
909
+
HPEN scalePen = CreatePen(PS_SOLID, 1, RGB(64, 64, 64));
SelectObject(hdc, scalePen);
for (int i = 1; i < 10; i++) {
763
-
int markX = x + 5 + (i * 7);
912
+
int markX = x + 8 + (i * 7);
MoveToEx(hdc, markX, y + 30, NULL);
LineTo(hdc, markX, y + 32);
768
-
DeleteObject(smallFont);
917
+
DeleteObject(vuFont);
void DrawPowerButton(HDC hdc, int x, int y, int radius, int power) {
772
-
// Draw button background
773
-
COLORREF buttonColor = power ? RGB(255, 0, 0) : RGB(100, 100, 100);
774
-
HBRUSH buttonBrush = CreateSolidBrush(buttonColor);
775
-
SelectObject(hdc, buttonBrush);
776
-
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
777
-
DeleteObject(buttonBrush);
921
+
// Chrome gradient button
922
+
for (int i = 0; i < 6; i++) {
923
+
int intensity = power ? (80 + i * 20) : (60 + i * 10);
924
+
COLORREF buttonColor = power ? RGB(255 - i * 20, intensity, intensity) : RGB(intensity, intensity, intensity);
925
+
HBRUSH buttonBrush = CreateSolidBrush(buttonColor);
926
+
SelectObject(hdc, buttonBrush);
927
+
Ellipse(hdc, x - radius + i, y - radius + i, x + radius - i, y + radius - i);
928
+
DeleteObject(buttonBrush);
779
-
// Draw button border
780
-
HPEN borderPen = CreatePen(PS_SOLID, 2, RGB(60, 60, 60));
931
+
// Inner button surface
932
+
COLORREF innerColor = power ? RGB(255, 128, 128) : RGB(128, 128, 128);
933
+
HBRUSH innerBrush = CreateSolidBrush(innerColor);
934
+
SelectObject(hdc, innerBrush);
935
+
Ellipse(hdc, x - radius + 6, y - radius + 6, x + radius - 6, y + radius - 6);
936
+
DeleteObject(innerBrush);
939
+
HPEN borderPen = CreatePen(PS_SOLID, 2, RGB(32, 32, 32));
SelectObject(hdc, borderPen);
Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
785
-
// Draw power symbol
944
+
// Power symbol with glow effect
947
+
HPEN glowPen = CreatePen(PS_SOLID, 5, RGB(255, 64, 64));
948
+
SelectObject(hdc, glowPen);
949
+
Arc(hdc, x - 10, y - 10, x + 10, y + 10, x + 8, y - 8, x - 8, y - 8);
950
+
MoveToEx(hdc, x, y - 12, NULL);
951
+
LineTo(hdc, x, y - 4);
952
+
DeleteObject(glowPen);
HPEN symbolPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 255));
SelectObject(hdc, symbolPen);
790
-
// Draw power symbol (circle with line)
Arc(hdc, x - 8, y - 8, x + 8, y + 8, x + 6, y - 6, x - 6, y - 6);
MoveToEx(hdc, x, y - 10, NULL);
960
+
DeleteObject(symbolPen);
962
+
// Dim power symbol
963
+
HPEN symbolPen = CreatePen(PS_SOLID, 2, RGB(64, 64, 64));
964
+
SelectObject(hdc, symbolPen);
965
+
Arc(hdc, x - 8, y - 8, x + 8, y + 8, x + 6, y - 6, x - 6, y - 6);
966
+
MoveToEx(hdc, x, y - 10, NULL);
967
+
LineTo(hdc, x, y - 2);
798
-
// Draw label above the button
SetBkMode(hdc, TRANSPARENT);
800
-
SetTextColor(hdc, RGB(255, 255, 255));
801
-
HFONT labelFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
973
+
SetTextColor(hdc, power ? RGB(255, 192, 192) : RGB(192, 192, 192));
974
+
HFONT labelFont = CreateFont(12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
804
-
DEFAULT_PITCH | FF_SWISS, "Arial");
977
+
DEFAULT_PITCH | FF_SWISS, "Tahoma");
SelectObject(hdc, labelFont);
SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, x, y - radius - 18, "POWER", 5);