Add wxGraphicsRenderer::CreateFontAtDPI to support font with fractional pixel-size
This commit is contained in:
@@ -727,7 +727,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns the resolution of the graphics context in device points per inch
|
// returns the resolution of the graphics context in device points per inch
|
||||||
virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY);
|
virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY) const;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// sets the current alpha on this context
|
// sets the current alpha on this context
|
||||||
@@ -1038,6 +1038,9 @@ public:
|
|||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) = 0;
|
const wxColour& col = *wxBLACK) = 0;
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col = *wxBLACK) = 0;
|
||||||
|
|
||||||
// create a native bitmap representation
|
// create a native bitmap representation
|
||||||
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
|
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
|
||||||
|
@@ -1116,7 +1116,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
Returns the resolution of the graphics context in device points per inch.
|
Returns the resolution of the graphics context in device points per inch.
|
||||||
*/
|
*/
|
||||||
virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY);
|
virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the associated window if any.
|
Returns the associated window if any.
|
||||||
@@ -1459,6 +1459,17 @@ public:
|
|||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) = 0;
|
const wxColour& col = *wxBLACK) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates a native graphics font from a wxFont and a text colour.
|
||||||
|
|
||||||
|
The specified DPI is used to convert the (fractional) wxFont point-size
|
||||||
|
to a fractional pixel-size.
|
||||||
|
|
||||||
|
@since 3.1.3
|
||||||
|
*/
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col = *wxBLACK) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Creates a native brush with a linear gradient.
|
Creates a native brush with a linear gradient.
|
||||||
|
@@ -619,7 +619,7 @@ wxDouble wxGraphicsContext::GetAlpha() const
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void wxGraphicsContext::GetDPI( wxDouble* dpiX, wxDouble* dpiY)
|
void wxGraphicsContext::GetDPI( wxDouble* dpiX, wxDouble* dpiY) const
|
||||||
{
|
{
|
||||||
if ( m_window )
|
if ( m_window )
|
||||||
{
|
{
|
||||||
@@ -944,7 +944,9 @@ wxGraphicsContext::CreateRadialGradientBrush(
|
|||||||
|
|
||||||
wxGraphicsFont wxGraphicsContext::CreateFont( const wxFont &font , const wxColour &col ) const
|
wxGraphicsFont wxGraphicsContext::CreateFont( const wxFont &font , const wxColour &col ) const
|
||||||
{
|
{
|
||||||
return GetRenderer()->CreateFont(font,col);
|
wxRealPoint dpi;
|
||||||
|
GetDPI(&dpi.x, &dpi.y);
|
||||||
|
return GetRenderer()->CreateFontAtDPI(font, dpi, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxGraphicsFont
|
wxGraphicsFont
|
||||||
|
@@ -3009,6 +3009,9 @@ public :
|
|||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col) wxOVERRIDE;
|
||||||
|
|
||||||
// create a native bitmap representation
|
// create a native bitmap representation
|
||||||
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) wxOVERRIDE;
|
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) wxOVERRIDE;
|
||||||
@@ -3238,6 +3241,14 @@ wxCairoRenderer::CreateFont(double sizeInPixels,
|
|||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont
|
||||||
|
wxCairoRenderer::CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& WXUNUSED(dpi),
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
return CreateFont(font, col);
|
||||||
|
}
|
||||||
|
|
||||||
wxGraphicsBitmap wxCairoRenderer::CreateBitmap( const wxBitmap& bmp )
|
wxGraphicsBitmap wxCairoRenderer::CreateBitmap( const wxBitmap& bmp )
|
||||||
{
|
{
|
||||||
wxGraphicsBitmap p;
|
wxGraphicsBitmap p;
|
||||||
|
@@ -342,6 +342,7 @@ class wxGDIPlusFontData : public wxGraphicsObjectRefData
|
|||||||
public:
|
public:
|
||||||
wxGDIPlusFontData( wxGraphicsRenderer* renderer,
|
wxGDIPlusFontData( wxGraphicsRenderer* renderer,
|
||||||
const wxFont &font,
|
const wxFont &font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
const wxColour& col );
|
const wxColour& col );
|
||||||
wxGDIPlusFontData(wxGraphicsRenderer* renderer,
|
wxGDIPlusFontData(wxGraphicsRenderer* renderer,
|
||||||
const wxString& name,
|
const wxString& name,
|
||||||
@@ -661,6 +662,10 @@ public :
|
|||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col) wxOVERRIDE;
|
||||||
|
|
||||||
// create a graphics bitmap from a native bitmap
|
// create a graphics bitmap from a native bitmap
|
||||||
virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) wxOVERRIDE;
|
virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) wxOVERRIDE;
|
||||||
|
|
||||||
@@ -1144,6 +1149,7 @@ wxGDIPlusFontData::Init(const wxString& name,
|
|||||||
|
|
||||||
wxGDIPlusFontData::wxGDIPlusFontData( wxGraphicsRenderer* renderer,
|
wxGDIPlusFontData::wxGDIPlusFontData( wxGraphicsRenderer* renderer,
|
||||||
const wxFont &font,
|
const wxFont &font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
const wxColour& col )
|
const wxColour& col )
|
||||||
: wxGraphicsObjectRefData( renderer )
|
: wxGraphicsObjectRefData( renderer )
|
||||||
{
|
{
|
||||||
@@ -1157,7 +1163,11 @@ wxGDIPlusFontData::wxGDIPlusFontData( wxGraphicsRenderer* renderer,
|
|||||||
if ( font.GetWeight() == wxFONTWEIGHT_BOLD )
|
if ( font.GetWeight() == wxFONTWEIGHT_BOLD )
|
||||||
style |= FontStyleBold;
|
style |= FontStyleBold;
|
||||||
|
|
||||||
Init(font.GetFaceName(), (REAL)(font.GetPixelSize().GetHeight()), style, col);
|
REAL fontSize = (REAL)(!dpi.y
|
||||||
|
? font.GetPixelSize().GetHeight()
|
||||||
|
: (font.GetFractionalPointSize() * dpi.y / 72.0f));
|
||||||
|
|
||||||
|
Init(font.GetFaceName(), fontSize, style, col);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxGDIPlusFontData::wxGDIPlusFontData(wxGraphicsRenderer* renderer,
|
wxGDIPlusFontData::wxGDIPlusFontData(wxGraphicsRenderer* renderer,
|
||||||
@@ -2720,15 +2730,7 @@ wxGraphicsFont
|
|||||||
wxGDIPlusRenderer::CreateFont( const wxFont &font,
|
wxGDIPlusRenderer::CreateFont( const wxFont &font,
|
||||||
const wxColour &col )
|
const wxColour &col )
|
||||||
{
|
{
|
||||||
ENSURE_LOADED_OR_RETURN(wxNullGraphicsFont);
|
return CreateFontAtDPI(font, wxRealPoint(), col);
|
||||||
if ( font.IsOk() )
|
|
||||||
{
|
|
||||||
wxGraphicsFont p;
|
|
||||||
p.SetRefData(new wxGDIPlusFontData( this, font, col ));
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return wxNullGraphicsFont;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxGraphicsFont
|
wxGraphicsFont
|
||||||
@@ -2756,6 +2758,22 @@ wxGDIPlusRenderer::CreateFont(double sizeInPixels,
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont
|
||||||
|
wxGDIPlusRenderer::CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
ENSURE_LOADED_OR_RETURN(wxNullGraphicsFont);
|
||||||
|
if ( font.IsOk() )
|
||||||
|
{
|
||||||
|
wxGraphicsFont p;
|
||||||
|
p.SetRefData(new wxGDIPlusFontData( this, font, dpi, col ));
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return wxNullGraphicsFont;
|
||||||
|
}
|
||||||
|
|
||||||
wxGraphicsBitmap wxGDIPlusRenderer::CreateBitmap( const wxBitmap &bitmap )
|
wxGraphicsBitmap wxGDIPlusRenderer::CreateBitmap( const wxBitmap &bitmap )
|
||||||
{
|
{
|
||||||
ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap);
|
ENSURE_LOADED_OR_RETURN(wxNullGraphicsBitmap);
|
||||||
|
@@ -2792,7 +2792,7 @@ wxD2DPenData* wxGetD2DPenData(const wxGraphicsPen& pen)
|
|||||||
class wxD2DFontData : public wxGraphicsObjectRefData
|
class wxD2DFontData : public wxGraphicsObjectRefData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxD2DFontData(wxGraphicsRenderer* renderer, const wxFont& font, const wxColor& color);
|
wxD2DFontData(wxGraphicsRenderer* renderer, const wxFont& font, const wxRealPoint& dpi, const wxColor& color);
|
||||||
|
|
||||||
wxCOMPtr<IDWriteTextLayout> CreateTextLayout(const wxString& text) const;
|
wxCOMPtr<IDWriteTextLayout> CreateTextLayout(const wxString& text) const;
|
||||||
|
|
||||||
@@ -2817,7 +2817,7 @@ private:
|
|||||||
bool m_strikethrough;
|
bool m_strikethrough;
|
||||||
};
|
};
|
||||||
|
|
||||||
wxD2DFontData::wxD2DFontData(wxGraphicsRenderer* renderer, const wxFont& font, const wxColor& color) :
|
wxD2DFontData::wxD2DFontData(wxGraphicsRenderer* renderer, const wxFont& font, const wxRealPoint& dpi, const wxColor& color) :
|
||||||
wxGraphicsObjectRefData(renderer), m_brushData(renderer, wxBrush(color)),
|
wxGraphicsObjectRefData(renderer), m_brushData(renderer, wxBrush(color)),
|
||||||
m_underlined(font.GetUnderlined()), m_strikethrough(font.GetStrikethrough())
|
m_underlined(font.GetUnderlined()), m_strikethrough(font.GetStrikethrough())
|
||||||
{
|
{
|
||||||
@@ -2870,13 +2870,17 @@ wxD2DFontData::wxD2DFontData(wxGraphicsRenderer* renderer, const wxFont& font, c
|
|||||||
hr = familyNames->GetString(0, name, length+1);
|
hr = familyNames->GetString(0, name, length+1);
|
||||||
wxCHECK_HRESULT_RET(hr);
|
wxCHECK_HRESULT_RET(hr);
|
||||||
|
|
||||||
|
FLOAT fontSize = (FLOAT)(!dpi.y
|
||||||
|
? font.GetPixelSize().GetHeight()
|
||||||
|
: (font.GetFractionalPointSize() * dpi.y / 72.0f));
|
||||||
|
|
||||||
hr = wxDWriteFactory()->CreateTextFormat(
|
hr = wxDWriteFactory()->CreateTextFormat(
|
||||||
name,
|
name,
|
||||||
NULL,
|
NULL,
|
||||||
m_font->GetWeight(),
|
m_font->GetWeight(),
|
||||||
m_font->GetStyle(),
|
m_font->GetStyle(),
|
||||||
m_font->GetStretch(),
|
m_font->GetStretch(),
|
||||||
(FLOAT)(font.GetPixelSize().GetHeight()),
|
fontSize,
|
||||||
L"en-us",
|
L"en-us",
|
||||||
&m_textFormat);
|
&m_textFormat);
|
||||||
|
|
||||||
@@ -3644,7 +3648,7 @@ public:
|
|||||||
|
|
||||||
void Flush() wxOVERRIDE;
|
void Flush() wxOVERRIDE;
|
||||||
|
|
||||||
void GetDPI(wxDouble* dpiX, wxDouble* dpiY) wxOVERRIDE;
|
void GetDPI(wxDouble* dpiX, wxDouble* dpiY) const wxOVERRIDE;
|
||||||
|
|
||||||
wxD2DContextSupplier::ContextType GetContext() wxOVERRIDE
|
wxD2DContextSupplier::ContextType GetContext() wxOVERRIDE
|
||||||
{
|
{
|
||||||
@@ -4570,7 +4574,7 @@ void wxD2DContext::Flush()
|
|||||||
GetRenderTarget()->SetTransform(&currTransform);
|
GetRenderTarget()->SetTransform(&currTransform);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxD2DContext::GetDPI(wxDouble* dpiX, wxDouble* dpiY)
|
void wxD2DContext::GetDPI(wxDouble* dpiX, wxDouble* dpiY) const
|
||||||
{
|
{
|
||||||
FLOAT x, y;
|
FLOAT x, y;
|
||||||
GetRenderTarget()->GetDpi(&x, &y);
|
GetRenderTarget()->GetDpi(&x, &y);
|
||||||
@@ -4653,6 +4657,10 @@ public :
|
|||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col) wxOVERRIDE;
|
||||||
|
|
||||||
// create a graphics bitmap from a native bitmap
|
// create a graphics bitmap from a native bitmap
|
||||||
wxGraphicsBitmap CreateBitmapFromNativeBitmap(void* bitmap) wxOVERRIDE;
|
wxGraphicsBitmap CreateBitmapFromNativeBitmap(void* bitmap) wxOVERRIDE;
|
||||||
|
|
||||||
@@ -4886,7 +4894,30 @@ wxImage wxD2DRenderer::CreateImageFromBitmap(const wxGraphicsBitmap& bmp)
|
|||||||
|
|
||||||
wxGraphicsFont wxD2DRenderer::CreateFont(const wxFont& font, const wxColour& col)
|
wxGraphicsFont wxD2DRenderer::CreateFont(const wxFont& font, const wxColour& col)
|
||||||
{
|
{
|
||||||
wxD2DFontData* fontData = new wxD2DFontData(this, font, col);
|
return CreateFontAtDPI(font, wxRealPoint(), col);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont wxD2DRenderer::CreateFont(
|
||||||
|
double sizeInPixels, const wxString& facename,
|
||||||
|
int flags,
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
// Use the same DPI as wxFont will use in SetPixelSize, so these cancel
|
||||||
|
// each other out and we are left with the actual pixel size.
|
||||||
|
ScreenHDC hdc;
|
||||||
|
wxRealPoint dpi(::GetDeviceCaps(hdc, LOGPIXELSX),
|
||||||
|
::GetDeviceCaps(hdc, LOGPIXELSY));
|
||||||
|
|
||||||
|
return CreateFontAtDPI(
|
||||||
|
wxFontInfo(wxSize(sizeInPixels, sizeInPixels)).AllFlags(flags).FaceName(facename),
|
||||||
|
dpi, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont wxD2DRenderer::CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
wxD2DFontData* fontData = new wxD2DFontData(this, font, dpi, col);
|
||||||
if ( !fontData->GetFont() )
|
if ( !fontData->GetFont() )
|
||||||
{
|
{
|
||||||
// Apparently a non-TrueType font is given and hence
|
// Apparently a non-TrueType font is given and hence
|
||||||
@@ -4901,16 +4932,6 @@ wxGraphicsFont wxD2DRenderer::CreateFont(const wxFont& font, const wxColour& col
|
|||||||
return graphicsFont;
|
return graphicsFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxGraphicsFont wxD2DRenderer::CreateFont(
|
|
||||||
double sizeInPixels, const wxString& facename,
|
|
||||||
int flags,
|
|
||||||
const wxColour& col)
|
|
||||||
{
|
|
||||||
return CreateFont(
|
|
||||||
wxFontInfo(wxSize(sizeInPixels, sizeInPixels)).AllFlags(flags).FaceName(facename),
|
|
||||||
col);
|
|
||||||
}
|
|
||||||
|
|
||||||
// create a sub-image from a native image representation
|
// create a sub-image from a native image representation
|
||||||
wxGraphicsBitmap wxD2DRenderer::CreateSubBitmap(const wxGraphicsBitmap& bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h)
|
wxGraphicsBitmap wxD2DRenderer::CreateSubBitmap(const wxGraphicsBitmap& bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h)
|
||||||
{
|
{
|
||||||
|
@@ -2778,6 +2778,9 @@ public :
|
|||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col) wxOVERRIDE;
|
||||||
|
|
||||||
// create a native bitmap representation
|
// create a native bitmap representation
|
||||||
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) wxOVERRIDE ;
|
virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) wxOVERRIDE ;
|
||||||
@@ -3073,6 +3076,14 @@ wxMacCoreGraphicsRenderer::CreateFont(double sizeInPixels,
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont
|
||||||
|
wxMacCoreGraphicsRenderer::CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& WXUNUSED(dpi),
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
return CreateFont(font, col);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// CoreGraphics Helper Methods
|
// CoreGraphics Helper Methods
|
||||||
//
|
//
|
||||||
|
@@ -1154,6 +1154,9 @@ public:
|
|||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
int flags = wxFONTFLAG_DEFAULT,
|
int flags = wxFONTFLAG_DEFAULT,
|
||||||
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
const wxColour& col = *wxBLACK) wxOVERRIDE;
|
||||||
|
virtual wxGraphicsFont CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& dpi,
|
||||||
|
const wxColour& col) wxOVERRIDE;
|
||||||
|
|
||||||
// create a native bitmap representation
|
// create a native bitmap representation
|
||||||
virtual wxGraphicsBitmap CreateBitmap(const wxBitmap& bitmap) wxOVERRIDE;
|
virtual wxGraphicsBitmap CreateBitmap(const wxBitmap& bitmap) wxOVERRIDE;
|
||||||
@@ -1321,6 +1324,14 @@ wxGraphicsFont wxQtGraphicsRenderer::CreateFont(
|
|||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxGraphicsFont
|
||||||
|
wxQtGraphicsRenderer::CreateFontAtDPI(const wxFont& font,
|
||||||
|
const wxRealPoint& WXUNUSED(dpi),
|
||||||
|
const wxColour& col)
|
||||||
|
{
|
||||||
|
return CreateFont(font, col);
|
||||||
|
}
|
||||||
|
|
||||||
wxGraphicsBitmap wxQtGraphicsRenderer::CreateBitmap(const wxBitmap& bmp)
|
wxGraphicsBitmap wxQtGraphicsRenderer::CreateBitmap(const wxBitmap& bmp)
|
||||||
{
|
{
|
||||||
wxGraphicsBitmap p;
|
wxGraphicsBitmap p;
|
||||||
|
Reference in New Issue
Block a user