Greetings,
I'm working on a labeling tool that allows the user to set the font family, size, weight variant and style of label before adding it to the map as a graphic's text Symbol. I can set every one of those properties except for the font family. The font family for thegraphic is always set to "'Helvetica Neue',Helvetica,Arial,sans-serif" no matter what value I put into the "font.setFamily()" method.
I have a couple of questions. First where is an authoritative list of fonts values that can be passed to the "font.setFamily()" method. Next, once you have those values, how do you get a graphic's text symbol to display those fonts?
I'm assigning the properties of my font like this:
<SPAN class="keyword token">let</SPAN> font <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Font</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
font<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setVariant</SPAN><SPAN class="punctuation token">(</SPAN>Font<SPAN class="punctuation token">.</SPAN>VARIANT_NORMAL<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
font<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setWeight</SPAN><SPAN class="punctuation token">(</SPAN>Font<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"WEIGHT_BOLDER"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
font<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setFamily</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"impact"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
font<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setStyle</SPAN><SPAN class="punctuation token">(</SPAN>Font<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"STYLE_OBLIQUE"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
font<SPAN class="punctuation token">.</SPAN><SPAN class="token function">setSize</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="number token">20</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">let</SPAN> textSymbol <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">TextSymbol</SPAN><SPAN class="punctuation token">(</SPAN>notes<SPAN class="punctuation token">,</SPAN> font<SPAN class="punctuation token">,</SPAN> color<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">let</SPAN> textJSON <SPAN class="operator token">=</SPAN> textSymbol<SPAN class="punctuation token">.</SPAN><SPAN class="token function">toJson</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">let</SPAN> labelg <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">Graphic</SPAN><SPAN class="punctuation token">(</SPAN>graphic<SPAN class="punctuation token">.</SPAN>geometry<SPAN class="punctuation token">,</SPAN> textSymbol<SPAN class="punctuation token">,</SPAN> graphic<SPAN class="punctuation token">.</SPAN>attributes<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
console<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN>labelg<SPAN class="punctuation token">.</SPAN>symbol<SPAN class="punctuation token">.</SPAN><SPAN class="token function">toJson</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
layer<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add</SPAN><SPAN class="punctuation token">(</SPAN>labelg<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
When I check out the console.log of labelg.symbol.toJson() at this point I get :
{size: 15, style: "oblique", weight: "bolder", family: "impact"} . Except for the font size being 15 rather than 20, this is pretty much what I expect.
However, when the graphic loads, it is clearly not impact. Upon right clicking on the label in the map and selecting the 'Inspect' menu option to see the HTML of the label in the developer console I see the folowing:
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>text</SPAN> <SPAN class="attr-name token">fill</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>rgb(0, 0, 0)<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">fill-opacity</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>1<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">stroke</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>none<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">stroke-opacity</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>0<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">stroke-width</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>1<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">stroke-linecap</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>butt<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">stroke-linejoin</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>miter<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">stroke-miterlimit</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>4<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">x</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>196<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">y</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>394<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">text-anchor</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>middle<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">text-decoration</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>undefined<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">rotate</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>0<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">kerning</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>auto<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">text-rendering</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>optimizeLegibility<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">font-</SPAN><SPAN class="style-attr language-css token"><SPAN class="attr-name token"><SPAN class="attr-name token">style</SPAN></SPAN><SPAN class="punctuation token">="</SPAN><SPAN class="attr-value token">oblique</SPAN><SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">font-variant</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>normal<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">font-weight</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>bolder<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">font-size</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>20<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">font-family</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>impact,Arial<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">dominant-baseline</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>alphabetic<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">transform</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>matrix(1.00000000,0.00000000,0.00000000,1.00000000,0.00000000,0.00000000)<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">fill-rule</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>evenodd<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>tspan</SPAN> <SPAN class="attr-name token">dy</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>0<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">x</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>196<SPAN class="punctuation token">"</SPAN></SPAN> <SPAN class="attr-name token">letter-spacing</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>1px<SPAN class="punctuation token">"</SPAN></SPAN>
<SPAN class="attr-name token">font-family</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN><SPAN class="punctuation token">'</SPAN>Helvetica Neue<SPAN class="punctuation token">'</SPAN>,Helvetica,Arial,sans-serif<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN>
Courier New, 20, B, I
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>tspan</SPAN><SPAN class="punctuation token">></SPAN></SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>text</SPAN><SPAN class="punctuation token">></SPAN></SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>The 'font-family' property in the text element is set to 'impact,Arial', however it appears to me that the tspan element is the element that actually styles the font in the map. The tspan element's font-family is set to "'Helvetica Neue',Helvetica,Arial,sans-serif". If I change the tspan's font-family property to 'impact' in the developer console then the font family displays correctly in the map.
How do I get the tspan's font-family set correctly using the JavaScript API?
Thanks, Tyler