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

📄 dom2_eventsimpl.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/** * This file is part of the DOM implementation for KDE. * * Copyright (C) 2001 Peter Kelly (pmk@post.com) *           (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de) *           (C) 2003 Apple Computer, Inc. * * 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 "dom/dom2_views.h"#include "xml/dom2_eventsimpl.h"#include "xml/dom_stringimpl.h"#include "xml/dom_nodeimpl.h"#include "xml/dom_docimpl.h"#include "rendering/render_layer.h"#include "khtmlview.h"#include <kdebug.h>using namespace DOM;using namespace khtml;EventImpl::EventImpl(){    m_type = 0;    m_canBubble = false;    m_cancelable = false;    m_propagationStopped = false;    m_defaultPrevented = false;    m_id = UNKNOWN_EVENT;    m_currentTarget = 0;    m_eventPhase = 0;    m_target = 0;    m_createTime = QDateTime::currentDateTime();    m_defaultHandled = false;}EventImpl::EventImpl(EventId _id, bool canBubbleArg, bool cancelableArg){    DOMString t = EventImpl::idToType(_id);    m_type = t.implementation();    if (m_type)	m_type->ref();    m_canBubble = canBubbleArg;    m_cancelable = cancelableArg;    m_propagationStopped = false;    m_defaultPrevented = false;    m_id = _id;    m_currentTarget = 0;    m_eventPhase = 0;    m_target = 0;    m_createTime = QDateTime::currentDateTime();    m_defaultHandled = false;}EventImpl::~EventImpl(){    if (m_type)        m_type->deref();    if (m_target)        m_target->deref();}void EventImpl::setTarget(NodeImpl *_target){    if (m_target)        m_target->deref();    m_target = _target;    if (m_target)        m_target->ref();}DOMTimeStamp EventImpl::timeStamp(){    QDateTime epoch(QDate(1970,1,1),QTime(0,0));    // ### kjs does not yet support long long (?) so the value wraps around    return epoch.secsTo(m_createTime)*1000+m_createTime.time().msec();}void EventImpl::initEvent(const DOMString &eventTypeArg, bool canBubbleArg, bool cancelableArg){    // ### ensure this is not called after we have been dispatched (also for subclasses)    if (m_type)	m_type->deref();    m_type = eventTypeArg.implementation();    if (m_type)	m_type->ref();    m_id = typeToId(eventTypeArg);    m_canBubble = canBubbleArg;    m_cancelable = cancelableArg;}EventImpl::EventId EventImpl::typeToId(DOMString type){    if (type == "DOMFocusIn")	return DOMFOCUSIN_EVENT;    else if (type == "DOMFocusOut")	return DOMFOCUSOUT_EVENT;    else if (type == "DOMActivate")	return DOMACTIVATE_EVENT;    else if (type == "click")	return CLICK_EVENT;    else if (type == "mousedown")	return MOUSEDOWN_EVENT;    else if (type == "mouseup")	return MOUSEUP_EVENT;    else if (type == "mouseover")	return MOUSEOVER_EVENT;    else if (type == "mousemove")	return MOUSEMOVE_EVENT;    else if (type == "mouseout")	return MOUSEOUT_EVENT;    else if (type == "DOMSubtreeModified")	return DOMSUBTREEMODIFIED_EVENT;    else if (type == "DOMNodeInserted")	return DOMNODEINSERTED_EVENT;    else if (type == "DOMNodeRemoved")	return DOMNODEREMOVED_EVENT;    else if (type == "DOMNodeRemovedFromDocument")	return DOMNODEREMOVEDFROMDOCUMENT_EVENT;    else if (type == "DOMNodeInsertedIntoDocument")	return DOMNODEINSERTEDINTODOCUMENT_EVENT;    else if (type == "DOMAttrModified")	return DOMATTRMODIFIED_EVENT;    else if (type == "DOMCharacterDataModified")	return DOMCHARACTERDATAMODIFIED_EVENT;    else if (type == "load")	return LOAD_EVENT;    else if (type == "unload")	return UNLOAD_EVENT;    else if (type == "abort")	return ABORT_EVENT;    else if (type == "error")	return ERROR_EVENT;    else if (type == "select")	return SELECT_EVENT;    else if (type == "change")	return CHANGE_EVENT;    else if (type == "submit")	return SUBMIT_EVENT;    else if (type == "reset")	return RESET_EVENT;    else if (type == "focus")	return FOCUS_EVENT;    else if (type == "blur")	return BLUR_EVENT;    else if (type == "resize")	return RESIZE_EVENT;    else if (type == "scroll")	return SCROLL_EVENT;    else if ( type == "keydown" )        return KEYDOWN_EVENT;    else if ( type == "keyup" )        return KEYUP_EVENT;    else if ( type == "keypress" )        return KEYPRESS_EVENT;    else if ( type == "readystatechange" )        return KHTML_READYSTATECHANGE_EVENT;    else if ( type == "dblclick" )        return KHTML_ECMA_DBLCLICK_EVENT;    // ignore: KHTML_CLICK_EVENT    return UNKNOWN_EVENT;}DOMString EventImpl::idToType(EventImpl::EventId id){    switch (id) {    case DOMFOCUSIN_EVENT:        return "DOMFocusIn";    case DOMFOCUSOUT_EVENT:        return "DOMFocusOut";    case DOMACTIVATE_EVENT:        return "DOMActivate";    case CLICK_EVENT:        return "click";    case MOUSEDOWN_EVENT:        return "mousedown";    case MOUSEUP_EVENT:        return "mouseup";    case MOUSEOVER_EVENT:        return "mouseover";    case MOUSEMOVE_EVENT:        return "mousemove";    case MOUSEOUT_EVENT:        return "mouseout";    case DOMSUBTREEMODIFIED_EVENT:        return "DOMSubtreeModified";    case DOMNODEINSERTED_EVENT:        return "DOMNodeInserted";    case DOMNODEREMOVED_EVENT:        return "DOMNodeRemoved";    case DOMNODEREMOVEDFROMDOCUMENT_EVENT:        return "DOMNodeRemovedFromDocument";    case DOMNODEINSERTEDINTODOCUMENT_EVENT:        return "DOMNodeInsertedIntoDocument";    case DOMATTRMODIFIED_EVENT:        return "DOMAttrModified";    case DOMCHARACTERDATAMODIFIED_EVENT:        return "DOMCharacterDataModified";    case LOAD_EVENT:        return "load";    case UNLOAD_EVENT:        return "unload";    case ABORT_EVENT:        return "abort";    case ERROR_EVENT:        return "error";    case SELECT_EVENT:        return "select";    case CHANGE_EVENT:        return "change";    case SUBMIT_EVENT:        return "submit";    case RESET_EVENT:        return "reset";    case FOCUS_EVENT:        return "focus";    case BLUR_EVENT:        return "blur";    case RESIZE_EVENT:        return "resize";    case SCROLL_EVENT:        return "scroll";    case KEYDOWN_EVENT:        return "keydown";    case KEYUP_EVENT:        return "keyup";    case KEYPRESS_EVENT:        return "keypress";    //khtml extensions    case KHTML_ECMA_DBLCLICK_EVENT:        return "dblclick";    case KHTML_ECMA_CLICK_EVENT:        return "click";    case KHTML_DRAGDROP_EVENT:        return "khtml_dragdrop";    case KHTML_ERROR_EVENT:        return "khtml_error";    case KHTML_MOVE_EVENT:        return "khtml_move";    case KHTML_READYSTATECHANGE_EVENT:        return "readystatechange";    default:        return DOMString();        break;    }}bool EventImpl::isUIEvent() const{    return false;}bool EventImpl::isMouseEvent() const{    return false;}bool EventImpl::isMutationEvent() const{    return false;}bool EventImpl::isTextEvent() const{    return false;}// -----------------------------------------------------------------------------UIEventImpl::UIEventImpl(EventId _id, bool canBubbleArg, bool cancelableArg,		AbstractViewImpl *viewArg, long detailArg)		: EventImpl(_id,canBubbleArg,cancelableArg){    m_view = viewArg;    if (m_view)        m_view->ref();    m_detail = detailArg;}UIEventImpl::~UIEventImpl(){    if (m_view)        m_view->deref();}void UIEventImpl::initUIEvent(const DOMString &typeArg,			      bool canBubbleArg,			      bool cancelableArg,			      const AbstractView &viewArg,			      long detailArg){    EventImpl::initEvent(typeArg,canBubbleArg,cancelableArg);    if (m_view)	m_view->deref();    m_view = viewArg.handle();    if (m_view)	m_view->ref();    m_detail = detailArg;}bool UIEventImpl::isUIEvent() const{    return true;}// -----------------------------------------------------------------------------MouseEventImpl::MouseEventImpl(){    m_screenX = 0;    m_screenY = 0;    m_clientX = 0;    m_clientY = 0;    m_pageX = 0;    m_pageY = 0;    m_ctrlKey = false;    m_altKey = false;    m_shiftKey = false;    m_metaKey = false;    m_button = 0;    m_relatedTarget = 0;    m_qevent = 0;    m_isDoubleClick = false;}MouseEventImpl::MouseEventImpl(EventId _id,			       bool canBubbleArg,			       bool cancelableArg,			       AbstractViewImpl *viewArg,			       long detailArg,			       long screenXArg,			       long screenYArg,			       long clientXArg,			       long clientYArg,                               long pageXArg,                               long pageYArg,			       bool ctrlKeyArg,			       bool altKeyArg,			       bool shiftKeyArg,			       bool metaKeyArg,			       unsigned short buttonArg,			       NodeImpl *relatedTargetArg,			       QMouseEvent *qe,                               bool isDoubleClick)		   : UIEventImpl(_id,canBubbleArg,cancelableArg,viewArg,detailArg){    m_screenX = screenXArg;    m_screenY = screenYArg;    m_clientX = clientXArg;    m_clientY = clientYArg;    m_pageX = pageXArg;    m_pageY = pageYArg;    m_ctrlKey = ctrlKeyArg;    m_altKey = altKeyArg;    m_shiftKey = shiftKeyArg;    m_metaKey = metaKeyArg;    m_button = buttonArg;    m_relatedTarget = relatedTargetArg;    if (m_relatedTarget)	m_relatedTarget->ref();    computeLayerPos();    m_qevent = qe;    m_isDoubleClick = isDoubleClick;}MouseEventImpl::~MouseEventImpl(){    if (m_relatedTarget)	m_relatedTarget->deref();}void MouseEventImpl::computeLayerPos(){    m_layerX = m_pageX;    m_layerY = m_pageY;    DocumentImpl* doc = view() ? view()->document() : 0;    if (doc) {        khtml::RenderObject::NodeInfo renderInfo(true, false);        doc->renderer()->layer()->nodeAtPoint(renderInfo, m_pageX, m_pageY);        NodeImpl *node = renderInfo.innerNonSharedNode();        while (node && !node->renderer())            node = node->parent();        if (node) {            node->renderer()->enclosingLayer()->updateLayerPosition();            for (RenderLayer* layer = node->renderer()->enclosingLayer(); layer;                 layer = layer->parent()) {                m_layerX -= layer->xPos();                m_layerY -= layer->yPos();            }        }    }}void MouseEventImpl::initMouseEvent(const DOMString &typeArg,                                    bool canBubbleArg,                                    bool cancelableArg,                                    const AbstractView &viewArg,

⌨️ 快捷键说明

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