⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessiblebase.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2008 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#include "config.h"#include "WebKitDLL.h"#include "AccessibleBase.h"#include <oleacc.h>#include <WebCore/AccessibilityObject.h>#include <WebCore/AXObjectCache.h>#include <WebCore/BString.h>#include <WebCore/Element.h>#include <WebCore/EventHandler.h>#include <WebCore/FrameView.h>#include <WebCore/HostWindow.h>#include <WebCore/HTMLNames.h>#include <WebCore/HTMLFrameElementBase.h>#include <WebCore/HTMLInputElement.h>#include <WebCore/IntRect.h>#include <WebCore/PlatformKeyboardEvent.h>#include <WebCore/RenderFrame.h>#include <WebCore/RenderObject.h>#include <WebCore/RenderView.h>#include "WebView.h"#include <wtf/RefPtr.h>using namespace WebCore;AccessibleBase::AccessibleBase(AccessibilityObject* obj)    : AccessibilityObjectWrapper(obj)    , m_refCount(0){    ASSERT_ARG(obj, obj);    m_object->setWrapper(this);    ++gClassCount;    gClassNameCount.add("AccessibleBase");}AccessibleBase::~AccessibleBase(){    --gClassCount;    gClassNameCount.remove("AccessibleBase");}AccessibleBase* AccessibleBase::createInstance(AccessibilityObject* obj){    ASSERT_ARG(obj, obj);    return new AccessibleBase(obj);}// IUnknownHRESULT STDMETHODCALLTYPE AccessibleBase::QueryInterface(REFIID riid, void** ppvObject){    if (IsEqualGUID(riid, __uuidof(IAccessible)))        *ppvObject = this;    else if (IsEqualGUID(riid, __uuidof(IDispatch)))        *ppvObject = this;    else if (IsEqualGUID(riid, __uuidof(IUnknown)))        *ppvObject = this;    else {        *ppvObject = 0;        return E_NOINTERFACE;    }    AddRef();    return S_OK;}ULONG STDMETHODCALLTYPE AccessibleBase::Release(void){    ASSERT(m_refCount > 0);    if (--m_refCount)        return m_refCount;    delete this;    return 0;}// IAccessibleHRESULT STDMETHODCALLTYPE AccessibleBase::get_accParent(IDispatch** parent){    *parent = 0;    if (!m_object || !m_object->topDocumentFrameView())        return E_FAIL;    return WebView::AccessibleObjectFromWindow(m_object->topDocumentFrameView()->hostWindow()->platformWindow(),        OBJID_WINDOW, __uuidof(IAccessible), reinterpret_cast<void**>(parent));}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accChildCount(long* count){    if (!m_object)        return E_FAIL;    if (!count)        return E_POINTER;    *count = static_cast<long>(m_object->children().size());    return S_OK;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accChild(VARIANT vChild, IDispatch** ppChild){    if (!ppChild)        return E_POINTER;    *ppChild = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    *ppChild = static_cast<IDispatch*>(wrapper(childObj));    (*ppChild)->AddRef();    return S_OK;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accName(VARIANT vChild, BSTR* name){    if (!name)        return E_POINTER;    *name = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    if (*name = BString(wrapper(childObj)->name()).release())        return S_OK;    return S_FALSE;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accValue(VARIANT vChild, BSTR* value){    if (!value)        return E_POINTER;    *value = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    if (*value = BString(wrapper(childObj)->value()).release())        return S_OK;    return S_FALSE;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accDescription(VARIANT vChild, BSTR* description){    if (!description)        return E_POINTER;    *description = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    // TODO: Description, for SELECT subitems, should be a string describing    // the position of the item in its group and of the group in the list (see    // Firefox).    if (*description = BString(wrapper(childObj)->description()).release())        return S_OK;    return S_FALSE;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accRole(VARIANT vChild, VARIANT* pvRole){    if (!pvRole)        return E_POINTER;    ::VariantInit(pvRole);    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    pvRole->vt = VT_I4;    pvRole->lVal = wrapper(childObj)->role();    return S_OK;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accState(VARIANT vChild, VARIANT* pvState){    if (!pvState)        return E_POINTER;    ::VariantInit(pvState);    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    pvState->vt = VT_I4;    pvState->lVal = 0;    if (childObj->isAnchor())        pvState->lVal |= STATE_SYSTEM_LINKED;    if (childObj->isHovered())        pvState->lVal |= STATE_SYSTEM_HOTTRACKED;    if (!childObj->isEnabled())        pvState->lVal |= STATE_SYSTEM_UNAVAILABLE;    if (childObj->isReadOnly())        pvState->lVal |= STATE_SYSTEM_READONLY;    if (childObj->isOffScreen())        pvState->lVal |= STATE_SYSTEM_OFFSCREEN;    if (childObj->isMultiSelect())        pvState->lVal |= STATE_SYSTEM_MULTISELECTABLE;    if (childObj->isPasswordField())        pvState->lVal |= STATE_SYSTEM_PROTECTED;    if (childObj->isIndeterminate())        pvState->lVal |= STATE_SYSTEM_INDETERMINATE;    if (childObj->isChecked())        pvState->lVal |= STATE_SYSTEM_CHECKED;    if (childObj->isPressed())        pvState->lVal |= STATE_SYSTEM_PRESSED;    if (childObj->isFocused())        pvState->lVal |= STATE_SYSTEM_FOCUSED;    if (childObj->isVisited())        pvState->lVal |= STATE_SYSTEM_TRAVERSED;    if (childObj->canSetFocusAttribute())        pvState->lVal |= STATE_SYSTEM_FOCUSABLE;    // TODO: Add selected and selectable states.    return S_OK;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accHelp(VARIANT vChild, BSTR* helpText){    if (!helpText)        return E_POINTER;    *helpText = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    if (*helpText = BString(childObj->helpText()).release())        return S_OK;    return S_FALSE;}HRESULT STDMETHODCALLTYPE AccessibleBase::get_accKeyboardShortcut(VARIANT vChild, BSTR* shortcut){    if (!shortcut)        return E_POINTER;    *shortcut = 0;    AccessibilityObject* childObj;    HRESULT hr = getAccessibilityObjectForChild(vChild, childObj);    if (FAILED(hr))        return hr;    String accessKey = childObj->accessKey();    if (accessKey.isNull())        return S_FALSE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -