]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/m_links.cpp
missing commit
[wxWidgets.git] / src / html / m_links.cpp
index b1f0d0876f95bb537125bf29e1abde34c79c0728..308fa73b343988e134f20ddce799316c840362a8 100644 (file)
@@ -1,30 +1,26 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        m_links.cpp
+// Name:        src/html/m_links.cpp
 // Purpose:     wxHtml module for links & anchors
 // Author:      Vaclav Slavik
 // RCS-ID:      $Id$
 // Copyright:   (c) 1999 Vaclav Slavik
-// Licence:     wxWindows Licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "wx/wxprec.h"
 
-#include "wx/defs.h"
-#if wxUSE_HTML && wxUSE_STREAMS
-
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
-#ifndef WXPRECOMP
+#if wxUSE_HTML && wxUSE_STREAMS
+
+#ifndef WX_PRECOMP
 #endif
 
 #include "wx/html/forcelnk.h"
 #include "wx/html/m_templ.h"
+#include "wx/html/styleparams.h"
 
 
 FORCE_LINK_ME(m_links)
@@ -41,11 +37,11 @@ public:
     void Draw(wxDC& WXUNUSED(dc),
               int WXUNUSED(x), int WXUNUSED(y),
               int WXUNUSED(view_y1), int WXUNUSED(view_y2),
-              wxHtmlRenderingState& WXUNUSED(state)) {}
+              wxHtmlRenderingInfo& WXUNUSED(info)) {}
 
     virtual const wxHtmlCell* Find(int condition, const void* param) const
     {
-        if ((condition == wxHTML_COND_ISANCHOR) && 
+        if ((condition == wxHTML_COND_ISANCHOR) &&
             (m_AnchorName == (*((const wxString*)param))))
         {
             return this;
@@ -55,11 +51,14 @@ public:
             return wxHtmlCell::Find(condition, param);
         }
     }
+
+    wxDECLARE_NO_COPY_CLASS(wxHtmlAnchorCell);
 };
 
 
 
 TAG_HANDLER_BEGIN(A, "A")
+    TAG_HANDLER_CONSTR(A) { }
 
     TAG_HANDLER_PROC(tag)
     {
@@ -72,27 +71,52 @@ TAG_HANDLER_BEGIN(A, "A")
         {
             wxHtmlLinkInfo oldlnk = m_WParser->GetLink();
             wxColour oldclr = m_WParser->GetActualColor();
+            wxColour oldbackclr = m_WParser->GetActualBackgroundColor();
+            int oldbackmode = m_WParser->GetActualBackgroundMode();
+            int oldsize = m_WParser->GetFontSize();
+            int oldbold = m_WParser->GetFontBold();
+            int olditalic = m_WParser->GetFontItalic();
             int oldund = m_WParser->GetFontUnderlined();
+            wxString oldfontface = m_WParser->GetFontFace();
             wxString name(tag.GetParam( wxT("HREF") )), target;
 
             if (tag.HasParam( wxT("TARGET") )) target = tag.GetParam( wxT("TARGET") );
+
+            // set default styles, might get overridden by ApplyStyle
             m_WParser->SetActualColor(m_WParser->GetLinkColor());
             m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(m_WParser->GetLinkColor()));
-            m_WParser->SetFontUnderlined(TRUE);
+            m_WParser->SetFontUnderlined(true);
             m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
             m_WParser->SetLink(wxHtmlLinkInfo(name, target));
 
+            // Load any style parameters
+            wxHtmlStyleParams styleParams(tag);
+            ApplyStyle(styleParams);
+
             ParseInner(tag);
 
             m_WParser->SetLink(oldlnk);
+            m_WParser->SetFontSize(oldsize);
+            m_WParser->SetFontBold(oldbold);
+            m_WParser->SetFontFace(oldfontface);
+            m_WParser->SetFontItalic(olditalic);
             m_WParser->SetFontUnderlined(oldund);
             m_WParser->GetContainer()->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
             m_WParser->SetActualColor(oldclr);
             m_WParser->GetContainer()->InsertCell(new wxHtmlColourCell(oldclr));
 
-            return TRUE;
+            if (oldbackmode != m_WParser->GetActualBackgroundMode() ||
+                oldbackclr != m_WParser->GetActualBackgroundColor())
+            {
+               m_WParser->SetActualBackgroundMode(oldbackmode);
+               m_WParser->SetActualBackgroundColor(oldbackclr);
+               m_WParser->GetContainer()->InsertCell(
+                   new wxHtmlColourCell(oldbackclr, oldbackmode == wxTRANSPARENT ? wxHTML_CLR_TRANSPARENT_BACKGROUND : wxHTML_CLR_BACKGROUND));
+            }
+
+            return true;
         }
-        else return FALSE;
+        else return false;
     }
 
 TAG_HANDLER_END(A)