Skip to content

Commit af39250

Browse files
authored
Fixes a calcScaleToFit() bug
Fixes a bug where calcScaleToFit() was incorrect for 2D vectors when using FitMode::FIT and COVER.
1 parent f228f25 commit af39250

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

src/ga/layout.h

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,49 @@ inline vec3 calcScaleToFit( const vec3& sourceSize, const vec3& containerSize, c
106106

107107
inline vec2 calcScaleToFit( const vec2& sourceSize, const vec2& containerSize, const FitMode& fitMode )
108108
{
109-
return calcScaleToFit( vec3( sourceSize, 1.f ), vec3( containerSize, 1.f ), fitMode );
109+
vec2 scale = vec2( 1.f );
110+
111+
// calculate sizing based on fit mode
112+
switch ( fitMode ) {
113+
114+
case FitMode::FIT: {
115+
vec2 s = containerSize / sourceSize;
116+
float s0 = std::min( s.x, s.y );
117+
scale = vec2( s0 );
118+
break;
119+
}
120+
121+
case FitMode::STRETCH: {
122+
scale = containerSize / sourceSize;
123+
break;
124+
}
125+
126+
case FitMode::COVER: {
127+
vec2 s = containerSize / sourceSize;
128+
float s1 = std::max( s.x, s.y );
129+
scale = vec2( s1 );
130+
break;
131+
}
132+
133+
case FitMode::FIT_WIDTH: {
134+
float sx = containerSize.x / sourceSize.x;
135+
scale = vec2( sx );
136+
break;
137+
}
138+
139+
case FitMode::FIT_HEIGHT: {
140+
float sy = containerSize.y / sourceSize.y;
141+
scale = vec2( sy );
142+
break;
143+
}
144+
145+
case FitMode::FIT_DEPTH:
146+
case FitMode::NONE:
147+
default:
148+
break;
149+
}
150+
151+
return scale;
110152
}
111153

112154
} // namespace ga

0 commit comments

Comments
 (0)