remove extra space at top and bottom of the page if present
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22041 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -418,6 +418,11 @@ public:
|
|||||||
|
|
||||||
virtual wxHtmlCell *GetFirstTerminal() const;
|
virtual wxHtmlCell *GetFirstTerminal() const;
|
||||||
virtual wxHtmlCell *GetLastTerminal() const;
|
virtual wxHtmlCell *GetLastTerminal() const;
|
||||||
|
|
||||||
|
|
||||||
|
// Removes indentation on top or bottom of the container (i.e. above or
|
||||||
|
// below first/last terminal cell). For internal use only.
|
||||||
|
void RemoveExtraSpacing(bool top, bool bottom);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void UpdateRenderingStatePre(wxHtmlRenderingInfo& info,
|
void UpdateRenderingStatePre(wxHtmlRenderingInfo& info,
|
||||||
|
@@ -145,7 +145,7 @@ private:
|
|||||||
// This list is used to initialize m_Handlers member.
|
// This list is used to initialize m_Handlers member.
|
||||||
|
|
||||||
wxHtmlContainerCell *m_Container;
|
wxHtmlContainerCell *m_Container;
|
||||||
// actual container. See Open/CloseContainer for details.
|
// current container. See Open/CloseContainer for details.
|
||||||
|
|
||||||
int m_FontBold, m_FontItalic, m_FontUnderlined, m_FontFixed; // this is not TRUE,FALSE but 1,0, we need it for indexing
|
int m_FontBold, m_FontItalic, m_FontUnderlined, m_FontFixed; // this is not TRUE,FALSE but 1,0, we need it for indexing
|
||||||
int m_FontSize; /* -2 to +4, 0 is default */
|
int m_FontSize; /* -2 to +4, 0 is default */
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include "wx/html/htmlwin.h"
|
#include "wx/html/htmlwin.h"
|
||||||
#include "wx/settings.h"
|
#include "wx/settings.h"
|
||||||
#include "wx/module.h"
|
#include "wx/module.h"
|
||||||
|
#include "wx/dynarray.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@@ -373,6 +374,7 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
|||||||
wxHtmlRenderingInfo& info)
|
wxHtmlRenderingInfo& info)
|
||||||
{
|
{
|
||||||
#if 0 // useful for debugging
|
#if 0 // useful for debugging
|
||||||
|
dc.SetPen(*wxBLACK_PEN);
|
||||||
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
|
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -811,6 +813,10 @@ void wxHtmlContainerCell::UpdateRenderingStatePost(wxHtmlRenderingInfo& info,
|
|||||||
void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2,
|
void wxHtmlContainerCell::Draw(wxDC& dc, int x, int y, int view_y1, int view_y2,
|
||||||
wxHtmlRenderingInfo& info)
|
wxHtmlRenderingInfo& info)
|
||||||
{
|
{
|
||||||
|
#if 0 // useful for debugging
|
||||||
|
dc.SetPen(*wxRED_PEN);
|
||||||
|
dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height);
|
||||||
|
#endif
|
||||||
// container visible, draw it:
|
// container visible, draw it:
|
||||||
if ((y + m_PosY <= view_y2) && (y + m_PosY + m_Height > view_y1))
|
if ((y + m_PosY <= view_y2) && (y + m_PosY + m_Height > view_y1))
|
||||||
{
|
{
|
||||||
@@ -1060,9 +1066,14 @@ wxHtmlCell *wxHtmlContainerCell::GetLastTerminal() const
|
|||||||
if ( c )
|
if ( c )
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
|
wxHtmlCell *ctmp;
|
||||||
wxHtmlCell *c2 = NULL;
|
wxHtmlCell *c2 = NULL;
|
||||||
for (c = m_Cells; c; c = c->GetNext())
|
for (c = m_Cells; c; c = c->GetNext())
|
||||||
c2 = c->GetLastTerminal();
|
{
|
||||||
|
ctmp = c->GetLastTerminal();
|
||||||
|
if ( ctmp )
|
||||||
|
c2 = ctmp;
|
||||||
|
}
|
||||||
return c2;
|
return c2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1070,6 +1081,84 @@ wxHtmlCell *wxHtmlContainerCell::GetLastTerminal() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool IsEmptyContainer(wxHtmlContainerCell *cell)
|
||||||
|
{
|
||||||
|
for ( wxHtmlCell *c = cell->GetFirstChild(); c; c = c->GetNext() )
|
||||||
|
{
|
||||||
|
if ( !c->IsTerminalCell() || !c->IsFormattingCell() )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom)
|
||||||
|
{
|
||||||
|
if ( top )
|
||||||
|
SetIndent(0, wxHTML_INDENT_TOP);
|
||||||
|
if ( bottom )
|
||||||
|
SetIndent(0, wxHTML_INDENT_BOTTOM);
|
||||||
|
|
||||||
|
if ( m_Cells )
|
||||||
|
{
|
||||||
|
wxHtmlCell *c;
|
||||||
|
wxHtmlContainerCell *cont;
|
||||||
|
if ( top )
|
||||||
|
{
|
||||||
|
for ( c = m_Cells; c; c = c->GetNext() )
|
||||||
|
{
|
||||||
|
if ( c->IsTerminalCell() )
|
||||||
|
{
|
||||||
|
if ( !c->IsFormattingCell() )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cont = (wxHtmlContainerCell*)c;
|
||||||
|
if ( IsEmptyContainer(cont) )
|
||||||
|
{
|
||||||
|
cont->SetIndent(0, wxHTML_INDENT_VERTICAL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cont->RemoveExtraSpacing(true, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( bottom )
|
||||||
|
{
|
||||||
|
wxArrayPtrVoid arr;
|
||||||
|
for ( c = m_Cells; c; c = c->GetNext() )
|
||||||
|
arr.Add((void*)c);
|
||||||
|
|
||||||
|
for ( int i = arr.GetCount() - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
c = (wxHtmlCell*)arr[i];
|
||||||
|
if ( c->IsTerminalCell() )
|
||||||
|
{
|
||||||
|
if ( !c->IsFormattingCell() )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cont = (wxHtmlContainerCell*)c;
|
||||||
|
if ( IsEmptyContainer(cont) )
|
||||||
|
{
|
||||||
|
cont->SetIndent(0, wxHTML_INDENT_VERTICAL); }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cont->RemoveExtraSpacing(false, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
@@ -208,6 +208,8 @@ wxObject* wxHtmlWinParser::GetProduct()
|
|||||||
|
|
||||||
top = m_Container;
|
top = m_Container;
|
||||||
while (top->GetParent()) top = top->GetParent();
|
while (top->GetParent()) top = top->GetParent();
|
||||||
|
top->RemoveExtraSpacing(true, true);
|
||||||
|
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user