MCGAffineTransform view_get_stack_transform(MCStackFullscreenMode p_mode, MCRectangle p_stack_rect, MCRectangle p_screen_rect) { MCGFloat t_scale; MCGAffineTransform t_transform; switch (p_mode) { case kMCStackFullscreenModeNone: return MCGAffineTransformMakeIdentity(); case kMCStackFullscreenResize: return MCGAffineTransformMakeIdentity(); case kMCStackFullscreenExactFit: return MCGAffineTransformMakeScale((MCGFloat)p_screen_rect.width / (MCGFloat)p_stack_rect.width, (MCGFloat)p_screen_rect.height / (MCGFloat)p_stack_rect.height); case kMCStackFullscreenLetterbox: case kMCStackFullscreenShowAll: t_scale = MCMin((MCGFloat)p_screen_rect.width / (MCGFloat)p_stack_rect.width, (MCGFloat)p_screen_rect.height / (MCGFloat)p_stack_rect.height); t_transform = MCGAffineTransformMakeTranslation(-(MCGFloat)p_stack_rect.width / 2.0, -(MCGFloat)p_stack_rect.height / 2.0); t_transform = MCGAffineTransformPreScale(t_transform, t_scale, t_scale); t_transform = MCGAffineTransformPreTranslate(t_transform, (MCGFloat)p_screen_rect.width / 2.0, (MCGFloat)p_screen_rect.height / 2.0); return t_transform; case kMCStackFullscreenNoBorder: t_scale = MCMax((MCGFloat)p_screen_rect.width / (MCGFloat)p_stack_rect.width, (MCGFloat)p_screen_rect.height / (MCGFloat)p_stack_rect.height); t_transform = MCGAffineTransformMakeTranslation(-(MCGFloat)p_stack_rect.width / 2.0, -(MCGFloat)p_stack_rect.height / 2.0); t_transform = MCGAffineTransformPreScale(t_transform, t_scale, t_scale); t_transform = MCGAffineTransformPreTranslate(t_transform, (MCGFloat)p_screen_rect.width / 2.0, (MCGFloat)p_screen_rect.height / 2.0); return t_transform; case kMCStackFullscreenNoScale: // offset so stack is centered in screen MCRectangle t_rect; t_rect = MCU_center_rect(p_screen_rect, p_stack_rect); // IM-2013-12-19: [[ Bug 11590 ]] Adjust for screen rect origins other than 0,0 return MCGAffineTransformMakeTranslation(t_rect.x - p_screen_rect.x, t_rect.y - p_screen_rect.y); default: MCUnreachableReturn(MCGAffineTransformMakeIdentity()); } }
MCGAffineTransform MCStack::view_getroottransform(void) const { return MCGAffineTransformMakeTranslation(m_view_rect.x, m_view_rect.y); }