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