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

📄 render_replaced.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	resizeWidget( m_widget,		      m_width-borderLeft()-borderRight()-paddingLeft()-paddingRight(),		      m_height-borderLeft()-borderRight()-paddingLeft()-paddingRight() );    }#endif    setNeedsLayout(false);}#if APPLE_CHANGESvoid RenderWidget::sendConsumedMouseUp(const QPoint &mousePos, int button, int state){    RenderArena *arena = ref();    QMouseEvent e( QEvent::MouseButtonRelease, mousePos, button, state);    element()->dispatchMouseEvent(&e, EventImpl::MOUSEUP_EVENT, 0);    deref(arena);}#endifvoid RenderWidget::slotWidgetDestructed(){    m_widget = 0;}void RenderWidget::setStyle(RenderStyle *_style){    RenderReplaced::setStyle(_style);    if (m_widget)    {        m_widget->setFont(style()->font());        if (style()->visibility() != VISIBLE)            m_widget->hide();#if APPLE_CHANGES        else            m_widget->show();#endif    }}void RenderWidget::paint(PaintInfo& i, int _tx, int _ty){    if (!shouldPaint(i, _tx, _ty)) return;    _tx += m_x;    _ty += m_y;        if (shouldPaintBackgroundOrBorder() && i.phase != PaintActionOutline)         paintBoxDecorations(i, _tx, _ty);#if APPLE_CHANGES    if (!m_widget || !m_view || i.phase != PaintActionForeground ||        style()->visibility() != VISIBLE)        return;    // Move the widget if necessary.  We normally move and resize widgets during layout, but sometimes    // widgets can move without layout occurring (most notably when you scroll a document that    // contains fixed positioned elements).    int newX = _tx + borderLeft() + paddingLeft();    int newY = _ty + borderTop() + paddingTop();    if (m_view->childX(m_widget) != newX || m_view->childY(m_widget) != newY)        m_widget->move(newX, newY);        // Tell the widget to paint now.  This is the only time the widget is allowed    // to paint itself.  That way it will composite properly with z-indexed layers.    m_widget->paint(i.p, i.r);#else    if (!m_widget || !m_view || i.phase != PaintActionForeground)        return;        if (style()->visibility() != VISIBLE) {        m_widget->hide();        return;    }    int xPos = _tx+borderLeft()+paddingLeft();    int yPos = _ty+borderTop()+paddingTop();    int childw = m_widget->width();    int childh = m_widget->height();    if ( (childw == 2000 || childh == 3072) && m_widget->inherits( "KHTMLView" ) ) {	KHTMLView *vw = static_cast<KHTMLView *>(m_widget);	int cy = m_view->contentsY();	int ch = m_view->visibleHeight();	int childx = m_view->childX( m_widget );	int childy = m_view->childY( m_widget );	int xNew = xPos;	int yNew = childy;	// 	qDebug("cy=%d, ch=%d, childy=%d, childh=%d", cy, ch, childy, childh );	if ( childh == 3072 ) {	    if ( cy + ch > childy + childh ) {		yNew = cy + ( ch - childh )/2;	    } else if ( cy < childy ) {		yNew = cy + ( ch - childh )/2;	    }// 	    qDebug("calculated yNew=%d", yNew);	}	yNew = kMin( yNew, yPos + m_height - childh );	yNew = kMax( yNew, yPos );	if ( yNew != childy || xNew != childx ) {	    if ( vw->contentsHeight() < yNew - yPos + childh )		vw->resizeContents( vw->contentsWidth(), yNew - yPos + childh );	    vw->setContentsPos( xNew - xPos, yNew - yPos );	}	xPos = xNew;	yPos = yNew;    }    m_view->addChild(m_widget, xPos, yPos );    m_widget->show();#endif}void RenderWidget::handleFocusOut(){}bool RenderWidget::eventFilter(QObject* /*o*/, QEvent* e){    if ( !element() ) return true;    RenderArena *arena = ref();    DOM::NodeImpl *elem = element();    elem->ref();    bool filtered = false;    //kdDebug() << "RenderWidget::eventFilter type=" << e->type() << endl;    switch(e->type()) {    case QEvent::FocusOut:       //static const char* const r[] = {"Mouse", "Tab", "Backtab", "ActiveWindow", "Popup", "Shortcut", "Other" };        //kdDebug() << "RenderFormElement::eventFilter FocusOut widget=" << m_widget << " reason:" << r[QFocusEvent::reason()] << endl;        // Don't count popup as a valid reason for losing the focus        // (example: opening the options of a select combobox shouldn't emit onblur)        if ( QFocusEvent::reason() != QFocusEvent::Popup )       {           //kdDebug(6000) << "RenderWidget::eventFilter captures FocusOut" << endl;            if (elem->getDocument()->focusNode() == elem)                elem->getDocument()->setFocusNode(0);//             if (  elem->isEditable() ) {//                 KHTMLPartBrowserExtension *ext = static_cast<KHTMLPartBrowserExtension *>( elem->view->part()->browserExtension() );//                 if ( ext )  ext->editableWidgetBlurred( m_widget );//             }	    handleFocusOut();        }        break;    case QEvent::FocusIn:        //kdDebug(6000) << "RenderWidget::eventFilter captures FocusIn" << endl;        elem->getDocument()->setFocusNode(elem);//         if ( isEditable() ) {//             KHTMLPartBrowserExtension *ext = static_cast<KHTMLPartBrowserExtension *>( elem->view->part()->browserExtension() );//             if ( ext )  ext->editableWidgetFocused( m_widget );//         }        break;    case QEvent::MouseButtonPress://       handleMousePressed(static_cast<QMouseEvent*>(e));        break;    case QEvent::MouseButtonRelease://    {//         int absX, absY;//         absolutePosition(absX,absY);//         QMouseEvent* _e = static_cast<QMouseEvent*>(e);//         m_button = _e->button();//         m_state  = _e->state();//         QMouseEvent e2(e->type(),QPoint(absX,absY)+_e->pos(),_e->button(),_e->state());//         elem->dispatchMouseEvent(&e2,EventImpl::MOUSEUP_EVENT,m_clickCount);//         if((m_mousePos - e2.pos()).manhattanLength() <= QApplication::startDragDistance()) {//             // DOM2 Events section 1.6.2 says that a click is if the mouse was pressed//             // and released in the "same screen location"//             // As people usually can't click on the same pixel, we're a bit tolerant here//             elem->dispatchMouseEvent(&e2,EventImpl::CLICK_EVENT,m_clickCount);//         }//         if(!isRenderButton()) {//             // ### DOMActivate is also dispatched for thigs like selects & textareas -//             // not sure if this is correct//             elem->dispatchUIEvent(EventImpl::DOMACTIVATE_EVENT,m_isDoubleClick ? 2 : 1);//             elem->dispatchMouseEvent(&e2, m_isDoubleClick ? EventImpl::KHTML_DBLCLICK_EVENT : EventImpl::KHTML_CLICK_EVENT, m_clickCount);//             m_isDoubleClick = false;//         }//         else//             // save position for slotClicked - see below -//             m_mousePos = e2.pos();//     }    break;    case QEvent::MouseButtonDblClick://     {//         m_isDoubleClick = true;//         handleMousePressed(static_cast<QMouseEvent*>(e));//     }    break;    case QEvent::MouseMove://     {//         int absX, absY;//         absolutePosition(absX,absY);//         QMouseEvent* _e = static_cast<QMouseEvent*>(e);//         QMouseEvent e2(e->type(),QPoint(absX,absY)+_e->pos(),_e->button(),_e->state());//         elem->dispatchMouseEvent(&e2);//         // ### change cursor like in KHTMLView?//     }    break;    case QEvent::KeyPress:    case QEvent::KeyRelease:    {        if (!elem->dispatchKeyEvent(static_cast<QKeyEvent*>(e)))            filtered = true;        break;    }    default: break;    };    elem->deref();    // stop processing if the widget gets deleted, but continue in all other cases    if (hasOneRef())        filtered = true;    deref(arena);    return filtered;}void RenderWidget::deref(RenderArena *arena){    if (_ref) _ref--;     if (!_ref)        arenaDelete(arena);}#if APPLE_CHANGESvoid RenderWidget::updateWidgetPositions(){    if (!m_widget)        return;        int x, y, width, height;    absolutePosition(x,y);    x += borderLeft() + paddingLeft();    y += borderTop() + paddingTop();    width = m_width - borderLeft() - borderRight() - paddingLeft() - paddingRight();    height = m_height - borderTop() - borderBottom() - paddingTop() - paddingBottom();    QRect newBounds(x,y,width,height);    QRect oldBounds(m_widget->frameGeometry());    if (newBounds != oldBounds) {        // The widget changed positions.  Update the frame geometry.        if (checkForRepaintDuringLayout()) {            RenderCanvas* c = canvas();            if (!c->printingMode()) {                c->repaintViewRectangle(oldBounds);                c->repaintViewRectangle(newBounds);            }        }        RenderArena *arena = ref();        element()->ref();        m_widget->setFrameGeometry(newBounds);        element()->deref();        deref(arena);    }}#endifvoid RenderWidget::setSelectionState(SelectionState s) {    if (m_selectionState != s) {        m_selectionState = s;        m_widget->setIsSelected(m_selectionState != SelectionNone);    }}#include "render_replaced.moc"

⌨️ 快捷键说明

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