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

📄 kjs_events.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        clipboard = new Clipboard(exec, impl->clipboard());      }      return Object(clipboard);    } else {      return Undefined();    }  }  case DataTransfer:  {    DOM::EventImpl *ei = event.handle();    if (ei->isDragEvent()) {      DOM::MouseEventImpl *impl = static_cast<DOM::MouseEventImpl *>(event.handle());      if (!clipboard) {        clipboard = new Clipboard(exec, impl->clipboard());      }      return Object(clipboard);    } else {      return Undefined();    }  }  default:    kdWarning() << "Unhandled token in DOMEvent::getValueProperty : " << token << endl;    return Value();  }}void DOMEvent::tryPut(ExecState *exec, const Identifier &propertyName,                      const Value& value, int attr){  DOMObjectLookupPut<DOMEvent, DOMObject>(exec, propertyName, value, attr,                                          &DOMEventTable, this);}void DOMEvent::putValue(ExecState *exec, int token, const Value& value, int){  switch (token) {  case ReturnValue:    event.setDefaultPrevented(!value.toBoolean(exec));    break;  case CancelBubble:    event.setCancelBubble(value.toBoolean(exec));    break;  default:    break;  }}Value DOMEventProtoFunc::tryCall(ExecState *exec, Object & thisObj, const List &args){  if (!thisObj.inherits(&KJS::DOMEvent::info)) {    Object err = Error::create(exec,TypeError);    exec->setException(err);    return err;  }  DOM::Event event = static_cast<DOMEvent *>( thisObj.imp() )->toEvent();  switch (id) {    case DOMEvent::StopPropagation:      event.stopPropagation();    case DOMEvent::PreventDefault:      event.preventDefault();      return Undefined();    case DOMEvent::InitEvent:      event.initEvent(args[0].toString(exec).string(),args[1].toBoolean(exec),args[2].toBoolean(exec));      return Undefined();  };  return Undefined();}Value KJS::getDOMEvent(ExecState *exec, DOM::Event e){  DOM::EventImpl *ei = e.handle();  if (!ei)    return Null();  ScriptInterpreter* interp = static_cast<ScriptInterpreter *>(exec->dynamicInterpreter());  KJS::Interpreter::lock();  DOMObject *ret = interp->getDOMObject(ei);  if (!ret) {    if (ei->isKeyboardEvent())      ret = new DOMKeyboardEvent(exec, e);    else if (ei->isMouseEvent())      ret = new DOMMouseEvent(exec, e);    else if (ei->isUIEvent())      ret = new DOMUIEvent(exec, e);    else if (ei->isMutationEvent())      ret = new DOMMutationEvent(exec, e);    else      ret = new DOMEvent(exec, e);    interp->putDOMObject(ei, ret);  }  KJS::Interpreter::unlock();  return Value(ret);}DOM::Event KJS::toEvent(const Value& val){  Object obj = Object::dynamicCast(val);  if (obj.isNull() || !obj.inherits(&DOMEvent::info))    return DOM::Event();  const DOMEvent *dobj = static_cast<const DOMEvent*>(obj.imp());  return dobj->toEvent();}// -------------------------------------------------------------------------const ClassInfo EventExceptionConstructor::info = { "EventExceptionConstructor", 0, &EventExceptionConstructorTable, 0 };/*@begin EventExceptionConstructorTable 1  UNSPECIFIED_EVENT_TYPE_ERR    DOM::EventException::UNSPECIFIED_EVENT_TYPE_ERR DontDelete|ReadOnly@end*/Value EventExceptionConstructor::tryGet(ExecState *exec, const Identifier &p) const{  return DOMObjectLookupGetValue<EventExceptionConstructor, DOMObject>(exec,p,&EventExceptionConstructorTable,this);}Value EventExceptionConstructor::getValueProperty(ExecState *, int token) const{  // We use the token as the value to return directly  return Number(token);}Value KJS::getEventExceptionConstructor(ExecState *exec){  return cacheGlobalObject<EventExceptionConstructor>(exec, "[[eventException.constructor]]");}// -------------------------------------------------------------------------const ClassInfo DOMUIEvent::info = { "UIEvent", &DOMEvent::info, &DOMUIEventTable, 0 };/*@begin DOMUIEventTable 8  view		DOMUIEvent::View	DontDelete|ReadOnly  detail	DOMUIEvent::Detail	DontDelete|ReadOnly  keyCode	DOMUIEvent::KeyCode	DontDelete|ReadOnly  charCode	DOMUIEvent::CharCode	DontDelete|ReadOnly  layerX	DOMUIEvent::LayerX	DontDelete|ReadOnly  layerY	DOMUIEvent::LayerY	DontDelete|ReadOnly  pageX		DOMUIEvent::PageX	DontDelete|ReadOnly  pageY		DOMUIEvent::PageY	DontDelete|ReadOnly  which		DOMUIEvent::Which	DontDelete|ReadOnly@end@begin DOMUIEventProtoTable 1  initUIEvent	DOMUIEvent::InitUIEvent	DontDelete|Function 5@end*/DEFINE_PROTOTYPE("DOMUIEvent",DOMUIEventProto)IMPLEMENT_PROTOFUNC(DOMUIEventProtoFunc)IMPLEMENT_PROTOTYPE_WITH_PARENT(DOMUIEventProto,DOMUIEventProtoFunc,DOMEventProto)DOMUIEvent::~DOMUIEvent(){}Value DOMUIEvent::tryGet(ExecState *exec, const Identifier &p) const{  return DOMObjectLookupGetValue<DOMUIEvent,DOMEvent>(exec,p,&DOMUIEventTable,this);}Value DOMUIEvent::getValueProperty(ExecState *exec, int token) const{  switch (token) {  case View:    return getDOMAbstractView(exec,static_cast<DOM::UIEvent>(event).view());  case Detail:    return Number(static_cast<DOM::UIEvent>(event).detail());  case KeyCode:    return Number(static_cast<DOM::UIEvent>(event).keyCode());  case CharCode:    return Number(static_cast<DOM::UIEvent>(event).charCode());  case LayerX:    return Number(static_cast<DOM::UIEvent>(event).layerX());  case LayerY:    return Number(static_cast<DOM::UIEvent>(event).layerY());  case PageX:    return Number(static_cast<DOM::UIEvent>(event).pageX());  case PageY:    return Number(static_cast<DOM::UIEvent>(event).pageY());  case Which:    return Number(static_cast<DOM::UIEvent>(event).which());  default:    kdWarning() << "Unhandled token in DOMUIEvent::getValueProperty : " << token << endl;    return Undefined();  }}Value DOMUIEventProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args){  if (!thisObj.inherits(&KJS::DOMUIEvent::info)) {    Object err = Error::create(exec,TypeError);    exec->setException(err);    return err;  }  DOM::UIEvent uiEvent = static_cast<DOMUIEvent *>(thisObj.imp())->toUIEvent();  switch (id) {    case DOMUIEvent::InitUIEvent: {      DOM::AbstractView v = toAbstractView(args[3]);      static_cast<DOM::UIEvent>(uiEvent).initUIEvent(args[0].toString(exec).string(),                                                     args[1].toBoolean(exec),                                                     args[2].toBoolean(exec),                                                     v,                                                     args[4].toInt32(exec));      }      return Undefined();  }  return Undefined();}// -------------------------------------------------------------------------const ClassInfo DOMMouseEvent::info = { "MouseEvent", &DOMUIEvent::info, &DOMMouseEventTable, 0 };/*@begin DOMMouseEventTable 16  screenX	DOMMouseEvent::ScreenX	DontDelete|ReadOnly  screenY	DOMMouseEvent::ScreenY	DontDelete|ReadOnly  clientX	DOMMouseEvent::ClientX	DontDelete|ReadOnly  x		DOMMouseEvent::X	DontDelete|ReadOnly  clientY	DOMMouseEvent::ClientY	DontDelete|ReadOnly  y		DOMMouseEvent::Y	DontDelete|ReadOnly  offsetX	DOMMouseEvent::OffsetX	DontDelete|ReadOnly  offsetY	DOMMouseEvent::OffsetY	DontDelete|ReadOnly  ctrlKey	DOMMouseEvent::CtrlKey	DontDelete|ReadOnly  shiftKey	DOMMouseEvent::ShiftKey	DontDelete|ReadOnly  altKey	DOMMouseEvent::AltKey	DontDelete|ReadOnly  metaKey	DOMMouseEvent::MetaKey	DontDelete|ReadOnly  button	DOMMouseEvent::Button	DontDelete|ReadOnly  relatedTarget	DOMMouseEvent::RelatedTarget DontDelete|ReadOnly  fromElement	DOMMouseEvent::FromElement DontDelete|ReadOnly  toElement	DOMMouseEvent::ToElement	DontDelete|ReadOnly@end@begin DOMMouseEventProtoTable 1  initMouseEvent	DOMMouseEvent::InitMouseEvent	DontDelete|Function 15@end*/DEFINE_PROTOTYPE("DOMMouseEvent",DOMMouseEventProto)IMPLEMENT_PROTOFUNC(DOMMouseEventProtoFunc)IMPLEMENT_PROTOTYPE_WITH_PARENT(DOMMouseEventProto,DOMMouseEventProtoFunc,DOMUIEventProto)DOMMouseEvent::~DOMMouseEvent(){}Value DOMMouseEvent::tryGet(ExecState *exec, const Identifier &p) const{#ifdef KJS_VERBOSE  kdDebug(6070) << "DOMMouseEvent::tryGet " << p.qstring() << endl;#endif  return DOMObjectLookupGetValue<DOMMouseEvent,DOMUIEvent>(exec,p,&DOMMouseEventTable,this);}Value DOMMouseEvent::getValueProperty(ExecState *exec, int token) const{  switch (token) {  case ScreenX:    return Number(static_cast<DOM::MouseEvent>(event).screenX());  case ScreenY:    return Number(static_cast<DOM::MouseEvent>(event).screenY());  case ClientX:  case X:    return Number(static_cast<DOM::MouseEvent>(event).clientX());  case ClientY:  case Y:    return Number(static_cast<DOM::MouseEvent>(event).clientY());  case OffsetX:  case OffsetY: // MSIE extension  {    DOM::Node node = event.target();    node.handle()->getDocument()->updateRendering();    khtml::RenderObject *rend = node.handle() ? node.handle()->renderer() : 0L;    int x = static_cast<DOM::MouseEvent>(event).clientX();    int y = static_cast<DOM::MouseEvent>(event).clientY();    if ( rend ) {      int xPos, yPos;      if ( rend->absolutePosition( xPos, yPos ) ) {        kdDebug() << "DOMMouseEvent::getValueProperty rend=" << rend << "  xPos=" << xPos << "  yPos=" << yPos << endl;        x -= xPos;        y -= yPos;      }    }    return Number( token == OffsetX ? x : y );  }  case CtrlKey:    return Boolean(static_cast<DOM::MouseEvent>(event).ctrlKey());  case ShiftKey:    return Boolean(static_cast<DOM::MouseEvent>(event).shiftKey());  case AltKey:    return Boolean(static_cast<DOM::MouseEvent>(event).altKey());  case MetaKey:    return Boolean(static_cast<DOM::MouseEvent>(event).metaKey());  case Button:  {    // Tricky. The DOM (and khtml) use 0 for LMB, 1 for MMB and 2 for RMB    // but MSIE uses 1=LMB, 2=RMB, 4=MMB, as a bitfield    int domButton = static_cast<DOM::MouseEvent>(event).button();    int button = domButton==0 ? 1 : domButton==1 ? 4 : domButton==2 ? 2 : 0;    return Number( (unsigned int)button );  }  case ToElement:    // MSIE extension - "the object toward which the user is moving the mouse pointer"    if (event.handle()->id() == DOM::EventImpl::MOUSEOUT_EVENT)      return getDOMNode(exec,static_cast<DOM::MouseEvent>(event).relatedTarget());    return getDOMNode(exec,static_cast<DOM::MouseEvent>(event).target());  case FromElement:    // MSIE extension - "object from which activation    // or the mouse pointer is exiting during the event" (huh?)    if (event.handle()->id() == DOM::EventImpl::MOUSEOUT_EVENT)      return getDOMNode(exec,static_cast<DOM::MouseEvent>(event).target());    /* fall through */  case RelatedTarget:    return getDOMNode(exec,static_cast<DOM::MouseEvent>(event).relatedTarget());  default:    kdWarning() << "Unhandled token in DOMMouseEvent::getValueProperty : " << token << endl;    return Value();  }}Value DOMMouseEventProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args){  if (!thisObj.inherits(&KJS::DOMMouseEvent::info)) {    Object err = Error::create(exec,TypeError);    exec->setException(err);    return err;  }  DOM::MouseEvent mouseEvent = static_cast<DOMMouseEvent *>(thisObj.imp())->toMouseEvent();  switch (id) {    case DOMMouseEvent::InitMouseEvent:      mouseEvent.initMouseEvent(args[0].toString(exec).string(), // typeArg                                args[1].toBoolean(exec), // canBubbleArg                                args[2].toBoolean(exec), // cancelableArg                                toAbstractView(args[3]), // viewArg                                args[4].toInt32(exec), // detailArg                                args[5].toInt32(exec), // screenXArg                                args[6].toInt32(exec), // screenYArg                                args[7].toInt32(exec), // clientXArg                                args[8].toInt32(exec), // clientYArg                                args[9].toBoolean(exec), // ctrlKeyArg                                args[10].toBoolean(exec), // altKeyArg                                args[11].toBoolean(exec), // shiftKeyArg                                args[12].toBoolean(exec), // metaKeyArg                                args[13].toInt32(exec), // buttonArg                                toNode(args[14])); // relatedTargetArg      return Undefined();  }  return Undefined();}// -------------------------------------------------------------------------const ClassInfo DOMKeyboardEvent::info = { "KeyboardEvent", &DOMUIEvent::info, &DOMKeyboardEventTable, 0 };/*@begin DOMKeyboardEventTable 5  keyIdentifier	DOMKeyboardEvent::KeyIdentifier	DontDelete|ReadOnly  keyLocation	DOMKeyboardEvent::KeyLocation	DontDelete|ReadOnly

⌨️ 快捷键说明

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