mirror of
				https://github.com/nicbarker/clay.git
				synced 2025-11-04 00:26:17 +00:00 
			
		
		
		
	[Core] Fix aspect ratio scaling of images when only one sizing axis was specified
This commit is contained in:
		
							parent
							
								
									bc2548e3ec
								
							
						
					
					
						commit
						d9e02ab1d3
					
				
							
								
								
									
										22
									
								
								clay.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								clay.h
									
									
									
									
									
								
							| 
						 | 
					@ -1598,6 +1598,25 @@ bool Clay__ElementHasConfig(Clay_LayoutElement *layoutElement, Clay__ElementConf
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Clay__UpdateAspectRatioBox(Clay_LayoutElement *layoutElement) {
 | 
				
			||||||
 | 
					    for (int32_t j = 0; j < layoutElement->elementConfigs.length; j++) {
 | 
				
			||||||
 | 
					        Clay_ElementConfig *config = Clay__ElementConfigArraySlice_Get(&layoutElement->elementConfigs, j);
 | 
				
			||||||
 | 
					        if (config->type == CLAY__ELEMENT_CONFIG_TYPE_IMAGE) {
 | 
				
			||||||
 | 
					            Clay_ImageElementConfig *imageConfig = config->config.imageElementConfig;
 | 
				
			||||||
 | 
					            if (imageConfig->sourceDimensions.width == 0 || imageConfig->sourceDimensions.height == 0) {
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            float aspect = imageConfig->sourceDimensions.width / imageConfig->sourceDimensions.height;
 | 
				
			||||||
 | 
					            if (layoutElement->dimensions.width == 0 && layoutElement->dimensions.height != 0) {
 | 
				
			||||||
 | 
					                layoutElement->dimensions.width = layoutElement->dimensions.height * aspect;
 | 
				
			||||||
 | 
					            } else if (layoutElement->dimensions.width != 0 && layoutElement->dimensions.height == 0) {
 | 
				
			||||||
 | 
					                layoutElement->dimensions.height = layoutElement->dimensions.height * (1 / aspect);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Clay__CloseElement(void) {
 | 
					void Clay__CloseElement(void) {
 | 
				
			||||||
    Clay_Context* context = Clay_GetCurrentContext();
 | 
					    Clay_Context* context = Clay_GetCurrentContext();
 | 
				
			||||||
    if (context->booleanWarnings.maxElementsExceeded) {
 | 
					    if (context->booleanWarnings.maxElementsExceeded) {
 | 
				
			||||||
| 
						 | 
					@ -1684,6 +1703,8 @@ void Clay__CloseElement(void) {
 | 
				
			||||||
        openLayoutElement->dimensions.height = 0;
 | 
					        openLayoutElement->dimensions.height = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Clay__UpdateAspectRatioBox(openLayoutElement);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool elementIsFloating = Clay__ElementHasConfig(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING);
 | 
					    bool elementIsFloating = Clay__ElementHasConfig(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Close the currently open element
 | 
					    // Close the currently open element
 | 
				
			||||||
| 
						 | 
					@ -2125,6 +2146,7 @@ void Clay__SizeContainersAlongAxis(bool xAxis) {
 | 
				
			||||||
                    if (sizingAlongAxis) {
 | 
					                    if (sizingAlongAxis) {
 | 
				
			||||||
                        innerContentSize += *childSize;
 | 
					                        innerContentSize += *childSize;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                    Clay__UpdateAspectRatioBox(childElement);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue