From: Stefan Csomor Date: Wed, 12 Oct 2011 10:10:32 +0000 (+0000) Subject: applying slightly modified patch, fixes #13434 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5548cbac13e21401e2ca395d4b2e7225e73167a3?ds=inline applying slightly modified patch, fixes #13434 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/carbon/graphics.cpp b/src/osx/carbon/graphics.cpp index d3dd3cb9b7..5b50bb5ff7 100644 --- a/src/osx/carbon/graphics.cpp +++ b/src/osx/carbon/graphics.cpp @@ -2311,10 +2311,16 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo wxCFStringRef text(str, wxLocale::GetSystemEncoding() ); CTFontRef font = fref->OSXGetCTFont(); CGColorRef col = wxMacCreateCGColor( fref->GetColour() ); +#if 0 + // right now there's no way to get continuous underlines, only words, so we emulate it CTUnderlineStyle ustyle = fref->GetUnderlined() ? kCTUnderlineStyleSingle : kCTUnderlineStyleNone ; wxCFRef underlined( CFNumberCreate(NULL, kCFNumberSInt32Type, &ustyle) ); CFStringRef keys[] = { kCTFontAttributeName , kCTForegroundColorAttributeName, kCTUnderlineStyleAttributeName }; CFTypeRef values[] = { font, col, underlined }; +#else + CFStringRef keys[] = { kCTFontAttributeName , kCTForegroundColorAttributeName }; + CFTypeRef values[] = { font, col }; +#endif wxCFRef attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values, WXSIZEOF( keys ), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks) ); wxCFRef attrtext( CFAttributedStringCreate(kCFAllocatorDefault, text, attributes) ); @@ -2327,6 +2333,19 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo CGContextScaleCTM(m_cgContext, 1, -1); CGContextSetTextPosition(m_cgContext, 0, 0); CTLineDraw( line, m_cgContext ); + + if ( fref->GetUnderlined() ) { + //AKT: draw horizontal line 1 pixel thick and with 1 pixel gap under baseline + CGFloat width = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + + CGPoint points[] = { {0.0, -2.0}, {width, -2.0} }; + + CGContextSetStrokeColorWithColor(m_cgContext, col); + CGContextSetShouldAntialias(m_cgContext, false); + CGContextSetLineWidth(m_cgContext, 1.0); + CGContextStrokeLineSegments(m_cgContext, points, 2); + } + CGContextRestoreGState(m_cgContext); CFRelease( col ); return;