]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlcell.cpp
as we always have CoreText available under 10.5+, we can properly determine fixed...
[wxWidgets.git] / src / html / htmlcell.cpp
index f79224c5391e3edfffb906cf1434ed197e44dcd9..d0f433f17b421bc261681ecdeae21ae0563b8974 100644 (file)
@@ -205,7 +205,7 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const
     //     wxHtmlCell::GetCursor() method simply returns wxNullCursor, so we
     //     know that GetCursor() was overridden iff it returns valid cursor.
     wxCursor cur = GetCursor();
-    if (cur.Ok())
+    if (cur.IsOk())
         return cur;
 #endif // WXWIN_COMPATIBILITY_2_6
 
@@ -220,11 +220,16 @@ wxCursor wxHtmlCell::GetMouseCursor(wxHtmlWindowInterface *window) const
 }
 
 
-bool wxHtmlCell::AdjustPagebreak(int *pagebreak,
-                                 wxArrayInt& WXUNUSED(known_pagebreaks)) const
+bool
+wxHtmlCell::AdjustPagebreak(int *pagebreak,
+                            const wxArrayInt& WXUNUSED(known_pagebreaks),
+                            int pageHeight) const
 {
-    if ((!m_CanLiveOnPagebreak) &&
-                m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak)
+    // Notice that we always break the cells bigger than the page height here
+    // as otherwise we wouldn't be able to break them at all.
+    if ( m_Height <= pageHeight &&
+            (!m_CanLiveOnPagebreak &&
+                m_PosY < *pagebreak && m_PosY + m_Height > *pagebreak) )
     {
         *pagebreak = m_PosY;
         return true;
@@ -476,17 +481,10 @@ void wxHtmlWordCell::SetSelectionPrivPos(const wxDC& dc, wxHtmlSelection *s) con
           this == s->GetToCell() ? s->GetToPos() : wxDefaultPosition,
           p1, p2);
 
-    wxPoint p(0, m_Word.length());
-
-    if ( this == s->GetFromCell() )
-        p.x = p1; // selection starts here
-    if ( this == s->GetToCell() )
-        p.y = p2; // selection ends here
-
     if ( this == s->GetFromCell() )
-        s->SetFromPrivPos(p);
+        s->SetFromCharacterPos (p1); // selection starts here
     if ( this == s->GetToCell() )
-        s->SetToPrivPos(p);
+        s->SetToCharacterPos (p2); // selection ends here
 }
 
 
@@ -533,23 +531,18 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
         int w, h;
         int ofs = 0;
 
-        wxPoint priv = (this == s->GetFromCell()) ?
-                           s->GetFromPrivPos() : s->GetToPrivPos();
-
         // NB: this is quite a hack: in order to compute selection boundaries
         //     (in word's characters) we must know current font, which is only
         //     possible inside rendering code. Therefore we update the
         //     information here and store it in wxHtmlSelection so that
         //     ConvertToText can use it later:
-        if ( priv == wxDefaultPosition )
+        if ( !s->AreFromToCharacterPosSet () )
         {
             SetSelectionPrivPos(dc, s);
-            priv = (this == s->GetFromCell()) ?
-                    s->GetFromPrivPos() : s->GetToPrivPos();
         }
 
-        int part1 = priv.x;
-        int part2 = priv.y;
+        int part1 = s->GetFromCell()==this ? s->GetFromCharacterPos() : 0;
+        int part2 = s->GetToCell()==this   ? s->GetToCharacterPos()   : m_Word.Length();
 
         if ( part1 > 0 )
         {
@@ -634,9 +627,6 @@ wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const
 {
     if ( s && (this == s->GetFromCell() || this == s->GetToCell()) )
     {
-        wxPoint priv = this == s->GetFromCell() ? s->GetFromPrivPos()
-                                                : s->GetToPrivPos();
-
         // VZ: we may be called before we had a chance to re-render ourselves
         //     and in this case GetFrom/ToPrivPos() is not set yet -- assume
         //     that this only happens in case of a double/triple click (which
@@ -644,10 +634,10 @@ wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const
         //     entire contents of the cell in this case
         //
         // TODO: but this really needs to be fixed in some better way later...
-        if ( priv != wxDefaultPosition )
+        if ( s->AreFromToCharacterPosSet() )
         {
-            const int part1 = priv.x;
-            const int part2 = priv.y;
+            const int part1 = s->GetFromCell()==this ? s->GetFromCharacterPos() : 0;
+            const int part2 = s->GetToCell()==this   ? s->GetToCharacterPos()   : m_Word.Length();
             if ( part1 == part2 )
                 return wxEmptyString;
             return GetPartAsText(part1, part2);
@@ -789,11 +779,13 @@ int wxHtmlContainerCell::GetIndentUnits(int ind) const
 }
 
 
-bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak,
-                                          wxArrayInt& known_pagebreaks) const
+bool
+wxHtmlContainerCell::AdjustPagebreak(int *pagebreak,
+                                     const wxArrayInt& known_pagebreaks,
+                                     int pageHeight) const
 {
     if (!m_CanLiveOnPagebreak)
-        return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks);
+        return wxHtmlCell::AdjustPagebreak(pagebreak, known_pagebreaks, pageHeight);
 
     wxHtmlCell *c = GetFirstChild();
     bool rt = false;
@@ -801,7 +793,7 @@ bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak,
 
     while (c)
     {
-        if (c->AdjustPagebreak(&pbrk, known_pagebreaks))
+        if (c->AdjustPagebreak(&pbrk, known_pagebreaks, pageHeight))
             rt = true;
         c = c->GetNext();
     }