This commit is contained in:
Stefan Csomor 2017-06-20 19:55:46 +02:00
commit c0cc4bec53
18 changed files with 260 additions and 230 deletions

View File

@ -2943,6 +2943,7 @@ typedef const void * CFTypeRef;
DECLARE_WXOSX_OPAQUE_CONST_CFREF( CFString )
typedef struct __CFString * CFMutableStringRef;
DECLARE_WXOSX_OPAQUE_CONST_CFREF( CFDictionary )
DECLARE_WXOSX_OPAQUE_CFREF( CFRunLoopSource )
DECLARE_WXOSX_OPAQUE_CONST_CFREF( CTFont )

View File

@ -414,7 +414,7 @@ public:
// Header attributes support: only implemented in wxMSW currently.
virtual bool SetHeaderAttr(const wxItemAttr& WXUNUSED(attr)) { return false; }
// Checkboxes support: only implemented in wxMSW currently.
// Checkboxes support.
virtual bool HasCheckBoxes() const { return false; }
virtual bool EnableCheckBoxes(bool WXUNUSED(enable) = true) { return false; }
virtual bool IsItemChecked(long WXUNUSED(item)) const { return false; }

View File

@ -144,6 +144,7 @@ public:
#endif
CTFontRef OSXGetCTFont() const;
CFDictionaryRef OSXGetCTFontAttributes() const;
#if wxOSX_USE_COCOA
WX_NSFont OSXGetNSFont() const;

View File

@ -1530,8 +1530,12 @@ public:
virtual bool OnSaveModified();
/**
Removes the view from the document's list of views, and calls
OnChangedViewList().
Removes the view from the document's list of views.
If the view was really removed, also calls OnChangedViewList().
@return @true if the view was removed or @false if the document didn't
have this view in the first place.
*/
virtual bool RemoveView(wxView* view);

View File

@ -3,7 +3,7 @@
* Template for the set.h file for VMS *
* Created from setup.h_in *
* Author : J.Jansen (joukj@hrem.nano.tudelft.nl) *
* Date : 25 April 2017 *
* Date : 16 June 2017 *
* *
*****************************************************************************/
@ -208,6 +208,8 @@ typedef pid_t GPid;
#define wxUSE_UNSAFE_WXSTRING_CONV 1
#define wxUSE_REPRODUCIBLE_BUILD 1
#ifndef wxUSE_UNICODE
#if defined( __WXX11__ )
#define wxUSE_UNICODE 0

View File

@ -570,7 +570,9 @@ bool wxDocument::AddView(wxView *view)
bool wxDocument::RemoveView(wxView *view)
{
(void)m_documentViews.DeleteObject(view);
if ( !m_documentViews.DeleteObject(view) )
return false;
OnChangedViewList();
return true;
}

View File

@ -153,36 +153,10 @@ bool wxGTKCairoDCImpl::DoStretchBlit(int xdest, int ydest, int dstWidth, int dst
// surface and use this copy in the drawing operations.
if ( cr == cr_src )
{
// Check if destination and source regions overlap.
bool regOverlap;
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
if ( cairo_version() >= CAIRO_VERSION_ENCODE(1, 10, 0) )
{
cairo_rectangle_int_t rdst;
rdst.x = xdest;
rdst.y = ydest;
rdst.width = dstWidth;
rdst.height = dstHeight;
cairo_region_t* regdst = cairo_region_create_rectangle(&rdst);
cairo_rectangle_int_t rsrc;
rsrc.x = xsrc;
rsrc.y = ysrc;
rsrc.width = srcWidth;
rsrc.height = srcHeight;
cairo_region_overlap_t ov = cairo_region_contains_rectangle(regdst, &rsrc);
cairo_region_destroy(regdst);
regOverlap = (ov != CAIRO_REGION_OVERLAP_OUT);
}
else
#endif // Cairo 1.10
{
wxRect rdst(xdest, ydest, dstWidth, dstHeight);
wxRect rsrc(xsrc, ysrc, srcWidth, srcHeight);
regOverlap = rdst.Intersects(rsrc);
}
// Check if destination and source regions overlap.
// If necessary, copy source surface to the temporary one.
if ( regOverlap )
if (wxRect(xdest, ydest, dstWidth, dstHeight)
.Intersects(wxRect(xsrc, ysrc, srcWidth, srcHeight)))
{
const int w = cairo_image_surface_get_width(surfaceSrc);
const int h = cairo_image_surface_get_height(surfaceSrc);
@ -247,7 +221,7 @@ bool wxGTKCairoDCImpl::DoStretchBlit(int xdest, int ydest, int dstWidth, int dst
cairo_restore(cr);
if ( surfaceTmp )
{
cairo_surface_destroy(surfaceTmp);
cairo_surface_destroy(surfaceTmp);
}
m_logicalFunction = rop_save;
return true;

View File

@ -801,11 +801,15 @@ wxString wxWebViewWebKit::GetCurrentTitle() const
}
static void wxgtk_web_resource_get_data_cb(WebKitWebResource *,
extern "C" {
static void wxgtk_web_resource_get_data_cb(GObject*,
GAsyncResult *res,
GAsyncResult **res_out)
void* user_data)
{
*res_out = (GAsyncResult*)g_object_ref(res);
GAsyncResult** res_out = static_cast<GAsyncResult**>(user_data);
g_object_ref(res);
*res_out = res;
}
}
wxString wxWebViewWebKit::GetPageSource() const
@ -818,7 +822,7 @@ wxString wxWebViewWebKit::GetPageSource() const
GAsyncResult *result = NULL;
webkit_web_resource_get_data(resource, NULL,
(GAsyncReadyCallback)wxgtk_web_resource_get_data_cb,
wxgtk_web_resource_get_data_cb,
&result);
GMainContext *main_context = g_main_context_get_thread_default();
@ -827,8 +831,9 @@ wxString wxWebViewWebKit::GetPageSource() const
g_main_context_iteration(main_context, TRUE);
}
size_t length;
guchar *source = webkit_web_resource_get_data_finish(resource, result,
NULL, NULL);
&length, NULL);
if (result)
{
g_object_unref(result);
@ -836,7 +841,7 @@ wxString wxWebViewWebKit::GetPageSource() const
if (source)
{
wxString wxs = wxString(source, wxConvUTF8);
wxString wxs(source, wxConvUTF8, length);
free(source);
return wxs;
}

View File

@ -510,10 +510,10 @@ void wxStaticBox::OnPaint(wxPaintEvent& WXUNUSED(event))
::GetClientRect(GetHwnd(), &rc);
wxPaintDC dc(this);
// No need to do anything if the client rectangle is empty and, worse,
// No need to do anything if the client rectangle is empty and, worse,
// doing it would result in an assert when creating the bitmap below.
if ( !rc.right || !rc.bottom )
return;
if ( !rc.right || !rc.bottom )
return;
// draw the entire box in a memory DC
wxMemoryDC memdc(&dc);

View File

@ -158,6 +158,7 @@ protected:
public:
bool m_fontValid;
wxCFRef<CTFontRef> m_ctFont;
wxCFRef<CFDictionaryRef> m_ctFontAttributes;
wxCFRef<CGFontRef> m_cgFont;
#if wxOSX_USE_COCOA
WX_NSFont m_nsFont;
@ -176,6 +177,7 @@ wxFontRefData::wxFontRefData(const wxFontRefData& data) : wxGDIRefData()
m_info = data.m_info;
m_fontValid = data.m_fontValid;
m_ctFont = data.m_ctFont;
m_ctFontAttributes = data.m_ctFontAttributes;
m_cgFont = data.m_cgFont;
#if wxOSX_USE_COCOA
m_nsFont = (NSFont*) wxMacCocoaRetain(data.m_nsFont);
@ -271,6 +273,11 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
break;
}
m_ctFont.reset(CTFontCreateUIFontForLanguage( uifont, (CGFloat) size, NULL ));
CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
m_ctFontAttributes.reset(dict);
CFDictionarySetValue(dict, kCTFontAttributeName, m_ctFont.get() );
CFDictionarySetValue(dict, kCTForegroundColorFromContextAttributeName, kCFBooleanTrue);
wxCFRef<CTFontDescriptorRef> descr;
descr.reset( CTFontCopyFontDescriptor( m_ctFont ) );
m_info.Init(descr);
@ -288,6 +295,16 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
static const CGAffineTransform kSlantTransform = CGAffineTransformMake( 1, 0, tan(wxDegToRad(11)), 1, 0, 0 );
namespace
{
struct CachedFontEntry {
wxCFRef< CTFontRef > font;
wxCFRef< CFDictionaryRef > fontAttributes;
} ;
} // anonymous namespace
void wxFontRefData::MacFindFont()
{
if ( m_fontValid )
@ -306,10 +323,19 @@ void wxFontRefData::MacFindFont()
// use font caching
wxString lookupnameWithSize = wxString::Format( "%s_%u_%d", m_info.m_faceName, traits, m_info.m_pointSize );
static std::map< std::wstring , wxCFRef< CTFontRef > > fontcache ;
m_ctFont = fontcache[ std::wstring(lookupnameWithSize.wc_str()) ];
if ( !m_ctFont )
static std::map< wxString, CachedFontEntry > fontcache ;
CachedFontEntry& entry = fontcache[ lookupnameWithSize ];
m_ctFont = entry.font;
m_ctFontAttributes = entry.fontAttributes;
if ( m_ctFont )
{
// use cached version
}
else
{
CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
m_ctFontAttributes.reset(dict);
wxStringToStringHashMap::const_iterator it = gs_FontFamilyToPSName.find(m_info.m_faceName);
@ -350,11 +376,23 @@ void wxFontRefData::MacFindFont()
fontWithTraits = CTFontCreateCopyWithSymbolicTraits( m_ctFont, 0, remainingTransform, remainingTraits, remainingTraits );
if ( fontWithTraits == NULL )
{
// give in on the bold, try native oblique
// try native oblique, emulate bold later
fontWithTraits = CTFontCreateCopyWithSymbolicTraits( m_ctFont, 0, NULL, kCTFontItalicTrait, kCTFontItalicTrait );
}
else
{
remainingTraits &= ~kCTFontBoldTrait;
}
}
}
// we have to emulate bold
if ( remainingTraits & kCTFontBoldTrait )
{
// 3 times as thick, negative value because we want effect on stroke and fill (not only stroke)
const float strokewidth = -3.0;
CFDictionarySetValue(dict, kCTStrokeWidthAttributeName, CFNumberCreate( NULL, kCFNumberFloatType, &strokewidth));
}
if ( fontWithTraits == NULL )
{
@ -366,6 +404,11 @@ void wxFontRefData::MacFindFont()
m_ctFont.reset(fontWithTraits);
}
}
CFDictionarySetValue(dict, kCTFontAttributeName, m_ctFont.get() );
CFDictionarySetValue(dict, kCTForegroundColorFromContextAttributeName, kCFBooleanTrue);
entry.font = m_ctFont;
entry.fontAttributes = m_ctFontAttributes;
}
m_cgFont.reset(CTFontCopyGraphicsFont(m_ctFont, NULL));
@ -378,7 +421,7 @@ void wxFontRefData::MacFindFont()
#endif
m_fontValid = true;
}
bool wxFontRefData::IsFixedWidth() const
{
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_ctFont);
@ -659,6 +702,16 @@ CTFontRef wxFont::OSXGetCTFont() const
return (CTFontRef)(M_FONTDATA->m_ctFont);
}
CFDictionaryRef wxFont::OSXGetCTFontAttributes() const
{
wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
// cast away constness otherwise lazy font resolution is not possible
const_cast<wxFont *>(this)->RealizeResource();
return (CFDictionaryRef)(M_FONTDATA->m_ctFontAttributes);
}
#if wxOSX_USE_COCOA_OR_CARBON
CGFontRef wxFont::OSXGetCGFont() const

View File

@ -824,6 +824,7 @@ public:
~wxMacCoreGraphicsFontData();
CTFontRef OSXGetCTFont() const { return m_ctFont ; }
CFDictionaryRef OSXGetCTFontAttributes() const { return m_ctFontAttributes; }
wxColour GetColour() const { return m_colour ; }
bool GetUnderlined() const { return m_underlined ; }
@ -837,6 +838,7 @@ private :
bool m_underlined,
m_strikethrough;
wxCFRef< CTFontRef > m_ctFont;
wxCFRef< CFDictionaryRef > m_ctFontAttributes;
#if wxOSX_USE_IPHONE
UIFont* m_uiFont;
#endif
@ -849,6 +851,7 @@ wxMacCoreGraphicsFontData::wxMacCoreGraphicsFontData(wxGraphicsRenderer* rendere
m_strikethrough = font.GetStrikethrough();
m_ctFont.reset( wxMacCreateCTFont( font ) );
m_ctFontAttributes.reset( wxCFRetain( font.OSXGetCTFontAttributes() ) );
#if wxOSX_USE_IPHONE
m_uiFont = CreateUIFont(font);
wxMacCocoaRetain( m_uiFont );
@ -2220,21 +2223,10 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
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<CFNumberRef> 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<CFDictionaryRef> attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values,
WXSIZEOF( keys ), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks) );
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, text, attributes) );
CTFontRef font = fref->OSXGetCTFont();
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, text, fref->OSXGetCTFontAttributes()) );
wxCFRef<CTLineRef> line( CTLineCreateWithAttributedString(attrtext) );
y += CTFontGetAscent(font);
@ -2246,6 +2238,7 @@ void wxMacCoreGraphicsContext::DoDrawText( const wxString &str, wxDouble x, wxDo
CGContextScaleCTM(m_cgContext, 1, -1);
CGContextSetTextMatrix(m_cgContext, CGAffineTransformIdentity);
CGContextSetFillColorWithColor( m_cgContext, col );
CTLineDraw( line, m_cgContext );
if ( fref->GetUnderlined() ) {
@ -2316,14 +2309,10 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
strToMeasure = wxS(" ");
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
CTFontRef font = fref->OSXGetCTFont();
wxCFStringRef text(strToMeasure, wxLocale::GetSystemEncoding() );
CFStringRef keys[] = { kCTFontAttributeName };
CFTypeRef values[] = { font };
wxCFRef<CFDictionaryRef> attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values,
WXSIZEOF( keys ), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks) );
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, text, attributes) );
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, text, fref->OSXGetCTFontAttributes() ) );
wxCFRef<CTLineRef> line( CTLineCreateWithAttributedString(attrtext) );
CGFloat a, d, l, w;
@ -2336,7 +2325,6 @@ void wxMacCoreGraphicsContext::GetTextExtent( const wxString &str, wxDouble *wid
if ( height )
*height = a+d+l;
}
if ( descent )
*descent = d;
if ( externalLeading )
@ -2355,14 +2343,9 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr
return;
wxMacCoreGraphicsFontData* fref = (wxMacCoreGraphicsFontData*)m_font.GetRefData();
CTFontRef font = fref->OSXGetCTFont();
wxCFStringRef t(text, wxLocale::GetSystemEncoding() );
CFStringRef keys[] = { kCTFontAttributeName };
CFTypeRef values[] = { font };
wxCFRef<CFDictionaryRef> attributes( CFDictionaryCreate(kCFAllocatorDefault, (const void**) &keys, (const void**) &values,
WXSIZEOF( keys ), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks) );
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, t, attributes) );
wxCFRef<CFAttributedStringRef> attrtext( CFAttributedStringCreate(kCFAllocatorDefault, t, fref->OSXGetCTFontAttributes()) );
wxCFRef<CTLineRef> line( CTLineCreateWithAttributedString(attrtext) );
widths.reserve(text.length());

View File

@ -44,7 +44,7 @@
inline bool wxHasCGContext(wxWindow* WXUNUSED(win), wxDC& dc)
{
wxGCDCImpl* gcdc = wxDynamicCast( dc.GetImpl() , wxGCDCImpl);
if ( gcdc )
{
if ( gcdc->GetGraphicsContext()->GetNativeContext() )
@ -218,7 +218,7 @@ int wxRendererMac::DrawHeaderButton( wxWindow *win,
{
drawInfo.value = kThemeButtonOn;
}
HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );
}
}
@ -730,22 +730,22 @@ void wxRendererMac::DrawTitleBarBitmap(wxWindow *win,
drawCircle = false;
glyphColor = wxColour(145, 147, 149);
}
if ( drawCircle )
{
wxRect circleRect(rect);
circleRect.Deflate(2);
dc.DrawEllipse(circleRect);
}
dc.SetPen(wxPen(glyphColor, 1));
wxRect centerRect(rect);
centerRect.Deflate(5);
centerRect.height++;
centerRect.width++;
dc.DrawLine(centerRect.GetTopLeft(), centerRect.GetBottomRight());
dc.DrawLine(centerRect.GetTopRight(), centerRect.GetBottomLeft());
}

View File

@ -145,7 +145,7 @@ public :
virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender) wxOVERRIDE;
protected :
wxNSTableView* m_tableView ;
@ -293,9 +293,9 @@ protected:
- (void) tableViewSelectionDidChange: (NSNotification *) notification
{
wxUnusedVar(notification);
int row = [self selectedRow];
if (row == -1)
{
// no row selected
@ -305,14 +305,14 @@ protected:
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
wxListBox *list = static_cast<wxListBox*> ( impl->GetWXPeer());
wxCHECK_RET( list != NULL , wxT("Listbox expected"));
if ((row < 0) || (row > (int) list->GetCount())) // OS X can select an item below the last item
return;
if ( !list->MacGetBlockEvents() )
list->HandleLineEvent( row, false );
}
}
- (void)setFont:(NSFont *)aFont
@ -388,11 +388,11 @@ wxListWidgetColumn* wxListWidgetCocoaImpl::InsertTextColumn( unsigned pos, const
[col1 setWidth:1000];
}
[col1 setResizingMask: NSTableColumnAutoresizingMask];
wxListBox *list = static_cast<wxListBox*> ( GetWXPeer());
if ( list != NULL )
[[col1 dataCell] setFont:list->GetFont().OSXGetNSFont()];
wxCocoaTableColumn* wxcol = new wxCocoaTableColumn( col1, editable );
[col1 setColumn:wxcol];
@ -412,30 +412,30 @@ wxListWidgetColumn* wxListWidgetCocoaImpl::InsertCheckColumn( unsigned pos , con
[checkbox setTitle:@""];
[checkbox setButtonType:NSSwitchButton];
[col1 setDataCell:checkbox] ;
wxListBox *list = static_cast<wxListBox*> ( GetWXPeer());
if ( list != NULL )
{
NSControlSize size = NSRegularControlSize;
switch ( list->GetWindowVariant() )
{
case wxWINDOW_VARIANT_NORMAL :
size = NSRegularControlSize;
break ;
case wxWINDOW_VARIANT_SMALL :
size = NSSmallControlSize;
break ;
case wxWINDOW_VARIANT_MINI :
size = NSMiniControlSize;
break ;
case wxWINDOW_VARIANT_LARGE :
size = NSRegularControlSize;
break ;
default:
break ;
}
@ -502,7 +502,7 @@ void wxListWidgetCocoaImpl::ListSetSelection( unsigned int n, bool select, bool
// TODO
if ( select )
[m_tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:n]
byExtendingSelection:multi];
byExtendingSelection:multi];
else
[m_tableView deselectRow: n];

View File

@ -60,7 +60,7 @@ static void *AVSPPlayerItemStatusContext = &AVSPPlayerItemStatusContext;
static void *AVSPPlayerRateContext = &AVSPPlayerRateContext;
@interface wxAVPlayer : AVPlayer {
AVPlayerLayer *playerLayer;
wxAVMediaBackend* m_backend;
@ -75,10 +75,10 @@ static void *AVSPPlayerRateContext = &AVSPPlayerRateContext;
class WXDLLIMPEXP_MEDIA wxAVMediaBackend : public wxMediaBackendCommonBase
{
public:
wxAVMediaBackend();
~wxAVMediaBackend();
virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
wxWindowID id,
const wxPoint& pos,
@ -86,41 +86,41 @@ public:
long style,
const wxValidator& validator,
const wxString& name) wxOVERRIDE;
virtual bool Play() wxOVERRIDE;
virtual bool Pause() wxOVERRIDE;
virtual bool Stop() wxOVERRIDE;
virtual bool Load(const wxString& fileName) wxOVERRIDE;
virtual bool Load(const wxURI& location) wxOVERRIDE;
virtual wxMediaState GetState() wxOVERRIDE;
virtual bool SetPosition(wxLongLong where) wxOVERRIDE;
virtual wxLongLong GetPosition() wxOVERRIDE;
virtual wxLongLong GetDuration() wxOVERRIDE;
virtual void Move(int x, int y, int w, int h) wxOVERRIDE;
wxSize GetVideoSize() const wxOVERRIDE;
virtual double GetPlaybackRate() wxOVERRIDE;
virtual bool SetPlaybackRate(double dRate) wxOVERRIDE;
virtual double GetVolume() wxOVERRIDE;
virtual bool SetVolume(double dVolume) wxOVERRIDE;
void Cleanup();
void FinishLoad();
virtual bool ShowPlayerControls(wxMediaCtrlPlayerControls flags) wxOVERRIDE;
private:
void DoShowPlayerControls(wxMediaCtrlPlayerControls flags);
wxSize m_bestSize; //Original movie size
wxAVPlayer* m_player; //AVPlayer handle/instance
wxMediaCtrlPlayerControls m_interfaceflags; // Saved interface flags
wxDECLARE_DYNAMIC_CLASS(wxAVMediaBackend);
};
@ -146,19 +146,19 @@ private:
- (void)dealloc
{
[playerLayer release];
[playerLayer release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self removeObserver:self forKeyPath:@"rate" context:AVSPPlayerRateContext];
[self removeObserver:self forKeyPath:@"currentItem.status" context:AVSPPlayerItemStatusContext];
[super dealloc];
[self removeObserver:self forKeyPath:@"currentItem.status" context:AVSPPlayerItemStatusContext];
[super dealloc];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == AVSPPlayerItemStatusContext)
{
if (context == AVSPPlayerItemStatusContext)
{
id val = [change objectForKey:NSKeyValueChangeNewKey];
if ( val != [NSNull null ] )
{
@ -180,10 +180,10 @@ private:
break;
}
}
}
else if (context == AVSPPlayerRateContext)
{
NSNumber* newRate = [change objectForKey:NSKeyValueChangeNewKey];
}
else if (context == AVSPPlayerRateContext)
{
NSNumber* newRate = [change objectForKey:NSKeyValueChangeNewKey];
if ([newRate intValue] == 0)
{
m_backend->QueuePauseEvent();
@ -192,11 +192,11 @@ private:
{
m_backend->QueuePlayEvent();
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
-(wxAVMediaBackend*) backend
@ -220,12 +220,12 @@ private:
-(BOOL)isPlaying
{
if ([self rate] == 0)
{
return NO;
}
return YES;
if ([self rate] == 0)
{
return NO;
}
return YES;
}
@end
@ -252,7 +252,7 @@ private:
+ (Class)layerClass
{
return [AVPlayerLayer class];
return [AVPlayerLayer class];
}
- (id) initWithFrame:(CGRect)rect player:(wxAVPlayer*) player
@ -342,7 +342,7 @@ private:
[playerlayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
[[self layer] addSublayer:playerlayer];
}
return self;
}
@ -377,9 +377,9 @@ bool wxAVMediaBackend::CreateControl(wxControl* inctrl, wxWindow* parent,
const wxString& name)
{
wxMediaCtrl* mediactrl = (wxMediaCtrl*) inctrl;
mediactrl->DontCreatePeer();
if ( !mediactrl->wxControl::Create(
parent, wid, pos, size,
wxWindow::MacRemoveBordersFromStyle(style),
@ -392,7 +392,7 @@ bool wxAVMediaBackend::CreateControl(wxControl* inctrl, wxWindow* parent,
[m_player setBackend:this];
WXRect r = wxOSXGetFrameForControl( mediactrl, pos , size ) ;
WXWidget view = NULL;
#if wxOSX_USE_AVKIT
if ( NSClassFromString(@"AVPlayerView") )
@ -401,12 +401,12 @@ bool wxAVMediaBackend::CreateControl(wxControl* inctrl, wxWindow* parent,
[(wxAVPlayerView*) view setControlsStyle:AVPlayerViewControlsStyleNone];
}
#endif
if ( view == NULL )
{
view = [[wxAVView alloc] initWithFrame: r player:m_player];
}
#if wxOSX_USE_IPHONE
wxWidgetIPhoneImpl* impl = new wxWidgetIPhoneImpl(mediactrl,view);
#else
@ -431,16 +431,16 @@ bool wxAVMediaBackend::Load(const wxURI& location)
{
wxCFStringRef uri(location.BuildURI());
NSURL *url = [NSURL URLWithString: uri.AsNSString()];
AVAsset* asset = [AVAsset assetWithURL:url];
if (! asset )
return false;
if ( [asset isPlayable] )
{
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
[m_player replaceCurrentItemWithPlayerItem:playerItem];
return playerItem != nil;
}
return false;
@ -449,12 +449,12 @@ bool wxAVMediaBackend::Load(const wxURI& location)
void wxAVMediaBackend::FinishLoad()
{
DoShowPlayerControls(m_interfaceflags);
AVPlayerItem *playerItem = [m_player currentItem];
CGSize s = [playerItem presentationSize];
m_bestSize = wxSize(s.width, s.height);
NotifyMovieLoaded();
}
@ -500,7 +500,7 @@ bool wxAVMediaBackend::SetPlaybackRate(double dRate)
bool wxAVMediaBackend::SetPosition(wxLongLong where)
{
[m_player seekToTime:CMTimeMakeWithSeconds(where.GetValue() / 1000.0, 1)
[m_player seekToTime:CMTimeMakeWithSeconds(where.GetValue() / 1000.0, 1)
toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
return true;
@ -514,11 +514,11 @@ wxLongLong wxAVMediaBackend::GetPosition()
wxLongLong wxAVMediaBackend::GetDuration()
{
AVPlayerItem *playerItem = [m_player currentItem];
if ([playerItem status] == AVPlayerItemStatusReadyToPlay)
return CMTimeGetSeconds([[playerItem asset] duration])*1000.0;
else
return 0.f;
if ([playerItem status] == AVPlayerItemStatusReadyToPlay)
return CMTimeGetSeconds([[playerItem asset] duration])*1000.0;
else
return 0.f;
}
wxMediaState wxAVMediaBackend::GetState()
@ -555,7 +555,7 @@ bool wxAVMediaBackend::ShowPlayerControls(wxMediaCtrlPlayerControls flags)
{
if ( m_interfaceflags != flags )
DoShowPlayerControls(flags);
m_interfaceflags = flags;
return true;
}

View File

@ -238,8 +238,7 @@ protected :
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
wxUnusedVar(textField);
return NO;
}
@ -317,7 +316,7 @@ wxUITextViewControl::wxUITextViewControl( wxTextCtrl *wxPeer, UITextView* v) :
{
m_textView = v;
m_delegate= [[wxUITextViewDelegate alloc] init];
[m_textView setDelegate:m_delegate];
}
@ -423,7 +422,7 @@ void wxUITextViewControl::WriteText(const wxString& str)
wxString st = str;
wxMacConvertNewlines10To13( &st );
wxMacEditHelper helper(m_textView);
wxCFStringRef insert( st , m_wxPeer->GetFont().GetEncoding() );
NSMutableString* subst = [NSMutableString stringWithString:[m_textView text]];
[subst replaceCharactersInRange:[m_textView selectedRange] withString:insert.AsNSString()];
@ -466,10 +465,10 @@ bool wxUITextViewControl::GetStyle(long position, wxTextAttr& style)
/*
if (font)
style.SetFont(wxFont(font));
if (bgcolor)
style.SetBackgroundColour(wxColour(bgcolor));
if (fgcolor)
style.SetTextColour(wxColour(fgcolor));
*/
@ -489,15 +488,15 @@ void wxUITextViewControl::SetStyle(long start,
range = [m_textView selectedRange];
/*
UITextStorage* storage = [m_textView textStorage];
wxFont font = style.GetFont();
if (style.HasFont() && font.IsOk())
[storage addAttribute:NSFontAttributeName value:font.OSXGetNSFont() range:range];
wxColour bgcolor = style.GetBackgroundColour();
if (style.HasBackgroundColour() && bgcolor.IsOk())
[storage addAttribute:NSBackgroundColorAttributeName value:bgcolor.OSXGetNSColor() range:range];
wxColour fgcolor = style.GetTextColour();
if (style.HasTextColour() && fgcolor.IsOk())
[storage addAttribute:NSForegroundColorAttributeName value:fgcolor.OSXGetNSColor() range:range];
@ -512,9 +511,9 @@ void wxUITextViewControl::CheckSpelling(bool check)
wxSize wxUITextViewControl::GetBestSize() const
{
wxRect r;
GetBestRect(&r);
/*
if (m_textView && [m_textView layoutManager])
{
@ -526,7 +525,7 @@ wxSize wxUITextViewControl::GetBestSize() const
}
return wxSize(0,0);
*/
wxSize sz = r.GetSize();
if ( sz.y < 31 )
sz.y = 31;
@ -571,7 +570,7 @@ void wxUITextFieldControl::SetStringValue( const wxString &str)
wxSize wxUITextFieldControl::GetBestSize() const
{
wxRect r;
GetBestRect(&r);
wxSize sz = r.GetSize();
if ( sz.y < 31 )
@ -605,7 +604,7 @@ void wxUITextFieldControl::SetEditable(bool editable)
if ( !editable ) {
[m_textField resignFirstResponder];
}
[m_textField setEnabled: editable];
}
}
@ -710,7 +709,7 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer,
UITextView * v = nil;
v = [[UITextView alloc] initWithFrame:r];
tv = v;
wxUITextViewControl* tc = new wxUITextViewControl( wxpeer, v );
c = tc;
t = tc;
@ -721,39 +720,39 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer,
wxUITextField* v = [[wxUITextField alloc] initWithFrame:r];
tv = v;
v.textColor = [UIColor blackColor];
v.font = [UIFont systemFontOfSize:17.0];
v.backgroundColor = [UIColor whiteColor];
v.clearButtonMode = UITextFieldViewModeNever;
v.textColor = [UIColor blackColor];
v.font = [UIFont systemFontOfSize:17.0];
v.backgroundColor = [UIColor whiteColor];
v.clearButtonMode = UITextFieldViewModeNever;
[v setBorderStyle:UITextBorderStyleBezel];
if ( style & wxNO_BORDER )
v.borderStyle = UITextBorderStyleNone;
wxUITextFieldControl* tc = new wxUITextFieldControl( wxpeer, v );
c = tc;
t = tc;
}
#endif
if ( style & wxTE_PASSWORD )
[tv setSecureTextEntry:YES];
if ( style & wxTE_CAPITALIZE )
[tv setAutocapitalizationType:UITextAutocapitalizationTypeWords];
else
[tv setAutocapitalizationType:UITextAutocapitalizationTypeSentences];
if ( !(style & wxTE_MULTILINE) )
{
[tv setAutocorrectionType:UITextAutocorrectionTypeNo];
[tv setReturnKeyType:UIReturnKeyDone];
[tv setReturnKeyType:UIReturnKeyDone];
}
[tv setKeyboardType:UIKeyboardTypeDefault];
t->SetStringValue(str);
return c;
}

View File

@ -68,7 +68,7 @@
}
- (void)dealloc {
[super dealloc];
[super dealloc];
}

View File

@ -221,7 +221,7 @@ void wxWindowMac::Init()
wxWindowMac::~wxWindowMac()
{
SendDestroyEvent();
#if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON
for ( int i = s_hotkeys.size()-1; i>=0; -- i )
{
@ -310,10 +310,10 @@ void wxWindowMac::SetWrappingPeer(wxOSXWidgetImpl* wrapper)
wxOSXWidgetImpl* inner = GetPeer();
wxASSERT_MSG( inner != NULL && inner->IsOk(), "missing or incomplete inner peer" );
wxASSERT_MSG( wrapper != NULL && wrapper->IsOk(), "missing or incomplete wrapper" );
if ( !(inner != NULL && inner->IsOk() && wrapper != NULL && wrapper->IsOk()) )
return;
inner->RemoveFromParent();
wrapper->InstallEventHandler();
wrapper->Embed(inner);
@ -334,28 +334,28 @@ void wxWindowMac::SetPeer(wxOSXWidgetImpl* peer)
if ( GetPeer() && !GetPeer()->IsRootControl())
{
wxASSERT_MSG( GetPeer()->IsOk() , wxT("The native control must exist already") ) ;
if (!GetParent()->GetChildren().Find((wxWindow*)this))
GetParent()->AddChild( this );
GetPeer()->InstallEventHandler();
GetPeer()->Embed(GetParent()->GetPeer());
GetParent()->MacChildAdded() ;
// adjust font, controlsize etc
GetPeer()->SetControlSize( m_windowVariant );
InheritAttributes();
// in case nothing has been set, use the variant default fonts
if ( !m_hasFont )
DoSetWindowVariant( m_windowVariant );
GetPeer()->SetInitialLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ;
// for controls we want to use best size for wxDefaultSize params )
if ( !GetPeer()->IsUserPane() )
SetInitialSize(GetMinSize());
SetCursor( *wxSTANDARD_CURSOR ) ;
}
}
@ -859,16 +859,16 @@ void wxWindowMac::DoGetClientSize( int *x, int *y ) const
// we shouldn't return invalid width
if ( ww < 0 )
ww = 0;
*x = ww;
}
if (y)
{
// we shouldn't return invalid height
if ( hh < 0 )
hh = 0;
*y = hh;
}
}
@ -1244,7 +1244,7 @@ bool wxWindowMac::Show(bool show)
{
if ( !show )
MacInvalidateBorders();
if ( !wxWindowBase::Show(show) )
return false;
@ -1375,7 +1375,7 @@ void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect)
if ( !IsShownOnScreen() )
return ;
if ( IsFrozen() )
return;
@ -1999,7 +1999,7 @@ bool wxWindowMac::MacDoRedraw( long time )
wxNonOwnedWindow* top = MacGetTopLevelWindow();
if (top)
top->WindowWasPainted() ;
return handled;
}
@ -2302,14 +2302,14 @@ long wxWindowMac::MacGetLeftBorderSize() const
{
// the wx borders are all symmetric in mac themes
long border = MacGetWXBorderSize() ;
if ( GetPeer() )
{
int left, top, right, bottom;
GetPeer()->GetLayoutInset( left, top, right, bottom );
border -= left;
}
return border;
}
@ -2318,14 +2318,14 @@ long wxWindowMac::MacGetRightBorderSize() const
{
// the wx borders are all symmetric in mac themes
long border = MacGetWXBorderSize() ;
if ( GetPeer() )
{
int left, top, right, bottom;
GetPeer()->GetLayoutInset( left, top, right, bottom );
border -= right;
}
return border;
}
@ -2333,14 +2333,14 @@ long wxWindowMac::MacGetTopBorderSize() const
{
// the wx borders are all symmetric in mac themes
long border = MacGetWXBorderSize() ;
if ( GetPeer() )
{
int left, top, right, bottom;
GetPeer()->GetLayoutInset( left, top, right, bottom );
border -= top;
}
return border;
}
@ -2348,14 +2348,14 @@ long wxWindowMac::MacGetBottomBorderSize() const
{
// the wx borders are all symmetric in mac themes
long border = MacGetWXBorderSize() ;
if ( GetPeer() )
{
int left, top, right, bottom;
GetPeer()->GetLayoutInset( left, top, right, bottom );
border -= bottom;
}
return border;
}
@ -2530,18 +2530,18 @@ wxHotKeyHandler(EventHandlerCallRef WXUNUSED(nextHandler),
GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, 1, NULL, &charCode );
GetEventParameter( event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode );
GetEventParameter( event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers );
UInt32 keymessage = (keyCode << 8) + charCode;
wxKeyEvent wxevent(wxEVT_HOTKEY);
wxevent.SetId(hotKeyId.id);
wxTheApp->MacCreateKeyEvent( wxevent, s_hotkeys[i].window , keymessage ,
modifiers , when , 0 ) ;
s_hotkeys[i].window->HandleWindowEvent(wxevent);
}
}
return noErr;
}
@ -2552,11 +2552,11 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
if ( s_hotkeys[i].keyId == hotkeyId )
{
wxLogLastError(wxT("hotkeyId already registered"));
return false;
}
}
static bool installed = false;
if ( !installed )
{
@ -2567,7 +2567,7 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
InstallApplicationEventHandler(&wxHotKeyHandler, 1, &eventType, NULL, NULL);
installed = true;
}
UInt32 mac_modifiers=0;
if ( modifiers & wxMOD_ALT )
mac_modifiers |= optionKey;
@ -2577,18 +2577,18 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
mac_modifiers |= controlKey;
if ( modifiers & wxMOD_CONTROL )
mac_modifiers |= cmdKey;
EventHotKeyRef hotKeyRef;
EventHotKeyID hotKeyIDmac;
hotKeyIDmac.signature = 'WXMC';
hotKeyIDmac.id = hotkeyId;
if ( RegisterEventHotKey(wxCharCodeWXToOSX((wxKeyCode)keycode), mac_modifiers, hotKeyIDmac,
GetApplicationEventTarget(), 0, &hotKeyRef) != noErr )
{
wxLogLastError(wxT("RegisterHotKey"));
return false;
}
else
@ -2597,10 +2597,10 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
v.ref = hotKeyRef;
v.keyId = hotkeyId;
v.window = this;
s_hotkeys.push_back(v);
}
return true;
}
@ -2615,14 +2615,14 @@ bool wxWindowMac::UnregisterHotKey(int hotkeyId)
if ( UnregisterEventHotKey(ref) != noErr )
{
wxLogLastError(wxT("UnregisterHotKey"));
return false;
}
else
return true;
}
}
return false;
}
@ -2631,7 +2631,7 @@ bool wxWindowMac::UnregisterHotKey(int hotkeyId)
bool wxWindowMac::OSXHandleKeyEvent( wxKeyEvent& event )
{
bool handled = false;
// moved the ordinary key event sending AFTER the accel evaluation
#if wxUSE_ACCEL
@ -2665,7 +2665,7 @@ bool wxWindowMac::OSXHandleKeyEvent( wxKeyEvent& event )
}
}
#endif // wxUSE_ACCEL
if ( !handled )
{
handled = HandleWindowEvent( event ) ;
@ -2738,9 +2738,9 @@ void wxWidgetImpl::RemoveAssociations(wxWidgetImpl* impl)
void wxWidgetImpl::RemoveAssociation(WXWidget control)
{
wxCHECK_RET( control != NULL, wxT("attempt to remove a NULL WXWidget from control map") );
wxCHECK_RET( control != NULL, wxT("attempt to remove a NULL WXWidget from control map") );
wxWinMacControlList.erase(control);
wxWinMacControlList.erase(control);
}
wxIMPLEMENT_ABSTRACT_CLASS(wxWidgetImpl, wxObject);

View File

@ -16,6 +16,10 @@
#if wxUSE_XRC && wxUSE_TOGGLEBTN
# if !defined(__WXUNIVERSAL__) && !defined(__WXMOTIF__) && !(defined(__WXGTK__) && !defined(__WXGTK20__))
# define wxHAVE_BITMAPS_IN_BUTTON 1
# endif
#include "wx/xrc/xh_tglbtn.h"
#include "wx/tglbtn.h"
#include "wx/button.h" // solely for wxBU_EXACTFIT
@ -35,7 +39,7 @@ wxObject *wxToggleButtonXmlHandler::DoCreateResource()
wxObject *control = m_instance;
#if !defined(__WXUNIVERSAL__) && !defined(__WXMOTIF__) && !(defined(__WXGTK__) && !defined(__WXGTK20__))
#ifdef wxHAVE_BITMAPS_IN_BUTTON
if (m_class == wxT("wxBitmapToggleButton"))
{
@ -78,16 +82,18 @@ void wxToggleButtonXmlHandler::DoCreateToggleButton(wxObject *control)
wxDefaultValidator,
GetName());
#ifdef wxHAVE_BITMAPS_IN_BUTTON
if ( GetParamNode("bitmap") )
{
button->SetBitmap(GetBitmap("bitmap", wxART_BUTTON),
GetDirection("bitmapposition"));
}
#endif
button->SetValue(GetBool( wxT("checked")));
}
#if !defined(__WXUNIVERSAL__) && !defined(__WXMOTIF__) && !(defined(__WXGTK__) && !defined(__WXGTK20__))
#ifdef wxHAVE_BITMAPS_IN_BUTTON
void wxToggleButtonXmlHandler::DoCreateBitmapToggleButton(wxObject *control)
{
wxBitmapToggleButton *button = wxDynamicCast(control, wxBitmapToggleButton);