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;
*/
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;
/// An illegal iterator to save typing.
#define NULLIT (wxLayoutObjectList::iterator(NULL))
/// The iterator type.
-#define wxLOiterator wxLayoutObjectList::iterator
+typedef wxLayoutObjectList::iterator wxLOiterator;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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
int m_fg_valid, m_bg_valid; // bool, but must be int!
};
-
+/// a cached font
class wxFontCacheEntry
{
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;
};
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()) )