Skip to content

Commit f70a1ed

Browse files
authored
[GEN][ZH] Scale intro videos to maintain their original aspect ratio (#1329)
1 parent dd2a936 commit f70a1ed

File tree

8 files changed

+84
-2
lines changed

8 files changed

+84
-2
lines changed

Generals/Code/GameEngine/Include/GameClient/Display.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class Display : public SubsystemInterface
146146
Int endX, Int endY, Color color = 0xFFFFFFFF, DrawImageMode mode=DRAW_IMAGE_ALPHA) = 0;
147147

148148
/// draw a video buffer fit within the screen coordinates
149+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream ) = 0;
149150
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
150151
Int endX, Int endY ) = 0;
151152

Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class W3DDisplay : public Display
116116
Int endX, Int endY, Color color = 0xFFFFFFFF, DrawImageMode mode=DRAW_IMAGE_ALPHA);
117117

118118
/// draw a video buffer fit within the screen coordinates
119+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream );
119120
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
120121
Int endX, Int endY );
121122

Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1844,7 +1844,8 @@ void W3DDisplay::draw( void )
18441844

18451845
if ( m_videoStream && m_videoBuffer )
18461846
{
1847-
drawVideoBuffer( m_videoBuffer, 0, 0, getWidth(), getHeight() );
1847+
// TheSuperHackers @bugfix Mauller 20/07/2025 scale videos based on screen size so they are shown in their original aspect
1848+
drawScaledVideoBuffer( m_videoBuffer, m_videoStream );
18481849
}
18491850
if( m_copyrightDisplayString )
18501851
{
@@ -2756,6 +2757,43 @@ VideoBuffer* W3DDisplay::createVideoBuffer( void )
27562757
return buffer;
27572758
}
27582759

2760+
//============================================================================
2761+
// W3DDisplay::drawScaledVideoBuffer
2762+
//============================================================================
2763+
2764+
void W3DDisplay::drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream )
2765+
{
2766+
// TheSuperHackers @bugfix Mauller 20/07/2025 scale videos based on screen size so they are shown in their original aspect
2767+
Real videoAspect = (Real)stream->width() / (Real)stream->height();
2768+
Real displayAspect = (Real)getWidth() / (Real)getHeight();
2769+
Bool wideAspect = displayAspect >= videoAspect;
2770+
2771+
Int startX = 0;
2772+
Int endX = 0;
2773+
Int startY = 0;
2774+
Int endY = 0;
2775+
2776+
if (wideAspect)
2777+
{
2778+
// TheSuperHackers @info if we are in a wide aspect, we scale the videos width and fill the height
2779+
Real heightScale = (Real)getHeight() / (Real)stream->height();
2780+
startX = (getWidth() / 2.0f) - (stream->width() * heightScale / 2.0f);
2781+
endX = (getWidth() / 2.0f) + (stream->width() * heightScale / 2.0f);
2782+
2783+
endY = getHeight();
2784+
}
2785+
else
2786+
{
2787+
// TheSuperHackers @info if we are in a narrow aspect, we scale the videos height and fill the width
2788+
Real widthScale = (Real)getWidth() / (Real)stream->width();
2789+
startY = (getHeight() / 2.0f) - (stream->height() * widthScale / 2.0f);
2790+
endY = (getHeight() / 2.0f) + (stream->height() * widthScale / 2.0f);
2791+
2792+
endX = getWidth();
2793+
}
2794+
2795+
drawVideoBuffer( buffer, startX, startY, endX, endY );
2796+
}
27592797

27602798
//============================================================================
27612799
// W3DDisplay::drawVideoBuffer

Generals/Code/Tools/GUIEdit/Include/GUIEditDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class GUIEditDisplay : public Display
101101
virtual VideoBuffer* createVideoBuffer( void ) { return NULL; }
102102

103103
/// draw a video buffer fit within the screen coordinates
104+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream ) { }
104105
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
105106
Int endX, Int endY ) { }
106107
virtual void takeScreenShot(void){ }

GeneralsMD/Code/GameEngine/Include/GameClient/Display.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class Display : public SubsystemInterface
146146
Int endX, Int endY, Color color = 0xFFFFFFFF, DrawImageMode mode=DRAW_IMAGE_ALPHA) = 0;
147147

148148
/// draw a video buffer fit within the screen coordinates
149+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream ) = 0;
149150
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
150151
Int endX, Int endY ) = 0;
151152

GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class W3DDisplay : public Display
116116
Int endX, Int endY, Color color = 0xFFFFFFFF, DrawImageMode mode=DRAW_IMAGE_ALPHA);
117117

118118
/// draw a video buffer fit within the screen coordinates
119+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream );
119120
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
120121
Int endX, Int endY );
121122

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1938,7 +1938,8 @@ void W3DDisplay::draw( void )
19381938

19391939
if ( m_videoStream && m_videoBuffer )
19401940
{
1941-
drawVideoBuffer( m_videoBuffer, 0, 0, getWidth(), getHeight() );
1941+
// TheSuperHackers @bugfix Mauller 20/07/2025 scale videos based on screen size so they are shown in their original aspect
1942+
drawScaledVideoBuffer( m_videoBuffer, m_videoStream );
19421943
}
19431944
if( m_copyrightDisplayString )
19441945
{
@@ -2876,6 +2877,43 @@ VideoBuffer* W3DDisplay::createVideoBuffer( void )
28762877
return buffer;
28772878
}
28782879

2880+
//============================================================================
2881+
// W3DDisplay::drawScaledVideoBuffer
2882+
//============================================================================
2883+
2884+
void W3DDisplay::drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream )
2885+
{
2886+
// TheSuperHackers @bugfix Mauller 20/07/2025 scale videos based on screen size so they are shown in their original aspect
2887+
Real videoAspect = (Real)stream->width() / (Real)stream->height();
2888+
Real displayAspect = (Real)getWidth() / (Real)getHeight();
2889+
Bool wideAspect = displayAspect >= videoAspect;
2890+
2891+
Int startX = 0;
2892+
Int endX = 0;
2893+
Int startY = 0;
2894+
Int endY = 0;
2895+
2896+
if (wideAspect)
2897+
{
2898+
// TheSuperHackers @info if we are in a wide aspect, we scale the videos width and fill the height
2899+
Real heightScale = (Real)getHeight() / (Real)stream->height();
2900+
startX = (getWidth() / 2.0f) - (stream->width() * heightScale / 2.0f);
2901+
endX = (getWidth() / 2.0f) + (stream->width() * heightScale / 2.0f);
2902+
2903+
endY = getHeight();
2904+
}
2905+
else
2906+
{
2907+
// TheSuperHackers @info if we are in a narrow aspect, we scale the videos height and fill the width
2908+
Real widthScale = (Real)getWidth() / (Real)stream->width();
2909+
startY = (getHeight() / 2.0f) - (stream->height() * widthScale / 2.0f);
2910+
endY = (getHeight() / 2.0f) + (stream->height() * widthScale / 2.0f);
2911+
2912+
endX = getWidth();
2913+
}
2914+
2915+
drawVideoBuffer( buffer, startX, startY, endX, endY );
2916+
}
28792917

28802918
//============================================================================
28812919
// W3DDisplay::drawVideoBuffer

GeneralsMD/Code/Tools/GUIEdit/Include/GUIEditDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class GUIEditDisplay : public Display
101101
virtual VideoBuffer* createVideoBuffer( void ) { return NULL; }
102102

103103
/// draw a video buffer fit within the screen coordinates
104+
virtual void drawScaledVideoBuffer( VideoBuffer *buffer, VideoStreamInterface *stream ) { }
104105
virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY,
105106
Int endX, Int endY ) { }
106107
virtual void takeScreenShot(void){ }

0 commit comments

Comments
 (0)