]> git.saurik.com Git - wxWidgets.git/blobdiff - user/wxLayout/wxllist.cpp
some changes, untested
[wxWidgets.git] / user / wxLayout / wxllist.cpp
index 142c2b8d2de073178ceb1abfbcd5232eef702f1b..d0a3bc05a5aa59d8550c24e03c2a2393d82b3719 100644 (file)
@@ -340,7 +340,7 @@ wxLayoutObjectCmd::wxLayoutObjectCmd(int size, int family, int style, int
 {
    m_StyleInfo = new
       wxLayoutStyleInfo(size,family,style,weight,underline,fg,bg);
-   m_font = m_StyleInfo->GetFont(NULL);
+   m_font = NULL;
 }
 
 wxLayoutObject *
@@ -374,7 +374,7 @@ wxLayoutObjectCmd::Copy(void)
 wxLayoutObjectCmd::~wxLayoutObjectCmd()
 {
    delete m_StyleInfo;
-   delete m_font;
+   if(m_font) delete m_font;
 }
 
 wxLayoutStyleInfo *
@@ -396,6 +396,10 @@ wxLayoutObjectCmd::Draw(wxDC &dc, wxPoint const & /* coords */,
 void
 wxLayoutObjectCmd::Layout(wxDC &dc, class wxLayoutList * llist)
 {
+   if(m_font) delete m_font;
+   m_font = m_StyleInfo->GetFont(llist->GetStyleInfo());
+
+
    // this get called, so that recalculation uses right font sizes
    Draw(dc, wxPoint(0,0), llist);
 }
@@ -553,7 +557,7 @@ wxLayoutLine::FindText(const wxString &needle, CoordType xpos = 0) const
             relpos = text->Find(needle);
             if(relpos >= cpos-xpos) // -1 if not found
             {
-               return xpos+relpos;
+               return cpos+relpos;
             }
          }
          cpos += (**i).GetLength();
@@ -1199,14 +1203,32 @@ wxLayoutList::SetFont(int family, int size, int style, int weight,
                       int underline, wxColour *fg,
                       wxColour *bg)
 {
-   if(family != -1)    m_FontFamily = family;
-   if(size != -1)      m_FontPtSize = size;
-   if(style != -1)     m_FontStyle = style;
-   if(weight != -1)    m_FontWeight = weight;
-   if(underline != -1) m_FontUnderline = underline != 0;
+   if(family != -1)    m_CurrentSetting.family = family;
+   if(size != -1)      m_CurrentSetting.size = size;
+   if(style != -1)     m_CurrentSetting.style = style;
+   if(weight != -1)    m_CurrentSetting.weight = weight;
+   if(underline != -1) m_CurrentSetting.underline = underline != 0;
+   if(fg)
+   {
+      m_CurrentSetting.fg_valid = true;
+      m_CurrentSetting.fg_red = fg->Red();
+      m_CurrentSetting.fg_blue = fg->Blue();
+      m_CurrentSetting.fg_green = fg->Green();
+   }
+   if(bg)
+   {
+      m_CurrentSetting.bg_valid = true;
+      m_CurrentSetting.bg_red = bg->Red();
+      m_CurrentSetting.bg_blue = bg->Blue();
+      m_CurrentSetting.bg_green = bg->Green();
+   }
    Insert(
-      new wxLayoutObjectCmd(m_FontPtSize,m_FontFamily,m_FontStyle,m_FontWeight,m_FontUnderline,
-                            fg, bg));
+      new wxLayoutObjectCmd(
+         m_CurrentSetting.size,
+         m_CurrentSetting.family,
+         m_CurrentSetting.style,
+         m_CurrentSetting.weight,
+         m_CurrentSetting.underline, fg, bg));
 }
 
 void
@@ -1598,10 +1620,6 @@ wxLayoutList::Draw(wxDC &dc,
       if(bottom != -1 && line->GetPosition().y > bottom) break;
       line = line->GetNextLine();
    }
-   // can only be 0 if we are on the first line and have no next line
-   wxASSERT(m_CursorSize.x != 0 || (m_CursorLine &&
-                                    m_CursorLine->GetNextLine() == NULL &&
-                                    m_CursorLine == m_FirstLine));
    InvalidateUpdateRect();
 
    WXLO_DEBUG(("Selection is %s : l%d,%ld/%ld,%ld",