#ifndef WX_PRECOMP
#include "wx/log.h"
+ #include "wx/math.h" //math constants
#endif //WX_PRECOMP
#include "wx/cocoa/autorelease.h"
#import <AppKit/NSTypesetter.h>
#import <AppKit/NSImage.h>
-#include "wx/math.h" //math constants
#include "wx/listimpl.cpp"
WX_DEFINE_LIST(wxCocoaDCStack);
inline void CocoaSetPenForNSBezierPath(wxPen &pen, NSBezierPath *bezpath)
{
[pen.GetNSColor() set];
- const float *pattern;
+ const CGFloat *pattern;
[bezpath setLineDash:pattern count:pen.GetCocoaLineDash(&pattern) phase:0.0];
[bezpath setLineWidth:pen.GetWidth()];
switch(pen.GetJoin())
[bezpath stroke];
}
-void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const
+void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, const wxFont *theFont) const
{
wxAutoNSAutoreleasePool pool;
// FIXME: Cache this so it can be used for DoDrawText
NSPoint layoutLocation = [sm_cocoaNSLayoutManager locationForGlyphAtIndex:0];
layoutLocation.x = 0.0;
layoutLocation.y *= -1.0;
+
+ // Save the location as is for underlining
+ NSPoint underlineLocation = layoutLocation;
+
+ // Offset the location by the baseline for drawing the glyphs.
layoutLocation.y += [[sm_cocoaNSLayoutManager typesetter] baselineOffsetInLayoutManager:sm_cocoaNSLayoutManager glyphIndex:0];
+
if(m_backgroundMode==wxSOLID)
[sm_cocoaNSLayoutManager drawBackgroundForGlyphRange:glyphRange atPoint:NSZeroPoint];
[sm_cocoaNSLayoutManager drawGlyphsForGlyphRange:glyphRange atPoint:layoutLocation];
- [context restoreGraphicsState];
-}
-
-// wxDCBase functions
-int wxDCBase::DeviceToLogicalX(int x) const
-{
- return x;
-}
-
-int wxDCBase::DeviceToLogicalY(int y) const
-{
- return y;
-}
-
-int wxDCBase::DeviceToLogicalXRel(int x) const
-{
- return x;
-}
-
-int wxDCBase::DeviceToLogicalYRel(int y) const
-{
- return y;
-}
-
-int wxDCBase::LogicalToDeviceX(int x) const
-{
- return x;
-}
+ int underlineStyle = GetFont().GetUnderlined() ? NSUnderlineStyleSingle : NSUnderlineStyleNone;
+ NSRange lineGlyphRange;
+ NSRect lineRect = [sm_cocoaNSLayoutManager lineFragmentRectForGlyphAtIndex:0 effectiveRange:&lineGlyphRange];
-int wxDCBase::LogicalToDeviceY(int y) const
-{
- return y;
-}
+ [sm_cocoaNSLayoutManager underlineGlyphRange:glyphRange underlineType:underlineStyle
+ lineFragmentRect:lineRect lineFragmentGlyphRange:lineGlyphRange
+ containerOrigin:underlineLocation];
-int wxDCBase::LogicalToDeviceXRel(int x) const
-{
- return x;
-}
-
-int wxDCBase::LogicalToDeviceYRel(int y) const
-{
- return y;
+ [context restoreGraphicsState];
}
///////////////////////////////////////////////////////////////////////////
{
}
+void wxDC::SetFont(const wxFont& font)
+{
+ m_font = font;
+}
+
void wxDC::SetPen(const wxPen& pen)
{
m_pen = pen;