X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f9297b0eead20a0bfee71df18e0d8f0cbc402fb..3e6e2754a688f0db737e18fe4a138f83013ad8e9:/src/html/m_image.cpp?ds=sidebyside diff --git a/src/html/m_image.cpp b/src/html/m_image.cpp index 4534d61719..8edf713086 100644 --- a/src/html/m_image.cpp +++ b/src/html/m_image.cpp @@ -272,6 +272,7 @@ class wxHtmlImageCell : public wxHtmlCell { public: wxBitmap *m_Image; + double m_Scale; wxHtmlImageMapCell *m_ImageMap; wxString m_MapName; @@ -291,25 +292,25 @@ class wxHtmlImageCell : public wxHtmlCell wxHtmlImageCell::wxHtmlImageCell(wxFSFile *input, int w, int h, double scale, int align, wxString mapname) : wxHtmlCell() { wxImage *img; - int ww, hh; + int ww, hh, bw, bh; wxInputStream *s = input->GetStream(); - + + m_Scale = scale; img = new wxImage(*s, wxBITMAP_TYPE_ANY); - m_Image = NULL; if (img && (img->Ok())) { ww = img->GetWidth(); hh = img->GetHeight(); - if (w != -1) m_Width = w; else m_Width = ww; - if (h != -1) m_Height = h; else m_Height = hh; + if (w != -1) bw = w; else bw = ww; + if (h != -1) bh = h; else bh = hh; - m_Width = (int)(scale * (double)m_Width); - m_Height = (int)(scale * (double)m_Height); + m_Width = (int)(scale * (double)bw); + m_Height = (int)(scale * (double)bh); - if ((m_Width != ww) || (m_Height != hh)) + if ((bw != ww) || (bh != hh)) { - wxImage img2 = img->Scale(m_Width, m_Height); + wxImage img2 = img->Scale(bw, bh); m_Image = new wxBitmap(img2.ConvertToBitmap()); } else @@ -340,8 +341,16 @@ wxHtmlImageCell::wxHtmlImageCell(wxFSFile *input, int w, int h, double scale, in void wxHtmlImageCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2) { if (m_Image) -// dc.DrawBitmap(*m_Image, x + m_PosX, y + m_PosY, (m_Image->GetMask() != (wxMask*) 0)); - dc.DrawBitmap(*m_Image, x + m_PosX, y + m_PosY, TRUE); + { + double us_x, us_y; + dc.GetUserScale(&us_x, &us_y); + dc.SetUserScale(us_x * m_Scale, us_y * m_Scale); + +// dc.DrawBitmap(*m_Image, x + m_PosX, y + m_PosY, (m_Image->GetMask() != (wxMask*) 0)); + dc.DrawBitmap(*m_Image, (int) ((x + m_PosX) / m_Scale), + (int) ((y + m_PosY) / m_Scale), TRUE); + dc.SetUserScale(us_x, us_y); + } wxHtmlCell::Draw(dc, x, y, view_y1, view_y2); } @@ -395,20 +404,24 @@ TAG_HANDLER_BEGIN(IMG, "IMG,MAP,AREA") wxString mn = wxEmptyString; str = m_WParser->GetFS()->OpenFile(tmp); - if (tag.HasParam(wxT("WIDTH"))) tag.ScanParam(wxT("WIDTH"), wxT("%i"), &w); - if (tag.HasParam(wxT("HEIGHT"))) tag.ScanParam(wxT("HEIGHT"), wxT("%i"), &h); + if (tag.HasParam(wxT("WIDTH"))) + tag.GetParamAsInt(wxT("WIDTH"), &w); + if (tag.HasParam(wxT("HEIGHT"))) + tag.GetParamAsInt(wxT("HEIGHT"), &h); al = wxHTML_ALIGN_BOTTOM; if (tag.HasParam(wxT("ALIGN"))) { wxString alstr = tag.GetParam(wxT("ALIGN")); alstr.MakeUpper(); // for the case alignment was in ".." - if (alstr == wxT("TEXTTOP")) al = wxHTML_ALIGN_TOP; - else if ((alstr == wxT("CENTER")) || (alstr == wxT("ABSCENTER"))) al = wxHTML_ALIGN_CENTER; + if (alstr == wxT("TEXTTOP")) + al = wxHTML_ALIGN_TOP; + else if ((alstr == wxT("CENTER")) || (alstr == wxT("ABSCENTER"))) + al = wxHTML_ALIGN_CENTER; } if (tag.HasParam(wxT("USEMAP"))) { mn = tag.GetParam( wxT("USEMAP") ); - if (mn[ (unsigned int) 0 ] == wxT('#')) + if (mn.GetChar(0) == wxT('#')) { mn = mn.Mid( 1 ); }