]> git.saurik.com Git - wxWidgets.git/commitdiff
wxLayoutStyleInfo ctor doesn't set all fields to -1
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jun 1999 13:21:28 +0000 (13:21 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jun 1999 13:21:28 +0000 (13:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2726 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/richedit/wxllist.cpp
samples/richedit/wxllist.h
samples/richedit/wxlwindow.cpp

index cbec218f8e57c4bc964fc17260f416fc89d2d22d..8d469dc967e0939db7d0d2cc993b69b2c01243a3 100644 (file)
@@ -1772,22 +1772,38 @@ wxLayoutList::MoveCursorWord(int n)
       wxLayoutObject *obj = *i;
       if( obj->GetType() != WXLO_TYPE_TEXT )
       {
-         // any non text objects count as one word
-         n > 0 ? n-- : n++;
+         // any visible non text objects count as one word
+         if ( obj->IsVisibleObject() )
+         {
+            n > 0 ? n-- : n++;
 
-         moveDistance += obj->GetLength();
+            moveDistance += obj->GetLength();
+         }
       }
-      else
+      else // text object
       {
-         // text object
          wxLayoutObjectText *tobj = (wxLayoutObjectText *)obj;
 
+         bool canAdvance = true;
+
          if ( offset == tobj->GetLength() )
          {
             // at end of object
-            n > 0 ? n-- : n++;
+            if ( n > 0 )
+            {
+               // can't move further in this text object
+               n--;
+
+               canAdvance = false;
+            }
+            else if ( offset > 0 )
+            {
+               // offset is off by 1, make it a valid index
+               offset--;
+            }
          }
-         else
+
+         if ( canAdvance )
          {
             const char *start = tobj->GetText().c_str();
             const char *p = start + offset;
index 552c2551b06347d0ff42de44f7d052dd57be94bc..bf784d0db54050f33986b9eaeadc6145cfded526 100644 (file)
@@ -203,6 +203,10 @@ public:
    */
    static wxLayoutObject *Read(wxString &istr);
    //@}
+
+   /// returns TRUE if the object is shown on the screen (i.e. not cmd object)
+   bool IsVisibleObject() const { return GetType() != WXLO_TYPE_CMD; }
+
 protected:
    /// optional data for application's use
    UserData *m_UserData;
@@ -214,7 +218,7 @@ KBLIST_DEFINE(wxLayoutObjectList, wxLayoutObject);
 /// An illegal iterator to save typing.
 #define NULLIT (wxLayoutObjectList::iterator(NULL))
 /// The iterator type.
-#define wxLOiterator   wxLayoutObjectList::iterator
+typedef wxLayoutObjectList::iterator wxLOiterator;
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
@@ -316,23 +320,21 @@ private:
    wxBitmap *m_Icon;
 };
 
-/** This structure holds all formatting information. Members which are
-    undefined (for a CmdObject this means: no change), are set to -1.
+/** This structure holds all formatting information.
 */
 struct wxLayoutStyleInfo
 {
-   wxLayoutStyleInfo(int ifamily = -1,
-                     int isize = -1,
-                     int istyle = -1,
-                     int iweight = -1,
-                     int iul = -1,
+   wxLayoutStyleInfo(int ifamily = wxDEFAULT,
+                     int isize = WXLO_DEFAULTFONTSIZE,
+                     int istyle = wxNORMAL,
+                     int iweight = wxNORMAL,
+                     int iul = FALSE,
                      wxColour *fg = NULL,
                      wxColour *bg = NULL);
-   wxColour & GetBGColour()
-      {
-         return m_bg;
-      }
    wxLayoutStyleInfo & operator=(const wxLayoutStyleInfo &right);
+
+   wxColour & GetBGColour() { return m_bg; }
+
    /// Font change parameters.
    int  size, family, style, weight, underline;
    /// Colours
@@ -340,7 +342,7 @@ struct wxLayoutStyleInfo
    int m_fg_valid, m_bg_valid; // bool, but must be int!
 };
 
-
+/// a cached font
 class wxFontCacheEntry
 {
 public:
@@ -366,6 +368,8 @@ public:
       }
 private:
    wxFont *m_Font;
+
+   // VZ: I wonder why it doesn't use wxLayoutStyleInfo instead of those?
    int  m_Family, m_Size, m_Style, m_Weight;
    bool m_Underline;
 };
index 44a575d665e812f78b0b23e948b38e8824a19140..98239d518464e10a6ba38d567b3a8857e7c86527 100644 (file)
@@ -633,10 +633,9 @@ wxLayoutWindow::OnPaint( wxPaintEvent &WXUNUSED(event))
 void
 wxLayoutWindow::DoPaint(const wxRect *updateRect)
 {
-   // Causes bad flicker under wxGTK!!!
 #ifdef __WXGTK__
    InternalPaint(updateRect);
-#else
+#else // Causes bad flicker under wxGTK!!!
    Refresh(FALSE); //, updateRect);
 
    if ( !::UpdateWindow(GetHwnd()) )