Canvas & Wingdings

 

Почему-то Canvas::TextOut() упорно выводит рамки вместо любых символов Wingdings

   // рисуем стрелку
   string arrowFont="Wingdings";
   string arrowText=ShortToString(arrowCode); // 241
   int arrowFontSize=12;
   uint arrowColor=CLR(clrBlack);
   if (!TextSetFont(arrowFont,arrowFontSize)) {
      Print("Font not set");
   }
   uint arrowWidth,arrowHeight;
   TextGetSize(arrowText,arrowWidth,arrowHeight);
   int arrowX,arrowY;
   ChartTimePriceToXY(0,0,time,price,arrowX,arrowY);
   arrowX-=(int)arrowWidth/2;
   if (dir==DIR_DN) arrowY-=(int)arrowHeight;
   if (!cnvBg.FontSet(arrowFont,arrowFontSize)) {
      Print("Font not set 2");
   }
   cnvBg.TextOut(arrowX,arrowY,arrowText,arrowColor);

он что, такого не умеет ? или нужны хитрые обходные манёвры, чтобы выводить фигуры из Wingdings ??

 

сам спросил сам отвечу, спасибо всем :

fix :

   string arrowText=ShortToString(arrow<192?arrow:arrow+848);

вот так только работает для вывод Wingdings в TextOut : по простому - для вывода символов от 192 к ним надо добавить константу. 

это юникодные примочки. Хотя может и баг и ShortToString не вполне корректен.  

 

и чтобы два раза не вставать и новую тему не заводить :

как вывести текст КРАСИВО ? 

Тут я точно не эксперт, но такое странное ощущение, что никакого Anti-Aliasing нету при выводе текста. Мелкий шрифт вообще не читается.

Шрифт что-ли посоветуйте, от 8 пунктов. Фиксированный и нет.

 
Maxim Kuznetsov #:

и чтобы два раза не вставать и новую тему не заводить :

как вывести текст КРАСИВО ? 

Тут я точно не эксперт, но такое странное ощущение, что никакого Anti-Aliasing нету при выводе текста. Мелкий шрифт вообще не читается.

Шрифт что-ли посоветуйте, от 8 пунктов. Фиксированный и нет.

Canvas.Erase(0x00FFFFFF);

 
Nikolai Semko #:
Canvas.Erase(0x00FFFFFF);

O! Эксперты подвалили :-)

Спасибо, так вроде работает ! не понял почему, но работает - прозрачность 0/255, RGB всё на максимум...

а то уж был готов в cairo перелезть и фик с ним с DLL 

 

несколько загодя порадовался, мелкий текст всё-равно "мылится"

 
Maxim Kuznetsov #:

Спасибо, так вроде работает ! не понял почему, но работает - прозрачность 0/255, RGB всё на максимум...

Давно сидит внутренний баг смешивания  ARGB 
 

приключения с Canvas продолжаются :-)

может кому пригодится:

размеры шрифта всё-таки надо через пункты

int arrowFontSize=fontSizePoints * terminalScreenDpi / 54;

тогда рендерится более менее.

То есть размер не может быть произвольным - должен быть кратен. 

Если задать как в документации -fontSizePoints*10, то есть отрицательное значение в десятых долях пункта, то TextGetSize не срабатывает

В общем как по минному полю..всё отлажено, соответствует докам..ога, это фантастика :-)

Но с фоновым цветом всё равно беда. Для сравнения: один и тот-же текст, на (почти)одинаковом полупрозрачном красном фоне. 
в MT заметна "аура" вокруг текста и читать становиться сложно.

 
Maxim Kuznetsov #:
соответствует докам..ога, это фантастика :-)

Активно использую получение размеров текста. Всегда всё исправно. Кто-то из нас что-то делает не так.

 
Artyom Trishkin #:

Активно использую получение размеров текста. Всегда всё исправно. Кто-то из нас что-то делает не так.

всё может быть..завтра со свежей головой поотлаживаю.

 
Maxim Kuznetsov #:

и чтобы два раза не вставать и новую тему не заводить :

...

Шрифт что-ли посоветуйте, от 8 пунктов. Фиксированный и нет.

Методом проб и ошибок, из стандартных (типичных для Windows) лучше выглядят в разных размерах "Verdana" и "Courier New"

у прочих проблемы при малых размерах, особенно если на подложке есть прозрачность.