added support for background bitmap specified in background attribute of the HTML body tag

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32021 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-02-13 23:17:12 +00:00
parent 1cffa15b8e
commit 97e490f8b0
4 changed files with 67 additions and 13 deletions

View File

@@ -307,6 +307,7 @@ bool wxHtmlWindow::SetPage(const wxString& source)
wxClientDC *dc = new wxClientDC(this);
dc->SetMapMode(wxMM_TEXT);
SetBackgroundColour(wxColour(0xFF, 0xFF, 0xFF));
SetBackgroundImage(wxNullBitmap);
m_OpenedPage = m_OpenedAnchor = m_OpenedPageTitle = wxEmptyString;
m_Parser->SetDC(dc);
if (m_Cell)
@@ -850,11 +851,36 @@ void wxHtmlWindow::OnCellMouseHover(wxHtmlCell * WXUNUSED(cell),
void wxHtmlWindow::OnEraseBackground(wxEraseEvent& event)
{
// we do have to erase background now that we reuse it (instead of
// overwriting it) in OnPaint() below, but maybe we should set some flag if
// we get here as this would mean that user code doesn't paint background
// itself and then we wouldn't have to copy old bits to dcm below...
event.Skip();
if ( !m_bmpBg.Ok() )
{
// we used to do nothing at all here but we do have to erase background
// now that we reuse it (instead of overwriting it) in OnPaint() below
event.Skip();
return;
}
wxDC& dc = *event.GetDC();
// if the image is not fully opaque, we have to erase the background before
// drawing it, however avoid doing it for opaque images as this would just
// result in extra flicker without any other effect as background is
// completely covered anyhow
if ( m_bmpBg.GetMask() )
{
dc.SetBackground(wxBrush(GetBackgroundColour(), wxSOLID));
dc.Clear();
}
const wxSize sizeWin(GetClientSize());
const wxSize sizeBmp(m_bmpBg.GetWidth(), m_bmpBg.GetHeight());
for ( wxCoord x = 0; x < sizeWin.x; x += sizeBmp.x )
{
for ( wxCoord y = 0; y < sizeWin.y; y += sizeBmp.y )
{
dc.DrawBitmap(m_bmpBg, x, y, true /* use mask */);
}
}
}
void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event))

View File

@@ -12,16 +12,18 @@
#include "wx/wxprec.h"
#include "wx/defs.h"
#if wxUSE_HTML && wxUSE_STREAMS
#ifdef __BORLANDC__
#pragma hdrstop
#pragma hdrstop
#endif
#ifndef WXPRECOMP
#endif
#include "wx/image.h"
#include "wx/html/forcelnk.h"
#include "wx/html/m_templ.h"
@@ -330,6 +332,25 @@ TAG_HANDLER_BEGIN(BODY, "BODY")
if (tag.GetParamAsColour(wxT("LINK"), &clr))
m_WParser->SetLinkColor(clr);
if (tag.HasParam(wxT("BACKGROUND")))
{
wxFSFile *fileBgImage = m_WParser->OpenURL
(
wxHTML_URL_IMAGE,
tag.GetParam(wxT("BACKGROUND"))
);
if ( fileBgImage )
{
wxInputStream *is = fileBgImage->GetStream();
if ( is )
{
wxImage image(*is);
if ( image.Ok() )
m_WParser->GetWindow()->SetBackgroundImage(image);
}
}
}
if (tag.GetParamAsColour(wxT("BGCOLOR"), &clr))
{
m_WParser->GetContainer()->InsertCell(
@@ -337,6 +358,7 @@ TAG_HANDLER_BEGIN(BODY, "BODY")
if (m_WParser->GetWindow() != NULL)
m_WParser->GetWindow()->SetBackgroundColour(clr);
}
return false;
}