including fonts

David Grieve david.grieve at oracle.com
Mon Jan 4 21:36:36 UTC 2016


The reason CSS ignores everything but src is that there is no public API 
in Font for providing the additional information.

CSS uses Font.loadFont to load a font from a @font-face src url. See 
com/sun/javafx/css/StyleManager.java

On 1/4/16 2:43 PM, Phil Race wrote:
> Hi,
>
> I can't speak authoritatively on the CSS implementation because I am not
> familiar with it but here are some thoughts and observations that 
> might help.
>
> Suppose you have :
> @font-face {
>   font-family: RobotoMedium
>   src: url("robotomedium.ttf"
> }
>
> My reading of the W3C spec. is that the name you specify as font-family
> is used by CSS as the family name regardless of the *actual* name of 
> the font
> but I don't think FX can be working like that if it ignores font-family.
>
> If CSS is ignoring everything except src that seems like
> you then need to know for sure yourself what the family + style of the 
> font is
> and per that bug then use it via fx-font using the actual name+style.
> This suggests CSS is loading the font into the list of fonts available 
> to be used
> by creating fonts directly from JavaFX API.
> This seems to be confirmed by you seeing that Font.getFontNames()
> reports these.
>
> So you'd need to do the following for both font files
> ie.
>
> @font-face {
>   font-family: BlahBlahDoesNotMatterApparently
>   src: url("robotomedium.ttf")
> }
>
>
> @font-face {
>   font-family: BlahBlahDoesNotMatterEither
>   src: url("robotomediumitalic.ttf")
> }
>
> and reference as :
>
> -fx-font: normal normal 12 "Roboto Medium"
> -fx-font: italic normal 12 "Roboto Medium"
>
> If this does not work then I don't know what CSS might be doing in its 
> lookup.
> The comment about only the last one loaded being available does not 
> add up to me
> unless CSS is doing some buggy filtering or remembering of its own.
> Perhaps explicitly specifying "normal" will fix that.
>
> -phil.
>
> On 01/04/2016 12:08 AM, Tom Eugelink wrote:
>> No problem, thanks for the suggestion!
>>
>> What I expect to be the cause is that the attributes in @font-face, 
>> specifying if a font is italic or not, are not supported. And they 
>> probably aren't populated based on the TTF metadata either. But 
>> before I dive too deep, maybe someone can prevent me from swimming in 
>> the wrong direction.
>>
>> Tom
>>
>>
>> On 4-1-2016 00:02, cogmission (David Ray) wrote:
>>> I guess I was assuming the "ideal"/expected behavior applied? Sorry...
>>>
>>> On Sun, Jan 3, 2016 at 10:14 AM, Tom Eugelink <tbee at tbee.org 
>>> <mailto:tbee at tbee.org>> wrote:
>>>
>>>     Hi David,
>>>
>>>     Which would assume that if I specify no keywords, then it should 
>>> take the normal version. It does not. Whatever version is loaded 
>>> last is used.
>>>
>>>     Tom
>>>
>>>
>>>
>>>     On 3-1-2016 17:09, cogmission (David Ray) wrote:
>>>
>>>         Hi Tom,
>>>
>>>         I Believe in CSS, once you establish the family you can 
>>> access the sub-types via type keywords?
>>>         ...via
>>>
>>>         -fx-font-weight: bold,bolder etc.
>>>         -fx-font-style: plain, italic
>>>
>>>         Cheers,
>>>         David
>>>
>>>         On Sun, Jan 3, 2016 at 8:52 AM, Tom Eugelink <tbee at tbee.org 
>>> <mailto:tbee at tbee.org> <mailto:tbee at tbee.org 
>>> <mailto:tbee at tbee.org>>> wrote:
>>>
>>>             Addendum:
>>>
>>>             If I list the font families using Font.getFamilies() I 
>>> get "Roboto Medium" once, given that both TTF files are added using 
>>> @font-face. But if I examine Font.getFontNames() I get separate 
>>> entries for "Roboto Medium" and "Roboto Medium Italic". Closer 
>>> examination of the font loading reveals that indeed each font has 
>>> its own distinct name and some fonts shared the same family name. 
>>> That makes sense.
>>>
>>>             The thing is that in CSS -as far as I can see- fonts can 
>>> only accessed through its family name, not its own name.
>>>
>>>             Tom
>>>
>>>
>>>
>>>             On 3-1-2016 11:21, Tom Eugelink wrote:
>>>
>>>                 I'm currently including Google's Roboto font in 
>>> JFXtras and making it easily available to other users. I noticed 
>>> that the font-family attribute in font-face is ignored, and you have 
>>> to use the name as it is specified in the TTF file. I found 
>>> https://bugs.openjdk.java.net/browse/JDK-8094516 which says "/Please 
>>> note that all @font‑face descriptors are ignored except for the src 
>>> descriptor./" That pretty much explains what is going on.
>>>
>>>                 Now, Roboto comes in different styles, condensed, 
>>> bold, etc, but also italic. However, italic is a separate TTF file, 
>>> so you have a Roboto-Medium.ttf and a Roboto-MediumItalic.ttf. The 
>>> name of the font inside these two TTF files is the same, so when I 
>>> use "font-family: 'Roboto Medium'" whatever ever font is defined 
>>> last by font-face is used, and the other is not accessible.
>>>
>>>                 My question is: is the way Roboto does Italic, with 
>>> the same font name in the TTF file, a bug of Roboto, or is this common?
>>>
>>>                 Tom
>>>
>>>
>>>
>>>
>>>
>>>         --         /With kind regards,/
>>>         David Ray
>>>         Java Solutions Architect
>>>         *Cortical.io <http://cortical.io/>*
>>>         Sponsor of: HTM.java <https://github.com/numenta/htm.java>
>>>         d.ray at cortical.io <mailto:d.ray at cortical.io> 
>>> <mailto:d.ray at cortical.io <mailto:d.ray at cortical.io>>
>>>         http://cortical.io <http://cortical.io/>
>>>
>>>
>>>
>>>
>>>
>>> -- 
>>> /With kind regards,/
>>> David Ray
>>> Java Solutions Architect
>>> *Cortical.io <http://cortical.io/>*
>>> Sponsor of: HTM.java <https://github.com/numenta/htm.java>
>>> d.ray at cortical.io <mailto:d.ray at cortical.io>
>>> http://cortical.io <http://cortical.io/>
>>
>



More information about the openjfx-dev mailing list