FontUIResource derive( Font baseFont, IntUnaryOperator scale ) {
			int baseStyle = baseFont.getStyle();
			int baseSize = baseFont.getSize();

			// new style
			int newStyle = (style != -1)
				? style
				: (styleChange != 0)
					? (baseStyle & ~((styleChange >> 16) & 0xffff)) | (styleChange & 0xffff)
					: baseStyle;

			// new size
			int newSize = (absoluteSize > 0)
				? scale.applyAsInt( absoluteSize )
				: (relativeSize != 0)
					? (baseSize + scale.applyAsInt( relativeSize ))
					: (scaleSize > 0)
						? Math.round( baseSize * scaleSize )
						: baseSize;
			if( newSize <= 0 )
				newSize = 1;

			// create font for family
			if( families != null && !families.isEmpty() ) {
				String preferredFamily = preferredFamily( families );
				if( preferredFamily != null ) {
					Font font = createCompositeFont( preferredFamily, newStyle, newSize );
					if( !isFallbackFont( font ) || isDialogFamily( preferredFamily ) )
						return toUIResource( font );
				}

				for( String family : families ) {
					Font font = createCompositeFont( family, newStyle, newSize );
					if( !isFallbackFont( font ) || isDialogFamily( family ) )
						return toUIResource( font );
				}
			}

			// derive font
			if( newStyle != baseStyle || newSize != baseSize ) {
				// hack for font "Ubuntu Medium" on Linux, which curiously belongs
				// to family "Ubuntu Light" and using deriveFont() would create a light font
				if( "Ubuntu Medium".equalsIgnoreCase( baseFont.getName() ) &&
					"Ubuntu Light".equalsIgnoreCase( baseFont.getFamily() ) )
				{
					Font font = createCompositeFont( "Ubuntu Medium", newStyle, newSize );
					if( !isFallbackFont( font ) )
						return toUIResource( font );
				}

				return toUIResource( baseFont.deriveFont( newStyle, newSize ) );
			} else
				return toUIResource( baseFont );
		}
@param families list of font families, or {@code null}
@param style new style of font, or {@code -1}
@param styleChange derive style of base font; or {@code 0}
                   (the lower 16 bits are added; the upper 16 bits are removed)
@param absoluteSize new size of font, or {@code 0}
@param relativeSize added to size of base font, or {@code 0}
@param scaleSize multiply size of base font, or {@code 0}
flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java