📄 mghtmlview.cpp
字号:
case CURSOR_E_RESIZE: case CURSOR_W_RESIZE: c = GetSystemCursor (IDC_SIZEWE); break; case CURSOR_N_RESIZE: case CURSOR_S_RESIZE: c = GetSystemCursor (IDC_SIZENS); break; case CURSOR_NE_RESIZE: case CURSOR_SW_RESIZE: c = GetSystemCursor (IDC_SIZENESW); break; case CURSOR_NW_RESIZE: case CURSOR_SE_RESIZE: c = GetSystemCursor (IDC_SIZENWSE); break; case CURSOR_TEXT: c = GetSystemCursor (IDC_IBEAM); break; case CURSOR_WAIT: c = GetSystemCursor (IDC_WAIT); break; case CURSOR_HELP: case CURSOR_DEFAULT: break; } } SetCursor(c); m_part->khtmlMouseMoveEvent(xm, ym, innerNode, url); // !!!!! modify it to give paramater.}void MGHTMLView::OnMouseReleaseEvent(int x, int y, DWORD flags){ if(!m_part->docImpl()) return; int xm, ym; xm = x + m_xOffset; ym = y + m_yOffset; DOMString url; NodeImpl *innerNode=0; long offset=0; m_part->docImpl()->mouseEvent( xm, ym, flags, DOM::NodeImpl::MousePress, 0, 0, url, innerNode, offset); m_part->khtmlMouseReleaseEvent(xm, ym, innerNode, url); // !!!!!! modify it to give paramater.}void MGHTMLView::OnKeyPressEvent(int key, DWORD flags){#ifdef JAVASCRIPT_ENABLE {#if DEBUG_BY_XHTANG fprintf(stderr,"MGHTMLView::OnKeyPressEvent-1\n");#endif if((m_JsEventTypeToCapture & mgjsDOMEvent::KEYPRESS)) { m_JsEventType = mgjsDOMEvent::KEYPRESS; m_JsKeyEventValue=key; EventEvaluateJavaScript(&m_JSContext,&m_JSObject,this); }#if DEBUG_BY_XHTANG fprintf(stderr,"MGHTMLView::OnKeyPressEvent-2\n");#endif }#endif switch (key) { case SCANCODE_CURSORBLOCKDOWN: //case SCANCODE_J: scrollBy( 0, 10 ); break; case SCANCODE_CURSORBLOCKUP: //case SCANCODE_K: scrollBy( 0, -10 ); break; case SCANCODE_CURSORBLOCKRIGHT: //case SCANCODE_L: scrollBy( 10, 0 ); break; case SCANCODE_CURSORBLOCKLEFT: //case SCANCODE_H: scrollBy( -10, 0 ); break; case SCANCODE_PAGEDOWN: scrollBy (0, (height () > 10)?(height () - 10):height()); break; case SCANCODE_PAGEUP: scrollBy (0, (height () > 10)?(10 - height ()):height()); break; case SCANCODE_ENTER: case SCANCODE_SPACE: break; case SCANCODE_HOME: setContentsPos( 0, 0 ); break; case SCANCODE_END: setContentsPos( 0, m_clntSize.height() - height() ); break; default: break; }}void MGHTMLView::OnKeyReleaseEvent(int key, DWORD flags){ switch(key) { case SCANCODE_ENTER: case SCANCODE_SPACE: toggleActLink(true); return; break; }}bool MGHTMLView::focusNextPrevChild( bool next ){// i do not know what it does. ????? !!!!!!// if (!gotoLink(next))// {// bool retval = QScrollView::focusNextPrevChild( next );// viewport()->clearFocus();// return retval;// }// else return true;}void MGHTMLView::doAutoScroll(){ // i do not know what it does. ????? !!!!!// QPoint pos = QCursor::pos();// pos = viewport()->mapFromGlobal( pos ); // int xm, ym;// viewportToContents(pos.x(), pos.y(), xm, ym);// pos = QPoint(pos.x() - viewport()->x(), pos.y() - viewport()->y());// if ( (pos.y() < 0) || (pos.y() > visibleHeight()) ||// (pos.x() < 0) || (pos.x() > visibleWidth()) )// {// ensureVisible( xm, ym, 0, 5 );// }}DOM::NodeImpl *MGHTMLView::nodeUnderMouse() const{ return d->underMouse;}bool MGHTMLView::gotoLink(){ return gotoLink(d->currentNode);}bool MGHTMLView::gotoLink(HTMLElementImpl *n){ if(d->currentNode) d->currentNode->blur(); if(!n) { d->currentNode = 0; return false; } if (!n->isSelectable()) { d->currentNode = 0; return false; } n->focus(); if (d->linkPressed) n->setKeyboardFocus(DOM::ActivationActive); int x = 0, y = 0; n->getAnchorPosition(x,y); int xe = 0, ye = 0; n->getAnchorBounds(xe,ye); int deltax; int deltay; int borderX, borderY; borderX = borderY = 30; // is ypos of target above upper border? if (y < contentsY() + borderY) { deltay = y - contentsY() - borderY; } // is ypos of target below lower border: else if (ye + borderY > contentsY() + height()) { deltay = ye + borderY - ( contentsY() + height() ); } else deltay = 0; // is xpos of target left of the view's border? if (x - borderX - contentsX() < 0) { deltax = x - contentsX() - borderX; } // is xpos of target right of the view's right border? else if (xe + borderX > contentsX() + width()) { deltax = xe + borderX - ( contentsX() + width() ); } else deltax = 0; if (!d->currentNode) { scrollBy(deltax, deltay); d->currentNode = n; return true; } int maxx = width()-borderX; int maxy = height()-borderY; int scrollX,scrollY; scrollX = deltax > 0 ? (deltax > maxx ? maxx : deltax) : deltax == 0 ? 0 : (deltax>-maxx ? deltax : -maxx); scrollY = deltay > 0 ? (deltay > maxy ? maxy : deltay) : deltay == 0 ? 0 : (deltay>-maxy ? deltay : -maxy); scrollBy(scrollX, scrollY); // generate abs(scroll.) if (scrollX<0) scrollX=-scrollX; if (scrollY<0) scrollY=-scrollY; // only set cursor to new node if scrolling could make // the link completely visible if ( (scrollX!=maxx) && (scrollY!=maxy) ) { d->currentNode = n; } return true;}bool MGHTMLView::gotoLink(bool forward){ if (!m_part->docImpl()) return false; int currentTabIndex = (d->currentNode?d->currentNode->tabIndex():-1); HTMLElementImpl *n=0; // search next link in current scope // (scope means either the links without tabindex or with tabindex) n = m_part->docImpl()->findLink(d->currentNode, forward, currentTabIndex); if (currentTabIndex!=-1 && (!n || n->tabIndex()!=currentTabIndex)) { HTMLElementImpl *m = m_part->docImpl()->findLink(0, forward, currentTabIndex); if (m && m!=d->currentNode && m->tabIndex()==currentTabIndex) n = m; } if (!n) { int maxTabIndex = 0; if (forward && maxTabIndex!=-1) maxTabIndex = 0; else maxTabIndex = m_part->docImpl()->findHighestTabIndex(); if (maxTabIndex!=-1) n = m_part->docImpl()->findLink(0, forward, maxTabIndex); else n = 0; } return gotoLink(n);}bool MGHTMLView::gotoNextLink(){ return gotoLink(true); }bool MGHTMLView::gotoPrevLink(){ return gotoLink(false); }void MGHTMLView::toggleActLink(bool actState){ if ( d->currentNode ) { //retrieve url HTMLElementImpl *e = static_cast<HTMLElementImpl *>(d->currentNode); if (!actState) // inactive->active { int x,y; d->currentNode->setKeyboardFocus(DOM::ActivationActive); d->originalNode=d->currentNode; d->linkPressed=true; e->getAnchorPosition(x,y);// ensureVisible(x,y); // make (x,y) visible } else //active->inactive { e->setKeyboardFocus(DOM::ActivationOff); d->linkPressed=false; if (d->currentNode==d->originalNode) { if (e->id()==ID_A) { HTMLAnchorElementImpl *a = static_cast<HTMLAnchorElementImpl *>(d->currentNode); d->currentNode=0; m_part->urlSelected( a->areaHref().string(), 1, 0, a->targetRef().string()); // !!!!! modify m_part } } d->originalNode=0; } }}void MGHTMLView::useSlowRepaints(){ d->useSlowRepaints = true;// setStaticBackground(true);}void MGHTMLView::setVScrollBarMode (LONG mode ){// d->vmode = mode; !!!!!// QScrollView::setVScrollBarMode(mode);}void MGHTMLView::setHScrollBarMode (LONG mode ){// d->hmode = mode; !!!!!// QScrollView::setHScrollBarMode(mode);}void MGHTMLView::restoreScrollBar ( ){ SetScrollPos (getHwnd(), SB_HORZ, m_xOffset); SetScrollPos (getHwnd(), SB_VERT, m_yOffset); // int ow = visibleWidth();// QScrollView::setVScrollBarMode(d->vmode);// if (visibleWidth() != ow)// {// layout();// updateContents(contentsX(),contentsY(),visibleWidth(),visibleHeight());// }}void MGHTMLView::setLinkCursor(DOM::HTMLElementImpl *n){ //if (lstViews) //{ // lstViews->first(); // while(lstViews->next()) // { // MGHTMLView * actView = lstViews->current(); // if (!actView || !this) // return; // if (actView != this) // { // if (actView->d->currentNode && actView->d->currentNode!=n) // actView->d->currentNode->blur(); // actView->d->currentNode = 0; // } // } //} if (d->currentNode != n) { if (d->currentNode) d->currentNode->blur(); d->currentNode = n; if (n) { n->setKeyboardFocus(DOM::ActivationPassive); n->focus(); } } d->linkPressed=false;}void MGHTMLView::scrollBy (int deltax, int deltay){ if (m_yOffset + deltay < 0) deltay = - m_yOffset; else if (m_yOffset + deltay + visibleHeight() >= m_clntSize.height() ) deltay = m_clntSize.height() - visibleHeight() - m_yOffset; if (m_xOffset + deltax < 0) deltax = - m_xOffset; else if (m_xOffset + deltax + visibleWidth() >= m_clntSize.width () ) deltax = m_clntSize.width() - visibleWidth() - m_xOffset; ScrollWindow (getHwnd(), -deltax, -deltay, NULL, NULL); m_part->m_isMoved = true; m_xOffset += deltax; m_yOffset += deltay; SetScrollPos( m_hWnd, SB_HORZ, m_xOffset ); SetScrollPos( m_hWnd, SB_VERT, m_yOffset ); //ResetScrollBar ();}void MGHTMLView::setContentsPos( int x, int y){ if (y < 0) y = 0; if (y > m_clntSize.height() - visibleHeight ()) y = m_clntSize.height() - visibleHeight (); if (x < 0) x = 0; if (x > m_clntSize.width() - visibleWidth ()) x = m_clntSize.width() - visibleWidth (); m_xOffset = x; m_yOffset = y; m_part->m_isMoved = true; InvalidateRect (getHwnd (), NULL, TRUE); //ResetScrollBar ();}int MGHTMLView::HTMLViewProc( HWND hWnd, int message, WPARAM wParam, LPARAM lParam ){ MGHTMLView *view = ( MGHTMLView* ) GetWindowAdditionalData( hWnd ); JobElement * temp; //DOM::HTMLDocumentImpl *document; HDC hdc; int w = 0; int h = 0; switch( message ) { case MSG_CREATE: break; case MSG_PAINT: if( view->getHwnd() != (HWND)HWND_INVALID ) { view->ShowChildWidget( false ); hdc = BeginPaint( hWnd ); view->drawContents(hdc, -view->contentsX(), -view->contentsY(), view->visibleWidth(), view->visibleHeight()); EndPaint( hWnd, hdc ); view->ShowChildWidget( true ); } break; case MSG_VSCROLL: switch (wParam)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -