summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp
new file mode 100644
index 000000000..97d1f8a17
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitEditorState.cpp
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2015 Igalia S.L.
+ *
+ * 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 "WebKitEditorState.h"
+
+#include "EditorState.h"
+#include "WebKitEditorStatePrivate.h"
+#include <glib/gi18n-lib.h>
+
+using namespace WebKit;
+
+/**
+ * SECTION: WebKitEditorState
+ * @Short_description: Web editor state
+ * @Title: WebKitEditorState
+ * @See_also: #WebKitWebView
+ *
+ * WebKitEditorState represents the state of a #WebKitWebView editor.
+ * Use webkit_web_view_get_editor_state() to get WebKitEditorState of
+ * a #WebKitWebView.
+ *
+ * Since: 2.10
+ */
+
+enum {
+ PROP_0,
+
+ PROP_TYPING_ATTRIBUTES
+};
+
+struct _WebKitEditorStatePrivate {
+ unsigned typingAttributes;
+};
+
+WEBKIT_DEFINE_TYPE(WebKitEditorState, webkit_editor_state, G_TYPE_OBJECT)
+
+static void webkitEditorStateGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
+{
+ WebKitEditorState* editorState = WEBKIT_EDITOR_STATE(object);
+
+ switch (propId) {
+ case PROP_TYPING_ATTRIBUTES:
+ g_value_set_uint(value, webkit_editor_state_get_typing_attributes(editorState));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
+ }
+}
+
+static void webkit_editor_state_class_init(WebKitEditorStateClass* editorStateClass)
+{
+ GObjectClass* objectClass = G_OBJECT_CLASS(editorStateClass);
+ objectClass->get_property = webkitEditorStateGetProperty;
+
+ /**
+ * WebKitEditorState:typing-attributes:
+ *
+ * Bitmask of #WebKitEditorTypingAttributes flags.
+ * See webkit_editor_state_get_typing_attributes() for more information.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ objectClass,
+ PROP_TYPING_ATTRIBUTES,
+ g_param_spec_uint(
+ "typing-attributes",
+ _("Typing Attributes"),
+ _("Flags with the typing attributes"),
+ 0, G_MAXUINT, 0,
+ WEBKIT_PARAM_READABLE));
+}
+
+static void webkitEditorStateSetTypingAttributes(WebKitEditorState* editorState, unsigned typingAttributes)
+{
+ if (typingAttributes == editorState->priv->typingAttributes)
+ return;
+
+ editorState->priv->typingAttributes = typingAttributes;
+ g_object_notify(G_OBJECT(editorState), "typing-attributes");
+}
+
+WebKitEditorState* webkitEditorStateCreate(const EditorState& state)
+{
+ WebKitEditorState* editorState = WEBKIT_EDITOR_STATE(g_object_new(WEBKIT_TYPE_EDITOR_STATE, nullptr));
+ webkitEditorStateChanged(editorState, state);
+ return editorState;
+}
+
+void webkitEditorStateChanged(WebKitEditorState* editorState, const EditorState& newState)
+{
+ if (newState.isMissingPostLayoutData)
+ return;
+
+ unsigned typingAttributes = WEBKIT_EDITOR_TYPING_ATTRIBUTE_NONE;
+ const auto& postLayoutData = newState.postLayoutData();
+ if (postLayoutData.typingAttributes & AttributeBold)
+ typingAttributes |= WEBKIT_EDITOR_TYPING_ATTRIBUTE_BOLD;
+ if (postLayoutData.typingAttributes & AttributeItalics)
+ typingAttributes |= WEBKIT_EDITOR_TYPING_ATTRIBUTE_ITALIC;
+ if (postLayoutData.typingAttributes & AttributeUnderline)
+ typingAttributes |= WEBKIT_EDITOR_TYPING_ATTRIBUTE_UNDERLINE;
+ if (postLayoutData.typingAttributes & AttributeStrikeThrough)
+ typingAttributes |= WEBKIT_EDITOR_TYPING_ATTRIBUTE_STRIKETHROUGH;
+ webkitEditorStateSetTypingAttributes(editorState, typingAttributes);
+}
+
+/**
+ * webkit_editor_state_get_typing_attributes:
+ * @editor_state: a #WebKitEditorState
+ *
+ * Gets the typing attributes at the current cursor position.
+ * If there is a selection, this returns the typing attributes
+ * of the the selected text. Note that in case of a selection,
+ * typing attributes are considered active only when they are
+ * present throughout the selection.
+ *
+ * Returns: a bitmask of #WebKitEditorTypingAttributes flags
+ *
+ * Since: 2.10
+ */
+guint webkit_editor_state_get_typing_attributes(WebKitEditorState* editorState)
+{
+ g_return_val_if_fail(WEBKIT_IS_EDITOR_STATE(editorState), WEBKIT_EDITOR_TYPING_ATTRIBUTE_NONE);
+
+ return editorState->priv->typingAttributes;
+}
+