npapi-vlc | branch: master | Felix Paul Kühne <[email protected]> | Mon Dec 31 19:26:26 2012 +0100| [8ad22f16dcdfca17c2a68b09f34ecdd9e3f2eb2f] | committer: Felix Paul Kühne
mac windowless: implement another view shown in case there is no playback just because we can > http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=8ad22f16dcdfca17c2a68b09f34ecdd9e3f2eb2f --- npapi/vlcwindowless_mac.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- npapi/vlcwindowless_mac.h | 1 + 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/npapi/vlcwindowless_mac.cpp b/npapi/vlcwindowless_mac.cpp index 819d36f..1accb59 100644 --- a/npapi/vlcwindowless_mac.cpp +++ b/npapi/vlcwindowless_mac.cpp @@ -63,6 +63,41 @@ void VlcWindowlessMac::drawBackground(NPCocoaEvent *cocoaEvent) CGContextRestoreGState(cgContext); } +void VlcWindowlessMac::drawNoPlayback(CGContextRef cgContext) +{ + float windowWidth = npwindow.width; + float windowHeight = npwindow.height; + + CGContextSaveGState(cgContext); + + // this context is flipped.. + CGContextTranslateCTM(cgContext, 0.0, windowHeight); + CGContextScaleCTM(cgContext, 1., -1.); + + // draw a gray background + CGContextAddRect(cgContext, CGRectMake(0, 0, windowWidth, windowHeight)); + CGContextSetGrayFillColor(cgContext, 0.5, 1.); + CGContextDrawPath(cgContext, kCGPathFill); + + // draw info text + CGContextSetRGBStrokeColor(cgContext, 0, 0, 0, .5); + CGContextSetTextDrawingMode(cgContext, kCGTextFillStroke); + CFStringRef keys[] = { kCTFontAttributeName }; + CFTypeRef values[] = { CTFontCreateWithName(CFSTR("Helvetica"),16,NULL) }; + CFDictionaryRef stylesDict = CFDictionaryCreate(kCFAllocatorDefault, + (const void **)&keys, + (const void **)&values, + 1, NULL, NULL); + CFAttributedStringRef attRef = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("VLC Web Plugin"), stylesDict); + CTLineRef textTine = CTLineCreateWithAttributedString(attRef); + CGRect textRect = CTLineGetImageBounds(textTine, cgContext); + CGContextSetTextPosition(cgContext, ((windowWidth - textRect.size.width) / 2), ((windowHeight - textRect.size.height) / 2)); + CTLineDraw(textTine, cgContext); + CFRelease(textTine); + + CGContextRestoreGState(cgContext); +} + bool VlcWindowlessMac::handle_event(void *event) { NPCocoaEvent* cocoaEvent = (NPCocoaEvent*)event; @@ -97,6 +132,11 @@ bool VlcWindowlessMac::handle_event(void *event) return false; } + if (!VlcPluginBase::playlist_isplaying()) { + drawNoPlayback(cgContext); + return true; + } + drawBackground(cocoaEvent); if(!VlcPluginBase::player_has_vout()) @@ -124,7 +164,7 @@ bool VlcWindowlessMac::handle_event(void *event) sizeof(m_frame_buf[0]), kCFAllocatorNull); CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(dataRef); - CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear); + CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); CGImageRef image = CGImageCreate(m_media_width, m_media_height, kBitsPerComponent, diff --git a/npapi/vlcwindowless_mac.h b/npapi/vlcwindowless_mac.h index 5a85f13..d3d7976 100644 --- a/npapi/vlcwindowless_mac.h +++ b/npapi/vlcwindowless_mac.h @@ -37,6 +37,7 @@ public: protected: void drawBackground(NPCocoaEvent *cocoaEvent); + void drawNoPlayback(CGContextRef cgContext); }; #endif /* __VLCWINDOWLESS_MAC_H__ */ _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
