[Wgui-cvs] wgui/src wg_button.cpp,1.39,1.40 wg_checkbox.cpp,1.23,1.24 wg_editbox.cpp,1.95,1.96 wg_fr
Status: Beta
Brought to you by:
greenwire
|
From: Rob W. <gre...@us...> - 2004-12-12 09:08:31
|
Update of /cvsroot/wgui/wgui/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18285/src Modified Files: wg_button.cpp wg_checkbox.cpp wg_editbox.cpp wg_frame.cpp wg_groupbox.cpp wg_label.cpp wg_listbox.cpp wg_menu.cpp wg_picture.cpp wg_progress.cpp wg_scrollbar.cpp wg_textbox.cpp wg_tooltip.cpp wg_window.cpp Log Message: Added some safety checks. Index: wg_editbox.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_editbox.cpp,v retrieving revision 1.95 retrieving revision 1.96 diff -C2 -d -r1.95 -r1.96 *** wg_editbox.cpp 23 Nov 2004 23:05:11 -0000 1.95 --- wg_editbox.cpp 12 Dec 2004 09:08:18 -0000 1.96 *************** *** 173,283 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-3); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CPoint FontCenterPoint = m_WindowRect.SizeRect().Center(); ! ! if (m_bUseMask) ! { ! m_pRenderedString->SetMaskChar('*'); ! } ! else ! { ! m_pRenderedString->SetMaskChar(' '); ! } ! ! CRGBColor FontColor = m_bReadOnly ? DEFAULT_DISABLED_LINE_COLOR : DEFAULT_LINE_COLOR; ! if (CApplication::Instance()->GetKeyFocus() == dynamic_cast<const CWindow*>(this) && !m_bReadOnly) { ! CPoint BoundedDims; ! CPoint Offset; ! std::vector<CRect> CharRects; ! m_pRenderedString->GetMetrics(&BoundedDims, &Offset, &CharRects); ! std::string::size_type SelStartNorm = 0; ! std::string::size_type SelLenNorm = abs(m_SelLength); ! if (m_SelLength < 0) { ! SelStartNorm = m_SelStart + m_SelLength; } else { ! SelStartNorm = m_SelStart; } ! // Handle scrolling ! // Patch for "Scrolling while selecting to left in editbox" by Oldrich Dlouhy ! if (! m_bMouseDown) { ! if (CharRects.empty() || BoundedDims.XPos() < SubRect.Width()) { ! m_ScrollOffset = 0; } else { ! int iCursorPos = 0; ! if (m_SelStart + m_SelLength >= CharRects.size()) { ! iCursorPos = CharRects.back().Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset; } else { ! iCursorPos = CharRects.at(m_SelStart + m_SelLength).Left() + Offset.XPos() + SubRect.Left() + m_ScrollOffset; ! } ! if (iCursorPos < SubRect.Left()) ! { ! m_ScrollOffset = -(iCursorPos - m_ScrollOffset - SubRect.Left() - Offset.XPos()); ! } ! else if (iCursorPos > SubRect.Right()) ! { ! m_ScrollOffset = -(iCursorPos - m_ScrollOffset - SubRect.Left() - Offset.XPos() - SubRect.Width() + 1); ! } ! if (m_ScrollOffset < 0 && (CharRects.back().Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset < SubRect.Right())) ! { ! m_ScrollOffset = SubRect.Right() - CharRects.back().Right() - 1; ! if (m_ScrollOffset > 0) { ! m_ScrollOffset = 0; } } } - } ! // Selection ! if (m_SelLength != 0) ! { ! CRect SelRect; ! SelRect.SetBottom(SubRect.Bottom()); ! SelRect.SetTop(SubRect.Top()); ! SelRect.SetLeft(CharRects.at(SelStartNorm).Left() + Offset.XPos() + SubRect.Left() + m_ScrollOffset); ! SelRect.SetRight(CharRects.at(SelLenNorm + SelStartNorm - 1).Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset); ! SelRect.ClipTo(SubRect); ! Painter.DrawRect(SelRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); ! } ! else if (m_bDrawCursor) ! { ! //RenderStringWithCursor ! int CursorPos = Offset.XPos() + SubRect.Left() + m_ScrollOffset; ! if (m_SelStart + m_SelLength >= CharRects.size() && !CharRects.empty()) ! { ! CursorPos += CharRects.back().Right(); ! } ! else if (m_SelStart + m_SelLength >= 0 && m_SelStart + m_SelLength < CharRects.size()) { ! CursorPos += CharRects.at(m_SelStart + m_SelLength).Left(); } ! if (CursorPos >= SubRect.Left() && CursorPos <= SubRect.Right()) { ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), CursorPos, COLOR_BLACK); } } - } ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, ! CPoint(SubRect.Left() + m_ScrollOffset, SubRect.Bottom() - m_pRenderedString->GetMaxFontHeight() / 4), FontColor); } } --- 173,286 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-3); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CPoint FontCenterPoint = m_WindowRect.SizeRect().Center(); ! if (m_bUseMask) { ! m_pRenderedString->SetMaskChar('*'); } else { ! m_pRenderedString->SetMaskChar(' '); } ! CRGBColor FontColor = m_bReadOnly ? DEFAULT_DISABLED_LINE_COLOR : DEFAULT_LINE_COLOR; ! if (CApplication::Instance()->GetKeyFocus() == dynamic_cast<const CWindow*>(this) && !m_bReadOnly) { ! CPoint BoundedDims; ! CPoint Offset; ! std::vector<CRect> CharRects; ! m_pRenderedString->GetMetrics(&BoundedDims, &Offset, &CharRects); ! ! std::string::size_type SelStartNorm = 0; ! std::string::size_type SelLenNorm = abs(m_SelLength); ! if (m_SelLength < 0) { ! SelStartNorm = m_SelStart + m_SelLength; } else { ! SelStartNorm = m_SelStart; ! } ! ! // Handle scrolling ! // Patch for "Scrolling while selecting to left in editbox" by Oldrich Dlouhy ! if (! m_bMouseDown) ! { ! if (CharRects.empty() || BoundedDims.XPos() < SubRect.Width()) { ! m_ScrollOffset = 0; } else { ! int iCursorPos = 0; ! if (m_SelStart + m_SelLength >= CharRects.size()) ! { ! iCursorPos = CharRects.back().Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset; ! } ! else ! { ! iCursorPos = CharRects.at(m_SelStart + m_SelLength).Left() + Offset.XPos() + SubRect.Left() + m_ScrollOffset; ! } ! if (iCursorPos < SubRect.Left()) ! { ! m_ScrollOffset = -(iCursorPos - m_ScrollOffset - SubRect.Left() - Offset.XPos()); ! } ! else if (iCursorPos > SubRect.Right()) ! { ! m_ScrollOffset = -(iCursorPos - m_ScrollOffset - SubRect.Left() - Offset.XPos() - SubRect.Width() + 1); ! } ! if (m_ScrollOffset < 0 && (CharRects.back().Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset < SubRect.Right())) { ! m_ScrollOffset = SubRect.Right() - CharRects.back().Right() - 1; ! if (m_ScrollOffset > 0) ! { ! m_ScrollOffset = 0; ! } } } } ! // Selection ! if (m_SelLength != 0) { ! CRect SelRect; ! SelRect.SetBottom(SubRect.Bottom()); ! SelRect.SetTop(SubRect.Top()); ! SelRect.SetLeft(CharRects.at(SelStartNorm).Left() + Offset.XPos() + SubRect.Left() + m_ScrollOffset); ! SelRect.SetRight(CharRects.at(SelLenNorm + SelStartNorm - 1).Right() + Offset.XPos() + SubRect.Left() + m_ScrollOffset); ! SelRect.ClipTo(SubRect); ! Painter.DrawRect(SelRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); } ! else if (m_bDrawCursor) { ! //RenderStringWithCursor ! int CursorPos = Offset.XPos() + SubRect.Left() + m_ScrollOffset; ! if (m_SelStart + m_SelLength >= CharRects.size() && !CharRects.empty()) ! { ! CursorPos += CharRects.back().Right(); ! } ! else if (m_SelStart + m_SelLength >= 0 && m_SelStart + m_SelLength < CharRects.size()) ! { ! CursorPos += CharRects.at(m_SelStart + m_SelLength).Left(); ! } ! if (CursorPos >= SubRect.Left() && CursorPos <= SubRect.Right()) ! { ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), CursorPos, COLOR_BLACK); ! } } } ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, ! CPoint(SubRect.Left() + m_ScrollOffset, SubRect.Bottom() - m_pRenderedString->GetMaxFontHeight() / 4), FontColor); ! } } } Index: wg_checkbox.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_checkbox.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** wg_checkbox.cpp 16 Jul 2004 16:41:36 -0000 1.23 --- wg_checkbox.cpp 12 Dec 2004 09:08:18 -0000 1.24 *************** *** 63,80 **** CWindow::Draw(); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! if (m_eCheckBoxState != DISABLED) { ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect.Grow(-2); ! if (m_eCheckBoxState == CHECKED) { ! Painter.DrawLine(SubRect.TopLeft(), SubRect.BottomRight(), DEFAULT_LINE_COLOR); ! Painter.DrawLine(SubRect.BottomLeft(), SubRect.TopRight(), DEFAULT_LINE_COLOR); } } --- 63,83 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! if (m_eCheckBoxState != DISABLED) { ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect.Grow(-2); ! if (m_eCheckBoxState == CHECKED) ! { ! Painter.DrawLine(SubRect.TopLeft(), SubRect.BottomRight(), DEFAULT_LINE_COLOR); ! Painter.DrawLine(SubRect.BottomLeft(), SubRect.TopRight(), DEFAULT_LINE_COLOR); ! } } } Index: wg_tooltip.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_tooltip.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** wg_tooltip.cpp 23 Nov 2004 23:05:17 -0000 1.27 --- wg_tooltip.cpp 12 Dec 2004 09:08:19 -0000 1.28 *************** *** 84,94 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-2); ! if (m_pRenderedString.get()) { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, SubRect.TopLeft(), m_FontColor); } } --- 84,97 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-2); ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, SubRect.TopLeft(), m_FontColor); ! } } } Index: wg_progress.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_progress.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** wg_progress.cpp 16 Jul 2004 16:41:36 -0000 1.16 --- wg_progress.cpp 12 Dec 2004 09:08:19 -0000 1.17 *************** *** 50,69 **** CWindow::Draw(); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect.Grow(-2); ! if (m_Value > m_MinLimit) { ! if (m_Value < m_MaxLimit) { ! SubRect.SetRight(stdex::safe_static_cast<int>(SubRect.Left() + ! SubRect.Width() * (stdex::safe_static_cast<double>(m_Value - m_MinLimit) / (m_MaxLimit - m_MinLimit)))); } - Painter.DrawRect(SubRect, true, m_BarColor, m_BarColor); } } --- 50,72 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect.Grow(-2); ! if (m_Value > m_MinLimit) { ! if (m_Value < m_MaxLimit) ! { ! SubRect.SetRight(stdex::safe_static_cast<int>(SubRect.Left() + ! SubRect.Width() * (stdex::safe_static_cast<double>(m_Value - m_MinLimit) / (m_MaxLimit - m_MinLimit)))); ! } ! Painter.DrawRect(SubRect, true, m_BarColor, m_BarColor); } } } Index: wg_groupbox.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_groupbox.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** wg_groupbox.cpp 23 Nov 2004 23:05:16 -0000 1.19 --- wg_groupbox.cpp 12 Dec 2004 09:08:19 -0000 1.20 *************** *** 64,78 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(CRect(0, 5, m_WindowRect.Width() - 1, m_WindowRect.Height() - 5), ! false, DEFAULT_LINE_COLOR); ! CPoint Dims, Offset; ! m_pRenderedString->GetMetrics(&Dims, &Offset, 0); ! Painter.DrawRect(CRect(CPoint(6, 0), CPoint(14, 0) + Dims), ! true, m_BackgroundColor, m_BackgroundColor); ! ! if (m_pRenderedString.get()) { ! m_pRenderedString->Draw(m_pSDLSurface, m_WindowRect.SizeRect(), CPoint(10, 0), m_FontColor); } } --- 64,81 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(CRect(0, 5, m_WindowRect.Width() - 1, m_WindowRect.Height() - 5), ! false, DEFAULT_LINE_COLOR); ! CPoint Dims, Offset; ! m_pRenderedString->GetMetrics(&Dims, &Offset, 0); ! Painter.DrawRect(CRect(CPoint(6, 0), CPoint(14, 0) + Dims), ! true, m_BackgroundColor, m_BackgroundColor); ! ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, m_WindowRect.SizeRect(), CPoint(10, 0), m_FontColor); ! } } } Index: wg_scrollbar.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_scrollbar.cpp,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** wg_scrollbar.cpp 3 Aug 2004 15:03:26 -0000 1.43 --- wg_scrollbar.cpp 12 Dec 2004 09:08:19 -0000 1.44 *************** *** 94,106 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! if (m_MinLimit != m_MaxLimit) { ! Painter.DrawRect(m_ThumbRect, false, COLOR_BLACK); ! CRect SubRect(m_ThumbRect); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, true, COLOR_LIGHTGRAY, m_BackgroundColor); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); } } --- 94,109 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! if (m_MinLimit != m_MaxLimit) ! { ! Painter.DrawRect(m_ThumbRect, false, COLOR_BLACK); ! CRect SubRect(m_ThumbRect); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, true, COLOR_LIGHTGRAY, m_BackgroundColor); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); ! } } } Index: wg_picture.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_picture.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** wg_picture.cpp 25 Jun 2004 19:37:51 -0000 1.13 --- wg_picture.cpp 12 Dec 2004 09:08:19 -0000 1.14 *************** *** 70,81 **** CWindow::Draw(); ! SDL_Rect SourceRect = m_ClientRect.SizeRect().SDLRect(); ! SDL_Rect DestRect = m_ClientRect.SDLRect(); ! SDL_BlitSurface(m_hBitmap.Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); ! ! CPainter Painter(m_pSDLSurface); ! if (m_bDrawBorder) { ! Painter.DrawRect(m_WindowRect.SizeRect(), false, m_BorderColor); } } --- 70,84 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! SDL_Rect SourceRect = m_ClientRect.SizeRect().SDLRect(); ! SDL_Rect DestRect = m_ClientRect.SDLRect(); ! SDL_BlitSurface(m_hBitmap.Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); ! ! CPainter Painter(m_pSDLSurface); ! if (m_bDrawBorder) ! { ! Painter.DrawRect(m_WindowRect.SizeRect(), false, m_BorderColor); ! } } } Index: wg_menu.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_menu.cpp,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** wg_menu.cpp 23 Nov 2004 20:20:26 -0000 1.54 --- wg_menu.cpp 12 Dec 2004 09:08:19 -0000 1.55 *************** *** 234,254 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! UpdateCachedRects(); ! for (t_MenuItemVector::const_iterator iter = m_MenuItems.begin(); iter != m_MenuItems.end(); ++iter) { ! if (m_pHighlightedItem == &(iter->first)) ! { ! Painter.DrawRect(iter->second.second, true, m_HighlightColor, m_HighlightColor); ! } ! CRect TextRect(iter->second.second); ! TextRect.Grow(-2); ! if (iter->first.bSpacer) { ! Painter.DrawVLine(TextRect.Top(), TextRect.Bottom(), TextRect.Left(), COLOR_LIGHTGRAY); ! Painter.DrawVLine(TextRect.Top(), TextRect.Bottom(), TextRect.Right(), COLOR_DARKGRAY); } - else - iter->second.first.Draw(m_pSDLSurface, TextRect, CPoint(TextRect.Left(), (TextRect.Top() + TextRect.Bottom()) * 3 / 4)); } } --- 234,257 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! UpdateCachedRects(); ! for (t_MenuItemVector::const_iterator iter = m_MenuItems.begin(); iter != m_MenuItems.end(); ++iter) { ! if (m_pHighlightedItem == &(iter->first)) ! { ! Painter.DrawRect(iter->second.second, true, m_HighlightColor, m_HighlightColor); ! } ! CRect TextRect(iter->second.second); ! TextRect.Grow(-2); ! if (iter->first.bSpacer) ! { ! Painter.DrawVLine(TextRect.Top(), TextRect.Bottom(), TextRect.Left(), COLOR_LIGHTGRAY); ! Painter.DrawVLine(TextRect.Top(), TextRect.Bottom(), TextRect.Right(), COLOR_DARKGRAY); ! } ! else ! iter->second.first.Draw(m_pSDLSurface, TextRect, CPoint(TextRect.Left(), (TextRect.Top() + TextRect.Bottom()) * 3 / 4)); } } } *************** *** 523,563 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(0, m_WindowRect.Width(), m_WindowRect.Height(), COLOR_DARKGRAY); ! Painter.DrawVLine(0, m_WindowRect.Height(), m_WindowRect.Width(), COLOR_DARKGRAY); ! UpdateCachedRects(); ! for (t_MenuItemVector::const_iterator iter = m_MenuItems.begin(); iter != m_MenuItems.end(); ++iter) { ! if (m_pHighlightedItem == &(iter->first)) ! { ! Painter.DrawRect(iter->second.second, true, m_HighlightColor, m_HighlightColor); ! } ! CRect TextRect(iter->second.second); ! TextRect.Grow(-2); ! if (iter->first.bSpacer) ! { ! Painter.DrawHLine(TextRect.Left(), TextRect.Right(), TextRect.Top(), COLOR_LIGHTGRAY); ! Painter.DrawHLine(TextRect.Left(), TextRect.Right(), TextRect.Bottom(), COLOR_DARKGRAY); ! } ! else ! iter->second.first.Draw(m_pSDLSurface, TextRect, TextRect.TopLeft()); ! if (iter->first.pPopup) { ! CRect ArrowRect(iter->second.second); ! ArrowRect.SetLeft(ArrowRect.Right() - m_hRightArrowBitmap.Bitmap()->w); ! SDL_Rect SourceRect; ! SourceRect.x = stdex::safe_static_cast<short int>(0); ! SourceRect.y = stdex::safe_static_cast<short int>((m_hRightArrowBitmap.Bitmap()->h - ArrowRect.Height()) / 2 < 0 ? ! 0 : (m_hRightArrowBitmap.Bitmap()->h - ArrowRect.Height()) / 2); ! SourceRect.w = stdex::safe_static_cast<short int>(m_hRightArrowBitmap.Bitmap()->w); ! SourceRect.h = stdex::safe_static_cast<short int>(std::min(ArrowRect.Height(), m_hRightArrowBitmap.Bitmap()->h)); ! SDL_Rect DestRect; ! DestRect.x = stdex::safe_static_cast<short int>(ArrowRect.Left()); ! DestRect.y = stdex::safe_static_cast<short int>((ArrowRect.Height() - m_hRightArrowBitmap.Bitmap()->h) / 2 < 0 ? ! ArrowRect.Top() : ArrowRect.Top() + (ArrowRect.Height() - m_hRightArrowBitmap.Bitmap()->h) / 2); ! DestRect.w = stdex::safe_static_cast<short int>(m_hRightArrowBitmap.Bitmap()->w); ! DestRect.h = stdex::safe_static_cast<short int>(std::min(ArrowRect.Height(), m_hRightArrowBitmap.Bitmap()->h)); ! SDL_BlitSurface(m_hRightArrowBitmap.Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); } } --- 526,569 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(0, m_WindowRect.Width(), m_WindowRect.Height(), COLOR_DARKGRAY); ! Painter.DrawVLine(0, m_WindowRect.Height(), m_WindowRect.Width(), COLOR_DARKGRAY); ! UpdateCachedRects(); ! for (t_MenuItemVector::const_iterator iter = m_MenuItems.begin(); iter != m_MenuItems.end(); ++iter) { ! if (m_pHighlightedItem == &(iter->first)) ! { ! Painter.DrawRect(iter->second.second, true, m_HighlightColor, m_HighlightColor); ! } ! CRect TextRect(iter->second.second); ! TextRect.Grow(-2); ! if (iter->first.bSpacer) ! { ! Painter.DrawHLine(TextRect.Left(), TextRect.Right(), TextRect.Top(), COLOR_LIGHTGRAY); ! Painter.DrawHLine(TextRect.Left(), TextRect.Right(), TextRect.Bottom(), COLOR_DARKGRAY); ! } ! else ! iter->second.first.Draw(m_pSDLSurface, TextRect, TextRect.TopLeft()); ! if (iter->first.pPopup) ! { ! CRect ArrowRect(iter->second.second); ! ArrowRect.SetLeft(ArrowRect.Right() - m_hRightArrowBitmap.Bitmap()->w); ! SDL_Rect SourceRect; ! SourceRect.x = stdex::safe_static_cast<short int>(0); ! SourceRect.y = stdex::safe_static_cast<short int>((m_hRightArrowBitmap.Bitmap()->h - ArrowRect.Height()) / 2 < 0 ? ! 0 : (m_hRightArrowBitmap.Bitmap()->h - ArrowRect.Height()) / 2); ! SourceRect.w = stdex::safe_static_cast<short int>(m_hRightArrowBitmap.Bitmap()->w); ! SourceRect.h = stdex::safe_static_cast<short int>(std::min(ArrowRect.Height(), m_hRightArrowBitmap.Bitmap()->h)); ! SDL_Rect DestRect; ! DestRect.x = stdex::safe_static_cast<short int>(ArrowRect.Left()); ! DestRect.y = stdex::safe_static_cast<short int>((ArrowRect.Height() - m_hRightArrowBitmap.Bitmap()->h) / 2 < 0 ? ! ArrowRect.Top() : ArrowRect.Top() + (ArrowRect.Height() - m_hRightArrowBitmap.Bitmap()->h) / 2); ! DestRect.w = stdex::safe_static_cast<short int>(m_hRightArrowBitmap.Bitmap()->w); ! DestRect.h = stdex::safe_static_cast<short int>(std::min(ArrowRect.Height(), m_hRightArrowBitmap.Bitmap()->h)); ! SDL_BlitSurface(m_hRightArrowBitmap.Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); ! } } } Index: wg_button.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_button.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** wg_button.cpp 23 Nov 2004 23:05:10 -0000 1.39 --- wg_button.cpp 12 Dec 2004 09:08:18 -0000 1.40 *************** *** 78,110 **** CWindow::Draw(); ! CPoint FontCenterPoint = m_WindowRect.SizeRect().Center(); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CRGBColor FontColor = DEFAULT_LINE_COLOR; ! switch (m_eButtonState) ! { ! case UP: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); ! break; ! case DOWN: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! FontCenterPoint = FontCenterPoint + CPoint(1, 1); ! break; ! case DISABLED: ! FontColor = DEFAULT_DISABLED_LINE_COLOR; ! break; ! default: ! break; ! } ! SubRect.Grow(-2); ! if (m_pRenderedString.get()) { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, FontCenterPoint, FontColor); } } --- 78,113 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPoint FontCenterPoint = m_WindowRect.SizeRect().Center(); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CRGBColor FontColor = DEFAULT_LINE_COLOR; ! switch (m_eButtonState) ! { ! case UP: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); ! break; ! case DOWN: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! FontCenterPoint = FontCenterPoint + CPoint(1, 1); ! break; ! case DISABLED: ! FontColor = DEFAULT_DISABLED_LINE_COLOR; ! break; ! default: ! break; ! } ! SubRect.Grow(-2); ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, SubRect, FontCenterPoint, FontColor); ! } } } *************** *** 235,272 **** CWindow::Draw(); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! switch (m_eButtonState) { ! case UP: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); ! break; ! case DOWN: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect = SubRect + CPoint(1, 1); ! break; ! case DISABLED: ! break; ! default: ! break; } - SubRect.Grow(-1); - SDL_Rect SourceRect; - SourceRect.x = stdex::safe_static_cast<short int>((m_phBitmap->Bitmap()->w - SubRect.Width()) / 2 < 0 ? 0 : (m_phBitmap->Bitmap()->w - SubRect.Width()) / 2); - SourceRect.y = stdex::safe_static_cast<short int>((m_phBitmap->Bitmap()->h - SubRect.Height()) / 2 < 0 ? 0 : (m_phBitmap->Bitmap()->w - SubRect.Height()) / 2); - SourceRect.w = stdex::safe_static_cast<short int>(std::min(SubRect.Width(), m_phBitmap->Bitmap()->w)); - SourceRect.h = stdex::safe_static_cast<short int>(std::min(SubRect.Height(), m_phBitmap->Bitmap()->h)); - SDL_Rect DestRect; - DestRect.x = stdex::safe_static_cast<short int>((SubRect.Width() - m_phBitmap->Bitmap()->w) / 2 < 0 ? SubRect.Left() : SubRect.Left() + (SubRect.Width() - m_phBitmap->Bitmap()->w) / 2); - DestRect.y = stdex::safe_static_cast<short int>((SubRect.Height() - m_phBitmap->Bitmap()->h) / 2 < 0 ? SubRect.Top() : SubRect.Top() + (SubRect.Height() - m_phBitmap->Bitmap()->h) / 2); - DestRect.w = stdex::safe_static_cast<short int>(std::min(SubRect.Width(), m_phBitmap->Bitmap()->w)); - DestRect.h = stdex::safe_static_cast<short int>(std::min(SubRect.Height(), m_phBitmap->Bitmap()->h)); - SDL_BlitSurface(m_phBitmap->Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); } --- 238,278 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! switch (m_eButtonState) ! { ! case UP: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Bottom(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Right(), COLOR_DARKGRAY); ! break; ! case DOWN: ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(SubRect.Left(), SubRect.Right(), SubRect.Top(), COLOR_DARKGRAY); ! Painter.DrawVLine(SubRect.Top(), SubRect.Bottom(), SubRect.Left(), COLOR_DARKGRAY); ! SubRect = SubRect + CPoint(1, 1); ! break; ! case DISABLED: ! break; ! default: ! break; ! } ! SubRect.Grow(-1); ! SDL_Rect SourceRect; ! SourceRect.x = stdex::safe_static_cast<short int>((m_phBitmap->Bitmap()->w - SubRect.Width()) / 2 < 0 ? 0 : (m_phBitmap->Bitmap()->w - SubRect.Width()) / 2); ! SourceRect.y = stdex::safe_static_cast<short int>((m_phBitmap->Bitmap()->h - SubRect.Height()) / 2 < 0 ? 0 : (m_phBitmap->Bitmap()->w - SubRect.Height()) / 2); ! SourceRect.w = stdex::safe_static_cast<short int>(std::min(SubRect.Width(), m_phBitmap->Bitmap()->w)); ! SourceRect.h = stdex::safe_static_cast<short int>(std::min(SubRect.Height(), m_phBitmap->Bitmap()->h)); ! SDL_Rect DestRect; ! DestRect.x = stdex::safe_static_cast<short int>((SubRect.Width() - m_phBitmap->Bitmap()->w) / 2 < 0 ? SubRect.Left() : SubRect.Left() + (SubRect.Width() - m_phBitmap->Bitmap()->w) / 2); ! DestRect.y = stdex::safe_static_cast<short int>((SubRect.Height() - m_phBitmap->Bitmap()->h) / 2 < 0 ? SubRect.Top() : SubRect.Top() + (SubRect.Height() - m_phBitmap->Bitmap()->h) / 2); ! DestRect.w = stdex::safe_static_cast<short int>(std::min(SubRect.Width(), m_phBitmap->Bitmap()->w)); ! DestRect.h = stdex::safe_static_cast<short int>(std::min(SubRect.Height(), m_phBitmap->Bitmap()->h)); ! SDL_BlitSurface(m_phBitmap->Bitmap(), &SourceRect, m_pSDLSurface, &DestRect); } } Index: wg_label.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_label.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** wg_label.cpp 23 Nov 2004 23:05:16 -0000 1.21 --- wg_label.cpp 12 Dec 2004 09:08:19 -0000 1.22 *************** *** 61,65 **** CWindow::Draw(); ! if (m_pRenderedString.get()) { m_pRenderedString->Draw(m_pSDLSurface, m_WindowRect.SizeRect(), m_WindowRect.SizeRect().BottomLeft(), m_FontColor); --- 61,65 ---- CWindow::Draw(); ! if (m_pSDLSurface && m_pRenderedString.get()) { m_pRenderedString->Draw(m_pSDLSurface, m_WindowRect.SizeRect(), m_WindowRect.SizeRect().BottomLeft(), m_FontColor); Index: wg_window.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_window.cpp,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** wg_window.cpp 3 Aug 2004 15:03:26 -0000 1.53 --- wg_window.cpp 12 Dec 2004 09:08:19 -0000 1.54 *************** *** 257,263 **** void CWindow::Draw(void) const { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), true, m_BackgroundColor, m_BackgroundColor); ! CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_PAINT, 0, this)); } --- 257,266 ---- void CWindow::Draw(void) const { ! if (m_pSDLSurface) ! { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), true, m_BackgroundColor, m_BackgroundColor); ! CMessageServer::Instance().QueueMessage(new CMessage(CMessage::APP_PAINT, 0, this)); ! } } *************** *** 335,339 **** void CWindow::RegisterChildWindow(CWindow* pWindow) { ! m_ChildWindows.push_back(pWindow); } --- 338,351 ---- void CWindow::RegisterChildWindow(CWindow* pWindow) { ! if (!pWindow) ! { ! // anything that gets registered should be a valid CWindow ! CApplication::Instance()->GetApplicationLog().AddLogEntry( ! "CWindow::RegisterChildWindow : Attempting to register a non-existent child window.", APP_LOG_ERROR); ! } ! else ! { ! m_ChildWindows.push_back(pWindow); ! } } Index: wg_listbox.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_listbox.cpp,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** wg_listbox.cpp 23 Jul 2004 14:46:00 -0000 1.46 --- wg_listbox.cpp 12 Dec 2004 09:08:19 -0000 1.47 *************** *** 131,157 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! int iStartIndex = m_pVScrollbar->GetValue(); ! for (unsigned int i = iStartIndex; i < m_Items.size(); ++i) { ! CRect ItemRect(m_ClientRect.Left(), m_ClientRect.Top() + (i - iStartIndex) * m_iItemHeight, ! m_ClientRect.Right(), m_ClientRect.Top() + (i - iStartIndex + 1) * m_iItemHeight - 1); ! if (ItemRect.Overlaps(m_ClientRect)) { ! ItemRect.ClipTo(m_ClientRect); ! ItemRect.SetBottom(ItemRect.Bottom() - 1); ! if (m_SelectedItems.at(i)) ! { ! Painter.DrawRect(ItemRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); ! } ! if (stdex::safe_static_cast<int>(i) == m_iFocusedItem) { ! ItemRect.Grow(1); ! Painter.DrawRect(ItemRect, false, COLOR_BLACK); ItemRect.Grow(-1); } - ItemRect.Grow(-1); - m_RenderedStrings.at(i).Draw(m_pSDLSurface, ItemRect, ItemRect.TopLeft() + CPoint(0, 1), m_Items[i].ItemColor); } } --- 131,160 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! int iStartIndex = m_pVScrollbar->GetValue(); ! for (unsigned int i = iStartIndex; i < m_Items.size(); ++i) { ! CRect ItemRect(m_ClientRect.Left(), m_ClientRect.Top() + (i - iStartIndex) * m_iItemHeight, ! m_ClientRect.Right(), m_ClientRect.Top() + (i - iStartIndex + 1) * m_iItemHeight - 1); ! if (ItemRect.Overlaps(m_ClientRect)) { ! ItemRect.ClipTo(m_ClientRect); ! ItemRect.SetBottom(ItemRect.Bottom() - 1); ! if (m_SelectedItems.at(i)) ! { ! Painter.DrawRect(ItemRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); ! } ! if (stdex::safe_static_cast<int>(i) == m_iFocusedItem) ! { ! ItemRect.Grow(1); ! Painter.DrawRect(ItemRect, false, COLOR_BLACK); ! ItemRect.Grow(-1); ! } ItemRect.Grow(-1); + m_RenderedStrings.at(i).Draw(m_pSDLSurface, ItemRect, ItemRect.TopLeft() + CPoint(0, 1), m_Items[i].ItemColor); } } } Index: wg_textbox.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_textbox.cpp,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** wg_textbox.cpp 23 Nov 2004 20:19:23 -0000 1.31 --- wg_textbox.cpp 12 Dec 2004 09:08:19 -0000 1.32 *************** *** 157,264 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CPoint FontCenterPoint = m_WindowRect.Center(); ! ! CRGBColor FontColor = m_bReadOnly ? DEFAULT_DISABLED_LINE_COLOR : DEFAULT_LINE_COLOR; ! if (CApplication::Instance()->GetKeyFocus() == dynamic_cast<const CWindow*>(this) && !m_bReadOnly) { ! // first normalize the selection ! std::string::size_type SelStartNorm = 0; ! std::string::size_type SelLenNorm = abs(m_SelLength); ! if (m_SelLength < 0) ! { ! SelStartNorm = m_SelStart + m_SelLength; ! } ! else ! { ! SelStartNorm = m_SelStart; ! } ! CPoint SelStartPoint(RowColFromIndex(SelStartNorm)); ! CPoint SelEndPoint(RowColFromIndex(SelStartNorm + SelLenNorm)); ! ! // now get the dimensions for each character ! std::vector<CPoint> vOffsets; ! std::vector<CPoint> vBoundingDimensions; ! std::vector<std::vector<CRect> > vCharRects; ! int iIndex = 0; ! for (std::vector<CRenderedString*>::const_iterator iter = m_vpRenderedString.begin(); iter != m_vpRenderedString.end(); ++iter, ++iIndex) ! { ! CPoint BoundingDimensions; ! CPoint Offset; ! std::vector<CRect> CharRects; ! (*iter)->GetMetrics(&BoundingDimensions, &Offset, &CharRects); ! vBoundingDimensions.push_back(BoundingDimensions); ! vOffsets.push_back(Offset); ! vCharRects.push_back(CharRects); ! } ! // move the cursor into view by scrolling if necessary ! int CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; ! if (m_bScrollToCursor) { ! if (CursorPos < m_ClientRect.Left()) ! { ! m_pHorizontalScrollBar->SetValue(m_pHorizontalScrollBar->GetValue() - (m_ClientRect.Left() - CursorPos) / 10 - 1); ! CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; ! } ! if (CursorPos > m_ClientRect.Right()) { ! m_pHorizontalScrollBar->SetValue(m_pHorizontalScrollBar->GetValue() + (CursorPos - m_ClientRect.Right()) / 10 + 1); ! CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; } ! if (SelStartPoint.YPos() < m_pVerticalScrollBar->GetValue()) { ! m_pVerticalScrollBar->SetValue(SelStartPoint.YPos()); } ! if (SelStartPoint.YPos() > stdex::safe_static_cast<int>(m_pVerticalScrollBar->GetValue() + m_ClientRect.Height() / m_iRowHeight)) { ! m_pVerticalScrollBar->SetValue(SelStartPoint.YPos() - m_ClientRect.Height() / m_iRowHeight); } - m_bScrollToCursor = false; - } ! // draw the selection ! if (m_SelLength != 0 && SelEndPoint.YPos() >= m_pVerticalScrollBar->GetValue()) ! { ! for (int CurLine = SelStartPoint.YPos(); CurLine <= SelEndPoint.YPos(); ++CurLine) { ! CPoint TopLeft = m_ClientRect.TopLeft() + CPoint(0, m_iRowHeight * (CurLine - m_pVerticalScrollBar->GetValue())); ! CRect SelRect(TopLeft, TopLeft + CPoint(vBoundingDimensions.at(CurLine).XPos(), m_iRowHeight - 2)); ! if (CurLine == SelStartPoint.YPos()) { ! SelRect.SetLeft(vCharRects.at(CurLine).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(CurLine).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10); } ! if (CurLine == SelEndPoint.YPos()) { ! SelRect.SetRight(vCharRects.at(CurLine).at(SelEndPoint.XPos() - 1).Right() + ! vOffsets.at(CurLine).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10); } ! SelRect.ClipTo(m_ClientRect); ! Painter.DrawRect(SelRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); } - } ! // draw the cursor ! if (m_SelLength == 0 && SelStartPoint.YPos() >= m_pVerticalScrollBar->GetValue() && m_bDrawCursor) ! { ! if (CursorPos >= m_ClientRect.Left() && CursorPos <= m_ClientRect.Right()) { ! Painter.DrawVLine(m_ClientRect.Top() + m_iRowHeight * (SelStartPoint.YPos() - m_pVerticalScrollBar->GetValue()) - 1, ! m_ClientRect.Top() + m_iRowHeight * (SelStartPoint.YPos() - m_pVerticalScrollBar->GetValue() + 1) - 1, CursorPos, COLOR_BLACK); } } - } ! // finally, draw the text ! CPoint LineOrigin = m_ClientRect.TopLeft() - CPoint(m_pHorizontalScrollBar->GetValue() * 10, 0); ! for(std::vector<CRenderedString*>::const_iterator iter = m_vpRenderedString.begin() + m_pVerticalScrollBar->GetValue(); ! iter != m_vpRenderedString.end() && LineOrigin.YPos() < m_ClientRect.Bottom(); ++iter) { ! (*iter)->Draw(m_pSDLSurface, m_ClientRect, LineOrigin, FontColor); ! LineOrigin.SetY(LineOrigin.YPos() + m_iRowHeight); } } --- 157,267 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! Painter.DrawRect(m_WindowRect.SizeRect(), false, COLOR_BLACK); ! CPoint FontCenterPoint = m_WindowRect.Center(); ! CRGBColor FontColor = m_bReadOnly ? DEFAULT_DISABLED_LINE_COLOR : DEFAULT_LINE_COLOR; ! if (CApplication::Instance()->GetKeyFocus() == dynamic_cast<const CWindow*>(this) && !m_bReadOnly) { ! // first normalize the selection ! std::string::size_type SelStartNorm = 0; ! std::string::size_type SelLenNorm = abs(m_SelLength); ! if (m_SelLength < 0) { ! SelStartNorm = m_SelStart + m_SelLength; } ! else { ! SelStartNorm = m_SelStart; } ! CPoint SelStartPoint(RowColFromIndex(SelStartNorm)); ! CPoint SelEndPoint(RowColFromIndex(SelStartNorm + SelLenNorm)); ! ! // now get the dimensions for each character ! std::vector<CPoint> vOffsets; ! std::vector<CPoint> vBoundingDimensions; ! std::vector<std::vector<CRect> > vCharRects; ! int iIndex = 0; ! for (std::vector<CRenderedString*>::const_iterator iter = m_vpRenderedString.begin(); iter != m_vpRenderedString.end(); ++iter, ++iIndex) { ! CPoint BoundingDimensions; ! CPoint Offset; ! std::vector<CRect> CharRects; ! (*iter)->GetMetrics(&BoundingDimensions, &Offset, &CharRects); ! vBoundingDimensions.push_back(BoundingDimensions); ! vOffsets.push_back(Offset); ! vCharRects.push_back(CharRects); } ! // move the cursor into view by scrolling if necessary ! int CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; ! if (m_bScrollToCursor) { ! if (CursorPos < m_ClientRect.Left()) { ! m_pHorizontalScrollBar->SetValue(m_pHorizontalScrollBar->GetValue() - (m_ClientRect.Left() - CursorPos) / 10 - 1); ! CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; } ! if (CursorPos > m_ClientRect.Right()) { ! m_pHorizontalScrollBar->SetValue(m_pHorizontalScrollBar->GetValue() + (CursorPos - m_ClientRect.Right()) / 10 + 1); ! CursorPos = vCharRects.at(SelStartPoint.YPos()).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(SelStartPoint.YPos()).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10; } ! if (SelStartPoint.YPos() < m_pVerticalScrollBar->GetValue()) ! { ! m_pVerticalScrollBar->SetValue(SelStartPoint.YPos()); ! } ! if (SelStartPoint.YPos() > stdex::safe_static_cast<int>(m_pVerticalScrollBar->GetValue() + m_ClientRect.Height() / m_iRowHeight)) ! { ! m_pVerticalScrollBar->SetValue(SelStartPoint.YPos() - m_ClientRect.Height() / m_iRowHeight); ! } ! m_bScrollToCursor = false; } ! // draw the selection ! if (m_SelLength != 0 && SelEndPoint.YPos() >= m_pVerticalScrollBar->GetValue()) { ! for (int CurLine = SelStartPoint.YPos(); CurLine <= SelEndPoint.YPos(); ++CurLine) ! { ! CPoint TopLeft = m_ClientRect.TopLeft() + CPoint(0, m_iRowHeight * (CurLine - m_pVerticalScrollBar->GetValue())); ! CRect SelRect(TopLeft, TopLeft + CPoint(vBoundingDimensions.at(CurLine).XPos(), m_iRowHeight - 2)); ! if (CurLine == SelStartPoint.YPos()) ! { ! SelRect.SetLeft(vCharRects.at(CurLine).at(SelStartPoint.XPos()).Left() + ! vOffsets.at(CurLine).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10); ! } ! if (CurLine == SelEndPoint.YPos()) ! { ! SelRect.SetRight(vCharRects.at(CurLine).at(SelEndPoint.XPos() - 1).Right() + ! vOffsets.at(CurLine).XPos() + m_ClientRect.Left() - m_pHorizontalScrollBar->GetValue() * 10); ! } ! SelRect.ClipTo(m_ClientRect); ! Painter.DrawRect(SelRect, true, CApplication::Instance()->GetDefaultSelectionColor(), CApplication::Instance()->GetDefaultSelectionColor()); ! } ! } ! ! // draw the cursor ! if (m_SelLength == 0 && SelStartPoint.YPos() >= m_pVerticalScrollBar->GetValue() && m_bDrawCursor) ! { ! if (CursorPos >= m_ClientRect.Left() && CursorPos <= m_ClientRect.Right()) ! { ! Painter.DrawVLine(m_ClientRect.Top() + m_iRowHeight * (SelStartPoint.YPos() - m_pVerticalScrollBar->GetValue()) - 1, ! m_ClientRect.Top() + m_iRowHeight * (SelStartPoint.YPos() - m_pVerticalScrollBar->GetValue() + 1) - 1, CursorPos, COLOR_BLACK); ! } } } ! // finally, draw the text ! CPoint LineOrigin = m_ClientRect.TopLeft() - CPoint(m_pHorizontalScrollBar->GetValue() * 10, 0); ! for(std::vector<CRenderedString*>::const_iterator iter = m_vpRenderedString.begin() + m_pVerticalScrollBar->GetValue(); ! iter != m_vpRenderedString.end() && LineOrigin.YPos() < m_ClientRect.Bottom(); ++iter) { ! (*iter)->Draw(m_pSDLSurface, m_ClientRect, LineOrigin, FontColor); ! LineOrigin.SetY(LineOrigin.YPos() + m_iRowHeight); ! } } } Index: wg_frame.cpp =================================================================== RCS file: /cvsroot/wgui/wgui/src/wg_frame.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** wg_frame.cpp 23 Nov 2004 23:05:16 -0000 1.25 --- wg_frame.cpp 12 Dec 2004 09:08:19 -0000 1.26 *************** *** 74,93 **** CWindow::Draw(); ! CPainter Painter(m_pSDLSurface); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(0, SubRect.Width(), SubRect.Height(), COLOR_DARKGRAY); ! Painter.DrawVLine(0, SubRect.Height(), SubRect.Width(), COLOR_DARKGRAY); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, false, COLOR_BLACK); ! Painter.DrawRect(m_TitleBarRect, true, m_TitleBarColor, m_TitleBarColor); ! ! CRect TextClipRect(m_TitleBarRect); ! TextClipRect.SetRight(TextClipRect.Right() - 16); ! TextClipRect.Grow(-1); ! if (m_pRenderedString.get()) { ! m_pRenderedString->Draw(m_pSDLSurface, TextClipRect, m_TitleBarRect.TopLeft() + CPoint(6, m_iTitleBarHeight / 2), m_TitleBarTextColor); } } --- 74,96 ---- CWindow::Draw(); ! if (m_pSDLSurface) { ! CPainter Painter(m_pSDLSurface); ! CRect SubRect(m_WindowRect.SizeRect()); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, false, COLOR_LIGHTGRAY); ! Painter.DrawHLine(0, SubRect.Width(), SubRect.Height(), COLOR_DARKGRAY); ! Painter.DrawVLine(0, SubRect.Height(), SubRect.Width(), COLOR_DARKGRAY); ! SubRect.Grow(-1); ! Painter.DrawRect(SubRect, false, COLOR_BLACK); ! Painter.DrawRect(m_TitleBarRect, true, m_TitleBarColor, m_TitleBarColor); ! ! CRect TextClipRect(m_TitleBarRect); ! TextClipRect.SetRight(TextClipRect.Right() - 16); ! TextClipRect.Grow(-1); ! if (m_pRenderedString.get()) ! { ! m_pRenderedString->Draw(m_pSDLSurface, TextClipRect, m_TitleBarRect.TopLeft() + CPoint(6, m_iTitleBarHeight / 2), m_TitleBarTextColor); ! } } } |