Added anti-aliasing and printing in Unicode to wxX11.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17781 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -185,6 +185,13 @@ Unix (Base/GUI):
|
|||||||
- don't include -I/usr/include nor -I/usr/local/include in wx-config output
|
- don't include -I/usr/include nor -I/usr/local/include in wx-config output
|
||||||
- shared library symbols are now versioned on platforms that support it (Linux)
|
- shared library symbols are now versioned on platforms that support it (Linux)
|
||||||
|
|
||||||
|
wxGTK:
|
||||||
|
- Further work for GTK 2.0 and Unicode support.
|
||||||
|
- Addition of native frame site grip.
|
||||||
|
|
||||||
|
wxX11:
|
||||||
|
- Unicode support through Pango library.
|
||||||
|
|
||||||
wxMSW:
|
wxMSW:
|
||||||
|
|
||||||
- fixed crashes in wxListCtrl under XP
|
- fixed crashes in wxListCtrl under XP
|
||||||
|
@@ -204,7 +204,8 @@ static const char *wxPostScriptHeaderColourImage = "\
|
|||||||
} ifelse %% end of 'false' case\n\
|
} ifelse %% end of 'false' case\n\
|
||||||
";
|
";
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
|
#else
|
||||||
static char wxPostScriptHeaderReencodeISO1[] =
|
static char wxPostScriptHeaderReencodeISO1[] =
|
||||||
"\n/reencodeISO {\n"
|
"\n/reencodeISO {\n"
|
||||||
"dup dup findfont dup length dict begin\n"
|
"dup dup findfont dup length dict begin\n"
|
||||||
@@ -886,7 +887,8 @@ void wxPostScriptDC::SetFont( const wxFont& font )
|
|||||||
|
|
||||||
m_font = font;
|
m_font = font;
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
|
#else
|
||||||
int Style = m_font.GetStyle();
|
int Style = m_font.GetStyle();
|
||||||
int Weight = m_font.GetWeight();
|
int Weight = m_font.GetWeight();
|
||||||
|
|
||||||
@@ -1117,13 +1119,18 @@ void wxPostScriptDC::SetBrush( const wxBrush& brush )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
|
|
||||||
#define PANGO_ENABLE_ENGINE
|
#define PANGO_ENABLE_ENGINE
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
#include "wx/gtk/private.h"
|
#include "wx/gtk/private.h"
|
||||||
#include "wx/fontutil.h"
|
|
||||||
#include "gtk/gtk.h"
|
#include "gtk/gtk.h"
|
||||||
|
#else
|
||||||
|
#include "wx/x11/private.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/fontutil.h"
|
||||||
#include <pango/pangoft2.h>
|
#include <pango/pangoft2.h>
|
||||||
#include <freetype/ftglyph.h>
|
#include <freetype/ftglyph.h>
|
||||||
|
|
||||||
@@ -1233,7 +1240,7 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( m_ok && m_pstream, wxT("invalid postscript dc") );
|
wxCHECK_RET( m_ok && m_pstream, wxT("invalid postscript dc") );
|
||||||
|
|
||||||
#ifdef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
int dpi = GetResolution();
|
int dpi = GetResolution();
|
||||||
dpi = 300;
|
dpi = 300;
|
||||||
PangoContext *context = pango_ft2_get_context ( dpi, dpi );
|
PangoContext *context = pango_ft2_get_context ( dpi, dpi );
|
||||||
@@ -1754,7 +1761,8 @@ bool wxPostScriptDC::StartDoc( const wxString& message )
|
|||||||
fprintf( m_pstream, wxPostScriptHeaderEllipse );
|
fprintf( m_pstream, wxPostScriptHeaderEllipse );
|
||||||
fprintf( m_pstream, wxPostScriptHeaderEllipticArc );
|
fprintf( m_pstream, wxPostScriptHeaderEllipticArc );
|
||||||
fprintf( m_pstream, wxPostScriptHeaderColourImage );
|
fprintf( m_pstream, wxPostScriptHeaderColourImage );
|
||||||
#ifndef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
|
#else
|
||||||
fprintf( m_pstream, wxPostScriptHeaderReencodeISO1 );
|
fprintf( m_pstream, wxPostScriptHeaderReencodeISO1 );
|
||||||
fprintf( m_pstream, wxPostScriptHeaderReencodeISO2 );
|
fprintf( m_pstream, wxPostScriptHeaderReencodeISO2 );
|
||||||
#endif
|
#endif
|
||||||
@@ -1972,7 +1980,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WXGTK20__
|
#if wxUSE_PANGO
|
||||||
int dpi = GetResolution();
|
int dpi = GetResolution();
|
||||||
PangoContext *context = pango_ft2_get_context ( dpi, dpi );
|
PangoContext *context = pango_ft2_get_context ( dpi, dpi );
|
||||||
|
|
||||||
|
@@ -1110,6 +1110,14 @@ bool wxApp::OnInitGui()
|
|||||||
|
|
||||||
PangoContext* wxApp::GetPangoContext()
|
PangoContext* wxApp::GetPangoContext()
|
||||||
{
|
{
|
||||||
|
static PangoContext *ret = NULL;
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
Display *xdisplay = (Display*) wxApp::GetDisplay();
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
int xscreen = DefaultScreen(xdisplay);
|
||||||
static int use_xft = -1;
|
static int use_xft = -1;
|
||||||
if (use_xft == -1)
|
if (use_xft == -1)
|
||||||
{
|
{
|
||||||
@@ -1117,12 +1125,6 @@ PangoContext* wxApp::GetPangoContext()
|
|||||||
use_xft = (val == L"1");
|
use_xft = (val == L"1");
|
||||||
}
|
}
|
||||||
|
|
||||||
Display *xdisplay = (Display*) wxApp::GetDisplay();
|
|
||||||
int xscreen = DefaultScreen(xdisplay);
|
|
||||||
|
|
||||||
PangoContext *ret = NULL;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (use_xft)
|
if (use_xft)
|
||||||
ret = pango_xft_get_context( xdisplay, xscreen );
|
ret = pango_xft_get_context( xdisplay, xscreen );
|
||||||
else
|
else
|
||||||
|
@@ -1405,7 +1405,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
|
|||||||
wxCoord height = h;
|
wxCoord height = h;
|
||||||
|
|
||||||
// Draw layout.
|
// Draw layout.
|
||||||
x11_draw_layout( (Drawable) m_window, (GC) m_textGC, x, y, layout );
|
x11_draw_layout( (Drawable) m_window, (GC) m_textGC, x, y, layout, m_textForegroundColour );
|
||||||
|
|
||||||
g_object_unref( G_OBJECT( layout ) );
|
g_object_unref( G_OBJECT( layout ) );
|
||||||
|
|
||||||
|
@@ -12,7 +12,8 @@ x11_draw_glyphs( Drawable drawable,
|
|||||||
PangoFont *font,
|
PangoFont *font,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoGlyphString *glyphs);
|
PangoGlyphString *glyphs,
|
||||||
|
wxColour &colour );
|
||||||
|
|
||||||
void
|
void
|
||||||
x11_draw_layout_line_with_colors( Drawable drawable,
|
x11_draw_layout_line_with_colors( Drawable drawable,
|
||||||
@@ -20,8 +21,7 @@ x11_draw_layout_line_with_colors( Drawable drawable,
|
|||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayoutLine *line,
|
PangoLayoutLine *line,
|
||||||
XColor *foreground,
|
wxColour &colour );
|
||||||
XColor *background);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
x11_draw_layout_with_colors( Drawable drawable,
|
x11_draw_layout_with_colors( Drawable drawable,
|
||||||
@@ -29,15 +29,15 @@ x11_draw_layout_with_colors( Drawable drawable,
|
|||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayout *layout,
|
PangoLayout *layout,
|
||||||
XColor *foreground,
|
wxColour &colour );
|
||||||
XColor *background);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
x11_draw_layout( Drawable drawable,
|
x11_draw_layout( Drawable drawable,
|
||||||
GC gc,
|
GC gc,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayout *layout);
|
PangoLayout *layout,
|
||||||
|
wxColour &colour);
|
||||||
|
|
||||||
void
|
void
|
||||||
x11_pango_get_item_properties( PangoItem *item,
|
x11_pango_get_item_properties( PangoItem *item,
|
||||||
@@ -55,16 +55,32 @@ x11_pango_get_item_properties( PangoItem *item,
|
|||||||
/* Implementation */
|
/* Implementation */
|
||||||
|
|
||||||
void
|
void
|
||||||
x11_draw_glyphs( Drawable drawable,
|
x11_draw_glyphs( Drawable drawable,
|
||||||
GC gc,
|
GC gc,
|
||||||
PangoFont *font,
|
PangoFont *font,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoGlyphString *glyphs)
|
PangoGlyphString *glyphs,
|
||||||
|
wxColour &colour )
|
||||||
{
|
{
|
||||||
if (PANGO_XFT_IS_FONT (font))
|
if (PANGO_XFT_IS_FONT (font))
|
||||||
{
|
{
|
||||||
pango_xft_picture_render( wxGlobalDisplay(), drawable, drawable, font, glyphs, x, y );
|
Display* xdisplay = wxGlobalDisplay();
|
||||||
|
int xscreen = DefaultScreen( xdisplay );
|
||||||
|
Visual* xvisual = DefaultVisual( xdisplay, xscreen );
|
||||||
|
|
||||||
|
Colormap xcolormap = DefaultColormapOfScreen( XScreenOfDisplay( xdisplay, xscreen ) );
|
||||||
|
|
||||||
|
XftDraw *draw = XftDrawCreate( xdisplay, drawable, xvisual, xcolormap );
|
||||||
|
XftColor color;
|
||||||
|
color.pixel = 0;
|
||||||
|
color.color.red = colour.Red() << 8;
|
||||||
|
color.color.green = colour.Green() << 8;
|
||||||
|
color.color.blue = colour.Blue() << 8;
|
||||||
|
color.color.alpha = 65000;
|
||||||
|
pango_xft_render( draw, &color, font, glyphs, x, y );
|
||||||
|
|
||||||
|
XftDrawDestroy( draw );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -77,9 +93,8 @@ x11_draw_layout_line_with_colors( Drawable drawable,
|
|||||||
GC gc,
|
GC gc,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayoutLine *line,
|
PangoLayoutLine *line,
|
||||||
XColor *foreground,
|
wxColour &colour )
|
||||||
XColor *background)
|
|
||||||
{
|
{
|
||||||
PangoRectangle overall_rect;
|
PangoRectangle overall_rect;
|
||||||
PangoRectangle logical_rect;
|
PangoRectangle logical_rect;
|
||||||
@@ -131,7 +146,7 @@ x11_draw_layout_line_with_colors( Drawable drawable,
|
|||||||
int gx = x + x_off / PANGO_SCALE;
|
int gx = x + x_off / PANGO_SCALE;
|
||||||
int gy = risen_y;
|
int gy = risen_y;
|
||||||
|
|
||||||
x11_draw_glyphs( drawable, gc, run->item->analysis.font, gx, gy, run->glyphs);
|
x11_draw_glyphs( drawable, gc, run->item->analysis.font, gx, gy, run->glyphs, colour );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uline == PANGO_UNDERLINE_SINGLE)
|
if (uline == PANGO_UNDERLINE_SINGLE)
|
||||||
@@ -153,8 +168,7 @@ x11_draw_layout_with_colors( Drawable drawable,
|
|||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayout *layout,
|
PangoLayout *layout,
|
||||||
XColor *foreground,
|
wxColour &colour )
|
||||||
XColor *background)
|
|
||||||
{
|
{
|
||||||
PangoLayoutIter *iter = pango_layout_get_iter (layout);
|
PangoLayoutIter *iter = pango_layout_get_iter (layout);
|
||||||
|
|
||||||
@@ -171,8 +185,7 @@ x11_draw_layout_with_colors( Drawable drawable,
|
|||||||
x + logical_rect.x / PANGO_SCALE,
|
x + logical_rect.x / PANGO_SCALE,
|
||||||
y + baseline / PANGO_SCALE,
|
y + baseline / PANGO_SCALE,
|
||||||
line,
|
line,
|
||||||
foreground,
|
colour );
|
||||||
background);
|
|
||||||
|
|
||||||
} while (pango_layout_iter_next_line (iter));
|
} while (pango_layout_iter_next_line (iter));
|
||||||
|
|
||||||
@@ -184,11 +197,12 @@ x11_draw_layout( Drawable drawable,
|
|||||||
GC gc,
|
GC gc,
|
||||||
int x,
|
int x,
|
||||||
int y,
|
int y,
|
||||||
PangoLayout *layout)
|
PangoLayout *layout,
|
||||||
|
wxColour &colour)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( layout, wxT("No layout") );
|
wxCHECK_RET( layout, wxT("No layout") );
|
||||||
|
|
||||||
x11_draw_layout_with_colors (drawable, gc, x, y, layout, NULL, NULL);
|
x11_draw_layout_with_colors (drawable, gc, x, y, layout, colour );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user