@Override
		public synchronized Object createValue( UIDefaults table ) {
			if( inCreateValue )
				throw new IllegalStateException( "FlatLaf: endless recursion in font" );

			Font baseFont = null;

			inCreateValue = true;
			try {
				if( baseFontKey != null )
					baseFont = (Font) UIDefaultsLoader.lazyUIManagerGet( baseFontKey );

				if( baseFont == null )
					baseFont = UIManager.getFont( "defaultFont" );

				// fallback (to avoid NPE in case that this is used in another Laf)
				if( baseFont == null )
					baseFont = UIManager.getFont( "Label.font" );
			} finally {
				inCreateValue = false;
			}

			if( lastBaseFont != baseFont ) {
				lastBaseFont = baseFont;

				font = derive( baseFont, fontSize -> UIScale.scale( fontSize ) );
			}

			return font;
		}
@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