Как получить NSView в плагине NPAPI модели событий какао - PullRequest
1 голос
/ 11 августа 2011

Я последовал примеру NetscapeCocoaPlugin из ночной сборки Webkit и могу создать плагин в стиле NPAPI, использующий модель событий Cocoa.

Мой вопрос сейчас, как я могу получить NSView внутри NPP_SetWindow.

Плакат в этой теме , говорит, что это возможно с помощью [NSView focusView], но я не смог заставить это работать

Моя текущая функция выглядиткак это:

NPError NPP_SetWindow(NPP instance, NPWindow* window)
{
PluginObject *obj = instance->pdata;
obj->window = *window;

NSLog(@"Set Window called");

NSView* currentView = [NSView focusView];

[[NSColor redColor] set]; // Sets current drawing color.
NSRectFill(NSMakeRect(10, 10, 2, 20)); // Defines a rectangle and then fills it with the current drawing color.
[[NSColor colorWithCalibratedRed:0.7 green:0.9 blue:0.3 alpha:1.0] set]; // Sets a new color.
[[NSBezierPath bezierPathWithOvalInRect:NSMakeRect(5, 0, 10, 10)] fill]; // Draws a circle in the new color.

[currentView setNeedsDisplay:YES];

return NPERR_NO_ERROR;
}

1 Ответ

1 голос
/ 11 августа 2011

Вы не можете. Было время, когда вы могли получить NSView, используя взлом, но это никогда не поддерживалось, никогда не было хорошей идеей и больше невозможно, потому что все три браузера переключились на использование плагинов вне процесса, что означает, что вы не можете получить доступ в NSView.

Вы можете получить CGContextRef, а затем создать свои собственные внеэкранные NSWindow и NSView и отобразить их в CGContextRef, но тогда вам также придется проксировать все события. Существует Оболочка WebView в FireBreath , которая до сих пор экспериментальна, но делает это довольно больно. В конце концов я планирую превратить его в нечто более общее, чтобы NSView (вроде) можно было использовать в плагине, но нет никакого собственного способа сделать это.

Здесь есть отличная запись в блоге о моделях для рисования Mac: http://www.escapedthoughts.com/weblog/geek/P110308-mac-npapi-plugins.writeback

...