Skip to content
Snippets Groups Projects
Commit a9fc091d authored by Sudarshan CP's avatar Sudarshan CP Committed by Emanuele Aina
Browse files

webview: Remove the webview widget


The webview widget based on Webkit2GTK+ is now provided by the
libbredon package, hence the WebKit1-based webview widgets here are
no longer supported.

Signed-off-by: default avatarSudarshan C P <sudarshan.cp2@in.bosch.com>
Reviewed-by: Emanuele Aina's avatarEmanuele Aina <emanuele.aina@collabora.com>
Differential Revision: https://phabricator.apertis.org/D5516
parent 860d5b24
No related branches found
No related tags found
No related merge requests found
Showing
with 6 additions and 3097 deletions
......@@ -74,9 +74,6 @@ LIGHTWOOD_PACKAGES_PRIVATE_CHAMPLAIN="champlain-0.12 >= 0.12.2"
LIGHTWOOD_PACKAGES_PUBLIC_PULSE=""
LIGHTWOOD_PACKAGES_PRIVATE_PULSE="libpulse >= 1.1 libpulse-mainloop-glib >= 1.1"
LIGHTWOOD_PACKAGES_PUBLIC_WEBKIT_CLUTTER="webkit-clutter-mx"
LIGHTWOOD_PACKAGES_PRIVATE_WEBKIT_CLUTTER=""
LIGHTWOOD_PACKAGES_PUBLIC_POPPLER_GLIB=""
LIGHTWOOD_PACKAGES_PRIVATE_POPPLER_GLIB="poppler-glib"
......@@ -89,8 +86,8 @@ LIGHTWOOD_PACKAGES_PRIVATE_CLUTTER_GST="clutter-gst-3.0"
LIGHTWOOD_PACKAGES_PUBLIC_MX=""
LIGHTWOOD_PACKAGES_PRIVATE_MX="mx-2.0"
LIGHTWOOD_PACKAGES_PUBLIC="$LIGHTWOOD_PACKAGES_PUBLIC_GLIB $LIGHTWOOD_PACKAGES_PUBLIC_LIBUIUTILITY $LIGHTWOOD_PACKAGES_PUBLIC_CHAMPLAIN $LIGHTWOOD_PACKAGES_PUBLIC_PULSE $LIGHTWOOD_PACKAGES_PUBLIC_WEBKIT_CLUTTER $LIGHTWOOD_PACKAGES_PUBLIC_POPPLER_GLIB $LIGHTWOOD_PACKAGES_PUBLIC_SOUP_GNOME $LIGHTWOOD_PACKAGES_PUBLIC_CLUTTER_GST $LIGHTWOOD_PACKAGES_PUBLIC_MX"
LIGHTWOOD_PACKAGES_PRIVATE="$LIGHTWOOD_PACKAGES_PRIVATE_GLIB $LIGHTWOOD_PACKAGES_PRIVATE_LIBUIUTILITY $LIGHTWOOD_PACKAGES_PRIVATE_CHAMPLAIN $LIGHTWOOD_PACKAGES_PRIVATE_PULSE $LIGHTWOOD_PACKAGES_PRIVATE_WEBKIT_CLUTTER $LIGHTWOOD_PACKAGES_PRIVATE_POPPLER_GLIB $LIGHTWOOD_PACKAGES_PRIVATE_SOUP_GNOME $LIGHTWOOD_PACKAGES_PRIVATE_CLUTTER_GST $LIGHTWOOD_PACKAGES_PRIVATE_MX"
LIGHTWOOD_PACKAGES_PUBLIC="$LIGHTWOOD_PACKAGES_PUBLIC_GLIB $LIGHTWOOD_PACKAGES_PUBLIC_LIBUIUTILITY $LIGHTWOOD_PACKAGES_PUBLIC_CHAMPLAIN $LIGHTWOOD_PACKAGES_PUBLIC_PULSE $LIGHTWOOD_PACKAGES_PUBLIC_POPPLER_GLIB $LIGHTWOOD_PACKAGES_PUBLIC_SOUP_GNOME $LIGHTWOOD_PACKAGES_PUBLIC_CLUTTER_GST $LIGHTWOOD_PACKAGES_PUBLIC_MX"
LIGHTWOOD_PACKAGES_PRIVATE="$LIGHTWOOD_PACKAGES_PRIVATE_GLIB $LIGHTWOOD_PACKAGES_PRIVATE_LIBUIUTILITY $LIGHTWOOD_PACKAGES_PRIVATE_CHAMPLAIN $LIGHTWOOD_PACKAGES_PRIVATE_PULSE $LIGHTWOOD_PACKAGES_PRIVATE_POPPLER_GLIB $LIGHTWOOD_PACKAGES_PRIVATE_SOUP_GNOME $LIGHTWOOD_PACKAGES_PRIVATE_CLUTTER_GST $LIGHTWOOD_PACKAGES_PRIVATE_MX"
AC_SUBST([LIGHTWOOD_PACKAGES_PUBLIC])
AC_SUBST([LIGHTWOOD_PACKAGES_PRIVATE])
......@@ -99,7 +96,6 @@ PKG_CHECK_MODULES([GLIB], [$LIGHTWOOD_PACKAGES_PUBLIC_GLIB $LIGHTWOOD_PACKAGES_P
PKG_CHECK_MODULES([LIBUIUTILITY], [$LIGHTWOOD_PACKAGES_PUBLIC_LIBUIUTILITY $LIGHTWOOD_PACKAGES_PRIVATE_LIBUIUTILITY])
PKG_CHECK_MODULES([CHAMPLAIN], [$LIGHTWOOD_PACKAGES_PUBLIC_CHAMPLAIN $LIGHTWOOD_PACKAGES_PRIVATE_CHAMPLAIN])
PKG_CHECK_MODULES([PULSE], [$LIGHTWOOD_PACKAGES_PUBLIC_PULSE $LIGHTWOOD_PACKAGES_PRIVATE_PULSE])
PKG_CHECK_MODULES([WEBKIT_CLUTTER], [$LIGHTWOOD_PACKAGES_PUBLIC_WEBKIT_CLUTTER $LIGHTWOOD_PACKAGES_PRIVATE_WEBKIT_CLUTTER])
PKG_CHECK_MODULES([POPPLER_GLIB], [$LIGHTWOOD_PACKAGES_PUBLIC_POPPLER_GLIB $LIGHTWOOD_PACKAGES_PRIVATE_POPPLER_GLIB])
PKG_CHECK_MODULES([SOUP_GNOME], [$LIGHTWOOD_PACKAGES_PUBLIC_SOUP_GNOME $LIGHTWOOD_PACKAGES_PRIVATE_SOUP_GNOME])
PKG_CHECK_MODULES([CLUTTER_GST], [$LIGHTWOOD_PACKAGES_PUBLIC_CLUTTER_GST $LIGHTWOOD_PACKAGES_PRIVATE_CLUTTER_GST])
......@@ -112,7 +108,6 @@ AC_SUBST([LIBM])
#AX_PKG_CHECK_MODULES([LIBUIUTILITY],[],[libthornbury])
#AX_PKG_CHECK_MODULES([CHAMPLAIN],[],[champlain-0.12 >= 0.12.2])
#AX_PKG_CHECK_MODULES([PULSE],[],[libpulse >= 1.1 libpulse-mainloop-glib >= 1.1])
#AX_PKG_CHECK_MODULES([WEBKIT_CLUTTER],[webkit-clutter-mx],[])
#AX_PKG_CHECK_MODULES([POPPLER_GLIB],[],[poppler-glib])
#AX_PKG_CHECK_MODULES([SOUP_GNOME],[],[libsoup-gnome-2.4])
......@@ -158,7 +153,6 @@ src/Makefile
tests/Makefile
tests/button/Makefile
tests/flipper/Makefile
tests/webview/Makefile
tests/roller/Makefile
examples/Makefile
])
......
......@@ -19,8 +19,7 @@ Build-Depends:
libpulse-dev,
libsoup-gnome2.4-dev,
libsystemd-dev,
libthornbury-dev (>= 0.1703.0),
libwebkit-clutter-dev
libthornbury-dev (>=0.1703.0)
Standards-Version: 3.9.2
Package: gir1.2-liblightwood-1
......@@ -72,8 +71,7 @@ Depends:
libproxy-dev,
libpulse-dev,
libsoup-gnome2.4-dev,
libthornbury-dev (>= 0.1703.0),
libwebkit-clutter-dev,
libthornbury-dev (>=0.1703.0),
${misc:Depends},
${shlibs:Depends}
Recommends:
......
......@@ -6,8 +6,8 @@ requirements.
## Overview
Package provides very important widgets only for app development.
Liblightwood has all basic widgets like button,list,roller,webview
widgets,multiline textbox.etc. It is advisable to extend to one's
Liblightwood has all basic widgets like button,list,roller widgets,
multiline textbox.etc. It is advisable to extend to one's
requirement.
Some of the widgets provides just abstract widgets(button,textbox)
......
......@@ -17,10 +17,6 @@ sources_h = \
lightwood-roller/liblightwood-container.h \
lightwood-textbox/liblightwood-textbox.h \
lightwood-textbox/liblightwood-multiline.h \
lightwood-webview/liblightwood-iwebview-speller.h \
lightwood-webview/liblightwood-webview-assistant.h \
lightwood-webview/liblightwood-webview-widget.h \
lightwood-webview/liblightwood-webview-widget-dl.h \
$(NULL)
sources_c = \
......@@ -42,34 +38,16 @@ sources_c = \
lightwood-roller/liblightwood-container.c \
lightwood-textbox/liblightwood-textbox.c \
lightwood-textbox/liblightwood-multiline.c \
lightwood-webview/liblightwood-webview-marshal.c \
lightwood-webview/liblightwood-iwebview-speller.c \
lightwood-webview/liblightwood-webview-widget-audio-manager.c \
lightwood-webview/liblightwood-webview-widget-fsvideo-player.c \
lightwood-webview/liblightwood-webview-widget-pdf-viewer.c \
lightwood-webview/liblightwood-webview-widget-gesture-handler.c \
lightwood-webview/liblightwood-webview.c \
lightwood-webview/liblightwood-webview-widget.c \
lightwood-webview/liblightwood-webview-widget-dl.c \
$(NULL)
internal_sources_h = \
lightwood-roller/roller-internal.h \
lightwood-roller/roller-private.h \
lightwood-webview/liblightwood-webview-marshal.h \
lightwood-webview/liblightwood-webview-widget-audio-manager.h \
lightwood-webview/liblightwood-webview-widget-dl.h \
lightwood-webview/liblightwood-webview-widget-pdf-viewer.h \
lightwood-webview/liblightwood-webview-widget-fsvideo-player.h \
lightwood-webview/liblightwood-webview-widget-gesture-handler.h \
lightwood-webview/liblightwood-webview.h \
$(NULL)
enumtype_sources = \
lightwood-flipper/liblightwood-flipper.c \
lightwood-flipper/liblightwood-flipper.h \
lightwood-webview/liblightwood-webview-widget.c \
lightwood-webview/liblightwood-webview-widget.h \
$(NULL)
built_headers = \
......@@ -112,7 +90,6 @@ liblightwood_@LIGHTWOOD_API_VERSION@_la_CPPFLAGS = \
-I$(top_srcdir)/src/lightwood-map/ \
-I$(top_srcdir)/src/lightwood-roller/ \
-I$(top_srcdir)/src/lightwood-textbox/ \
-I$(top_srcdir)/src/lightwood-webview/ \
$(NULL)
liblightwood_@LIGHTWOOD_API_VERSION@_la_CFLAGS = \
......@@ -124,7 +101,6 @@ liblightwood_@LIGHTWOOD_API_VERSION@_la_CFLAGS = \
$(GTK_CFLAGS) \
$(CHAMPLAIN_CFLAGS) \
$(MX_CFLAGS) \
$(WEBKIT_CLUTTER_CFLAGS) \
$(POPPLER_GLIB_CFLAGS) \
$(SOUP_GNOME_CFLAGS) \
$(NULL)
......@@ -136,7 +112,6 @@ liblightwood_@LIGHTWOOD_API_VERSION@_la_LIBADD = \
$(AM_LIBADD) \
$(CHAMPLAIN_LIBS) \
$(MX_LIBS) \
$(WEBKIT_CLUTTER_LIBS) \
$(POPPLER_GLIB_LIBS) \
$(SOUP_GNOME_LIBS) \
$(NULL)
......@@ -169,9 +144,6 @@ CLEANFILES = \
$(BUILT_SOURCES) \
$(NULL)
# FIXME: introspect webview API (see T854)
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
INTROSPECTION_SCANNER_ARGS = \
......
......@@ -11,8 +11,6 @@
#include "lightwood-enumtypes.h"
#include <lightwood-flipper/liblightwood-flipper.h>
#include <lightwood-webview/liblightwood-webview.h>
#include <lightwood-webview/liblightwood-webview-widget.h>
/*** END file-header ***/
......
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* SECTION:liblightwood-iwebview-speller
* @Title:LightwoodIWebviewSpeller
* @short_description: Web View speller interface
* @see_also: #liblightwoodmodel #clutteractor
*
* #LightwoodIWebviewSpeller is a interface class which will provide
* show,hide,is_shown virtual methods, which needs to implemented
* from the variant.
*
* ## freeing the widget
* call g_object_unref() to free the widget.
*
* ## sample c code
* |[<!-- language="c" -->
* //write a lightwood_webview_speller
static void
lightwood_webview_speller_iface_init (LightwoodWebViewSpellerInterface *iface)
{
iface->show = _lightwood_webview_speller_show;
iface->hide = _lightwood_webview_speller_hide;
iface->is_shown = _lightwood_webview_speller_is_shown;
}
]|
*
*/
#include "liblightwood-iwebview-speller.h"
enum
{
LIGHTWOOD_WEBVIEW_SPELLER_VISIBLE,
LIGHTWOOD_WEBVIEW_SPELLER_DATA_ENETERD,
LIGHTWOOD_WEBVIEW_SPELLER_LAST_SIGNAL
};
static guint signals[LIGHTWOOD_WEBVIEW_SPELLER_LAST_SIGNAL] = { 0, };
G_DEFINE_INTERFACE(LightwoodWebViewSpeller, lightwood_webview_speller, 0)
static void lightwood_webview_speller_default_init(LightwoodWebViewSpellerInterface* iface)
{
iface->show = NULL;
iface->hide = NULL;
iface->is_shown = NULL;
signals[LIGHTWOOD_WEBVIEW_SPELLER_VISIBLE] =
g_signal_new ("webview_speller_visible",
G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
signals[LIGHTWOOD_WEBVIEW_SPELLER_DATA_ENETERD] =
g_signal_new ("webview_speller_data_entered",
G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
NULL,
G_TYPE_STRING, 2, G_TYPE_STRING,G_TYPE_STRING);
}
/**
* lightwood_webview_speller_show:
* @self :The reference to #LightwoodWebViewSpeller
* @prompt : the promt
* @default_text : default text to display.
*
* This Function will invoke show speller interface.
*/
void lightwood_webview_speller_show (LightwoodWebViewSpeller* self,const gchar* prompt,const gchar* default_text)
{
LIGHTWOOD_WEBVIEW_SPELLER_GET_IFACE (self)->show (self, prompt, default_text);
}
/**
* lightwood_webview_speller_hide:
* @self :The reference to #LightwoodWebViewSpeller
*
* This Function will invoke hide speller interface
* Returns: %TRUE/%FALSE
*/
gboolean lightwood_webview_speller_hide (LightwoodWebViewSpeller* self)
{
return LIGHTWOOD_WEBVIEW_SPELLER_GET_IFACE (self)->hide (self);
}
/**
* lightwood_webview_speller_is_shown:
* @self :The reference to #LightwoodWebViewSpeller
*
* This Function will give status of speller
* Returns: if %TRUEi shown/%FALSE hidden
*/
gboolean lightwood_webview_speller_is_shown (LightwoodWebViewSpeller* self)
{
return LIGHTWOOD_WEBVIEW_SPELLER_GET_IFACE (self)->is_shown (self);
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-iwebview-speller.h */
#ifndef _liblightwoodwebviewspeller_h
#define _liblightwoodwebviewspeller_h
#include <glib-object.h>
#include <clutter/clutter.h>
G_BEGIN_DECLS
#define LIGHTWOOD_TYPE_WEBVIEW_SPELLER lightwood_webview_speller_get_type ()
G_DECLARE_INTERFACE (LightwoodWebViewSpeller, lightwood_webview_speller, LIGHTWOOD, WEBVIEW_SPELLER, GObject)
struct _LightwoodWebViewSpellerInterface {
GTypeInterface parent;
void (*show) (LightwoodWebViewSpeller* self,const gchar* prompt,const gchar* default_text);
gboolean (*hide) (LightwoodWebViewSpeller* self);
gboolean (*is_shown) (LightwoodWebViewSpeller* self);
void (*attach) (LightwoodWebViewSpeller* self,ClutterActor *actor);
/* Padding for future expansion */
void (*_lightwood_reserved0) (void);
void (*_lightwood_reserved1) (void);
};
void lightwood_webview_speller_show (LightwoodWebViewSpeller* self,const gchar* prompt,const gchar* default_text);
gboolean lightwood_webview_speller_hide (LightwoodWebViewSpeller* self);
gboolean lightwood_webview_speller_is_shown (LightwoodWebViewSpeller* self);
G_END_DECLS
#endif
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-webview_assistant.h */
#ifndef _LIGHTWOOD_WEBVIEW_ASSISTANT_H
#define _LIGHTWOOD_WEBVIEW_ASSISTANT_H
#include <glib-object.h>
#include <clutter/clutter.h>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
#include <webkit/webkitiwebview.h>
#pragma GCC diagnostic pop
#include <webkit/mx-web-view.h>
#include <webkitdom/webkitdom.h>
#include <webkit/webkitirendertheme.h>
#include "liblightwood-iwebview-speller.h"
/**
* SECTION:lightwood_webview_assistant
* @Title:LightwoodWebviewAssistant
* @short_description: Assistant to create webview widget.
*/
typedef struct _LightwoodWebviewAssistant LightwoodWebviewAssistant;
/**
* LightwoodWebviewAssistant:
* @popupmenu_factory: pointer to popup_menu creation
* @alert_handler_factory:pointer to alert handler creation
* @speller_factory: Ponter to speller creation
* @m_renderTheme: Pointer to theme creation
* @m_soupAuth_handler: Pointer to soup authentication handler creation
*
* The structure will have all the widgets references for creation of the webview widget.
*/
struct _LightwoodWebviewAssistant
{
/* pointer to popup_menu creation,which includes customized roller population.*/
WebKitIPopupMenu* (*popupmenu_factory) (gfloat width,gfloat height);
/* pointer to alert handler creation,which includes alert popups */
GObject* (*alert_handler_factory) (ClutterActor *parent, const gchar* app_name, ClutterActor *web_view);
/* pointer to speller creation */
LightwoodWebViewSpeller* (*speller_factory) (gboolean is_prompt,gboolean is_authenticate);
/* pointer to theme for the widget */
WebKitIRenderTheme* m_renderTheme;
/* pointer to soup authentication handler */
SoupSessionFeature* m_soupAuth_handler;
};
#endif /* _LIGHTWOOD_WEBVIEW_ASSISTANT_H */
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <glib-object.h>
#ifdef G_ENABLE_DEBUG
#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
#define g_marshal_value_peek_char(v) g_value_get_char (v)
#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
#define g_marshal_value_peek_int(v) g_value_get_int (v)
#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
#define g_marshal_value_peek_long(v) g_value_get_long (v)
#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
#define g_marshal_value_peek_float(v) g_value_get_float (v)
#define g_marshal_value_peek_double(v) g_value_get_double (v)
#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
#define g_marshal_value_peek_param(v) g_value_get_param (v)
#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
#define g_marshal_value_peek_object(v) g_value_get_object (v)
#define g_marshal_value_peek_variant(v) g_value_get_variant (v)
#else /* !G_ENABLE_DEBUG */
/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
* Do not access GValues directly in your code. Instead, use the
* g_value_get_*() functions
*/
#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
#define g_marshal_value_peek_char(v) (v)->data[0].v_int
#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
#define g_marshal_value_peek_int(v) (v)->data[0].v_int
#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
#define g_marshal_value_peek_long(v) (v)->data[0].v_long
#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
#define g_marshal_value_peek_float(v) (v)->data[0].v_float
#define g_marshal_value_peek_double(v) (v)->data[0].v_double
#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer
#endif /* !G_ENABLE_DEBUG */
/* BOOLEAN:OBJECT (1.list:1) */
void
lightwood_webview_marshal_BOOLEAN__OBJECT (GClosure *closure,
GValue *return_value G_GNUC_UNUSED,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint G_GNUC_UNUSED,
gpointer marshal_data)
{
typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT) (gpointer data1,
gpointer arg_1,
gpointer data2);
register GMarshalFunc_BOOLEAN__OBJECT callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
gboolean v_return;
g_return_if_fail (return_value != NULL);
g_return_if_fail (n_param_values == 2);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_BOOLEAN__OBJECT) (marshal_data ? marshal_data : cc->callback);
v_return = callback (data1,
g_marshal_value_peek_object (param_values + 1),
data2);
g_value_set_boolean (return_value, v_return);
}
void
lightwood_webview_marshal_BOOLEAN__BOOLEAN (GClosure *closure,
GValue *return_value G_GNUC_UNUSED,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint G_GNUC_UNUSED,
gpointer marshal_data)
{
typedef gboolean (*GMarshalFunc_BOOLEAN__BOOLEAN) (gpointer data1,
gboolean arg_1,
gpointer data2);
register GMarshalFunc_BOOLEAN__BOOLEAN callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
gboolean v_return;
g_return_if_fail (return_value != NULL);
g_return_if_fail (n_param_values == 2);
if (G_CCLOSURE_SWAP_DATA (closure))
{
data1 = closure->data;
data2 = g_value_peek_pointer (param_values + 0);
}
else
{
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
callback = (GMarshalFunc_BOOLEAN__BOOLEAN) (marshal_data ? marshal_data : cc->callback);
v_return = callback (data1,
g_marshal_value_peek_boolean (param_values + 1),
data2);
g_value_set_boolean (return_value, v_return);
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef __lightwood_webview_marshal_MARSHAL_H__
#define __lightwood_webview_marshal_MARSHAL_H__
#include <glib-object.h>
G_BEGIN_DECLS
/* BOOLEAN:OBJECT (1.list:1) */
extern void lightwood_webview_marshal_BOOLEAN__OBJECT (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
/* BOOLEAN:BOOLEAN (/dev/stdin:1) */
extern void lightwood_webview_marshal_BOOLEAN__BOOLEAN (GClosure *closure,
GValue *return_value,
guint n_param_values,
const GValue *param_values,
gpointer invocation_hint,
gpointer marshal_data);
G_END_DECLS
#endif /* __lightwood_webview_marshal_MARSHAL_H__ */
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-web-view-widget-audio-manager.c */
#include "liblightwood-webview-widget-audio-manager.h"
#include "liblightwood-webview.h"
#include "liblightwood-webview-widget.h"
G_DEFINE_TYPE (LightwoodWebViewWidgetAudioManager, lightwood_webview_widget_audio_manager, G_TYPE_OBJECT)
enum
{
PROP_0,
PROP_AUDIO_STATUS,
PROP_LAST,
};
GParamSpec* properties[PROP_LAST];
enum
{
AUDIO_REQUESTED,
AUDIO_STATUS_CHANGE,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0, };
#define WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER, LightwoodWebViewWidgetAudioManagerPrivate))
struct _LightwoodWebViewWidgetAudioManagerPrivate
{
WebKitDOMHTMLMediaElement* m_mediaElement;
gboolean m_is_audio_progress;
/* gboolean m_is_audio_requested;
gboolean m_audio_resource_given;*/
LightwoodWebViewAudioRequest m_audio_request;
LightwoodWebViewAudioStatus m_audio_status;
};
static void
_lightwood_webview_widget_audio_manager_set_audio_progress (LightwoodWebViewWidgetAudioManager *self,LightwoodWebViewAudioStatus is_playing);
static void
_lightwood_webview_widget_audio_manager_refresh_audio_status (LightwoodWebViewWidgetAudioManager *self);
static void
lightwood_webview_widget_audio_manager_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
LightwoodWebViewWidgetAudioManager *self = LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER(object);
switch (property_id)
{
case PROP_AUDIO_STATUS:
{
g_value_set_int(value,self->priv->m_audio_status);
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
lightwood_webview_widget_audio_manager_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
LightwoodWebViewWidgetAudioManager *self = LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER(object);
switch (property_id)
{
case PROP_AUDIO_STATUS:
{
_lightwood_webview_widget_audio_manager_set_audio_progress(self,g_value_get_int(value));
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
lightwood_webview_widget_audio_manager_dispose (GObject *object)
{
LightwoodWebViewWidgetAudioManager *self = LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER(object);
if(self->priv->m_mediaElement && self->priv->m_audio_status != LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED)
{
//_lightwood_webview_widget_audio_manager_set_audio_progress(self,FALSE);
lightwood_webview_widget_audio_manager_stop_audio(self);
}
self->priv->m_mediaElement = NULL;
G_OBJECT_CLASS (lightwood_webview_widget_audio_manager_parent_class)->dispose (object);
}
static void
lightwood_webview_widget_audio_manager_class_init (LightwoodWebViewWidgetAudioManagerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (LightwoodWebViewWidgetAudioManagerPrivate));
object_class->get_property = lightwood_webview_widget_audio_manager_get_property;
object_class->set_property = lightwood_webview_widget_audio_manager_set_property;
object_class->dispose = lightwood_webview_widget_audio_manager_dispose;
/**
* LightwoodWebViewWidgetAudioManager:audio_status:
*
* whether the form assistance should be enabled.
* if set to FALSE the virtual keyboard will not be shown for focus on text entry elements.
**/
properties[PROP_AUDIO_STATUS] = g_param_spec_int( "audio_status",
"audio_progress",
"audio_progress",
0,
LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PAUSED,
LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_AUDIO_STATUS, properties[PROP_AUDIO_STATUS]);
signals[AUDIO_STATUS_CHANGE] =
g_signal_new ("audio_mgr_status_change",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,0);
/* signals[AUDIO_REQUESTED] =
g_signal_new ("audio_requested",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);*/
}
static void
lightwood_webview_widget_audio_manager_init (LightwoodWebViewWidgetAudioManager *self)
{
self->priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE (self);
self->priv->m_mediaElement = NULL;
self->priv->m_audio_status =LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED;
self->priv->m_audio_request =LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_NONE;
}
LightwoodWebViewWidgetAudioManager *
lightwood_webview_widget_audio_manager_new (void)
{
return g_object_new (LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER, NULL);
}
static void
_lightwood_webview_widget_audio_manager_set_audio_progress(LightwoodWebViewWidgetAudioManager *self,LightwoodWebViewAudioStatus state)
{
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
if(priv->m_audio_status != state)
{
priv->m_audio_status = state;
g_print("\n !!!!!!!!!received media state change notification %d......",priv->m_audio_status);
//g_object_notify_by_pspec(G_OBJECT(self),properties[PROP_AUDIO_PROGRESS]);
//g_object_notify_by_pspec(G_OBJECT(self),properties[PROP_AUDIO_STATUS]);
g_signal_emit_by_name(G_OBJECT(self),"audio_mgr_status_change");
}
}
/*static gboolean lightwood_webview_widget_audio_manager_pause_audio_cb (LightwoodWebViewWidgetAudioManager *self)
{
g_print("\n pause audio..");
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
if(priv->m_mediaElement)
webkit_dom_html_media_element_pause(priv->m_mediaElement);
return FALSE;
}*/
static void
_lightwood_webview_widget_audio_manager_audio_state_change_cb(WebKitDOMHTMLMediaElement* node,WebKitDOMEvent* event,LightwoodWebViewWidgetAudioManager *self)
{
// LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
// gboolean is_playing = !(webkit_dom_html_media_element_get_paused(node) || webkit_dom_html_media_element_get_ended(node));
/*
if(is_playing)
{
//its a play back request
if(!priv->m_audio_resource_given)
{
g_timeout_add(0,lightwood_webview_widget_audio_manager_pause_audio_cb,self);
if(!priv->m_is_audio_requested)
g_signal_emit(self,signals[AUDIO_REQUESTED],0);
priv->m_is_audio_requested = TRUE;
}
else //play back state change
{
}
}
if(priv->m_audio_resource_given)
*/
_lightwood_webview_widget_audio_manager_refresh_audio_status(self);
self->priv->m_audio_request =LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_NONE;
}
gboolean lightwood_webview_widget_audio_manager_initialize (LightwoodWebViewWidgetAudioManager *self,WebKitWebPage* webPage)
{
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
g_print("\n Webpage Audio Management ENabed!!!!!");
WebKitDOMHTMLMediaElement* old_element = priv->m_mediaElement;
priv->m_mediaElement = NULL;
priv->m_audio_request =LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_NONE;
gboolean media_element_found = FALSE;
WebKitDOMDocument* doc = webkit_web_page_get_dom_document(webPage);
WebKitDOMNode* root_element = (WebKitDOMNode*)webkit_dom_document_get_document_element(doc);
WebKitDOMXPathNSResolver* ns_resolver = webkit_dom_document_create_ns_resolver(doc,root_element);
WebKitDOMXPathResult* xpath_result = webkit_dom_document_evaluate(doc,"/html/body//audio",root_element,ns_resolver,0,NULL,NULL);
if(xpath_result != NULL)
{
priv->m_mediaElement = (WebKitDOMHTMLMediaElement*)webkit_dom_xpath_result_iterate_next(xpath_result,NULL);
media_element_found = ((priv->m_mediaElement != NULL) && WEBKIT_DOM_IS_HTML_MEDIA_ELEMENT(priv->m_mediaElement));
}
if(!media_element_found)
{
xpath_result = webkit_dom_document_evaluate(doc,"/html/body//video",root_element,ns_resolver,0,NULL,NULL);
if(xpath_result != NULL)
{
priv->m_mediaElement = (WebKitDOMHTMLMediaElement*)webkit_dom_xpath_result_iterate_next(xpath_result,NULL);
media_element_found = ((priv->m_mediaElement != NULL) && WEBKIT_DOM_IS_HTML_MEDIA_ELEMENT(priv->m_mediaElement));
}
}
if(media_element_found)
{
if( priv->m_mediaElement != old_element)
{
if(old_element)
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED);
webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(priv->m_mediaElement),"pause",G_CALLBACK(_lightwood_webview_widget_audio_manager_audio_state_change_cb),FALSE,self);
webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(priv->m_mediaElement),"play",G_CALLBACK(_lightwood_webview_widget_audio_manager_audio_state_change_cb),FALSE,self);
webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(priv->m_mediaElement),"ended",G_CALLBACK(_lightwood_webview_widget_audio_manager_audio_state_change_cb),FALSE,self);
}
if(!(webkit_dom_html_media_element_get_paused(priv->m_mediaElement) || webkit_dom_html_media_element_get_ended(priv->m_mediaElement)))
_lightwood_webview_widget_audio_manager_refresh_audio_status(self);
}
else if(old_element)
{
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED);
priv->m_mediaElement = NULL;
}
return media_element_found;
}
void lightwood_webview_widget_audio_manager_play_audio (LightwoodWebViewWidgetAudioManager *self)
{
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
g_print("\n resuming audio....");
if(priv->m_mediaElement && (priv->m_audio_status != LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PLAYING))
{
priv->m_audio_request =LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_PLAY;
webkit_dom_html_media_element_play(priv->m_mediaElement);
}
}
void lightwood_webview_widget_audio_manager_pause_audio (LightwoodWebViewWidgetAudioManager *self)
{
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
_lightwood_webview_widget_audio_manager_refresh_audio_status(self);
if(priv->m_mediaElement && (priv->m_audio_status == LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PLAYING))
{
priv->m_audio_request =LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_PAUSE;
webkit_dom_html_media_element_pause(priv->m_mediaElement);
}
}
void lightwood_webview_widget_audio_manager_stop_audio (LightwoodWebViewWidgetAudioManager *self)
{
LightwoodWebViewWidgetAudioManagerPrivate* priv = WEBVIEW_WIDGET_AUDIO_MANAGER_PRIVATE(self);
g_print("\n stop audio api called....");
_lightwood_webview_widget_audio_manager_refresh_audio_status(self);
if(priv->m_mediaElement && (priv->m_audio_status != LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED))
{
priv->m_audio_request = LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_STOP;
if(priv->m_audio_status == LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PAUSED)
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED);
else
{
g_print("\n stopping audio....");
webkit_dom_html_media_element_pause(priv->m_mediaElement);
}
}
}
static void
_lightwood_webview_widget_audio_manager_refresh_audio_status (LightwoodWebViewWidgetAudioManager *self)
{
WebKitDOMHTMLMediaElement* node = self->priv->m_mediaElement;
if(!node) return;
g_print("\n _lightwood_webview_widget_audio_manager_refresh_audio_status....");
if(!(webkit_dom_html_media_element_get_paused(node) || webkit_dom_html_media_element_get_ended(node)))
{
g_print("--playing\n");
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PLAYING);
}
else
{
if(webkit_dom_html_media_element_get_ended(node))
{
g_print("--ended\n");
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED);
}
else
{
if(self->priv->m_audio_request == LIGHTWOOD_WEBVIEW_AUDIO_REQUEST_PAUSE)
{
g_print("--paused\n");
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_PAUSED);
}
else
{
g_print("--ended\n");
_lightwood_webview_widget_audio_manager_set_audio_progress(self,LIGHTWOOD_WEBVIEW_AUDIO_STATUS_ENDED);
}
}
}
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-web-view-widget-audio-manager.h */
#ifndef _LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER_H
#define _LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER_H
#include <glib-object.h>
#include <webkit/webkitwebpage.h>
G_BEGIN_DECLS
#define LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER lightwood_webview_widget_audio_manager_get_type()
#define LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER, LightwoodWebViewWidgetAudioManager))
#define LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER, LightwoodWebViewWidgetAudioManagerClass))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_AUDIO_MANAGER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_AUDIO_MANAGER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER))
#define LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_AUDIO_MANAGER, LightwoodWebViewWidgetAudioManagerClass))
typedef struct _LightwoodWebViewWidgetAudioManager LightwoodWebViewWidgetAudioManager;
typedef struct _LightwoodWebViewWidgetAudioManagerClass LightwoodWebViewWidgetAudioManagerClass;
typedef struct _LightwoodWebViewWidgetAudioManagerPrivate LightwoodWebViewWidgetAudioManagerPrivate;
struct _LightwoodWebViewWidgetAudioManager
{
GObject parent;
LightwoodWebViewWidgetAudioManagerPrivate *priv;
};
struct _LightwoodWebViewWidgetAudioManagerClass
{
GObjectClass parent_class;
};
GType lightwood_webview_widget_audio_manager_get_type (void) G_GNUC_CONST;
LightwoodWebViewWidgetAudioManager *lightwood_webview_widget_audio_manager_new (void);
gboolean lightwood_webview_widget_audio_manager_initialize (LightwoodWebViewWidgetAudioManager *self,WebKitWebPage* webPage);
void lightwood_webview_widget_audio_manager_pause_audio (LightwoodWebViewWidgetAudioManager *self);
void lightwood_webview_widget_audio_manager_play_audio (LightwoodWebViewWidgetAudioManager *self);
void lightwood_webview_widget_audio_manager_stop_audio (LightwoodWebViewWidgetAudioManager *self);
G_END_DECLS
#endif /* _LIGHTWOOD_WEBVIEW_WIDGET_AUDIO_MANAGER_H */
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* SECTION: lightwood_webview_widget_dl
* @short_description: a convenience library for dynamic loading of #LightwoodWebViewWidget instance.
* @title: liblightwood WebViewWidgetDL
* @stability: stable
* @include:lightwood_webview_widget_dl.h
*
*if the application directly links to webviewwidget the startup time may be little high due to webkit loading-linking.
*So the app can use the apis here to create the webviewwidget and hence load webkit when needed at runtime.
*
*/
#include <liblightwood-webview-widget-dl.h>
#include <gmodule.h>
static gpointer _lightwood_webview_widget_dl_find_func(const gchar* name)
{
static GModule* webview_widget = NULL;
if(!webview_widget)
{
gchar *libPath = g_module_build_path(PKGLIBDIR, "liblightwoodwebviewwidget");
if(libPath != NULL)
webview_widget = g_module_open(libPath, G_MODULE_BIND_LOCAL);
}
if(webview_widget == NULL)
{
const gchar* error = g_module_error();
g_warning("## Webview widget Module load error=%s\n", error);
return NULL;
}
gpointer pfunc = NULL;
g_module_symbol(webview_widget,name,&pfunc);
if(!pfunc)
g_warning("## Webview widget symbol not found, error=%s\n", g_module_error());
return pfunc;
}
typedef ClutterActor* (*lightwood_webview_widget_new_func)(const gchar* app_name);
ClutterActor* lightwood_webview_widget_dl_new (const gchar* app_name)
{
if (! g_module_supported ())
{
g_warning("Webview widget ERROR: Module not supported\n");
return NULL;
}
static lightwood_webview_widget_new_func pfunc= NULL;
if(!pfunc)
pfunc = _lightwood_webview_widget_dl_find_func("lightwood_webview_widget_new");
return pfunc(app_name);
}
typedef ClutterActor* (*lightwood_webview_widget_get_webview_func)(ClutterActor* self);
/**
* lightwood_webview_widget_dl_get_webview:
* @self: a #LightwoodWebViewWidget
*
* FIXME
*
* Return: (transfer none): the web view
*/
ClutterActor* lightwood_webview_widget_dl_get_webview(ClutterActor* self)
{
static lightwood_webview_widget_get_webview_func pfunc= NULL;
if(!pfunc)
pfunc = _lightwood_webview_widget_dl_find_func("lightwood_webview_widget_get_webview");
return pfunc(self);
}
typedef void (*lightwood_webview_widget_load_url_func) (ClutterActor* self,const gchar* url);
void lightwood_webview_widget_dl_load_url (ClutterActor* self,const gchar* url)
{
static lightwood_webview_widget_load_url_func pfunc= NULL;
if(!pfunc)
pfunc = _lightwood_webview_widget_dl_find_func("lightwood_webview_widget_load_url");
pfunc(self,url);
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-web-view-widget-dl.h */
#ifndef _LIGHTWOOD_WEBVIEW_WIDGET_DL_H
#define _LIGHTWOOD_WEBVIEW_WIDGET_DL_H
#include <glib-object.h>
#include <clutter/clutter.h>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
#include <mx/mx.h>
#pragma GCC diagnostic pop
G_BEGIN_DECLS
typedef enum {
WEBKIT_LOAD_PROVISIONAL,
WEBKIT_LOAD_COMMITTED,
WEBKIT_LOAD_FINISHED,
WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT,
WEBKIT_LOAD_FAILED
} WebKitLoadStatus;
ClutterActor* lightwood_webview_widget_dl_new (const gchar* app_name);
ClutterActor* lightwood_webview_widget_dl_get_webview(ClutterActor* self);
void lightwood_webview_widget_dl_load_url (ClutterActor* self,const gchar* url);
G_END_DECLS
#endif /* _LIGHTWOOD_WEBVIEW_WIDGET_DL_H */
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-web-view-widget-fsvideo-player.c */
#include "liblightwood-webview-widget-fsvideo-player.h"
//#include "liblightwood_webview_widget.h"
#include "liblightwood-webview.h"
static gboolean
_lightwood_webview_widget_fsvideo_player_media_buttonReleaseOnTexture(ClutterActor* texture, ClutterEvent* event, LightwoodWebViewWidgetFSVideoPlayer *self);
static gboolean
_lightwood_webview_widget_fsvideo_player_media_exited_fullscreen_cb(WebKitWebActor* webActor, ClutterActor* texture,LightwoodWebViewWidgetFSVideoPlayer *self);
static gboolean
_lightwood_webview_widget_fsvideo_player_media_fullscreen_cb(WebKitWebActor* webActor, WebKitDOMHTMLElement* element, ClutterActor* texture,LightwoodWebViewWidgetFSVideoPlayer *self);
extern void webkit_web_page_request_exit_fullscreen_media(WebKitWebPage*);
G_DEFINE_TYPE (LightwoodWebViewWidgetFSVideoPlayer, lightwood_webview_widget_fsvideo_player, G_TYPE_OBJECT)
#define WEBVIEW_WIDGET_FSVIDEO_PLAYER_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER, LightwoodWebViewWidgetFSVideoPlayerPrivate))
struct _LightwoodWebViewWidgetFSVideoPlayerPrivate
{
ClutterActor *m_webview;
ClutterActor *texture_parent;
WebKitDOMHTMLElement* element;
};
static void
lightwood_webview_widget_fsvideo_player_dispose (GObject *object)
{
LightwoodWebViewWidgetFSVideoPlayer *self=LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER(object);
g_object_unref(self->priv->m_webview);
G_OBJECT_CLASS (lightwood_webview_widget_fsvideo_player_parent_class)->dispose (object);
}
static void
lightwood_webview_widget_fsvideo_player_class_init (LightwoodWebViewWidgetFSVideoPlayerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (LightwoodWebViewWidgetFSVideoPlayerPrivate));
object_class->dispose = lightwood_webview_widget_fsvideo_player_dispose;
}
static void
lightwood_webview_widget_fsvideo_player_init (LightwoodWebViewWidgetFSVideoPlayer *self)
{
self->priv = WEBVIEW_WIDGET_FSVIDEO_PLAYER_PRIVATE (self);
}
LightwoodWebViewWidgetFSVideoPlayer *
lightwood_webview_widget_fsvideo_player_new (void)
{
return g_object_new (LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER, NULL);
}
void lightwood_webview_widget_fsvideo_player_initialize(LightwoodWebViewWidgetFSVideoPlayer *self,ClutterActor *webview)
{
self->priv->m_webview=webview;
webkit_iweb_view_get_page(WEBKIT_IWEB_VIEW(self->priv->m_webview));
g_object_connect (self->priv->m_webview,
"signal::media-fullscreen",G_CALLBACK(_lightwood_webview_widget_fsvideo_player_media_fullscreen_cb), self,
"signal::media-exit-fullscreen",G_CALLBACK(_lightwood_webview_widget_fsvideo_player_media_exited_fullscreen_cb), self,
NULL);
}
static void
_lightwood_webview_widget_fsvideo_player_media_fs_exit_cb(
ClutterActor *texture,LightwoodWebViewWidgetFSVideoPlayer *self)
{
ClutterActor* parent_actor= clutter_actor_get_parent(texture);
clutter_actor_remove_child(parent_actor, texture);
//clutter_actor_add_child(self->priv->m_webview, texture);
webkit_web_page_request_exit_fullscreen_media(webkit_iweb_view_get_page((WebKitIWebView*)self->priv->m_webview));
webkit_dom_html_media_element_play(WEBKIT_DOM_HTML_MEDIA_ELEMENT(self->priv->element));
/* disconnect so we don't get multiple notifications */
g_signal_handlers_disconnect_by_func (texture,
_lightwood_webview_widget_fsvideo_player_media_fs_exit_cb,
self);
}
static gboolean
_lightwood_webview_widget_fsvideo_player_media_buttonReleaseOnTexture(ClutterActor* texture, ClutterEvent* event,LightwoodWebViewWidgetFSVideoPlayer *self)
{
//ENTRY_TRACE
webkit_dom_html_media_element_pause(WEBKIT_DOM_HTML_MEDIA_ELEMENT(self->priv->element));
glong element_width,element_height;
element_width = webkit_dom_element_get_offset_width(WEBKIT_DOM_ELEMENT(self->priv->element));
element_height = webkit_dom_element_get_offset_height(WEBKIT_DOM_ELEMENT(self->priv->element));
glong offset_x,offset_y;
offset_x=(glong)g_object_get_data(G_OBJECT(texture),"element_x");
offset_y=(glong)g_object_get_data(G_OBJECT(texture),"element_y");
/* g_signal_connect_after(
clutter_actor_animate(texture, CLUTTER_LINEAR, 1000,
"width", (gfloat)element_width,
"height",(gfloat)element_height,
"x",(gfloat)offset_x,
"y",(gfloat)offset_y,
NULL),
"completed",G_CALLBACK(_lightwood_webview_widget_fsvideo_player_media_fs_exit_cb),element);*/
clutter_actor_save_easing_state (texture);
clutter_actor_set_easing_mode(texture,CLUTTER_LINEAR);
clutter_actor_set_easing_duration(texture,500);
clutter_actor_set_size (texture, element_width,element_height);
clutter_actor_set_position (texture, offset_x,offset_y);
clutter_actor_restore_easing_state (texture);
g_signal_connect (texture,
"transitions-completed",
G_CALLBACK (_lightwood_webview_widget_fsvideo_player_media_fs_exit_cb),
self);
return TRUE;
}
static gboolean _lightwood_webview_widget_fsvideo_player_media_touch_events_cb(ClutterActor *actor,ClutterEvent *event,gpointer userdata)
{
LightwoodWebViewWidgetFSVideoPlayer *self=(LightwoodWebViewWidgetFSVideoPlayer *)userdata;
switch(event->type)
{
case CLUTTER_TOUCH_BEGIN:
{
_lightwood_webview_widget_fsvideo_player_media_buttonReleaseOnTexture(actor,event,self);
break;
}
default:break;
}
return FALSE;
}
static gboolean
_lightwood_webview_widget_fsvideo_player_media_fullscreen_cb(WebKitWebActor* webActor, WebKitDOMHTMLElement* element, ClutterActor* texture,LightwoodWebViewWidgetFSVideoPlayer *self)
{
//ENTRY_TRACE
// LightwoodWebViewWidgetPrivate* priv = WEBVIEW_WIDGET_PRIVATE(self);
// webkit_dom_html_media_element_pause(WEBKIT_DOM_HTML_MEDIA_ELEMENT(element));
int page_offset_x, page_offset_y;
glong abs_x, abs_y;
glong element_width,element_height;
self->priv->element=element;
WebKitWebPage* webPage = webkit_iweb_view_get_page(WEBKIT_IWEB_VIEW(webActor));
WebKitWebFrame* webFrame = webkit_web_page_get_main_frame(webPage);
element_width = webkit_dom_element_get_offset_width(WEBKIT_DOM_ELEMENT(element));
element_height = webkit_dom_element_get_offset_height(WEBKIT_DOM_ELEMENT(element));
webkit_web_frame_get_scroll_offset(webFrame, &page_offset_x, &page_offset_y);
lightwood_webview_get_absolute_offset_for_element(WEBKIT_DOM_ELEMENT(element),1.0, &abs_x, &abs_y);
self->priv->texture_parent=clutter_actor_get_parent(texture);
clutter_actor_set_reactive(texture, TRUE);
clutter_actor_remove_child(self->priv->texture_parent,texture);
g_signal_connect(texture, "button-press-event",
G_CALLBACK(_lightwood_webview_widget_fsvideo_player_media_buttonReleaseOnTexture), self);
g_signal_connect(texture, "touch-event",
G_CALLBACK(_lightwood_webview_widget_fsvideo_player_media_touch_events_cb), self);
ClutterActor *parent=clutter_actor_get_parent(self->priv->m_webview);
g_assert(CLUTTER_IS_ACTOR(self->priv->m_webview)&&(self->priv->m_webview));
clutter_actor_add_child(parent, texture);
//clutter_actor_set_opacity(texture,0xff);
clutter_actor_set_position(texture,abs_x-page_offset_x,abs_y-page_offset_y);
clutter_actor_set_size(texture,element_width,element_height);
g_object_set_data(G_OBJECT(texture),"element",(gpointer)(element));
g_object_set_data(G_OBJECT(texture),"element_x",(gpointer)(abs_x-page_offset_x));
g_object_set_data(G_OBJECT(texture),"element_y",(gpointer)(abs_y-page_offset_y));
/*
clutter_actor_animate(texture, CLUTTER_LINEAR, 1000,
"width", clutter_actor_get_width(CLUTTER_ACTOR(self->priv->m_webview)),
"height", clutter_actor_get_height(CLUTTER_ACTOR(self->priv->m_webview)),
"x",0.0,
"y",0.0,
NULL);
*/
clutter_actor_save_easing_state (texture);
clutter_actor_set_easing_mode(texture,CLUTTER_LINEAR);
clutter_actor_set_easing_duration(texture,500);
clutter_actor_set_size (texture,
clutter_actor_get_width(CLUTTER_ACTOR(parent)),
clutter_actor_get_height(CLUTTER_ACTOR(parent)));
clutter_actor_set_position (texture, 0.0,0.0);
clutter_actor_restore_easing_state (texture);
//webkit_dom_html_media_element_play(WEBKIT_DOM_HTML_MEDIA_ELEMENT(element));
return TRUE;
}
static gboolean
_lightwood_webview_widget_fsvideo_player_media_exited_fullscreen_cb(WebKitWebActor* webActor, ClutterActor* texture,LightwoodWebViewWidgetFSVideoPlayer *self)
{
//ENTRY_TRACE
g_print("\n _lightwood_webview_widget_fsvideo_player_media_exited_fullscreen_cb");
// WebKitDOMHTMLElement* element = g_object_get_data(G_OBJECT(texture),"element");
//clutter_actor_hide(texture);
//clutter_container_remove_actor(CLUTTER_CONTAINER(self->priv->m_webview), texture);
//webkit_dom_html_media_element_play(WEBKIT_DOM_HTML_MEDIA_ELEMENT(element));
return FALSE;
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-web-view-widget-fsvideo-player.h */
#ifndef _LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER_H
#define _LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER_H
#include <glib-object.h>
#include <clutter/clutter.h>
G_BEGIN_DECLS
#define LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER lightwood_webview_widget_fsvideo_player_get_type()
#define LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER, LightwoodWebViewWidgetFSVideoPlayer))
#define LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER, LightwoodWebViewWidgetFSVideoPlayerClass))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_FSVIDEO_PLAYER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_FSVIDEO_PLAYER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER))
#define LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_FSVIDEO_PLAYER, LightwoodWebViewWidgetFSVideoPlayerClass))
typedef struct _LightwoodWebViewWidgetFSVideoPlayer LightwoodWebViewWidgetFSVideoPlayer;
typedef struct _LightwoodWebViewWidgetFSVideoPlayerClass LightwoodWebViewWidgetFSVideoPlayerClass;
typedef struct _LightwoodWebViewWidgetFSVideoPlayerPrivate LightwoodWebViewWidgetFSVideoPlayerPrivate;
struct _LightwoodWebViewWidgetFSVideoPlayer
{
GObject parent;
LightwoodWebViewWidgetFSVideoPlayerPrivate *priv;
};
struct _LightwoodWebViewWidgetFSVideoPlayerClass
{
GObjectClass parent_class;
};
GType lightwood_webview_widget_fsvideo_player_get_type (void) G_GNUC_CONST;
LightwoodWebViewWidgetFSVideoPlayer *lightwood_webview_widget_fsvideo_player_new (void);
void lightwood_webview_widget_fsvideo_player_initialize(LightwoodWebViewWidgetFSVideoPlayer *self,ClutterActor *webview);
G_END_DECLS
#endif /* _LIGHTWOOD_WEBVIEW_WIDGET_FSVIDEO_PLAYER_H */
This diff is collapsed.
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-webview-widget-gesture-handler.h */
#ifndef _LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER_H
#define _LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER_H
#include <glib-object.h>
#include <clutter/clutter.h>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
#include <mx/mx.h>
#pragma GCC diagnostic pop
#include "liblightwood-webview-widget.h"
G_BEGIN_DECLS
#define LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER lightwood_webview_widget_gesture_handler_get_type()
#define LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER, LightwoodWebViewWidgetGestureHandler))
#define LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER, LightwoodWebViewWidgetGestureHandlerClass))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_GESTURE_HANDLER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_GESTURE_HANDLER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER))
#define LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_GESTURE_HANDLER, LightwoodWebViewWidgetGestureHandlerClass))
typedef struct _LightwoodWebViewWidgetGestureHandler LightwoodWebViewWidgetGestureHandler;
typedef struct _LightwoodWebViewWidgetGestureHandlerClass LightwoodWebViewWidgetGestureHandlerClass;
typedef struct _LightwoodWebViewWidgetGestureHandlerPrivate LightwoodWebViewWidgetGestureHandlerPrivate;
struct _LightwoodWebViewWidgetGestureHandler
{
GObject parent;
LightwoodWebViewWidgetGestureHandlerPrivate *priv;
};
struct _LightwoodWebViewWidgetGestureHandlerClass
{
GObjectClass parent_class;
};
GType lightwood_webview_widget_gesture_handler_get_type (void) G_GNUC_CONST;
LightwoodWebViewWidgetGestureHandler *lightwood_webview_widget_gesture_handler_new (LightwoodWebViewWidget *webview_widget);
void lightwood_webview_widget_gesture_handler_enable_gesture(LightwoodWebViewWidgetGestureHandler* self,gboolean is_enabled);
G_END_DECLS
#endif /* _LIGHTWOOD_WEBVIEW_WIDGET_GESTURE_HANDLER_H */
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-webview-widget-pdf-viewer.c */
#include "liblightwood-webview-widget-pdf-viewer.h"
#include <glib/poppler.h>
#include <cairo.h>
#include <stdlib.h>
#include <math.h>
G_DEFINE_TYPE (LightwoodWebViewWidgetPdfViewer, lightwood_webview_widget_pdf_viewer, MX_TYPE_KINETIC_SCROLL_VIEW)
#define WEBVIEW_WIDGET_PDF_VIEWER_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER, LightwoodWebViewWidgetPdfViewerPrivate))
struct _LightwoodWebViewWidgetPdfViewerPrivate
{
ClutterCanvas* m_pdf_canvas;
ClutterActor* m_pdf_actor;
PopplerDocument* m_pdf_document;
guint m_idle_resize_id;
gfloat m_scale_factor;
};
static gboolean
_lightwood_webview_widget_pdf_viewer_render_pdf_cb(ClutterCanvas* texture,cairo_t* cr,gint childWidth,gint childHeight,LightwoodWebViewWidgetPdfViewer* self);
static void
lightwood_webview_widget_pdf_viewer_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
switch (property_id)
{
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
lightwood_webview_widget_pdf_viewer_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
switch (property_id)
{
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
lightwood_webview_widget_pdf_viewer_dispose (GObject *object)
{
G_OBJECT_CLASS (lightwood_webview_widget_pdf_viewer_parent_class)->dispose (object);
}
static void
lightwood_webview_widget_pdf_viewer_class_init (LightwoodWebViewWidgetPdfViewerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (LightwoodWebViewWidgetPdfViewerPrivate));
object_class->get_property = lightwood_webview_widget_pdf_viewer_get_property;
object_class->set_property = lightwood_webview_widget_pdf_viewer_set_property;
object_class->dispose = lightwood_webview_widget_pdf_viewer_dispose;
}
/*static gboolean
idle_resize_cb (LightwoodWebViewWidgetPdfViewer* self)
{
float width, height;
match the canvas size to the actor's
clutter_actor_get_size (self->priv->m_pdf_actor, &width, &height);
clutter_canvas_set_size (CLUTTER_CANVAS (clutter_actor_get_content (self->priv->m_pdf_actor)),
ceilf (width),
ceilf (height));
unset the guard
self->priv->m_idle_resize_id = 0;
remove the timeout
return G_SOURCE_REMOVE;
}*/
/*static void
lightwood_webview_widget_pdf_viewer_on_pdf_actor_resize_cb(ClutterActor* actor,const ClutterActorBox *allocation,
ClutterAllocationFlags flags,LightwoodWebViewWidgetPdfViewer* self)
{
throttle multiple actor allocations to one canvas resize; we use a guard
* variable to avoid queueing multiple resize operations
if (self->priv->m_idle_resize_id == 0)
self->priv->m_idle_resize_id = clutter_threads_add_timeout (1000, (GSourceFunc)idle_resize_cb, self);
}*/
static void
lightwood_webview_widget_pdf_viewer_init (LightwoodWebViewWidgetPdfViewer *self)
{
LightwoodWebViewWidgetPdfViewerPrivate* priv = self->priv = WEBVIEW_WIDGET_PDF_VIEWER_PRIVATE (self);
ClutterActor* view_port = mx_viewport_new();
//mx_bin_set_child(MX_BIN(self),view_port);
// mx_bin_set_fill(MX_BIN(self),TRUE,TRUE);
clutter_actor_add_child(CLUTTER_ACTOR(self),view_port);
clutter_actor_show(CLUTTER_ACTOR(self));
//clutter_actor_add_constraint(view_port,clutter_bind_constraint_new (self,CLUTTER_BIND_SIZE,0));
priv->m_scale_factor = 1.0;
priv->m_pdf_canvas = (ClutterCanvas*)clutter_canvas_new();
priv->m_pdf_actor = clutter_actor_new();
clutter_actor_set_content(priv->m_pdf_actor,CLUTTER_CONTENT(priv->m_pdf_canvas));
//mx_bin_set_child(MX_BIN(view_port),priv->m_pdf_actor);
//mx_bin_set_fill(MX_BIN(view_port),TRUE,TRUE);
clutter_actor_add_child(view_port,CLUTTER_ACTOR(priv->m_pdf_actor));
clutter_actor_show(view_port);
mx_viewport_set_sync_adjustments(MX_VIEWPORT(view_port),TRUE);
MxAdjustment *hadjustment, *vadjustment;
mx_scrollable_get_adjustments(MX_SCROLLABLE(self) ,&hadjustment,&vadjustment);
mx_adjustment_set_elastic(MX_ADJUSTMENT(hadjustment),TRUE);
mx_adjustment_set_elastic(MX_ADJUSTMENT(vadjustment),TRUE);
/* resize the canvas whenever the actor changes size */
// g_signal_connect (priv->m_pdf_actor, "allocation-changed", G_CALLBACK (lightwood_webview_widget_pdf_viewer_on_pdf_actor_resize_cb), self);
}
LightwoodWebViewWidgetPdfViewer *
lightwood_webview_widget_pdf_viewer_new (void)
{
return g_object_new (LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER, NULL);
}
/*typedef struct
{
PopplerPage* pdf_page;
cairo_t* cr;
}PageData;
static gboolean _lightwood_webview_widget_pdf_viewer_render_page(PageData* pdf_data)
{
double page_width,page_height;
poppler_page_get_size (pdf_data->pdf_page, &page_width, &page_height);
poppler_page_render (pdf_data->pdf_page, pdf_data->cr);
cairo_translate(pdf_data->cr,0,page_height+100);
g_object_unref (pdf_data->pdf_page);
g_free(pdf_data);
return G_SOURCE_REMOVE;
}*/
static gboolean
_lightwood_webview_widget_pdf_viewer_render_pdf_cb(ClutterCanvas* texture,cairo_t* cr,gint childWidth,gint childHeight,LightwoodWebViewWidgetPdfViewer* self)
{
LightwoodWebViewWidgetPdfViewerPrivate* priv = WEBVIEW_WIDGET_PDF_VIEWER_PRIVATE (self);
g_assert(priv->m_pdf_document != NULL);
gint num_pages = poppler_document_get_n_pages(priv->m_pdf_document);
gint i=0;
cairo_save(cr);
cairo_scale(cr,priv->m_scale_factor,priv->m_scale_factor);
double page_width,page_height;
for(i=0;i<num_pages;i++)
{
PopplerPage* pdf_page = poppler_document_get_page(priv->m_pdf_document,i);
poppler_page_get_size (pdf_page, &page_width, &page_height);
poppler_page_render (pdf_page, cr);
cairo_translate(cr,0.0,page_height);
g_object_unref (pdf_page);
/*PageData* pdf_data = g_new(PageData,1);
pdf_data->pdf_page = poppler_document_get_page(priv->m_pdf_document,i);
pdf_data->cr = cr;
g_timeout_add(3000,(GSourceFunc)_lightwood_webview_widget_pdf_viewer_render_page,pdf_data);*/
}
//cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
//cairo_set_source_rgb (cr, 1, 1, 1);
//cairo_paint (cr);
cairo_restore(cr);
return TRUE;
}
void lightwood_webview_widget_pdf_viewer_show(LightwoodWebViewWidgetPdfViewer* self,const gfloat scale_factor,const gchar* pdf_uri)
{
LightwoodWebViewWidgetPdfViewerPrivate* priv = WEBVIEW_WIDGET_PDF_VIEWER_PRIVATE (self);
MxAdjustment *hadjustment, *vadjustment;
mx_scrollable_get_adjustments(MX_SCROLLABLE(self) ,&hadjustment,&vadjustment);
gfloat cur_x = mx_adjustment_get_value(hadjustment)/priv->m_scale_factor;
gfloat cur_y = mx_adjustment_get_value(vadjustment)/priv->m_scale_factor;
priv->m_scale_factor = scale_factor;
g_print("\n trying to open %s %f",pdf_uri,scale_factor);
if(pdf_uri != NULL)
{
GError* error = NULL;
priv->m_pdf_document = poppler_document_new_from_file (pdf_uri, NULL, &error);
}
g_assert(priv->m_pdf_document != NULL);
gint num_pages = poppler_document_get_n_pages(priv->m_pdf_document);
g_print("\n num_pages %d",num_pages);
gint i=0;
double docWidth=0, docHeight=0;
for(i=0;i<num_pages;i++)
{
double page_width,page_height;
poppler_page_get_size (poppler_document_get_page(priv->m_pdf_document,i), &page_width, &page_height);
docWidth = MAX(docWidth,page_width);
docHeight += page_height;
}
gdouble canvas_width = docWidth*priv->m_scale_factor;
gdouble canvas_height = docHeight*priv->m_scale_factor;
//gdouble canvas_height = MIN(docHeight*priv->m_scale_factor,6000.0);
clutter_canvas_set_size(priv->m_pdf_canvas,ceilf(canvas_width),ceilf(canvas_height));
g_signal_connect(priv->m_pdf_canvas,"draw",(GCallback)_lightwood_webview_widget_pdf_viewer_render_pdf_cb,self);
clutter_content_invalidate(CLUTTER_CONTENT(priv->m_pdf_canvas));
g_signal_handlers_disconnect_by_data(priv->m_pdf_canvas,self);
clutter_actor_set_size(priv->m_pdf_actor,canvas_width,canvas_height);
gdouble viewportWidth,viewportHeight;
viewportHeight = clutter_actor_get_height(clutter_actor_get_parent(priv->m_pdf_actor));
viewportWidth = clutter_actor_get_width(clutter_actor_get_parent(priv->m_pdf_actor));
mx_adjustment_set_elastic(hadjustment,TRUE);
mx_adjustment_set_elastic(vadjustment,TRUE);
g_object_set(G_OBJECT(hadjustment),
"lower", 0.0,
"upper", (gdouble)(canvas_width > viewportWidth?canvas_width:viewportWidth),
"page-size", (gdouble)viewportWidth,
"page-increment", (gdouble)canvas_width / 3,
"step-increment", (gdouble)canvas_width / 12,
NULL);
g_object_set(G_OBJECT(vadjustment),
"lower", 0.0,
"upper", (gdouble)(canvas_height > viewportHeight?canvas_height:viewportHeight),
"page-size", (gdouble)viewportHeight,
"page-increment", (gdouble)canvas_height / 3,
"step-increment", (gdouble)canvas_height / 12,
NULL);
mx_adjustment_set_value(vadjustment,cur_y*priv->m_scale_factor);
mx_adjustment_set_value(hadjustment,cur_x*priv->m_scale_factor);
clutter_actor_show(CLUTTER_ACTOR(self));
}
void lightwood_webview_widget_pdf_viewer_hide(LightwoodWebViewWidgetPdfViewer* self)
{
clutter_actor_hide(CLUTTER_ACTOR(self));
}
gfloat lightwood_webview_widget_pdf_viewer_get_zoom_level(LightwoodWebViewWidgetPdfViewer* self)
{
return self->priv->m_scale_factor;
}
/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */
/*
* Copyright © 2015 Robert Bosch Car Multimedia GmbH
*
* SPDX-License-Identifier: MPL-2.0
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* liblightwood-webview-widget-pdf-viewer.h */
#ifndef _LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER_H
#define _LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER_H
#include <glib-object.h>
#include <clutter/clutter.h>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
#include <mx/mx.h>
#pragma GCC diagnostic pop
G_BEGIN_DECLS
#define LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER lightwood_webview_widget_pdf_viewer_get_type()
#define LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER, LightwoodWebViewWidgetPdfViewer))
#define LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER, LightwoodWebViewWidgetPdfViewerClass))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_PDF_VIEWER(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER))
#define LIGHTWOOD_IS_WEBVIEW_WIDGET_PDF_VIEWER_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER))
#define LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
LIGHTWOOD_TYPE_WEBVIEW_WIDGET_PDF_VIEWER, LightwoodWebViewWidgetPdfViewerClass))
typedef struct _LightwoodWebViewWidgetPdfViewer LightwoodWebViewWidgetPdfViewer;
typedef struct _LightwoodWebViewWidgetPdfViewerClass LightwoodWebViewWidgetPdfViewerClass;
typedef struct _LightwoodWebViewWidgetPdfViewerPrivate LightwoodWebViewWidgetPdfViewerPrivate;
struct _LightwoodWebViewWidgetPdfViewer
{
MxKineticScrollView parent;
LightwoodWebViewWidgetPdfViewerPrivate *priv;
};
struct _LightwoodWebViewWidgetPdfViewerClass
{
MxKineticScrollViewClass parent_class;
};
GType lightwood_webview_widget_pdf_viewer_get_type (void) G_GNUC_CONST;
LightwoodWebViewWidgetPdfViewer *lightwood_webview_widget_pdf_viewer_new (void);
void lightwood_webview_widget_pdf_viewer_show(LightwoodWebViewWidgetPdfViewer* self,const gfloat scale_factor,const gchar* pdf_uri);
void lightwood_webview_widget_pdf_viewer_hide(LightwoodWebViewWidgetPdfViewer* self);
gfloat lightwood_webview_widget_pdf_viewer_get_zoom_level(LightwoodWebViewWidgetPdfViewer* self);
G_END_DECLS
#endif /* _LIGHTWOOD_WEBVIEW_WIDGET_PDF_VIEWER_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment