On Sun, Sep 9, 2012 at 1:21 AM, Behdad Esfahbod <[email protected]> wrote:
> On 09/08/2012 10:21 AM, Parth Kanungo wrote:
> > I think that it is the presence of these initialized functions that
> enables
> > pangocairo to render different styles(italic/oblique), variants,
> weights(thin,
> > normal, ultraheavy), stretch etc. and other attributes, which are
> impossible
> > to render in pangoft2.
>
> How are they impossible?
>
>
Hi Behdad,
They are impossible when I don't use WINDOWSFONTDIR in my fonts.conf. I add
the path of an in-house font, which *does not* have bold and italic version
(like say arial which has arial.ttf, ariali.ttf, arialbd.ttf).
> Note that Pango doesn't really implement font variants. Italic, bold,
> stretch
> etc should work as far as fonts are available. Italic and bold are
> synthesized if not available, but not stretch or other properties.
>
Through my experiements, I found that when Italic and bold are not
available (as a consequence of path change in fonts.conf), they are not
synthesized.
Only PANGO_UNDERLINE_ERROR and other PangoUnderlines work. Nothing else.
Maybe I have done something wrong here, you can help me figure out. I have
used the following code:
(Also, attaching the same code in a file, if the above code appears
unreadable on the email.)
Thanks.
/// #.... libraries exported for display function //////
#include "pango.h"
#include "pangoft2.h"
#include <pango/pangofc-fontmap.h>
#include <pango/pangofc-font.h>
#include "pango-attributes.h"
#include<fontconfig.h>
#include<freetype.h>
int test1(void);
int test1()
{
PangoLayout* layout;
PangoFontMap* PFM;
PangoContext* context;
PFM = pango_ft2_font_map_new(); // new FontMap
context =
pango_font_map_create_context(PANGO_FONT_MAP(PFM)); ///
Create Context using FontMap
pango_context_set_base_gravity(context,PANGO_GRAVITY_EAST);
///there is no effect of even this.
layout =
pango_layout_new(context);
// Create Layout using Context
PangoFontDescription *desc; // this structure stores a description of
the ideal font
pango_layout_set_text(layout, "Hello World!", -1);
PangoAttrList *list = pango_attr_list_new();
PangoAttribute* attr1 = pango_attr_underline_new(PANGO_UNDERLINE_ERROR);
pango_attr_list_insert(list, attr1);
PangoAttribute* attr2 = pango_attr_weight_new(PANGO_WEIGHT_ULTRAHEAVY);
pango_attr_list_insert(list, attr2);
PangoAttribute* attr3 = pango_attr_style_new(PANGO_STYLE_OBLIQUE);
pango_attr_list_insert(list, attr3);
pango_layout_set_attributes(layout, list);
pango_layout_context_changed(layout);
desc = pango_font_description_from_string("Sans Bold 40"); //
specify the font that would be ideal for your particular use
pango_layout_set_font_description(layout,
desc); // assign the previous font description
to the layout
pango_font_description_free(desc);
// free the description
int bitmap_width = 550, bitmap_height = 80;
pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(PFM),100,
100); //Set Resolution
FT_Bitmap* bm;
bm = g_slice_new(FT_Bitmap); // new bitmap and set its various
attributes
bm->rows = bitmap_height;
bm->width = bitmap_width;
bm->pitch = bm->width;
bm->num_grays = 256; // num_grays
bm->pixel_mode = FT_PIXEL_MODE_GRAY;
bm->buffer = (unsigned char*)g_malloc(bm->pitch * bm->rows);
memset(bm->buffer, 0x00, bm->pitch * bm->rows); // sets all the data
fields of an empty bitmap to zero
pango_ft2_render_layout(bm,layout,0,0);
Display_on_screen_class::Clear();
Display_on_screen_class::DrawGlyphImage(0,0, bitmap_width, bitmap_height,
bm->buffer, 0xffffffff);
Display_on_screen_class::Flush(960, 540);
wchar_t* filename = (wchar_t*)L"image.bmp";
Display_on_screen_class::SaveAsFile(filename);
pango_attribute_destroy(attr1);
pango_attribute_destroy(attr2);
pango_attribute_destroy(attr3);
return 0;
}
--
PangoLeaner
/// #.... other initialization and libraries exported for display function //////
#include "pango.h"
#include "pangoft2.h"
#include <pango/pangofc-fontmap.h>
#include <pango/pangofc-font.h>
#include "pango-attributes.h"
#include<fontconfig.h>
#include<freetype.h>
int test1(void);
int test1()
{
PangoLayout* layout;
PangoFontMap* PFM;
PangoContext* context;
/////////// FONTMAP //////////////
PFM = pango_ft2_font_map_new(); // new FontMap
//////////CONTEXT////////////////
context = pango_font_map_create_context(PANGO_FONT_MAP(PFM)); // Create Context using FontMap
pango_context_set_base_gravity(context,PANGO_GRAVITY_EAST); ///can be changed to EAST/WEST to observe effects
///////////LAYOUT//////////////
layout = pango_layout_new(context); // Create Layout using Context
PangoFontDescription *desc; // this structure stores a description of the style of font you'd most like
pango_layout_set_text(layout, "Hello World!", -1);
PangoAttrList *list = pango_attr_list_new();
PangoAttribute* attr1 = pango_attr_underline_new(PANGO_UNDERLINE_ERROR);
pango_attr_list_insert(list, attr1);
PangoAttribute* attr2 = pango_attr_weight_new(PANGO_WEIGHT_ULTRAHEAVY);
pango_attr_list_insert(list, attr2);
PangoAttribute* attr3 = pango_attr_style_new(PANGO_STYLE_OBLIQUE);
pango_attr_list_insert(list, attr3);
pango_layout_set_attributes(layout, list);
pango_layout_context_changed(layout);
desc = pango_font_description_from_string("Sans Bold 40"); // specify the font that would be ideal for your particular use
pango_layout_set_font_description(layout, desc); // assign the previous font description to the layout
pango_font_description_free(desc); // free the description
int bitmap_width = 550, bitmap_height = 80;
pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(PFM),100, 100); //Set Resolution
FT_Bitmap* bm;
bm = g_slice_new(FT_Bitmap); // new bitmap and set its various attributes
bm->rows = bitmap_height;
bm->width = bitmap_width;
bm->pitch = bm->width;
bm->num_grays = 256; // num_grays
bm->pixel_mode = FT_PIXEL_MODE_GRAY;
bm->buffer = (unsigned char*)g_malloc(bm->pitch * bm->rows);
memset(bm->buffer, 0x00, bm->pitch * bm->rows); // sets all the data fields of an empty bitmap to zero
pango_ft2_render_layout(bm,layout,0,0); // empty bitmap and layout are passed along with the X position of the left of the layout & Y position of the top of the layout
Display_on_screen_class::Clear();
Display_on_screen_class::DrawGlyphImage(0,0, bitmap_width, bitmap_height, bm->buffer, 0xffffffff);
Display_on_screen_class::Flush(960, 540);
wchar_t* filename = (wchar_t*)L"image.bmp";
Display_on_screen_class::SaveAsFile(filename);
pango_attribute_destroy(attr1);
pango_attribute_destroy(attr2);
pango_attribute_destroy(attr3);
return 0; // success
}_______________________________________________
gtk-i18n-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtk-i18n-list