From: Václav Slavík Date: Fri, 14 Jan 2000 21:41:17 +0000 (+0000) Subject: optimized wxHtmlContainerCell - now proceeds layouting only when neccessary (will... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/60e87cb1fb27cd1dc98c4c716d3d8c76bc523c45?ds=inline optimized wxHtmlContainerCell - now proceeds layouting only when neccessary (will speed-up window resizing of pages with many constant-width tables) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5397 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/html/htmlcell.h b/include/wx/html/htmlcell.h index 7af5cec39f..b99ca14a96 100644 --- a/include/wx/html/htmlcell.h +++ b/include/wx/html/htmlcell.h @@ -97,7 +97,7 @@ class WXDLLEXPORT wxHtmlCell : public wxObject // HINT: if this handling is not enough for you you should use // wxHtmlBinderCell - virtual bool AdjustPagebreak(int *pagebreak); + virtual bool AdjustPagebreak(int *pagebreak) const; // This method used to adjust pagebreak position. The parameter is // variable that contains y-coordinate of page break (= horizontal line that // should not be crossed by words, images etc.). If this cell cannot be divided @@ -144,12 +144,12 @@ class WXDLLEXPORT wxHtmlCell : public wxObject class WXDLLEXPORT wxHtmlWordCell : public wxHtmlCell { - protected: - wxString m_Word; - public: wxHtmlWordCell(const wxString& word, wxDC& dc); void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2); + + protected: + wxString m_Word; }; @@ -163,29 +163,6 @@ class WXDLLEXPORT wxHtmlWordCell : public wxHtmlCell class WXDLLEXPORT wxHtmlContainerCell : public wxHtmlCell { - protected: - int m_IndentLeft, m_IndentRight, m_IndentTop, m_IndentBottom; - // indentation of subcells. There is always m_Indent pixels - // big space between given border of the container and the subcells - // it m_Indent < 0 it is in PERCENTS, otherwise it is in pixels - int m_MinHeight, m_MinHeightAlign; - // minimal height. - int m_MaxLineWidth; - // maximal widht of line. Filled during Layout() - wxHtmlCell *m_Cells, *m_LastCell; - // internal cells, m_Cells points to the first of them, m_LastCell to the last one. - // (LastCell is needed only to speed-up InsertCell) - int m_AlignHor, m_AlignVer; - // alignment horizontal and vertical (left, center, right) - int m_WidthFloat, m_WidthFloatUnits; - // width float is used in adjustWidth - bool m_UseBkColour; - wxColour m_BkColour; - // background color of this container - bool m_UseBorder; - wxColour m_BorderColour1, m_BorderColour2; - // borders color of this container - public: wxHtmlContainerCell(wxHtmlContainerCell *parent); ~wxHtmlContainerCell() {if (m_Cells) delete m_Cells;} @@ -193,13 +170,13 @@ class WXDLLEXPORT wxHtmlContainerCell : public wxHtmlCell virtual void Layout(int w); virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2); virtual void DrawInvisible(wxDC& dc, int x, int y); - virtual bool AdjustPagebreak(int *pagebreak); + virtual bool AdjustPagebreak(int *pagebreak) const; void InsertCell(wxHtmlCell *cell); // insert cell at the end of m_Cells list - void SetAlignHor(int al) {m_AlignHor = al;} + void SetAlignHor(int al) {m_AlignHor = al; m_LastLayout = -1;} int GetAlignHor() const {return m_AlignHor;} - void SetAlignVer(int al) {m_AlignVer = al;} + void SetAlignVer(int al) {m_AlignVer = al; m_LastLayout = -1;} // sets horizontal/vertical alignment int GetAlignVer() const {return m_AlignVer;} void SetIndent(int i, int what, int units = wxHTML_UNITS_PIXELS); @@ -211,12 +188,12 @@ class WXDLLEXPORT wxHtmlContainerCell : public wxHtmlCell // returns type of value returned by GetIndent(ind) void SetAlign(const wxHtmlTag& tag); // sets alignment info based on given tag's params - void SetWidthFloat(int w, int units) {m_WidthFloat = w; m_WidthFloatUnits = units;} + void SetWidthFloat(int w, int units) {m_WidthFloat = w; m_WidthFloatUnits = units; m_LastLayout = -1;} void SetWidthFloat(const wxHtmlTag& tag, double pixel_scale = 1.0); // sets floating width adjustment // (examples : 32 percent of parent container, // -15 pixels percent (this means 100 % - 15 pixels) - void SetMinHeight(int h, int align = wxHTML_ALIGN_TOP) {m_MinHeight = h; m_MinHeightAlign = align;} + void SetMinHeight(int h, int align = wxHTML_ALIGN_TOP) {m_MinHeight = h; m_MinHeightAlign = align; m_LastLayout = -1;} // sets minimal height of this container. int GetMaxLineWidth() const {return m_MaxLineWidth;} // returns maximal line width in this container. @@ -228,8 +205,34 @@ class WXDLLEXPORT wxHtmlContainerCell : public wxHtmlCell virtual const wxHtmlCell* Find(int condition, const void* param) const; virtual void OnMouseClick(wxWindow *parent, int x, int y, const wxMouseEvent& event); - wxHtmlCell* GetFirstCell() {return m_Cells;} + wxHtmlCell* GetFirstCell() const {return m_Cells;} // returns pointer to the first cell in container or NULL + + protected: + int m_IndentLeft, m_IndentRight, m_IndentTop, m_IndentBottom; + // indentation of subcells. There is always m_Indent pixels + // big space between given border of the container and the subcells + // it m_Indent < 0 it is in PERCENTS, otherwise it is in pixels + int m_MinHeight, m_MinHeightAlign; + // minimal height. + int m_MaxLineWidth; + // maximal widht of line. Filled during Layout() + wxHtmlCell *m_Cells, *m_LastCell; + // internal cells, m_Cells points to the first of them, m_LastCell to the last one. + // (LastCell is needed only to speed-up InsertCell) + int m_AlignHor, m_AlignVer; + // alignment horizontal and vertical (left, center, right) + int m_WidthFloat, m_WidthFloatUnits; + // width float is used in adjustWidth + bool m_UseBkColour; + wxColour m_BkColour; + // background color of this container + bool m_UseBorder; + wxColour m_BorderColour1, m_BorderColour2; + // borders color of this container + int m_LastLayout; + // if != -1 then call to Layout may be no-op + // if previous call to Layout has same argument }; @@ -244,12 +247,13 @@ class WXDLLEXPORT wxHtmlContainerCell : public wxHtmlCell class WXDLLEXPORT wxHtmlColourCell : public wxHtmlCell { public: - wxColour m_Colour; - unsigned m_Flags; - wxHtmlColourCell(const wxColour& clr, int flags = wxHTML_CLR_FOREGROUND) : wxHtmlCell() {m_Colour = clr; m_Flags = flags;} virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2); virtual void DrawInvisible(wxDC& dc, int x, int y); + + protected: + wxColour m_Colour; + unsigned m_Flags; }; @@ -263,11 +267,12 @@ class WXDLLEXPORT wxHtmlColourCell : public wxHtmlCell class WXDLLEXPORT wxHtmlFontCell : public wxHtmlCell { public: - wxFont m_Font; - wxHtmlFontCell(wxFont *font) : wxHtmlCell() { m_Font = (*font); } virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2); virtual void DrawInvisible(wxDC& dc, int x, int y); + + protected: + wxFont m_Font; }; @@ -284,11 +289,6 @@ class WXDLLEXPORT wxHtmlFontCell : public wxHtmlCell class WXDLLEXPORT wxHtmlWidgetCell : public wxHtmlCell { - protected: - wxWindow* m_Wnd; - int m_WidthFloat; - // width float is used in adjustWidth (it is in percents) - public: wxHtmlWidgetCell(wxWindow *wnd, int w = 0); // !!! wnd must have correct parent! @@ -299,6 +299,11 @@ class WXDLLEXPORT wxHtmlWidgetCell : public wxHtmlCell virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2); virtual void DrawInvisible(wxDC& dc, int x, int y); virtual void Layout(int w); + + protected: + wxWindow* m_Wnd; + int m_WidthFloat; + // width float is used in adjustWidth (it is in percents) };