summaryrefslogtreecommitdiffstats
path: root/WebKit/gtk/webkit/webkitviewportattributes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/gtk/webkit/webkitviewportattributes.cpp')
-rw-r--r--WebKit/gtk/webkit/webkitviewportattributes.cpp571
1 files changed, 0 insertions, 571 deletions
diff --git a/WebKit/gtk/webkit/webkitviewportattributes.cpp b/WebKit/gtk/webkit/webkitviewportattributes.cpp
deleted file mode 100644
index 9a98e44..0000000
--- a/WebKit/gtk/webkit/webkitviewportattributes.cpp
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * Copyright (C) 2010 Joone Hur <joone@kldp.org>
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "webkitviewportattributes.h"
-
-#include "Chrome.h"
-#include "Frame.h"
-#include "Page.h"
-#include "webkitglobalsprivate.h"
-#include "webkitviewportattributesprivate.h"
-#include "webkitwebviewprivate.h"
-#include <glib/gi18n-lib.h>
-
-/**
- * SECTION:webkitviewportattributes
- * @short_description: Represents the viewport properties of a web page
- * @see_also: #WebKitWebView::viewport-attributes-recompute-requested
- * @see_also: #WebKitWebView::viewport-attributes-changed
- *
- * #WebKitViewportAttributes offers the viewport properties to user agents to
- * control the viewport layout. It contains the viewport size, initial scale with limits,
- * and information about whether a user is able to scale the contents in the viewport.
- * This makes a web page fit the device screen.
- *
- * The #WebKitWebView::viewport-attributes-changed signal will be emitted with #WebKitViewportAttributes
- * when the viewport attributes are updated in the case of loading web pages contain
- * the viewport properties and calling webkit_viewport_attributes_recompute.
- *
- * If the device size, available size, desktop width, or device DPI needs to be changed due to
- * a consequence of an explicit browser request (caused by screen rotation, resizing, or similar reasons),
- * You should call #webkit_viewport_attributes_recompute to recompute the viewport properties and
- * override those values in the handler of #WebKitWebView::viewport-attributes-recompute-requested signal.
- *
- * For more information on the viewport properties, refer to the Safari reference library at
- * http://developer.apple.com/safari/library/documentation/appleapplications/reference/safarihtmlref/articles/metatags.html
- *
- * <informalexample><programlisting>
- * /<!-- -->* Connect to the viewport-attributes-changes signal *<!-- -->/
- * WebKitViewportAttributes* attributes = webkit_web_view_get_viewport_attributes (web_view);
- * g_signal_connect (web_view, "viewport-attributes-recompute-requested", G_CALLBACK (viewport_recompute_cb), window);
- * g_signal_connect (web_view, "viewport-attributes-changed", G_CALLBACK (viewport_changed_cb), window);
- * g_signal_connect (attributes, "notify::valid", G_CALLBACK (viewport_valid_changed_cb), web_view);
- *
- * /<!-- -->* Handle the viewport-attributes-recompute-requested signal to override the device width *<!-- -->/
- * static void
- * viewport_recompute_cb (WebKitWebView* web_view, WebKitViewportAttributes* attributes, GtkWidget* window)
- * {
- * int override_available_width = 480;
- * g_object_set (G_OBJECT(attributes), "available-width", override_available_width, NULL);
- * }
- *
- * /<!-- -->* Handle the viewport-attributes-changed signal to recompute the initial scale factor *<!-- -->/
- * static void
- * viewport_changed_cb (WebKitWebView* web_view, WebKitViewportAttributes* attributes, gpointer data)
- * {
- * gfloat initialScale;
- * g_object_get (G_OBJECT (atributes), "initial-scale-factor", &initialScale, NULL);
- * webkit_web_view_set_zoom_level (web_view, initialScale);
- * }
- *
- * /<!-- -->* Handle the notify::valid signal to initialize the zoom level *<!-- -->/
- * static void
- * viewport_valid_changed_cb (WebKitViewportAttributes* attributes, GParamSpec* pspec, WebKitWebView* web_view)
- * {
- * gboolean is_valid;
- * g_object_get (attributes, "valid", &is_valid, NULL);
- * if (!is_valid)
- * webkit_web_view_set_zoom_level (web_view, 1.0);
- * }
- * </programlisting></informalexample>
- */
-
-using namespace WebKit;
-using namespace WebCore;
-
-enum {
- PROP_0,
-
- PROP_DEVICE_WIDTH,
- PROP_DEVICE_HEIGHT,
- PROP_AVAILABLE_WIDTH,
- PROP_AVAILABLE_HEIGHT,
- PROP_DESKTOP_WIDTH,
- PROP_DEVICE_DPI,
- PROP_WIDTH,
- PROP_HEIGHT,
- PROP_INITIAL_SCALE_FACTOR,
- PROP_MINIMUM_SCALE_FACTOR,
- PROP_MAXIMUM_SCALE_FACTOR,
- PROP_DEVICE_PIXEL_RATIO,
- PROP_USER_SCALABLE,
- PROP_VALID
-};
-
-G_DEFINE_TYPE(WebKitViewportAttributes, webkit_viewport_attributes, G_TYPE_OBJECT);
-
-static void webkit_viewport_attributes_get_property(GObject* object, guint propertyID, GValue* value, GParamSpec* paramSpec);
-static void webkit_viewport_attributes_set_property(GObject* object, guint propertyID, const GValue* value, GParamSpec* paramSpec);
-
-static void webkit_viewport_attributes_class_init(WebKitViewportAttributesClass* kclass)
-{
- GObjectClass* gobjectClass = G_OBJECT_CLASS(kclass);
- gobjectClass->get_property = webkit_viewport_attributes_get_property;
- gobjectClass->set_property = webkit_viewport_attributes_set_property;
-
- /**
- * WebKitViewportAttributs:device-width:
- *
- * The width of the screen. This value is always automatically
- * pre-computed during a viewport attributes recomputation, and
- * can be overridden by the handler of
- * WebKitWebView::viewport-attributes-recompute-requested. You
- * should not do that unless you have a very good reason.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_DEVICE_WIDTH,
- g_param_spec_int(
- "device-width",
- _("Device Width"),
- _("The width of the screen."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:device-height:
- *
- * The height of the screen. This value is always automatically
- * pre-computed during a viewport attributes recomputation, and
- * can be overriden by the handler of
- * WebKitWebView::viewport-attributes-recompute-requested. You
- * should not do that unless you have a very good reason.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_DEVICE_HEIGHT,
- g_param_spec_int(
- "device-height",
- _("Device Height"),
- _("The height of the screen."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:available-width:
- *
- * The width of the current visible area. This will usually be the
- * same as the space allocated to the widget, but in some cases
- * you may have decided to make the widget bigger than the visible
- * area. This value is by default initialized to the size
- * allocated by the widget, but you can override it in the handler
- * of WebKitWebView::viewport-attributes-recompute-requested to
- * let the engine know what the visible area is.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_AVAILABLE_WIDTH,
- g_param_spec_int(
- "available-width",
- _("Available Width"),
- _("The width of the visible area."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:available-height:
- *
- * The height of the current visible area. This will usually be the
- * same as the space allocated to the widget, but in some cases
- * you may have decided to make the widget bigger than the visible
- * area. This value is by default initialized to the size
- * allocated by the widget, but you can override it in the handler
- * of WebKitWebView::viewport-attributes-recompute-requested to
- * let the engine know what the visible area is.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_AVAILABLE_HEIGHT,
- g_param_spec_int(
- "available-height",
- _("Available Height"),
- _("The height of the visible area."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:desktop-width:
- *
- * The width of viewport that works well for most web pages designed for
- * desktop. This value is initialized to 980 pixels by default and used
- * during a viewport attributes recomputation. Also, it can be overriden by
- * the handler of WebKitWebView::viewport-attributes-recompute-requested.
- * You should not do that unless you have a very good reason.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_DESKTOP_WIDTH,
- g_param_spec_int(
- "desktop-width",
- _("Desktop Width"),
- _("The width of viewport that works well for most web pages designed for desktop."),
- 0,
- G_MAXINT,
- 980,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:device-dpi:
- *
- * The number of dots per inch of the screen. This value is
- * initialized to 160 dpi by default and used during a viewport
- * attributes recomputation, because it is the dpi of the original
- * iPhone and Android devices. Also, it can be overriden by the
- * handler of WebKitWebView::viewport-attributes-recompute-requested.
- * You should not do that unless you have a very good reason.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_DEVICE_DPI,
- g_param_spec_int(
- "device-dpi",
- _("Device DPI"),
- _("The number of dots per inch of the screen."),
- 0,
- G_MAXINT,
- 160,
- WEBKIT_PARAM_READWRITE));
-
- /**
- * WebKitViewportAttributs:width:
- *
- * The width of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_WIDTH,
- g_param_spec_int(
- "width",
- _("Width"),
- _("The width of the viewport."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:height:
- *
- * The height of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_HEIGHT,
- g_param_spec_int(
- "height",
- _("Height"),
- _("The height of the viewport."),
- 0,
- G_MAXINT,
- 0,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:initial-scale-factor:
- *
- * The initial scale of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_INITIAL_SCALE_FACTOR,
- g_param_spec_float(
- "initial-scale-factor",
- _("Initial Scale Factor"),
- _("The initial scale of the viewport."),
- -1,
- G_MAXFLOAT,
- -1,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:minimum-scale-factor:
- *
- * The minimum scale of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_MINIMUM_SCALE_FACTOR,
- g_param_spec_float(
- "minimum-scale-factor",
- _("Minimum Scale Factor"),
- _("The minimum scale of the viewport."),
- -1,
- G_MAXFLOAT,
- -1,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:maximum-scale-factor:
- *
- * The maximum scale of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_MAXIMUM_SCALE_FACTOR,
- g_param_spec_float(
- "maximum-scale-factor",
- _("Maximum Scale Factor"),
- _("The maximum scale of the viewport."),
- -1,
- G_MAXFLOAT,
- -1,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:device-pixel-ratio:
- *
- * The device pixel ratio of the viewport. Before getting this property,
- * you need to make sure that #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_DEVICE_PIXEL_RATIO,
- g_param_spec_float(
- "device-pixel-ratio",
- _("Device Pixel Ratio"),
- _("The device pixel ratio of the viewport."),
- -1,
- G_MAXFLOAT,
- -1,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:user-scalable:
- *
- * Determines whether or not the user can zoom in and out.
- * Before getting this property, you need to make sure that
- * #WebKitViewportAttributes is valid.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_USER_SCALABLE,
- g_param_spec_boolean(
- _("user-scalable"),
- _("User Scalable"),
- _("Determines whether or not the user can zoom in and out."),
- TRUE,
- WEBKIT_PARAM_READABLE));
-
- /**
- * WebKitViewportAttributs:valid:
- *
- * Determines whether or not the attributes are valid.
- * #WebKitViewportAttributes are only valid on pages
- * which have a viewport meta tag, and have already
- * had the attributes calculated.
- *
- * Since: 1.3.8
- */
- g_object_class_install_property(gobjectClass,
- PROP_VALID,
- g_param_spec_boolean(
- _("valid"),
- _("Valid"),
- _("Determines whether or not the attributes are valid, and can be used."),
- FALSE,
- WEBKIT_PARAM_READABLE));
-
- g_type_class_add_private(kclass, sizeof(WebKitViewportAttributesPrivate));
-}
-
-static void webkit_viewport_attributes_init(WebKitViewportAttributes* viewport)
-{
- viewport->priv = G_TYPE_INSTANCE_GET_PRIVATE(viewport, WEBKIT_TYPE_VIEWPORT_ATTRIBUTES, WebKitViewportAttributesPrivate);
-
- viewport->priv->deviceWidth = 0;
- viewport->priv->deviceHeight = 0;
- viewport->priv->availableWidth = 0;
- viewport->priv->availableHeight = 0;
- viewport->priv->desktopWidth = 980; // This value works well for most web pages designed for desktop browsers.
- viewport->priv->deviceDPI = 160; // It is the dpi of the original iPhone and Android devices.
- viewport->priv->width = 0;
- viewport->priv->height = 0;
- viewport->priv->initialScaleFactor = -1;
- viewport->priv->minimumScaleFactor = -1;
- viewport->priv->maximumScaleFactor = -1;
- viewport->priv->devicePixelRatio = -1;
- viewport->priv->userScalable = TRUE;
- viewport->priv->isValid = FALSE;
-}
-
-static void webkit_viewport_attributes_get_property(GObject* object, guint propertyID, GValue* value, GParamSpec* paramSpec)
-{
- WebKitViewportAttributes* viewportAttributes = WEBKIT_VIEWPORT_ATTRIBUTES(object);
- WebKitViewportAttributesPrivate* priv = viewportAttributes->priv;
-
- switch (propertyID) {
- case PROP_DEVICE_WIDTH:
- g_value_set_int(value, priv->deviceWidth);
- break;
- case PROP_DEVICE_HEIGHT:
- g_value_set_int(value, priv->deviceHeight);
- break;
- case PROP_AVAILABLE_WIDTH:
- g_value_set_int(value, priv->availableWidth);
- break;
- case PROP_AVAILABLE_HEIGHT:
- g_value_set_int(value, priv->availableHeight);
- break;
- case PROP_DESKTOP_WIDTH:
- g_value_set_int(value, priv->desktopWidth);
- break;
- case PROP_DEVICE_DPI:
- g_value_set_int(value, priv->deviceDPI);
- break;
- case PROP_WIDTH:
- g_value_set_int(value, priv->width);
- break;
- case PROP_HEIGHT:
- g_value_set_int(value, priv->height);
- break;
- case PROP_INITIAL_SCALE_FACTOR:
- g_value_set_float(value, priv->initialScaleFactor);
- break;
- case PROP_MINIMUM_SCALE_FACTOR:
- g_value_set_float(value, priv->minimumScaleFactor);
- break;
- case PROP_MAXIMUM_SCALE_FACTOR:
- g_value_set_float(value, priv->maximumScaleFactor);
- break;
- case PROP_DEVICE_PIXEL_RATIO:
- g_value_set_float(value, priv->devicePixelRatio);
- break;
- case PROP_USER_SCALABLE:
- g_value_set_boolean(value, priv->userScalable);
- break;
- case PROP_VALID:
- g_value_set_boolean(value, priv->isValid);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyID, paramSpec);
- break;
- }
-}
-
-static void webkit_viewport_attributes_set_property(GObject* object, guint propertyID, const GValue* value, GParamSpec* paramSpec)
-{
- WebKitViewportAttributes* viewportAttributes = WEBKIT_VIEWPORT_ATTRIBUTES(object);
- WebKitViewportAttributesPrivate* priv = viewportAttributes->priv;
-
- switch (propertyID) {
- case PROP_DEVICE_WIDTH:
- priv->deviceWidth = g_value_get_int(value);
- break;
- case PROP_DEVICE_HEIGHT:
- priv->deviceHeight = g_value_get_int(value);
- break;
- case PROP_AVAILABLE_WIDTH:
- priv->availableWidth = g_value_get_int(value);
- break;
- case PROP_AVAILABLE_HEIGHT:
- priv->availableHeight = g_value_get_int(value);
- break;
- case PROP_DESKTOP_WIDTH:
- priv->desktopWidth = g_value_get_int(value);
- break;
- case PROP_DEVICE_DPI:
- priv->deviceDPI = g_value_get_int(value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyID, paramSpec);
- break;
- }
-}
-
-void webkitViewportAttributesRecompute(WebKitViewportAttributes* viewportAttributes)
-{
- WebKitViewportAttributesPrivate* priv = viewportAttributes->priv;
- WebKitWebView* webView = priv->webView;
-
- IntRect windowRect(webView->priv->corePage->chrome()->windowRect());
- priv->deviceWidth = windowRect.width();
- priv->deviceHeight = windowRect.height();
-
- IntRect rect(webView->priv->corePage->chrome()->pageRect());
- priv->availableWidth = rect.width();
- priv->availableHeight = rect.height();
-
- // First of all, we give the application an opportunity to override some of the values.
- g_signal_emit_by_name(webView, "viewport-attributes-recompute-requested", viewportAttributes);
-
- ViewportArguments arguments = webView->priv->corePage->mainFrame()->document()->viewportArguments();
-
- ViewportAttributes attributes = computeViewportAttributes(arguments, priv->desktopWidth, priv->deviceWidth, priv->deviceHeight, priv->deviceDPI, IntSize(priv->availableWidth, priv->availableHeight));
-
- priv->width = attributes.layoutSize.width();
- priv->height = attributes.layoutSize.height();
- priv->initialScaleFactor = attributes.initialScale;
- priv->minimumScaleFactor = attributes.minimumScale;
- priv->maximumScaleFactor = attributes.maximumScale;
- priv->devicePixelRatio = attributes.devicePixelRatio;
- priv->userScalable = arguments.userScalable;
-
- if (!priv->isValid) {
- priv->isValid = TRUE;
- g_object_notify(G_OBJECT(viewportAttributes), "valid");
- }
-
- // Now let the application know it is safe to use the new values.
- g_signal_emit_by_name(webView, "viewport-attributes-changed", viewportAttributes);
-}
-
-/**
- * webkit_viewport_attributes_recompute:
- * @viewportAttributes: a #WebKitViewportAttributes
- *
- * Recompute the optimal viewport attributes and emit the viewport-attribute-changed signal.
- * The viewport-attributes-recompute-requested signal also will be handled to override
- * the device size, available size, desktop width, or device DPI.
- *
- * Since: 1.3.8
- */
-void webkit_viewport_attributes_recompute(WebKitViewportAttributes* viewportAttributes)
-{
- if (!viewportAttributes->priv->isValid)
- return;
- webkitViewportAttributesRecompute(viewportAttributes);
-}