2008-11-28 2 views
32

Я пытаюсь оценить возможность патча на WebKit, который позволит отображать всю визуализированную графику на полностью прозрачный фон.Можно ли отображать веб-контент на прозрачном фоне с помощью WebKit?

Желаемый эффект заключается в том, чтобы визуализировать веб-контент без какого-либо фона, он должен появиться на рабочем столе (или что-то, что отображается за окном браузера).

Кто-нибудь видел приложение? (Я могу думать о некоторых эмуляторах терминала, которые могут это сделать.) Если кто-то работал внутри WebKit (или, возможно, Gecko?), Вы думаете, что это можно было бы сделать?


Update: Я пришел к выводу, что Mac OSX приборная панель виджетов использовать именно этот метод. Таким образом, это должно быть возможно.


Update 2: Я составил WebKit на Linux и заметил, что параметры настраивают включают:

--enable-dashboard-support 
enable Dashboard support default=yes 

Я становлюсь ближе. Может ли кто-нибудь помочь?


Update 3: Я по-прежнему найти ссылки на это в сообщениях на различных соответствующих списков рассылки.

+0

Возможно, вы захотите попробовать построить платформу Adobe AIR, если это вариант. Есть несколько способов сделать это. http://theflexmagazine.com/2009/01/29/transparent-application-window-with-adobe-air/ и http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=4&postId = 8226 – 2009-04-28 00:51:58

+0

Я понимаю, что это возможно, но не идеально из-за требований к лицензированию (цель - встроенный плеер), мы стараемся оставаться как можно более безжалостными. Я понимаю, что есть заплаты от Adobe, которые, похоже, пока не возвращаются в WebKit. (Поддержка плагинов без окон в сборке Gtk является основной). – 2009-04-28 14:28:36

ответ

24

Решено!

С помощью постоянных исследований, чистящих форумы и репозитории исходного кода, я собрал необходимые шаги для этого, используя только libwebkit и стандартный рабочий стол compiz (любой рабочий стол Xorg с компоновкой должен делать).

Для текущего libwebkit (1.1.10-СВН), существует Ubuntu PPA:

deb http://ppa.launchpad.net/webkit-team/ppa/ubuntu jaunty main 
deb-src http://ppa.launchpad.net/webkit-team/ppa/ubuntu jaunty main 

Насколько код идет, ключ звонит webkit_web_view_set_transparent.

И, конечно, система, в которой вы работаете, должна иметь совместимую графическую карту (intel, radeon или nvidia) и запускать диспетчер окон компоновки (например, Compiz).

И наконец, чтобы увидеть прозрачность, контент, который вы просматриваете, должен установить прозрачный фон с помощью CSS3, в противном случае он все еще полностью непрозрачен.

Это так просто, как:

BODY { background-color: rgba(0,0,0,0); } 

Вот это полный образец для самого простого приложения WebKit браузера с поддержкой прозрачности:

#include <gtk/gtk.h> 
#include <webkit/webkit.h> 

static void destroy_cb(GtkWidget* widget, gpointer data) { 
    gtk_main_quit(); 
} 

int main(int argc, char* argv[]) { 
    gtk_init(&argc, &argv); 

    if(!g_thread_supported()) 
    g_thread_init(NULL); 

    // Create a Window, set colormap to RGBA 
    GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    GdkScreen *screen = gtk_widget_get_screen(window); 
    GdkColormap *rgba = gdk_screen_get_rgba_colormap (screen); 

    if (rgba && gdk_screen_is_composited (screen)) { 
    gtk_widget_set_default_colormap(rgba); 
    gtk_widget_set_colormap(GTK_WIDGET(window), rgba); 
    } 

    gtk_window_set_default_size(GTK_WINDOW(window), 800, 800); 
    g_signal_connect(window, "destroy", G_CALLBACK(destroy_cb), NULL); 

    // Optional: for dashboard style borderless windows 
    gtk_window_set_decorated(GTK_WINDOW(window), FALSE); 


    // Create a WebView, set it transparent, add it to the window 
    WebKitWebView* web_view = web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); 
    webkit_web_view_set_transparent(web_view, TRUE); 
    gtk_container_add (GTK_CONTAINER(window), GTK_WIDGET(web_view)); 

    // Load a default page 
    webkit_web_view_load_uri(web_view, "http://stackoverflow.com/"); 

    // Show it and continue running until the window closes 
    gtk_widget_grab_focus(GTK_WIDGET(web_view)); 
    gtk_widget_show_all(window); 
    gtk_main(); 
    return 0; 
} 

Screenshot! http://i27.tinypic.com/2qntlxl.jpg

1

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

Возможно, вам захочется поговорить с разработчиками сценариев и компиляторов, чтобы они могли больше помочь.

+0

Согласен, это половина. Но как установить цвет фона на веб-странице, чтобы окончательное визуализированное изображение не было всегда непрозрачным. Это так просто, как установка BODY {opacity: 0; }? – 2009-04-27 00:59:14

+0

Должно быть, не уверен. Партии compiz/screenlet уже выполняют рендеринг вида виджета рабочего стола. – ewanm89 2009-04-27 02:28:59

2

В Safari 1.3 и 2 было скрытое меню отладки (вызываемое через терминал: defaults write com.apple.Safari IncludeDebugMenu 1), которое включало опцию «Использовать прозрачное окно».

Не уверен, если это была WebKit вещь или Safari вещь, хотя.

(В Safari 3, меню отладки, кажется, было заменено меню «Develop» (включить в меню Настройки> Дополнительно), который не имеет опции прозрачного окна.)

1

У меня есть новое решение, которое действительно легко сделать для одного снимка экрана. Он использует node.js с библиотекой phantom.js.

  1. установить Node.js
  2. перспективе 'NPM установить -g phantomjs' в консоли/терминале
  3. сохранить следующий как script.js и запустить его из консоли 'phantomjs script.js'

    var page = require('webpage').create(); 
    page.viewportSize = { width: 1920, height: 1500 }; 
    page.open("http://www.theWebYouWantToRender"); 
    page.onLoadFinished = function(status) { 
        page.evaluate(function() { 
         document.body.style.background = 'transparent'; 
        }); 
    
        page.render('render.png'); 
        phantom.exit(); 
    }; 
    
  4. прибыль? :) нравится
Смежные вопросы