mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 03:22:04 +00:00
Improve the quality of text when the scale it is shown at screen is
smaller than the original, seems to work well down to about a scale of 50%. * clutter/pango/pangoclutter-fontmap.c: (pango_clutter_font_map_default_substitute): turn off hinting. * clutter/pango/pangoclutter-render.c: request linear filtering instead of nearest neighbour when scaling down. * tests/test-text.c: replaced test with a a test that renders a sample grid with various pixel sizes and scales for visual inspection of text rendering quality.
This commit is contained in:
parent
52065e88bc
commit
914c930cee
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2007-10-11 Øyvind Kolås <pippin@o-hand.com>
|
||||
|
||||
Improve the quality of text when the scale it is shown at screen is
|
||||
smaller than the original, seems to work well down to about a scale
|
||||
of 50%.
|
||||
|
||||
* clutter/pango/pangoclutter-fontmap.c:
|
||||
(pango_clutter_font_map_default_substitute): turn off hinting.
|
||||
* clutter/pango/pangoclutter-render.c: request linear filtering
|
||||
instead of nearest neighbour when scaling down.
|
||||
* tests/test-text.c: replaced test with a a test that renders a sample
|
||||
grid with various pixel sizes and scales for visual inspection of
|
||||
text rendering quality.
|
||||
|
||||
2007-10-10 Emmanuele Bassi <ebassi@openedhand.com>
|
||||
|
||||
* clutter/glx/clutter-backend-glx.c: Fix documentation of the
|
||||
|
@ -196,6 +196,13 @@ pango_clutter_font_map_default_substitute (PangoFcFontMap *fcfontmap,
|
||||
if (FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch)
|
||||
FcPatternAddDouble (pattern, FC_DPI, fontmap->dpi_y);
|
||||
#endif
|
||||
|
||||
/* Turn off hinting, since we most of the time are not using the glyphs
|
||||
* from our cache at their nativly rendered resolution
|
||||
*/
|
||||
FcPatternDel (pattern, FC_HINTING);
|
||||
FcPatternAddBool (pattern, FC_HINTING, FALSE);
|
||||
|
||||
FcDefaultSubstitute (pattern);
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,11 @@ tc_get (tc_area *area, int width, int height)
|
||||
|
||||
cogl_texture_bind (CGL_TEXTURE_2D, match->name);
|
||||
|
||||
cogl_texture_set_filters (CGL_TEXTURE_2D, CGL_NEAREST, CGL_NEAREST);
|
||||
/* We might even want to use mipmapping instead of CGL_LINEAR here
|
||||
* that should allow rerendering of glyphs to look nice even at scales
|
||||
* far below 50%.
|
||||
*/
|
||||
cogl_texture_set_filters (CGL_TEXTURE_2D, CGL_LINEAR, CGL_NEAREST);
|
||||
|
||||
cogl_texture_image_2d (CGL_TEXTURE_2D,
|
||||
CGL_ALPHA,
|
||||
|
@ -1,52 +1,73 @@
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
void
|
||||
frame_cb (ClutterTimeline *timeline,
|
||||
gint frame_num,
|
||||
gpointer data)
|
||||
{
|
||||
ClutterActor *label = (ClutterActor*)data;
|
||||
|
||||
clutter_actor_set_depth(label, -400 + (frame_num * 40));
|
||||
clutter_actor_set_opacity (label, 255 - frame_num );
|
||||
}
|
||||
#define STAGE_WIDTH 640
|
||||
#define STAGE_HEIGHT 480
|
||||
|
||||
#define COLS 18
|
||||
#define ROWS 20
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
ClutterTimeline *timeline;
|
||||
ClutterActor *label;
|
||||
ClutterActor *stage;
|
||||
ClutterActor *stage;
|
||||
gchar *text;
|
||||
gsize size;
|
||||
ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff };
|
||||
ClutterColor label_color = { 0x11, 0xdd, 0x11, 0xaa };
|
||||
ClutterColor label_color = { 0xff, 0xff, 0xff, 0xff };
|
||||
|
||||
clutter_init (&argc, &argv);
|
||||
|
||||
stage = clutter_stage_get_default ();
|
||||
|
||||
if (!g_file_get_contents ("test-text.c", &text, &size, NULL))
|
||||
g_error("g_file_get_contents() of test-text.c failed");
|
||||
|
||||
clutter_actor_set_size (stage, 800, 600);
|
||||
clutter_actor_set_size (stage, STAGE_WIDTH, STAGE_HEIGHT);
|
||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||
|
||||
label = clutter_label_new_with_text ("Mono 8", text);
|
||||
clutter_label_set_color (CLUTTER_LABEL (label), &label_color);
|
||||
{
|
||||
gint font_size;
|
||||
gdouble scale;
|
||||
gint row, col;
|
||||
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);
|
||||
for (row=0; row<ROWS; row++)
|
||||
for (col=0; col<COLS; col++)
|
||||
{
|
||||
ClutterActor *label;
|
||||
gchar font_name[64];
|
||||
gchar text[64];
|
||||
gint font_size = row+10;
|
||||
gdouble scale = 0.17 + (1.5*col/COLS);
|
||||
|
||||
sprintf (font_name, "Sans %ipx", font_size);
|
||||
sprintf (text, "OH");
|
||||
|
||||
if (row==0)
|
||||
{
|
||||
sprintf (font_name, "Sans 10px");
|
||||
sprintf (text, "%1.2f", scale);
|
||||
font_size = 10;
|
||||
scale = 1.0;
|
||||
}
|
||||
if (col==0)
|
||||
{
|
||||
sprintf (font_name, "Sans 10px");
|
||||
sprintf (text, "%ipx", font_size);
|
||||
if (row==0)
|
||||
sprintf (text, "");
|
||||
font_size = 10;
|
||||
scale = 1.0;
|
||||
}
|
||||
|
||||
label = clutter_label_new_with_text (font_name, text);
|
||||
clutter_label_set_color (CLUTTER_LABEL (label), &label_color);
|
||||
clutter_actor_set_position (label, (1.0*STAGE_WIDTH/COLS)*col,
|
||||
(1.0*STAGE_HEIGHT/ROWS)*row);
|
||||
/*clutter_actor_set_clip (label, 0,0, (1.0*STAGE_WIDTH/COLS),
|
||||
(1.0*STAGE_HEIGHT/ROWS));*/
|
||||
clutter_actor_set_scale (label, scale, scale);
|
||||
clutter_label_set_line_wrap (CLUTTER_LABEL (label), FALSE);
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);
|
||||
}
|
||||
}
|
||||
clutter_actor_show_all (stage);
|
||||
|
||||
timeline = clutter_timeline_new (400, 60); /* num frames, fps */
|
||||
g_object_set(timeline, "loop", TRUE, NULL); /* have it loop */
|
||||
|
||||
g_signal_connect(timeline, "new-frame", G_CALLBACK (frame_cb), label);
|
||||
|
||||
/* and start it */
|
||||
clutter_timeline_start (timeline);
|
||||
|
||||
g_signal_connect (stage, "key-press-event",
|
||||
G_CALLBACK (clutter_main_quit), NULL);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user