From 5154c6f6441da255f7657b58865a82bb4e042cdc Mon Sep 17 00:00:00 2001 From: Alexey Uzhva Date: Tue, 1 May 2007 16:39:37 +0000 Subject: qt4 painting fixes (userlist,input line, channel and query headers) git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@546 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/kvirc/ui/kvi_channel.cpp | 10 +++++ src/kvirc/ui/kvi_frame.cpp | 6 +-- src/kvirc/ui/kvi_input.cpp | 66 ++++++++++++++++++++++--------- src/kvirc/ui/kvi_input.h | 1 + src/kvirc/ui/kvi_menubar.cpp | 2 +- src/kvirc/ui/kvi_query.cpp | 5 +-- src/kvirc/ui/kvi_query.h | 2 +- src/kvirc/ui/kvi_userlistview.cpp | 41 ++++++++++++++----- src/modules/notifier/notifier_vc05.vcproj | 8 ++++ 9 files changed, 105 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/kvirc/ui/kvi_channel.cpp b/src/kvirc/ui/kvi_channel.cpp index 6a1fd2660..a18a12e39 100644 --- a/src/kvirc/ui/kvi_channel.cpp +++ b/src/kvirc/ui/kvi_channel.cpp @@ -193,6 +193,8 @@ KviChannel::KviChannel(KviFrame * lpFrm,KviConsole * lpConsole,const char * name #ifndef COMPILE_USE_QT4 m_pHideToolsButton->setUsesBigPixmap(false); +#else + m_pHideToolsButton->setAutoRaise(true); #endif m_pHideToolsButton->setFixedWidth(10); @@ -543,11 +545,19 @@ QPixmap * KviChannel::myIconPtr() void KviChannel::resizeEvent(QResizeEvent *e) { +#ifdef COMPILE_USE_QT4 + int hght = m_pInput->heightHint(); + int hght2 = m_pTopicWidget->sizeHint().height(); + m_pButtonBox->setGeometry(0,0,width(),hght2); + m_pSplitter->setGeometry(0,hght2,width(),height() - (hght + hght2)); + m_pInput->setGeometry(0,height() - hght,width(),hght); +#else int hght = m_pInput->heightHint(); int hght2 = m_pButtonBox->sizeHint().height(); m_pButtonBox->setGeometry(0,0,width(),hght2); m_pSplitter->setGeometry(0,hght2,width(),height() - (hght + hght2)); m_pInput->setGeometry(0,height() - hght,width(),hght); +#endif } QSize KviChannel::sizeHint() const diff --git a/src/kvirc/ui/kvi_frame.cpp b/src/kvirc/ui/kvi_frame.cpp index c69e1150b..362e6595c 100644 --- a/src/kvirc/ui/kvi_frame.cpp +++ b/src/kvirc/ui/kvi_frame.cpp @@ -127,12 +127,12 @@ KviFrame::KviFrame() setUsesBigPixmaps(KVI_OPTION_BOOL(KviOption_boolUseBigIcons)); - // This theoretically had to exists before KviMdiManager (that uses enterSdiMode) - m_pMenuBar = new KviMenuBar(this,"main_menu_bar"); - m_pMdi = new KviMdiManager(m_pSplitter,this,"mdi_manager"); connect(m_pMdi,SIGNAL(enteredSdiMode()),this,SLOT(enteredSdiMode())); connect(m_pMdi,SIGNAL(leftSdiMode()),this,SLOT(leftSdiMode())); + + // This theoretically had to exists before KviMdiManager (that uses enterSdiMode) + m_pMenuBar = new KviMenuBar(this,"main_menu_bar"); if(KVI_OPTION_BOOL(KviOption_boolStatusBarVisible)) { diff --git a/src/kvirc/ui/kvi_input.cpp b/src/kvirc/ui/kvi_input.cpp index 108330fda..93ebe749d 100644 --- a/src/kvirc/ui/kvi_input.cpp +++ b/src/kvirc/ui/kvi_input.cpp @@ -98,6 +98,8 @@ extern KviTextIconWindow * g_pTextIconWindow; extern KviHistoryWindow * g_pHistoryWindow; extern KviTalPopupMenu * g_pInputPopup; +static QFontMetrics * g_pLastFontMetrics = 0; + #ifdef COMPILE_PSEUDO_TRANSPARENCY extern QPixmap * g_pShadedChildGlobalDesktopBackground; @@ -228,6 +230,8 @@ KviInputEditor::KviInputEditor(QWidget * par,KviWindow *wnd,KviUserListView * vi KviInputEditor::~KviInputEditor() { + if(g_pLastFontMetrics) delete g_pLastFontMetrics; + g_pLastFontMetrics = 0; if(m_pIconMenu)delete m_pIconMenu; delete m_pHistory; if(m_iCursorTimer)killTimer(m_iCursorTimer); @@ -348,10 +352,15 @@ void KviInputEditor::drawContents(QPainter *p) QPixmap * pDoubleBufferPixmap = doublebuffer.pixmap(); QPainter pa(pDoubleBufferPixmap); + SET_ANTI_ALIASING(pa); pa.setFont(KVI_OPTION_FONT(KviOption_fontInput)); QFontMetrics fm(pa.fontMetrics()); + + if(!g_pLastFontMetrics) + g_pLastFontMetrics = new QFontMetrics(pa.fontMetrics()); + if(g_bInputFontMetricsDirty) recalcFontMetrics(&fm); @@ -403,8 +412,8 @@ void KviInputEditor::drawContents(QPainter *p) // TODO Refactor: write a function to combine this with the code determining iIMStart and iIMSelectionStart if(iSelStart < m_iFirstVisibleChar)iSelStart = m_iFirstVisibleChar; - int xLeft = xPositionFromCharIndex(iSelStart,TRUE); - int xRight = xPositionFromCharIndex(m_iSelectionEnd + 1,TRUE); + int xLeft = xPositionFromCharIndex(fm,iSelStart,TRUE); + int xRight = xPositionFromCharIndex(fm,m_iSelectionEnd + 1,TRUE); // pa.setRasterOp(Qt::NotROP); pa.fillRect(xLeft,frameWidth(),xRight - xLeft,widgetWidth,KVI_OPTION_COLOR(KviOption_colorInputSelectionBackground)); @@ -422,8 +431,8 @@ void KviInputEditor::drawContents(QPainter *p) // TODO Write a function to combine IM selection drawing code. maybe the preedit area too. int iIMSelectionStart = m_iIMSelectionBegin; if(iIMSelectionStart < m_iFirstVisibleChar) iIMSelectionStart = m_iFirstVisibleChar; - int xIMSelectionLeft = xPositionFromCharIndex(iIMSelectionStart,TRUE); - int xIMSelectionRight = xPositionFromCharIndex(iIMSelectionStart + m_iIMSelectionLength,TRUE); + int xIMSelectionLeft = xPositionFromCharIndex(fm,iIMSelectionStart,TRUE); + int xIMSelectionRight = xPositionFromCharIndex(fm,iIMSelectionStart + m_iIMSelectionLength,TRUE); // pa.setRasterOp(Qt::NotROP); pa.fillRect(xIMSelectionLeft,0,xIMSelectionRight - xIMSelectionLeft, widgetWidth,KVI_OPTION_COLOR(KviOption_colorInputSelectionBackground)); // pa.setRasterOp(Qt::CopyROP); @@ -431,8 +440,8 @@ void KviInputEditor::drawContents(QPainter *p) // highlight the IM selection int iIMStart = m_iIMStart; if(m_iIMStart < m_iFirstVisibleChar) m_iIMStart = m_iFirstVisibleChar; - int xIMLeft = xPositionFromCharIndex(iIMStart,TRUE); - int xIMRight = xPositionFromCharIndex(iIMStart + m_iIMLength,TRUE); + int xIMLeft = xPositionFromCharIndex(fm,iIMStart,TRUE); + int xIMRight = xPositionFromCharIndex(fm,iIMStart + m_iIMLength,TRUE); // underline the IM preedit // Maybe should be put in drawTextBlock, similar to drawing underlined text @@ -455,10 +464,7 @@ void KviInputEditor::drawContents(QPainter *p) pa.drawText(curXPos + 2,textBaseline,s,1); - pa.drawLine(curXPos,top,curXPos+m_iBlockWidth-1,top); - pa.drawLine(curXPos,top,curXPos,bottom); - pa.drawLine(curXPos,bottom,curXPos+m_iBlockWidth,bottom); - pa.drawLine(curXPos+m_iBlockWidth-1,top,curXPos+m_iBlockWidth-1,bottom); + pa.drawRect(curXPos,top,m_iBlockWidth-1,bottom); } else { if(m_iSelectionBegin!=-1) { @@ -521,14 +527,14 @@ void KviInputEditor::drawContents(QPainter *p) { QChar c = m_szTextBuffer.at(m_iBlockLen); #ifdef COMPILE_USE_QT4 - m_iLastCursorXPosition+= fm.width(c); + m_iLastCursorXPosition+= c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c); #else m_iLastCursorXPosition+= (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : fm.width(c); #endif m_iBlockLen++; } -// m_iLastCursorXPosition = xPositionFromCharIndex(m_iCursorPosition); + //m_iLastCursorXPosition = cur1XPos; if(m_bCursorOn) { @@ -643,7 +649,7 @@ void KviInputEditor::extractNextBlock(int idx,QFontMetrics & fm,int curXPos,int { m_iBlockLen++; #ifdef COMPILE_USE_QT4 - int xxx = fm.width(c); + int xxx = c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c);; #else int xxx = (c.unicode() < 256 ? g_iInputFontCharWidth[c.unicode()] : fm.width(c)); #endif @@ -2067,7 +2073,7 @@ void KviInputEditor::moveRightFirstVisibleCharToShowCursor() QChar c = m_szTextBuffer.at(m_iCursorPosition); #ifdef COMPILE_USE_QT4 - m_iLastCursorXPosition += fm.width(c); + m_iLastCursorXPosition += c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c);; #else m_iLastCursorXPosition += (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : fm.width(c); #endif @@ -2075,7 +2081,7 @@ void KviInputEditor::moveRightFirstVisibleCharToShowCursor() { c = m_szTextBuffer.at(m_iFirstVisibleChar); #ifdef COMPILE_USE_QT4 - m_iLastCursorXPosition -= fm.width(c); + m_iLastCursorXPosition -= c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c);; #else m_iLastCursorXPosition -= (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : fm.width(c); #endif @@ -2110,7 +2116,7 @@ int KviInputEditor::charIndexFromXPosition(int xPos) { QChar c = m_szTextBuffer.at(curChar); #ifdef COMPILE_USE_QT4 - int widthCh = fm.width(c); + int widthCh = c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c);; #else int widthCh = (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : fm.width(c); #endif @@ -2124,17 +2130,16 @@ int KviInputEditor::charIndexFromXPosition(int xPos) return curChar; } -int KviInputEditor::xPositionFromCharIndex(int chIdx,bool bContentsCoords) +int KviInputEditor::xPositionFromCharIndex(QFontMetrics& fm,int chIdx,bool bContentsCoords) { // FIXME: this could use fm.width(m_szTextBuffer,chIdx) int curXPos = bContentsCoords ? KVI_INPUT_MARGIN : frameWidth()+KVI_INPUT_MARGIN; int curChar = m_iFirstVisibleChar; - QFontMetrics fm(KVI_OPTION_FONT(KviOption_fontInput)); while(curChar < chIdx) { QChar c = m_szTextBuffer.at(curChar); #ifdef COMPILE_USE_QT4 - curXPos += fm.width(c); + curXPos += c.unicode() < 32 ? fm.width(getSubstituteChar(c.unicode())) + 3 : fm.width(c);; #else curXPos += (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : fm.width(c); #endif @@ -2143,6 +2148,26 @@ int KviInputEditor::xPositionFromCharIndex(int chIdx,bool bContentsCoords) return curXPos; } +int KviInputEditor::xPositionFromCharIndex(int chIdx,bool bContentsCoords) +{ + // FIXME: this could use fm.width(m_szTextBuffer,chIdx) + int curXPos = bContentsCoords ? KVI_INPUT_MARGIN : frameWidth()+KVI_INPUT_MARGIN; + int curChar = m_iFirstVisibleChar; + debug("%i",g_pLastFontMetrics); + if(!g_pLastFontMetrics) g_pLastFontMetrics = new QFontMetrics(KVI_OPTION_FONT(KviOption_fontInput)); + while(curChar < chIdx) + { + QChar c = m_szTextBuffer.at(curChar); +#ifdef COMPILE_USE_QT4 + curXPos += c.unicode() < 32 ? g_pLastFontMetrics->width(getSubstituteChar(c.unicode())) + 3 : g_pLastFontMetrics->width(c); +#else + curXPos += (c.unicode() < 256) ? g_iInputFontCharWidth[c.unicode()] : g_pLastFontMetrics->width(c); +#endif + curChar++; + } + return curXPos; +} + /* @doc: texticons @type: @@ -2592,6 +2617,9 @@ void KviInput::insertText(const QString& text) void KviInput::applyOptions() { + if(g_pLastFontMetrics) delete g_pLastFontMetrics; + g_pLastFontMetrics = 0; + if(KVI_OPTION_BOOL(KviOption_boolDisableInputHistory))//G&N mar 2005 { QIconSet is1; diff --git a/src/kvirc/ui/kvi_input.h b/src/kvirc/ui/kvi_input.h index f1c11d595..2477db2f8 100644 --- a/src/kvirc/ui/kvi_input.h +++ b/src/kvirc/ui/kvi_input.h @@ -164,6 +164,7 @@ private: void repaintWithCursorOn(); void selectOneChar(int pos); int charIndexFromXPosition(int xPos); + int xPositionFromCharIndex(QFontMetrics& fm,int chIdx,bool bContentsCoords=FALSE); int xPositionFromCharIndex(int chIdx,bool bContentsCoords=FALSE); void killDragTimer(); void handleDragSelection(); diff --git a/src/kvirc/ui/kvi_menubar.cpp b/src/kvirc/ui/kvi_menubar.cpp index b406cb9c9..6407bcf5d 100644 --- a/src/kvirc/ui/kvi_menubar.cpp +++ b/src/kvirc/ui/kvi_menubar.cpp @@ -80,7 +80,7 @@ KviMenuBar::KviMenuBar(KviFrame * par,const char * name) connect(pop,SIGNAL(aboutToShow()),this,SLOT(setupSettingsPopup())); addDefaultItem(__tr2qs("&Settings"),pop); - //addDefaultItem(__tr2qs("&Window"),par->mdiManager()->windowPopup()); + addDefaultItem(__tr2qs("&Window"),par->mdiManager()->windowPopup()); pop = new KviTalPopupMenu(this,"help"); connect(pop,SIGNAL(aboutToShow()),this,SLOT(setupHelpPopup())); diff --git a/src/kvirc/ui/kvi_query.cpp b/src/kvirc/ui/kvi_query.cpp index edd2acd69..bfaf14147 100644 --- a/src/kvirc/ui/kvi_query.cpp +++ b/src/kvirc/ui/kvi_query.cpp @@ -79,10 +79,9 @@ KviQuery::KviQuery(KviFrame * lpFrm,KviConsole * lpConsole,const QString &nick) // The button box on the right //KviTalHBox * box = new KviTalHBox(m_pTopSplitter,"button_box"); if(KVI_OPTION_BOOL(KviOption_boolShowExtendedInfoInQueryLabel)) - m_pButtonGrid= new KviTalGrid(2,Qt::Vertical,m_pButtonBox); + m_pButtonGrid= (QFrame*) new KviTalGrid(2,Qt::Horizontal,m_pButtonBox); else - m_pButtonGrid= new KviTalGrid(1,Qt::Vertical,m_pButtonBox); - + m_pButtonGrid= (QFrame*) new KviTalGrid(1,Qt::Horizontal,m_pButtonBox); createTextEncodingButton(m_pButtonGrid); diff --git a/src/kvirc/ui/kvi_query.h b/src/kvirc/ui/kvi_query.h index 96f141991..2603d1066 100644 --- a/src/kvirc/ui/kvi_query.h +++ b/src/kvirc/ui/kvi_query.h @@ -52,7 +52,7 @@ protected: KviWindowToolPageButton * m_pListViewButton; int m_iFlags; KviThemedLabel * m_pLabel; - KviTalGrid * m_pButtonGrid; + QFrame * m_pButtonGrid; protected: virtual QPixmap * myIconPtr(); virtual void fillCaptionBuffers(); diff --git a/src/kvirc/ui/kvi_userlistview.cpp b/src/kvirc/ui/kvi_userlistview.cpp index 9e9811480..b39fc404d 100644 --- a/src/kvirc/ui/kvi_userlistview.cpp +++ b/src/kvirc/ui/kvi_userlistview.cpp @@ -153,7 +153,7 @@ void KviUserListEntry::recalcSize() { KviAvatar * av = m_pGlobalData->avatar(); m_iHeight = m_pListView->m_iFontHeight; - if(KVI_OPTION_BOOL(KviOption_boolShowUserChannelIcons) && (m_iHeight < 22))m_iHeight = 22; + if(KVI_OPTION_BOOL(KviOption_boolShowUserChannelIcons) && (m_iHeight < 20))m_iHeight = 20; if(!KVI_OPTION_BOOL(KviOption_boolDisableAvatars))//G&N 2005 { @@ -1421,6 +1421,10 @@ void KviUserListViewArea::paintEvent(QPaintEvent *ev) SET_ANTI_ALIASING(p); p.setFont(KVI_OPTION_FONT(KviOption_fontUserListView)); +#ifdef COMPILE_USE_QT4 + QFontMetrics fm(p.fontMetrics()); +#endif + #ifdef COMPILE_PSEUDO_TRANSPARENCY if(g_pShadedChildGlobalDesktopBackground) { @@ -1680,10 +1684,18 @@ void KviUserListViewArea::paintEvent(QPaintEvent *ev) KVI_SMALLICON_VOICE : KVI_SMALLICON_USEROP)))) \ ) \ ); - p.drawPixmap(theX,theY,*ico); +#ifdef COMPILE_USE_QT4 + p.drawPixmap(theX,theY+(fm.lineSpacing()-16/*size of small icon*/)/2,*ico); +#else + p.drawPixmap(theX,theY+(m_pListView->m_iFontHeight-16/*size of small icon*/)/2,*ico); +#endif } theX +=18; - p.drawText(iAvatarAndTextX,theY,wdth - theX,m_pListView->m_iFontHeight,Qt::AlignLeft|Qt::AlignVCenter,e->m_szNick); +#ifdef COMPILE_USE_QT4 + p.drawText(iAvatarAndTextX,theY,wdth - theX,fm.lineSpacing(),Qt::AlignLeft|Qt::AlignVCenter,e->m_szNick); +#else + p.drawText(iAvatarAndTextX,theY,wdth - theX,m_pListView->m_iFontHeight,Qt::AlignLeft|Qt::AlignVCenter,e->m_szNick); +#endif } else { char flag = m_pListView->getUserFlag(e); @@ -1691,9 +1703,17 @@ void KviUserListViewArea::paintEvent(QPaintEvent *ev) { QString ttt = QChar(flag); ttt += e->m_szNick; +#ifdef COMPILE_USE_QT4 + p.drawText(iAvatarAndTextX,theY,wdth - theX,fm.lineSpacing(),Qt::AlignLeft|Qt::AlignVCenter,ttt); +#else p.drawText(iAvatarAndTextX,theY,wdth - theX,m_pListView->m_iFontHeight,Qt::AlignLeft|Qt::AlignVCenter,ttt); +#endif } else { +#ifdef COMPILE_USE_QT4 + p.drawText(iAvatarAndTextX,theY,wdth - theX,fm.lineSpacing(),Qt::AlignLeft|Qt::AlignVCenter,e->m_szNick); +#else p.drawText(iAvatarAndTextX,theY,wdth - theX,m_pListView->m_iFontHeight,Qt::AlignLeft|Qt::AlignVCenter,e->m_szNick); +#endif } } if(bColorAllocated) delete pClrFore; @@ -1703,12 +1723,15 @@ void KviUserListViewArea::paintEvent(QPaintEvent *ev) e = e->m_pNext; } - p.setPen(colorGroup().dark()); - p.drawLine(0,0,wdth,0); - p.drawLine(0,0,0,height()); - p.setPen(colorGroup().light()); - p.drawLine(1,height()-1,wdth,height()-1); - p.drawLine(wdth - 1,1,wdth - 1,height()); + //we really do not need any self-draw borders. + //if we will need it, we will draw a better one with system style + + //p.setPen(colorGroup().dark()); + //p.drawLine(0,0,wdth,0); + //p.drawLine(0,0,0,height()); + //p.setPen(colorGroup().light()); + //p.drawLine(1,height()-1,wdth,height()-1); + //p.drawLine(wdth - 1,1,wdth - 1,height()); #ifdef COMPILE_USE_QT4 QPainter qt4SuxBecauseOfThisAdditionalPainter(this); diff --git a/src/modules/notifier/notifier_vc05.vcproj b/src/modules/notifier/notifier_vc05.vcproj index 70292afef..1300756ef 100644 --- a/src/modules/notifier/notifier_vc05.vcproj +++ b/src/modules/notifier/notifier_vc05.vcproj @@ -222,6 +222,10 @@ RelativePath=".\notifierwindowborder.cpp" > + + @@ -270,6 +274,10 @@ RelativePath=".\notifierwindowborder.h" > + + -- cgit v1.3.1-10-gc9f91