Dillo v3.1.1-14-g8f67d6e0
Loading...
Searching...
No Matches
dw::Textblock Class Reference

A Widget for rendering text blocks, i.e. More...

#include <textblock.hh>

Classes

struct  Anchor
 
class  BadnessAndPenalty
 
struct  DivChar
 
struct  Line
 
struct  Paragraph
 
class  SpaceImgRenderer
 
class  TextblockIterator
 
struct  Word
 
class  WordImgRenderer
 Implementation used for words. More...
 

Public Member Functions

 Textblock (bool limitTextWidth, bool treatAsInline=false)
 
 ~Textblock ()
 
core::Iteratoriterator (core::Content::Type mask, bool atEnd)
 Return an iterator for this widget.
 
void flush ()
 
void addText (const char *text, size_t len, core::style::Style *style)
 Add a word to the page structure.
 
void addText (const char *text, core::style::Style *style)
 
void addWidget (core::Widget *widget, core::style::Style *style)
 Add a widget (word type) to the page.
 
bool addAnchor (const char *name, core::style::Style *style)
 Add an anchor to the page.
 
void addSpace (core::style::Style *style)
 ?
 
void addBreakOption (core::style::Style *style, bool forceBreak)
 Add a break option (see setBreakOption() for details).
 
void addParbreak (int space, core::style::Style *style)
 Cause a paragraph break.
 
void addLinebreak (core::style::Style *style)
 
void handOverBreak (core::style::Style *style)
 This function "hands" the last break of a page "over" to a parent page.
 
void changeLinkColor (int link, int newColor)
 
void changeWordStyle (int from, int to, core::style::Style *style, bool includeFirstSpace, bool includeLastSpace)
 
void updateReference (int ref)
 Update content in flow, down from ref.
 
void widgetRefSizeChanged (int externalIndex)
 Called by an implementation of dw::oof::OutOfFlowMgr (actually only OOFPosRelMgr) for the generator of a widget out of flow, when the reference size has changed.
 
void oofSizeChanged (bool extremesChanged)
 Called by an implementation of dw::oof::OutOfFlowMgr when the size of the container has changed, typically in sizeAllocateEnd.
 
int getGeneratorX (int oofmIndex)
 Return position relative to container, not regarding margin/border/padding, Called by OOFFloatsMgr to position floats.
 
int getGeneratorY (int oofmIndex)
 Return position relative to container, not regarding margin/border/padding, Called by OOFFloatsMgr to position floats.
 
int getGeneratorWidth ()
 Return width including margin/border/padding Called by OOFFloatsMgr to position floats.
 
int getMaxGeneratorWidth ()
 
bool usesMaxGeneratorWidth ()
 
bool isPossibleOOFContainer (int oofmIndex)
 
bool isPossibleOOFContainerParent (int oofmIndex)
 
- Public Member Functions inherited from dw::RegardingBorder
 RegardingBorder ()
 
 ~RegardingBorder ()
 
- Public Member Functions inherited from dw::oof::OOFAwareWidget
 OOFAwareWidget ()
 
 ~OOFAwareWidget ()
 
core::RequisitiongetRequisitionWithoutOOF ()
 
bool doesWidgetOOFInterruptDrawing (Widget *widget)
 
void draw (core::View *view, core::Rectangle *area, core::DrawingContext *context)
 Area is given in widget coordinates.
 
- Public Member Functions inherited from dw::core::Widget
void setDeleteCallback (DW_Callback_t func, void *data)
 
 Widget ()
 
 ~Widget ()
 
bool resizeQueued ()
 
bool extremesQueued ()
 
bool needsResize ()
 
bool needsAllocate ()
 
bool allocateQueued ()
 
bool extremesChanged ()
 
bool wasAllocated ()
 
void setParent (Widget *parent)
 
void setQuasiParent (Widget *quasiParent)
 
void setGenerator (Widget *generator)
 
style::StylegetStyle ()
 
AllocationgetAllocation ()
 
bool inAllocation (int x, int y)
 
int boxOffsetX ()
 
int boxRestWidth ()
 
int boxDiffWidth ()
 
int boxOffsetY ()
 
int boxRestHeight ()
 
int boxDiffHeight ()
 
void sizeRequest (Requisition *requisition, int numPos=0, Widget **references=NULL, int *x=NULL, int *y=NULL)
 This method is a wrapper for Widget::sizeRequestImpl(); it calls the latter only when needed.
 
void getExtremes (Extremes *extremes, int numPos=0, Widget **references=NULL, int *x=NULL, int *y=NULL)
 Wrapper for Widget::getExtremesImpl().
 
void sizeAllocate (Allocation *allocation)
 Wrapper for Widget::sizeAllocateImpl, calls the latter only when needed.
 
void calcExtraSpace (int numPos, Widget **references, int *x, int *y)
 Calculates dw::core::Widget::extraSpace.
 
int getAvailWidth (bool forceValue)
 Return available width including margin/border/padding (extraSpace?), not only the content width.
 
int getAvailHeight (bool forceValue)
 Return available height including margin/border/padding (extraSpace?), not only the content height.
 
virtual bool getAdjustMinWidth ()
 
void correctRequisition (Requisition *requisition, void(*splitHeightFun)(int, int *, int *), bool allowDecreaseWidth, bool allowDecreaseHeight)
 
void correctExtremes (Extremes *extremes, bool useAdjustmentWidth)
 
int calcWidth (style::Length cssValue, int refWidth, Widget *refWidget, int limitMinWidth, bool forceValue)
 Computes a width value in pixels from cssValue.
 
void calcFinalWidth (style::Style *style, int refWidth, Widget *refWidget, int limitMinWidth, bool forceValue, int *finalWidth)
 
int calcHeight (style::Length cssValue, bool usePercentage, int refHeight, Widget *refWidget, bool forceValue)
 
virtual int applyPerWidth (int containerWidth, style::Length perWidth)
 
virtual int applyPerHeight (int containerHeight, style::Length perHeight)
 
int getMinWidth (Extremes *extremes, bool forceValue)
 Used to evaluate Widget::adjustMinWidth.
 
virtual bool isPossibleContainer ()
 
void containerSizeChanged ()
 
bool intersects (Widget *refWidget, Rectangle *area, Rectangle *intersection)
 Calculates the intersection of the visible allocation (i.
 
void drawInterruption (View *view, Rectangle *area, DrawingContext *context)
 See Interrupted drawing for details.
 
WidgetgetWidgetAtPointInterrupted (int x, int y, GettingWidgetAtPointContext *context)
 
bool buttonPress (EventButton *event)
 
bool buttonRelease (EventButton *event)
 
bool motionNotify (EventMotion *event)
 
void enterNotify (EventCrossing *event)
 
void leaveNotify (EventCrossing *event)
 
virtual void setStyle (style::Style *style)
 Change the style of a widget.
 
void setBgColor (style::Color *bgColor)
 Set the background "behind" the widget, if it is not the background of the parent widget, e.g.
 
style::ColorgetBgColor ()
 Get the actual background of a widget.
 
void drawBox (View *view, style::Style *style, Rectangle *area, int x, int y, int width, int height, bool inverse)
 Draw borders and background of a widget part, which allocation is given by (x, y, width, height) (widget coordinates).
 
void drawWidgetBox (View *view, Rectangle *area, bool inverse)
 Draw borders and background of a widget.
 
void drawSelected (View *view, Rectangle *area)
 
void setButtonSensitive (bool buttonSensitive)
 
bool isButtonSensitive ()
 
WidgetgetParent ()
 
WidgetgetContainer ()
 
WidgetgetTopLevel ()
 Get the widget at the root of the tree, this widget is part from.
 
int getLevel ()
 Get the level of the widget within the tree.
 
int getGeneratorLevel ()
 Get the level of the widget within the tree, regarting the generators, not the parents.
 
WidgetgetNearestCommonAncestor (Widget *otherWidget)
 Get the widget with the highest level, which is a direct ancestor of widget1 and widget2.
 
WidgetReferencegetWidgetReference ()
 
void setWidgetReference (WidgetReference *widgetReference)
 
WidgetgetGenerator ()
 
LayoutgetLayout ()
 
void scrollTo (HPosition hpos, VPosition vpos, int x, int y, int width, int height)
 
void getMarginArea (int *xMar, int *yMar, int *widthMar, int *heightMar)
 
void getBorderArea (int *xBor, int *yBor, int *widthBor, int *heightBor)
 
void getPaddingArea (int *xPad, int *yPad, int *widthPad, int *heightPad)
 Return the padding area (content plus padding).
 
virtual void removeChild (Widget *child)
 
- Public Member Functions inherited from lout::identity::IdentifiableObject
 IdentifiableObject ()
 
void intoStringBuffer (misc::StringBuffer *sb)
 Store a textual representation of the object in a misc::StringBuffer.
 
int getClassId ()
 Returns the class identifier.
 
const char * getClassName ()
 Return the name, under which the class of this object was registered.
 
bool instanceOf (int otherClassId)
 Returns, whether this class is an instance of the class, given by otherClassId, or of a sub class of this class.
 
- Public Member Functions inherited from lout::object::Object
virtual ~Object ()
 The destructor is defined as virtual (but not abstract), so that destruction of Object's works properly.
 
virtual bool equals (Object *other)
 Returns, whether two objects are equal.
 
virtual int hashValue ()
 Return a hash value for the object.
 
virtual Objectclone ()
 Return an exact copy of the object.
 
const char * toString ()
 Use object::Object::intoStringBuffer to return a textual representation of the object.
 
virtual size_t sizeOf ()
 Return the number of bytes, this object totally uses.
 

Static Public Member Functions

static void setPenaltyHyphen (int penaltyHyphen)
 
static void setPenaltyHyphen2 (int penaltyHyphen2)
 
static void setPenaltyEmDashLeft (int penaltyLeftEmDash)
 
static void setPenaltyEmDashRight (int penaltyRightEmDash)
 
static void setPenaltyEmDashRight2 (int penaltyRightEmDash2)
 
static void setStretchabilityFactor (int stretchabilityFactor)
 
static bool mustAddBreaks (core::style::Style *style)
 
- Static Public Member Functions inherited from dw::oof::OOFAwareWidget
static const char * stackingLevelText (int level)
 
static bool testStyleFloat (core::style::Style *style)
 
static bool testStyleAbsolutelyPositioned (core::style::Style *style)
 
static bool testStyleFixedlyPositioned (core::style::Style *style)
 
static bool testStyleRelativelyPositioned (core::style::Style *style)
 
static bool testStylePositioned (core::style::Style *style)
 
static bool testStyleOutOfFlow (core::style::Style *style)
 
static bool testWidgetFloat (Widget *widget)
 
static bool testWidgetAbsolutelyPositioned (Widget *widget)
 
static bool testWidgetFixedlyPositioned (Widget *widget)
 
static bool testWidgetRelativelyPositioned (Widget *widget)
 
static bool testWidgetPositioned (Widget *widget)
 
static bool testWidgetOutOfFlow (Widget *widget)
 
- Static Public Member Functions inherited from dw::core::Widget
static void setAdjustMinWidth (bool adjustMinWidth)
 
static void adjustHeight (int *height, bool allowDecreaseHeight, int ascent, int descent)
 

Static Public Attributes

static int CLASS_ID = -1
 
- Static Public Attributes inherited from dw::RegardingBorder
static int CLASS_ID = -1
 
- Static Public Attributes inherited from dw::oof::OOFAwareWidget
static int CLASS_ID = -1
 
- Static Public Attributes inherited from dw::core::Widget
static int CLASS_ID = -1
 

Protected Member Functions

void queueDrawRange (int index1, int index2)
 
int calcVerticalBorder (int widgetPadding, int widgetBorder, int widgetMargin, int lineBorderTotal, int lineMarginTotal)
 
void getWordExtremes (Word *word, core::Extremes *extremes)
 Get the extremes of a word within a textblock.
 
void justifyLine (Line *line, int diff)
 
LineaddLine (int firstWord, int lastWord, int newLastOofPos, bool temporary, int minHeight)
 
void rewrap ()
 Rewrap the page from the line from which this is necessary.
 
void fillParagraphs ()
 Counter part to rewrap(), but for extremes, not size calculation.
 
void initNewLine ()
 
void calcBorders (int lastOofRef, int height)
 
void showMissingLines ()
 
void removeTemporaryLines ()
 
void decorateText (core::View *view, core::style::Style *style, core::style::Color::Shading shading, int x, int yBase, int width)
 
void drawText (core::View *view, core::style::Style *style, core::style::Color::Shading shading, int x, int y, const char *text, int start, int len, bool isStart, bool isEnd)
 
void drawWord (Line *line, int wordIndex1, int wordIndex2, core::View *view, core::Rectangle *area, int xWidget, int yWidgetBase)
 Draw a word of text.
 
void drawWord0 (int wordIndex1, int wordIndex2, const char *text, int totalWidth, bool drawHyphen, core::style::Style *style, core::View *view, core::Rectangle *area, int xWidget, int yWidgetBase)
 TODO Comment.
 
void drawSpace (int wordIndex, core::View *view, core::Rectangle *area, int xWidget, int yWidgetBase)
 
void drawLine (Line *line, core::View *view, core::Rectangle *area, core::DrawingContext *context)
 
int findLineIndex (int y)
 Find the first line index that includes y, which is given in widget coordinates.
 
int findLineIndexWhenNotAllocated (int y)
 
int findLineIndexWhenAllocated (int y)
 
int findLineIndex (int y, int ascent)
 
int findLineOfWord (int wordIndex)
 Find the line of word wordIndex.
 
int findParagraphOfWord (int wordIndex)
 Find the paragraph of word wordIndex.
 
WordfindWord (int x, int y, bool *inSpace)
 Find the index of the word, or -1.
 
WordaddWord (int width, int ascent, int descent, short flags, core::style::Style *style)
 Add a new word (text, widget etc.) to a page.
 
void breakAdded ()
 Called directly after a (line or paragraph) break has been added.
 
void initWord (int wordNo)
 Basic initialization, which is neccessary before fillWord.
 
void cleanupWord (int wordNo)
 
void removeWordImgRenderer (int wordNo)
 
void setWordImgRenderer (int wordNo)
 
void removeSpaceImgRenderer (int wordNo)
 
void setSpaceImgRenderer (int wordNo)
 
void fillWord (int wordNo, int width, int ascent, int descent, short flags, core::style::Style *style)
 
void fillSpace (int wordNo, core::style::Style *style)
 
void setBreakOption (Word *word, core::style::Style *style, int breakPenalty1, int breakPenalty2, bool forceBreak)
 Set a break option, if allowed by the style.
 
bool isBreakAllowedInWord (Word *word)
 
bool isBreakAllowed (core::style::Style *style)
 
int textWidth (const char *text, int start, int len, core::style::Style *style, bool isStart, bool isEnd)
 
void calcTextSize (const char *text, size_t len, core::style::Style *style, core::Requisition *size, bool isStart, bool isEnd)
 Calculate the size of a text word.
 
bool calcSizeOfWidgetInFlow (int wordIndex, Widget *widget, core::Requisition *size)
 Calculate the size of a widget, and return whether it has to be positioned at the top of the line.
 
bool findSizeRequestReference (Widget *reference, int *xRef=NULL, int *yRef=NULL)
 
bool findSizeRequestReference (int oofmIndex, int *xRef=NULL, int *yRef=NULL)
 
bool mustBorderBeRegarded (Line *line)
 Of nested text blocks, only the most inner one must regard the borders of floats.
 
bool mustBorderBeRegarded (int lineNo)
 
int lineYOffsetWidget (Line *line, core::Allocation *allocation)
 
int lineYOffsetWidget (Line *line)
 
int lineYOffsetCanvas (Line *line, core::Allocation *allocation)
 
int lineYOffsetCanvas (Line *line)
 
int lineYOffsetWidget (int lineIndex)
 
int lineYOffsetWidget (int lineIndex, core::Allocation *allocation)
 
int lineYOffsetCanvas (int lineIndex)
 
int calcPenaltyIndexForNewLine ()
 
RegardingBordergetWidgetRegardingBorderForLine (Line *line)
 
RegardingBordergetWidgetRegardingBorderForLine (int lineNo)
 
RegardingBordergetWidgetRegardingBorderForLine (int firstWord, int lastWord)
 
int yOffsetOfLineToBeCreated (int *lastMargin=NULL)
 Includes margin, border, and padding.
 
int yOffsetOfLineCreated (Line *line)
 Includes margin, border, and padding.
 
bool sendSelectionEvent (core::SelectionState::EventType eventType, core::MousePositionEvent *event)
 Send event to selection.
 
void processWord (int wordIndex)
 
virtual int wordWrap (int wordIndex, bool wrapAll)
 
int wrapWordInFlow (int wordIndex, bool wrapAll)
 
int wrapWordOofRef (int wordIndex, bool wrapAll)
 
void balanceBreakPosAndHeight (int wordIndex, int firstIndex, int *searchUntil, bool tempNewLine, int penaltyIndex, bool borderIsCalculated, bool *thereWillBeMoreSpace, bool wrapAll, int *diffWords, int *wordIndexEnd, int *lastFloatPos, bool regardBorder, int *height, int *breakPos)
 
int searchBreakPos (int wordIndex, int firstIndex, int *searchUntil, bool tempNewLine, int penaltyIndex, bool thereWillBeMoreSpace, bool wrapAll, int *diffWords, int *wordIndexEnd, int *addIndex1=NULL)
 
int searchMinBap (int firstWord, int lastWordm, int penaltyIndex, bool thereWillBeMoreSpace, bool correctAtEnd)
 
int considerHyphenation (int firstIndex, int breakPos)
 Suggest a word to hyphenate, when breaking at breakPos is planned.
 
bool isHyphenationCandidate (Word *word)
 
int calcLinePartHeight (int firstWord, int lastWord)
 
void handleWordExtremes (int wordIndex)
 Counter part to wordWrap(), but for extremes, not size calculation.
 
void correctLastWordExtremes ()
 Called when something changed for the last word (space, hyphens etc.).
 
int getLineShrinkability (int lastWordIndex)
 
int getLineStretchability (int lastWordIndex)
 
int hyphenateWord (int wordIndex, int *addIndex1=NULL)
 
void moveWordIndices (int wordIndex, int num, int *addIndex1=NULL)
 
void accumulateWordForLine (int lineIndex, int wordIndex)
 
void accumulateWordData (int wordIndex)
 
int calcLineBreakWidth (int lineIndex)
 
void initLine1Offset (int wordIndex)
 
void alignLine (int lineIndex)
 Align the line.
 
void calcTextOffset (int lineIndex, int totalWidth)
 
void drawLevel (core::View *view, core::Rectangle *area, int level, core::DrawingContext *context)
 
WidgetgetWidgetAtPointLevel (int x, int y, int level, core::GettingWidgetAtPointContext *context)
 
void sizeRequestImpl (core::Requisition *requisition, int numPos, Widget **references, int *x, int *y)
 The ascent of a textblock is the ascent of the first line, plus padding/border/margin.
 
int numSizeRequestReferences ()
 See Sizes of Dillo Widgets (or Size requisitions depending on positions).
 
WidgetsizeRequestReference (int index)
 See Sizes of Dillo Widgets (or Size requisitions depending on positions).
 
void getExtremesSimpl (core::Extremes *extremes)
 Simple variant, to be implemented by widgets with extremes not depending on positions.
 
int numGetExtremesReferences ()
 See Sizes of Dillo Widgets (or Size requisitions depending on positions).
 
WidgetgetExtremesReference (int index)
 See Sizes of Dillo Widgets (or Size requisitions depending on positions).
 
void notifySetAsTopLevel ()
 This method is called after a widget has been set as the top of a widget tree.
 
void notifySetParent ()
 This method is called after a widget has been added to a parent.
 
void sizeAllocateImpl (core::Allocation *allocation)
 See Sizes of Dillo Widgets.
 
void calcExtraSpaceImpl (int numPos, Widget **references, int *x, int *y)
 
int getAvailWidthOfChild (core::Widget *child, bool forceValue)
 Computes the content width available of a child widget.
 
int getAvailHeightOfChild (core::Widget *child, bool forceValue)
 
void containerSizeChangedForChildren ()
 
bool affectsSizeChangeContainerChild (Widget *child)
 
bool usesAvailWidth ()
 Must be implemengted by a method returning true, when getAvailWidth() is called.
 
void resizeDrawImpl ()
 Called after sizeAllocateImpl() to redraw necessary areas.
 
void markSizeChange (int ref)
 See Sizes of Dillo Widgets.
 
void markExtremesChange (int ref)
 See Sizes of Dillo Widgets.
 
bool isBlockLevel ()
 
bool buttonPressImpl (core::EventButton *event)
 
bool buttonReleaseImpl (core::EventButton *event)
 
bool motionNotifyImpl (core::EventMotion *event)
 
void enterNotifyImpl (core::EventCrossing *event)
 
void leaveNotifyImpl (core::EventCrossing *event)
 
void removeChild (Widget *child)
 
void addText0 (const char *text, size_t len, short flags, core::style::Style *style, core::Requisition *size)
 Add a word (without hyphens) to the page structure.
 
void calcTextSizes (const char *text, size_t textLen, core::style::Style *style, int numBreaks, int *breakPos, core::Requisition *wordSize)
 
int getGeneratorRest (int oofmIndex)
 
- Protected Member Functions inherited from dw::oof::OOFAwareWidget
bool isParentRefOOF (int parentRef)
 
int makeParentRefInFlow (int inFlowSubRef)
 
int getParentRefInFlowSubRef (int parentRef)
 
int makeParentRefOOF (int oofmIndex, int oofmSubRef)
 
int getParentRefOOFSubRef (int parentRef)
 
int getParentRefOOFIndex (int parentRef)
 
oof::OutOfFlowMgrgetParentRefOutOfFlowMgr (int parentRef)
 
bool isWidgetOOF (Widget *widget)
 
int getWidgetInFlowSubRef (Widget *widget)
 
int getWidgetOOFSubRef (Widget *widget)
 
int getWidgetOOFIndex (Widget *widget)
 
oof::OutOfFlowMgrgetWidgetOutOfFlowMgr (Widget *widget)
 
OutOfFlowMgrsearchOutOfFlowMgr (int oofmIndex)
 
void initOutOfFlowMgrs ()
 
void correctRequisitionByOOF (core::Requisition *requisition, void(*splitHeightFun)(int, int *, int *))
 
void correctExtremesByOOF (core::Extremes *extremes)
 
void sizeAllocateStart (core::Allocation *allocation)
 
void sizeAllocateEnd ()
 
void containerSizeChangedForChildrenOOF ()
 
void drawOOF (core::View *view, core::Rectangle *area, core::DrawingContext *context)
 
WidgetgetWidgetAtPoint (int x, int y, core::GettingWidgetAtPointContext *context)
 
WidgetgetWidgetOOFAtPoint (int x, int y, core::GettingWidgetAtPointContext *context)
 
void removeChild (Widget *child)
 
virtual bool adjustExtraSpaceWhenCorrectingRequisitionByOOF ()
 
- Protected Member Functions inherited from dw::core::Widget
int getHeight ()
 
int getContentWidth ()
 
int getContentHeight ()
 
StackingContextMgrgetNextStackingContextMgr ()
 
void printFlag (Flags f)
 
void setFlags (Flags f)
 
void unsetFlags (Flags f)
 
void queueDraw ()
 
void queueDrawArea (int x, int y, int width, int height)
 
void queueResize (int ref, bool extremesChanged)
 
virtual void sizeRequestImpl (Requisition *requisition, int numPos, Widget **references, int *x, int *y)
 See Sizes of Dillo Widgets.
 
virtual void sizeRequestSimpl (Requisition *requisition)
 Simple variant, to be implemented by widgets with sizes not depending on positions.
 
virtual void getExtremesImpl (Extremes *extremes, int numPos, Widget **references, int *x, int *y)
 See Sizes of Dillo Widgets.
 
virtual void calcExtraSpaceImpl (int numPos, Widget **references, int *x, int *y)
 The actual implementation for calculating dw::core::Widget::extraSpace.
 
virtual void correctRequisitionOfChild (Widget *child, Requisition *requisition, void(*splitHeightFun)(int, int *, int *), bool allowDecreaseWidth, bool allowDecreaseHeight)
 
void correctReqWidthOfChild (Widget *child, Requisition *requisition, bool allowDecreaseWidth)
 
void correctReqHeightOfChild (Widget *child, Requisition *requisition, void(*splitHeightFun)(int, int *, int *), bool allowDecreaseHeight)
 
virtual void correctExtremesOfChild (Widget *child, Extremes *extremes, bool useAdjustmentWidth)
 
virtual bool affectedByContainerSizeChange ()
 
virtual bool affectsSizeChangeContainerChild (Widget *child)
 
virtual bool usesAvailHeight ()
 Must be implemengted by a method returning true, when getAvailHeight() is called.
 
char * addAnchor (const char *name)
 
char * addAnchor (const char *name, int y)
 
void changeAnchor (char *name, int y)
 
void removeAnchor (char *name)
 
void setCursor (style::Cursor cursor)
 
bool selectionHandleEvent (SelectionState::EventType eventType, Iterator *it, int charPos, int linkNo, MousePositionEvent *event)
 
- Protected Member Functions inherited from lout::identity::IdentifiableObject
void registerName (const char *className, int *classId)
 This method must be called in the constructor for the sub class.
 

Static Protected Member Functions

static int getSpaceShrinkability (struct Word *word)
 
static int getSpaceStretchability (struct Word *word)
 
- Static Protected Member Functions inherited from dw::oof::OOFAwareWidget
static int getOOFMIndex (Widget *widget)
 
static bool isOOFContainer (Widget *widget, int oofmIndex)
 

Protected Attributes

bool hasListitemValue
 
int leftInnerPadding
 
int line1Offset
 
int line1OffsetEff
 
bool ignoreLine1OffsetSometimes
 
bool mustQueueResize
 
bool limitTextWidth
 
bool treatAsInline
 
int redrawY
 
int lastWordDrawn
 
core::SizeParams sizeRequestParams
 
int lineBreakWidth
 
int wrapRefLines
 
int wrapRefParagraphs
 
int wrapRefLinesFCX
 
int wrapRefLinesFCY
 
bool newLineHasFloatLeft
 
bool newLineHasFloatRight
 
int newLineLeftBorder
 
int newLineRightBorder
 
int newLineLeftFloatHeight
 
int newLineRightFloatHeight
 
int newLineAscent
 
int newLineDescent
 
lout::misc::SimpleVector< Line > * lines
 
lout::misc::SimpleVector< Paragraph > * paragraphs
 
int nonTemporaryLines
 
lout::misc::NotSoSimpleVector< Word > * words
 
lout::misc::SimpleVector< Anchor > * anchors
 
struct { 
 
   int   index 
 
   int   nChar 
 
hlStart [core::HIGHLIGHT_NUM_LAYERS
 
struct { 
 
   int   index 
 
   int   nChar 
 
hlEnd [core::HIGHLIGHT_NUM_LAYERS
 
int hoverLink
 
int numSizeReferences
 
WidgetsizeReferences [NUM_OOFM]
 
- Protected Attributes inherited from dw::oof::OOFAwareWidget
OOFAwareWidgetoofContainer [NUM_OOFM]
 
OutOfFlowMgroutOfFlowMgr [NUM_OOFM]
 
core::Requisition requisitionWithoutOOF
 
- Protected Attributes inherited from dw::core::Widget
WidgetImgRendererwidgetImgRenderer
 
Allocation allocation
 The current allocation: size and position, always relative to the canvas.
 
Layoutlayout
 
style::Box extraSpace
 Space around the margin box.
 
StackingContextMgrstackingContextMgr
 Set iff this widget constitutes a stacking context, as defined by CSS.
 
WidgetstackingContextWidget
 The bottom-most ancestor (or this) for which stackingContextMgr is set.
 

Static Protected Attributes

static int penalties [PENALTY_NUM][2]
 The penalties for hyphens and other, multiplied by 100.
 
static int stretchabilityFactor = 100
 ...
 
- Static Protected Attributes inherited from dw::oof::OOFAwareWidget
static const char * OOFM_NAME [NUM_OOFM]
 

Private Types

enum  { PENALTY_FORCE_BREAK = INT_MIN , PENALTY_PROHIBIT_BREAK = INT_MAX }
 This class encapsulates the badness/penalty calculation, and so (i) makes changes (hopefully) simpler, and (ii) hides the integer arithmetic (floating point arithmetic avoided for performance reasons). More...
 
enum  { PENALTY_HYPHEN , PENALTY_EM_DASH_LEFT , PENALTY_EM_DASH_RIGHT , PENALTY_NUM }
 
enum  { NUM_DIV_CHARS = 4 }
 

Static Private Attributes

static DivChar divChars [NUM_DIV_CHARS]
 
static const char * hyphenDrawChar = "-"
 The character which is used to draw a hyphen at the end of a line, either caused by automatic hyphenation, or by soft hyphens.
 

Friends

class TextblockIterator
 

Additional Inherited Members

- Public Types inherited from dw::oof::OOFAwareWidget
enum  {
  SL_START , SL_BACKGROUND , SL_SC_BOTTOM , SL_IN_FLOW ,
  SL_OOF_REF , SL_OOF_CONT , SL_SC_TOP , SL_END
}
 
- Public Attributes inherited from dw::core::Widget
int parentRef
 This value is defined by the parent widget, and used for incremential resizing.
 
- Protected Types inherited from dw::oof::OOFAwareWidget
enum  {
  OOFM_FLOATS , OOFM_ABSOLUTE , OOFM_RELATIVE , OOFM_FIXED ,
  NUM_OOFM
}
 
enum  { PARENT_REF_OOFM_BITS = 3 , PARENT_REF_OOFM_MASK = (1 << PARENT_REF_OOFM_BITS) - 1 }
 
- Protected Types inherited from dw::core::Widget
enum  Flags {
  RESIZE_QUEUED = 1 << 0 , EXTREMES_QUEUED = 1 << 1 , NEEDS_RESIZE = 1 << 2 , NEEDS_ALLOCATE = 1 << 3 ,
  ALLOCATE_QUEUED = 1 << 4 , EXTREMES_CHANGED = 1 << 5 , WAS_ALLOCATED = 1 << 6
}
 

Detailed Description

A Widget for rendering text blocks, i.e.

paragraphs or sequences of paragraphs.

Info: Some (not so) recent changes, line breaking and hyphenation, have not yet been incorporated into this documentation. See Changes in Line-Breaking and Hyphenation.

Signals

dw::Textblock uses the signals defined in dw::core::Layout::LinkReceiver, related to links. The coordinates are always -1.

Collapsing Spaces

Info: Collapsing spaces are deprecated, in favor of collapsing margins (see below).

The idea behind this is that every paragraph has a specific vertical space around and that they are combined to one space, according to rules stated below. A paragraph consists either of the lines between two paragraph breaks within a dw::Textblock, or of a dw::Textblock within a dw::Textblock, in a single line; the latter is used for indented boxes and list items.

The rules:

  1. If a paragraph is following by another, the space between them is the maximum of both box spaces:

    are combined like this:

  2. a) If one paragraph is the first paragraph within another, the upper space of these paragraphs collapse. b) The analogue is the case for the last box:

    If B and C are put into A, the result is:

For achieving this, there are some features of dw::Textblock:

  • Consequent breaks are automatically combined, according to rule 1. See the code of dw::Textblock::addParBreak for details.

  • If a break is added as the first word of the dw::Textblock within another dw::Textblock, collapsing according to rule 2a is done automatically. See the code of dw::Textblock::addParBreak.

  • To collapse spaces according to rule 2b, dw::Textblock::addParBreak::handOverBreak must be called for the inner widget. The HTML parser does this in Html_eventually_pop_dw.

Collapsing Margins

Collapsing margins, as defined in the CSS2 specification, are, supported in addition to collapsing spaces. Also, spaces and margins collapse themselves. I. e., the space between two paragraphs is the maximum of the space calculated as described in "Collapsing Spaces" and the space calculated according to the rules for collapsing margins.

(This is an intermediate hybrid state, collapsing spaces are used in the current version of dillo, while I implemented collapsing margins for the CSS prototype and integrated it already into the main trunk. For a pure CSS-based dillo, collapsing spaces will not be needed anymore, and may be removed for simplicity.)

Currently implemented cases:

  • The top margin of of the textblock widget and the top margin of the first line box (based on widgets in the first line) collapse.
  • The bottom margin of of the textblock widget and the bottom margin of the last line box collapse.
  • The bottom margin of a line box and the top margin of the following line collapse. Here, the break space is regarded, too.

Open issues:

  • Only the value of Style::margin is regarded, not the result of the collapsing itself. For the widgets A, B (child of A), and C (child of B), the effective margin of A is the maximum of the style margins of A and B, while the effective margin of B (the collapsed margin of B and C) is ignored here. This could be solved by introducing an additional "effective" ("calculated", "collapsed") margin as an attribute of Widget.
  • For similar reasons, backgrounds to not work exactly. Usage of Widget::extraSpace should fix this, but it is only fully working in the GROWS branch (http://flpsed.org/hgweb/dillo_grows).

    Update: This needs to be re-evaluated.

  • Do margins of inline blocks and tables collapse? Check CSS spec. (They do currently; if not, ignoring them is simple.)
  • Lines which only contain a BREAK should be skipped for collapsing margins, or at least all three should collapse: the previous margin, the break, and the following margin. (Compare this with the CSS spec.)
  • Related to this: adding breaks should be revised. Textblock::addLinebreak and Textblock::addParbreak work quite differently, and Textblock::addParbreak seems much to complex for our needs, even when spaces of lines are kept.

Some Internals

There are 4 lists, dw::Textblock::words, dw::Textblock::paragraphs, dw::Textblock::lines, and dw::Textblock::anchors. The word list is quite static; only new words may be added. A word is either text, a widget, or a break.

Lines refer to the word list (first and last). They are completely redundant, i.e., they can be rebuilt from the words. Lines can be rewrapped either completely or partially (see "Incremental Resizing" below). For the latter purpose, several values are accumulated in the lines. See dw::Textblock::Line for details.

A recent change was the introduction of the paragraphs list, which works quite similar, is also redundant, but is used to calculate the extremes, not the size.

Anchors associate the anchor name with the index of the next word at the point of the anchor.

Incremental Resizing

dw::Textblock makes use of incremental resizing as described in Sizes of Dillo Widgets. The parentRef is, for children of a dw::Textblock, simply the number of the line. [Update: Incorrect; see Handling Elements Out Of Flow.]

Generally, there are three cases which may change the size of the widget:

  • The line break size of the widget has changed, e.g., because the user has changed the size of the browser window. In this case, it is necessary to rewrap all the lines.

  • A child widget has changed its size. In this case, only a rewrap down from the line where this widget is located is necessary.

    (This case is very important for tables. Tables are quite at the bottom, so that a partial rewrap is relevant. Otherwise, tables change their size quite often, so that this is necessary for a fast, non-blocking rendering)

  • A word (or widget, break etc.) is added to the text block. This makes it possible to reuse the old size by simply adjusting the current width and height, so no rewrapping is necessary.

The state of the size calculation is stored in wrapRef within dw::Textblock, which has the value -1 if no rewrapping of lines necessary, or otherwise the line from which a rewrap is necessary.

Widgets Ouf Of Flow

See

Definition at line 205 of file textblock.hh.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private

This class encapsulates the badness/penalty calculation, and so (i) makes changes (hopefully) simpler, and (ii) hides the integer arithmetic (floating point arithmetic avoided for performance reasons).

Unfortunately, the value range of the badness is not well defined, so fiddling with the penalties is a bit difficult.

Enumerator
PENALTY_FORCE_BREAK 
PENALTY_PROHIBIT_BREAK 

Definition at line 217 of file textblock.hh.

◆ anonymous enum

anonymous enum
private
Enumerator
PENALTY_HYPHEN 
PENALTY_EM_DASH_LEFT 
PENALTY_EM_DASH_RIGHT 
PENALTY_NUM 

Definition at line 283 of file textblock.hh.

◆ anonymous enum

anonymous enum
private
Enumerator
NUM_DIV_CHARS 

Definition at line 285 of file textblock.hh.

Constructor & Destructor Documentation

◆ Textblock()

◆ ~Textblock()

dw::Textblock::~Textblock ( )

Member Function Documentation

◆ accumulateWordData()

◆ accumulateWordForLine()

◆ addAnchor()

bool dw::Textblock::addAnchor ( const char *  name,
core::style::Style style 
)

Add an anchor to the page.

"name" is copied, so no strdup is necessary for the caller.

Return true on success, and false, when this anchor had already been added to the widget tree.

Todo:
It may be necessary for future uses to save the anchor in some way, e.g. when parts of the widget tree change.

Definition at line 2545 of file textblock.cc.

References dw::core::Widget::allocation, anchors, lout::misc::boolToStr(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE_VAL, lines, lineYOffsetWidget(), dw::Textblock::Anchor::name, dw::core::Widget::style, dw::core::Widget::wasAllocated(), dw::Textblock::Anchor::wordIndex, words, and dw::core::Allocation::y.

Referenced by textTimeout().

◆ addBreakOption()

void dw::Textblock::addBreakOption ( core::style::Style style,
bool  forceBreak 
)

Add a break option (see setBreakOption() for details).

Used instead of addSpace for ideographic characters.

When "forceBreak" is true, a break is even possible within PRE etc.

Definition at line 2609 of file textblock.cc.

References correctLastWordExtremes(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE, DBG_SET_WORD, setBreakOption(), dw::core::Widget::style, and words.

◆ addLine()

Textblock::Line * dw::Textblock::addLine ( int  firstWord,
int  lastWord,
int  newLastOofPos,
bool  temporary,
int  minHeight 
)
protected

Definition at line 306 of file textblock_linebreaking.cc.

References accumulateWordForLine(), alignLine(), dw::core::Requisition::ascent, dw::Textblock::Line::borderAscent, dw::Textblock::Line::borderDescent, dw::core::style::StyleAttrs::boxOffsetX(), dw::core::Widget::boxOffsetX(), dw::core::Widget::boxRestWidth(), dw::Textblock::Line::breakSpace, calcTextOffset(), dw::Textblock::Word::content, dw::Textblock::Line::contentAscent, dw::Textblock::Line::contentDescent, DBG_MSG_WORD, DBG_OBJ_ARRATTRSET_NUM, DBG_OBJ_ENTER, DBG_OBJ_LEAVE, DBG_OBJ_MSGF, DBG_OBJ_SET_BOOL, DBG_OBJ_SET_NUM, dw::Textblock::Word::effSpace, findSizeRequestReference(), dw::Textblock::Line::firstWord, dw::core::Widget::getStyle(), dw::oof::OOFAwareWidget::getWidgetOOFIndex(), initNewLine(), dw::Textblock::Line::lastOofRefPositionedBeforeThisLine, dw::Textblock::Line::lastWord, leftInnerPadding, dw::Textblock::Line::leftOffset, line1OffsetEff, lineBreakWidth, lines, dw::Textblock::Line::marginAscent, dw::Textblock::Line::marginDescent, lout::misc::max(), dw::Textblock::Line::maxLineWidth, mustBorderBeRegarded(), mustQueueResize, newLineLeftBorder, newLineRightBorder, nonTemporaryLines, dw::Textblock::Word::origSpace, dw::Textblock::Line::rightOffset, dw::oof::OOFAwareWidget::searchOutOfFlowMgr(), dw::Textblock::WordImgRenderer::setData(), dw::Textblock::Word::size, dw::Textblock::Word::spaceImgRenderer, dw::oof::OutOfFlowMgr::tellIncompletePosition2(), dw::oof::OutOfFlowMgr::tellPosition2(), dw::Textblock::Line::textOffset, dw::Textblock::Line::top, dw::Textblock::Line::totalHeight(), dw::Textblock::Word::totalWidth, dw::core::Content::type, dw::core::WidgetReference::widget, dw::core::Widget::Widget(), dw::core::Content::WIDGET_OOF_REF, dw::core::Content::widgetReference, dw::core::Requisition::width, dw::Textblock::Word::wordImgRenderer, words, and yOffsetOfLineCreated().

Referenced by wrapWordInFlow().

◆ addLinebreak()

◆ addParbreak()

◆ addSpace()

◆ addText() [1/2]

void dw::Textblock::addText ( const char *  text,
core::style::Style style 
)
inline

Definition at line 888 of file textblock.hh.

References addText(), and dw::core::Widget::style.

◆ addText() [2/2]

◆ addText0()

◆ addWidget()

void dw::Textblock::addWidget ( core::Widget widget,
core::style::Style style 
)

◆ addWord()

Textblock::Word * dw::Textblock::addWord ( int  width,
int  ascent,
int  descent,
short  flags,
core::style::Style style 
)
protected

◆ affectsSizeChangeContainerChild()

bool dw::Textblock::affectsSizeChangeContainerChild ( Widget child)
protected

◆ alignLine()

◆ balanceBreakPosAndHeight()

void dw::Textblock::balanceBreakPosAndHeight ( int  wordIndex,
int  firstIndex,
int *  searchUntil,
bool  tempNewLine,
int  penaltyIndex,
bool  borderIsCalculated,
bool *  thereWillBeMoreSpace,
bool  wrapAll,
int *  diffWords,
int *  wordIndexEnd,
int *  lastFloatPos,
bool  regardBorder,
int *  height,
int *  breakPos 
)
protected

◆ breakAdded()

void dw::Textblock::breakAdded ( )
protected

Called directly after a (line or paragraph) break has been added.

Definition at line 2849 of file textblock.cc.

References dw::core::Content::BREAK, and words.

Referenced by addLinebreak(), and addParbreak().

◆ buttonPressImpl()

bool dw::Textblock::buttonPressImpl ( core::EventButton event)
protectedvirtual

Reimplemented from dw::core::Widget.

Definition at line 943 of file textblock.cc.

References dw::core::SelectionState::BUTTON_PRESS, and sendSelectionEvent().

◆ buttonReleaseImpl()

bool dw::Textblock::buttonReleaseImpl ( core::EventButton event)
protectedvirtual

Reimplemented from dw::core::Widget.

Definition at line 948 of file textblock.cc.

References dw::core::SelectionState::BUTTON_RELEASE, and sendSelectionEvent().

◆ calcBorders()

◆ calcExtraSpaceImpl()

◆ calcLineBreakWidth()

◆ calcLinePartHeight()

int dw::Textblock::calcLinePartHeight ( int  firstWord,
int  lastWord 
)
protected

◆ calcPenaltyIndexForNewLine()

int dw::Textblock::calcPenaltyIndexForNewLine ( )
inlineprotected

◆ calcSizeOfWidgetInFlow()

◆ calcTextOffset()

◆ calcTextSize()

◆ calcTextSizes()

void dw::Textblock::calcTextSizes ( const char *  text,
size_t  textLen,
core::style::Style style,
int  numBreaks,
int *  breakPos,
core::Requisition wordSize 
)
protected

◆ calcVerticalBorder()

int dw::Textblock::calcVerticalBorder ( int  widgetPadding,
int  widgetBorder,
int  widgetMargin,
int  lineBorderTotal,
int  lineMarginTotal 
)
protected

◆ changeLinkColor()

◆ changeWordStyle()

void dw::Textblock::changeWordStyle ( int  from,
int  to,
core::style::Style style,
bool  includeFirstSpace,
bool  includeLastSpace 
)

Definition at line 3028 of file textblock.cc.

◆ cleanupWord()

◆ considerHyphenation()

int dw::Textblock::considerHyphenation ( int  firstIndex,
int  breakPos 
)
protected

Suggest a word to hyphenate, when breaking at breakPos is planned.

Return a word index or -1, when hyphenation makes no sense.

Definition at line 1190 of file textblock_linebreaking.cc.

References dw::Textblock::Word::badnessAndPenalty, isHyphenationCandidate(), dw::Textblock::BadnessAndPenalty::lineLoose(), dw::Textblock::BadnessAndPenalty::lineTight(), and words.

Referenced by searchBreakPos().

◆ containerSizeChangedForChildren()

◆ correctLastWordExtremes()

◆ decorateText()

◆ drawLevel()

◆ drawLine()

◆ drawSpace()

◆ drawText()

◆ drawWord()

void dw::Textblock::drawWord ( Line line,
int  wordIndex1,
int  wordIndex2,
core::View view,
core::Rectangle area,
int  xWidget,
int  yWidgetBase 
)
protected

◆ drawWord0()

◆ enterNotifyImpl()

void dw::Textblock::enterNotifyImpl ( core::EventCrossing event)
protectedvirtual

Reimplemented from dw::core::Widget.

Definition at line 1000 of file textblock.cc.

References _MSG, hoverLink, and hoverTooltip.

◆ fillParagraphs()

void dw::Textblock::fillParagraphs ( )
protected

◆ fillSpace()

◆ fillWord()

◆ findLineIndex() [1/2]

int dw::Textblock::findLineIndex ( int  y)
protected

Find the first line index that includes y, which is given in widget coordinates.

Definition at line 1570 of file textblock.cc.

References findLineIndexWhenAllocated(), findLineIndexWhenNotAllocated(), and dw::core::Widget::wasAllocated().

Referenced by findLineIndexWhenAllocated(), and findLineIndexWhenNotAllocated().

◆ findLineIndex() [2/2]

int dw::Textblock::findLineIndex ( int  y,
int  ascent 
)
protected

◆ findLineIndexWhenAllocated()

int dw::Textblock::findLineIndexWhenAllocated ( int  y)
protected

◆ findLineIndexWhenNotAllocated()

int dw::Textblock::findLineIndexWhenNotAllocated ( int  y)
protected

◆ findLineOfWord()

int dw::Textblock::findLineOfWord ( int  wordIndex)
protected

Find the line of word wordIndex.

Definition at line 1635 of file textblock.cc.

References index, lines, and words.

Referenced by dw::Textblock::TextblockIterator::getAllocation(), queueDrawRange(), sizeAllocateImpl(), and widgetRefSizeChanged().

◆ findParagraphOfWord()

int dw::Textblock::findParagraphOfWord ( int  wordIndex)
protected

Find the paragraph of word wordIndex.

Definition at line 1659 of file textblock.cc.

References index, paragraphs, and words.

Referenced by fillParagraphs().

◆ findSizeRequestReference() [1/2]

bool dw::Textblock::findSizeRequestReference ( int  oofmIndex,
int *  xRef = NULL,
int *  yRef = NULL 
)
inlineprotected

◆ findSizeRequestReference() [2/2]

bool dw::Textblock::findSizeRequestReference ( Widget reference,
int *  xRef = NULL,
int *  yRef = NULL 
)
protected

◆ findWord()

◆ flush()

void dw::Textblock::flush ( )

◆ getAvailHeightOfChild()

int dw::Textblock::getAvailHeightOfChild ( core::Widget child,
bool  forceValue 
)
protectedvirtual

◆ getAvailWidthOfChild()

int dw::Textblock::getAvailWidthOfChild ( core::Widget child,
bool  forceValue 
)
protectedvirtual

Computes the content width available of a child widget.

Parameters
childThe child widget of which the available width will be computed.
forceValueIf true, computes the width of the child with value "auto". Otherwise, it wont.
Returns
The available width in pixels or -1.

Reimplemented from dw::core::Widget.

Definition at line 755 of file textblock.cc.

References dw::core::Widget::boxDiffWidth(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE_VAL, DBG_OBJ_MSG, dw::oof::OutOfFlowMgr::dealingWithSizeOfChild(), dw::core::Widget::extremes, dw::core::Widget::getAvailWidth(), dw::oof::OutOfFlowMgr::getAvailWidthOfChild(), dw::core::Widget::getExtremes(), dw::oof::OOFAwareWidget::getWidgetOutOfFlowMgr(), dw::oof::OOFAwareWidget::isWidgetOOF(), leftInnerPadding, dw::core::style::LENGTH_AUTO, lout::misc::max(), dw::core::Extremes::maxWidth, and usesMaxGeneratorWidth().

Referenced by dw::AlignedTableCell::getAvailWidthOfChild(), and dw::SimpleTableCell::getAvailWidthOfChild().

◆ getExtremesReference()

core::Widget * dw::Textblock::getExtremesReference ( int  index)
protectedvirtual

See Sizes of Dillo Widgets (or Size requisitions depending on positions).

Reimplemented from dw::core::Widget.

Definition at line 533 of file textblock.cc.

References index, and sizeReferences.

◆ getExtremesSimpl()

◆ getGeneratorRest()

◆ getGeneratorWidth()

◆ getGeneratorX()

int dw::Textblock::getGeneratorX ( int  oofmIndex)
virtual

Return position relative to container, not regarding margin/border/padding, Called by OOFFloatsMgr to position floats.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3095 of file textblock.cc.

References lout::misc::assertNotReached(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE_VAL, and findSizeRequestReference().

Referenced by calcBorders().

◆ getGeneratorY()

int dw::Textblock::getGeneratorY ( int  oofmIndex)
virtual

Return position relative to container, not regarding margin/border/padding, Called by OOFFloatsMgr to position floats.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3112 of file textblock.cc.

References lout::misc::assertNotReached(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE_VAL, and findSizeRequestReference().

◆ getLineShrinkability()

int dw::Textblock::getLineShrinkability ( int  lastWordIndex)
protected

Definition at line 2260 of file textblock_linebreaking.cc.

Referenced by accumulateWordData().

◆ getLineStretchability()

◆ getMaxGeneratorWidth()

int dw::Textblock::getMaxGeneratorWidth ( )
virtual

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3200 of file textblock.cc.

References DBG_OBJ_ENTER0, DBG_OBJ_LEAVE_VAL, and lineBreakWidth.

◆ getSpaceShrinkability()

int dw::Textblock::getSpaceShrinkability ( struct Word word)
staticprotected

◆ getSpaceStretchability()

int dw::Textblock::getSpaceStretchability ( struct Word word)
staticprotected

◆ getWidgetAtPointLevel()

◆ getWidgetRegardingBorderForLine() [1/3]

◆ getWidgetRegardingBorderForLine() [2/3]

RegardingBorder * dw::Textblock::getWidgetRegardingBorderForLine ( int  lineNo)
protected

Definition at line 3250 of file textblock.cc.

References getWidgetRegardingBorderForLine(), lines, and words.

◆ getWidgetRegardingBorderForLine() [3/3]

◆ getWordExtremes()

◆ handleWordExtremes()

◆ handOverBreak()

void dw::Textblock::handOverBreak ( core::style::Style style)

◆ hyphenateWord()

◆ initLine1Offset()

◆ initNewLine()

void dw::Textblock::initNewLine ( )
protected

◆ initWord()

void dw::Textblock::initWord ( int  wordNo)
protected

Basic initialization, which is neccessary before fillWord.

Definition at line 1798 of file textblock.cc.

References dw::Textblock::Word::spaceImgRenderer, dw::Textblock::Word::spaceStyle, dw::Textblock::Word::style, dw::Textblock::Word::wordImgRenderer, and words.

Referenced by addWord(), and hyphenateWord().

◆ isBlockLevel()

bool dw::Textblock::isBlockLevel ( )
protectedvirtual

Reimplemented from dw::core::Widget.

Definition at line 938 of file textblock.cc.

◆ isBreakAllowed()

◆ isBreakAllowedInWord()

bool dw::Textblock::isBreakAllowedInWord ( Word word)
inlineprotected

Definition at line 677 of file textblock.hh.

References isBreakAllowed(), and dw::Textblock::Word::style.

Referenced by isHyphenationCandidate().

◆ isHyphenationCandidate()

◆ isPossibleOOFContainer()

bool dw::Textblock::isPossibleOOFContainer ( int  oofmIndex)
virtual

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3235 of file textblock.cc.

◆ isPossibleOOFContainerParent()

bool dw::Textblock::isPossibleOOFContainerParent ( int  oofmIndex)
virtual

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3240 of file textblock.cc.

◆ iterator()

core::Iterator * dw::Textblock::iterator ( core::Content::Type  mask,
bool  atEnd 
)
virtual

Return an iterator for this widget.

mask can narrow the types returned by the iterator, this can enhance performance quite much, e.g. when only searching for child widgets.

With atEnd == false, the iterator starts before the beginning, i.e. the first call of dw::core::Iterator::next will let the iterator point on the first piece of contents. Likewise, With atEnd == true, the iterator starts after the last piece of contents, call dw::core::Iterator::prev in this case.

Implements dw::core::Widget.

Definition at line 1176 of file textblock.cc.

◆ justifyLine()

◆ leaveNotifyImpl()

void dw::Textblock::leaveNotifyImpl ( core::EventCrossing event)
protectedvirtual

◆ lineYOffsetCanvas() [1/3]

int dw::Textblock::lineYOffsetCanvas ( int  lineIndex)
inlineprotected

Definition at line 742 of file textblock.hh.

References lines, and lineYOffsetCanvas().

◆ lineYOffsetCanvas() [2/3]

int dw::Textblock::lineYOffsetCanvas ( Line line)
inlineprotected

Definition at line 727 of file textblock.hh.

References dw::core::Widget::allocation, and lineYOffsetCanvas().

◆ lineYOffsetCanvas() [3/3]

int dw::Textblock::lineYOffsetCanvas ( Line line,
core::Allocation allocation 
)
inlineprotected

◆ lineYOffsetWidget() [1/4]

int dw::Textblock::lineYOffsetWidget ( int  lineIndex)
inlineprotected

Definition at line 732 of file textblock.hh.

References lines, and lineYOffsetWidget().

◆ lineYOffsetWidget() [2/4]

int dw::Textblock::lineYOffsetWidget ( int  lineIndex,
core::Allocation allocation 
)
inlineprotected

Definition at line 737 of file textblock.hh.

References dw::core::Widget::allocation, lines, and lineYOffsetWidget().

◆ lineYOffsetWidget() [3/4]

int dw::Textblock::lineYOffsetWidget ( Line line)
inlineprotected

Definition at line 717 of file textblock.hh.

References dw::core::Widget::allocation, and lineYOffsetWidget().

◆ lineYOffsetWidget() [4/4]

◆ markExtremesChange()

◆ markSizeChange()

◆ motionNotifyImpl()

◆ moveWordIndices()

◆ mustAddBreaks()

static bool dw::Textblock::mustAddBreaks ( core::style::Style style)
inlinestatic

◆ mustBorderBeRegarded() [1/2]

bool dw::Textblock::mustBorderBeRegarded ( int  lineNo)
inlineprotected

Definition at line 701 of file textblock.hh.

References getWidgetRegardingBorderForLine().

◆ mustBorderBeRegarded() [2/2]

bool dw::Textblock::mustBorderBeRegarded ( Line line)
inlineprotected

Of nested text blocks, only the most inner one must regard the borders of floats.

Definition at line 696 of file textblock.hh.

References getWidgetRegardingBorderForLine().

Referenced by addLine(), calcLineBreakWidth(), dw::Textblock::TextblockIterator::getAllocation(), and wrapWordInFlow().

◆ notifySetAsTopLevel()

void dw::Textblock::notifySetAsTopLevel ( )
protectedvirtual

This method is called after a widget has been set as the top of a widget tree.

A widget may override this method when it is necessary to be notified.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 538 of file textblock.cc.

References DBG_OBJ_SET_NUM, and numSizeReferences.

◆ notifySetParent()

void dw::Textblock::notifySetParent ( )
protectedvirtual

This method is called after a widget has been added to a parent.

A widget may override this method when it is necessary to be notified.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 546 of file textblock.cc.

References DBG_OBJ_ARRSET_PTR, DBG_OBJ_SET_NUM, dw::oof::OOFAwareWidget::NUM_OOFM, numSizeReferences, dw::oof::OOFAwareWidget::oofContainer, and sizeReferences.

◆ numGetExtremesReferences()

int dw::Textblock::numGetExtremesReferences ( )
protectedvirtual

See Sizes of Dillo Widgets (or Size requisitions depending on positions).

Reimplemented from dw::core::Widget.

Definition at line 528 of file textblock.cc.

References numSizeReferences.

◆ numSizeRequestReferences()

int dw::Textblock::numSizeRequestReferences ( )
protectedvirtual

See Sizes of Dillo Widgets (or Size requisitions depending on positions).

Reimplemented from dw::core::Widget.

Definition at line 422 of file textblock.cc.

References numSizeReferences.

◆ oofSizeChanged()

void dw::Textblock::oofSizeChanged ( bool  extremesChanged)
virtual

Called by an implementation of dw::oof::OutOfFlowMgr when the size of the container has changed, typically in sizeAllocateEnd.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3081 of file textblock.cc.

References dw::core::Widget::containerSizeChanged(), DBG_OBJ_ENTER, DBG_OBJ_LEAVE, dw::core::Widget::extremesChanged(), dw::core::Widget::queueResize(), and usesMaxGeneratorWidth().

◆ processWord()

void dw::Textblock::processWord ( int  wordIndex)
protected

◆ queueDrawRange()

◆ removeChild()

void dw::Textblock::removeChild ( Widget child)
protected
Bug:
Not implemented.

Definition at line 1171 of file textblock.cc.

◆ removeSpaceImgRenderer()

void dw::Textblock::removeSpaceImgRenderer ( int  wordNo)
protected

◆ removeTemporaryLines()

void dw::Textblock::removeTemporaryLines ( )
protected

◆ removeWordImgRenderer()

void dw::Textblock::removeWordImgRenderer ( int  wordNo)
protected

◆ resizeDrawImpl()

void dw::Textblock::resizeDrawImpl ( )
protectedvirtual

◆ rewrap()

◆ searchBreakPos()

int dw::Textblock::searchBreakPos ( int  wordIndex,
int  firstIndex,
int *  searchUntil,
bool  tempNewLine,
int  penaltyIndex,
bool  thereWillBeMoreSpace,
bool  wrapAll,
int *  diffWords,
int *  wordIndexEnd,
int *  addIndex1 = NULL 
)
protected

◆ searchMinBap()

◆ sendSelectionEvent()

bool dw::Textblock::sendSelectionEvent ( core::SelectionState::EventType  eventType,
core::MousePositionEvent event 
)
protected

◆ setBreakOption()

void dw::Textblock::setBreakOption ( Word word,
core::style::Style style,
int  breakPenalty1,
int  breakPenalty2,
bool  forceBreak 
)
protected

Set a break option, if allowed by the style.

Called by fillSpace (and so addSpace), but may be called, via addBreakOption(), as an alternative, e. g. for ideographic characters.

Definition at line 2684 of file textblock.cc.

References dw::Textblock::Word::badnessAndPenalty, DBG_OBJ_ENTER, DBG_OBJ_LEAVE, isBreakAllowed(), dw::Textblock::BadnessAndPenalty::lineMustBeBroken(), PENALTY_PROHIBIT_BREAK, dw::Textblock::BadnessAndPenalty::setPenalties(), dw::Textblock::BadnessAndPenalty::setPenalty(), and dw::core::Widget::style.

Referenced by addBreakOption(), addText(), addWidget(), and fillSpace().

◆ setPenaltyEmDashLeft()

void dw::Textblock::setPenaltyEmDashLeft ( int  penaltyLeftEmDash)
static

Definition at line 185 of file textblock.cc.

References penalties, and PENALTY_EM_DASH_LEFT.

Referenced by main().

◆ setPenaltyEmDashRight()

void dw::Textblock::setPenaltyEmDashRight ( int  penaltyRightEmDash)
static

Definition at line 191 of file textblock.cc.

References penalties, and PENALTY_EM_DASH_RIGHT.

Referenced by main().

◆ setPenaltyEmDashRight2()

void dw::Textblock::setPenaltyEmDashRight2 ( int  penaltyRightEmDash2)
static

Definition at line 196 of file textblock.cc.

References penalties, and PENALTY_EM_DASH_RIGHT.

Referenced by main().

◆ setPenaltyHyphen()

void dw::Textblock::setPenaltyHyphen ( int  penaltyHyphen)
static

Definition at line 175 of file textblock.cc.

References penalties, and PENALTY_HYPHEN.

Referenced by main().

◆ setPenaltyHyphen2()

void dw::Textblock::setPenaltyHyphen2 ( int  penaltyHyphen2)
static

Definition at line 180 of file textblock.cc.

References penalties, and PENALTY_HYPHEN.

Referenced by main().

◆ setSpaceImgRenderer()

void dw::Textblock::setSpaceImgRenderer ( int  wordNo)
protected

◆ setStretchabilityFactor()

void dw::Textblock::setStretchabilityFactor ( int  stretchabilityFactor)
static

Definition at line 201 of file textblock.cc.

References stretchabilityFactor.

Referenced by main().

◆ setWordImgRenderer()

void dw::Textblock::setWordImgRenderer ( int  wordNo)
protected

◆ showMissingLines()

◆ sizeAllocateImpl()

◆ sizeRequestImpl()

◆ sizeRequestReference()

core::Widget * dw::Textblock::sizeRequestReference ( int  index)
protectedvirtual

See Sizes of Dillo Widgets (or Size requisitions depending on positions).

Reimplemented from dw::core::Widget.

Definition at line 427 of file textblock.cc.

References index, and sizeReferences.

◆ textWidth()

◆ updateReference()

void dw::Textblock::updateReference ( int  ref)
virtual

Update content in flow, down from ref.

Uses e. g. when floats sizes have changed.

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3062 of file textblock.cc.

References dw::core::style::CLEAR_NONE, DBG_OBJ_ENTER, DBG_OBJ_LEAVE, dw::core::Widget::getStyle(), dw::core::Widget::queueResize(), and words.

◆ usesAvailWidth()

bool dw::Textblock::usesAvailWidth ( )
protectedvirtual

Must be implemengted by a method returning true, when getAvailWidth() is called.

Reimplemented from dw::core::Widget.

Definition at line 852 of file textblock.cc.

◆ usesMaxGeneratorWidth()

◆ widgetRefSizeChanged()

void dw::Textblock::widgetRefSizeChanged ( int  externalIndex)
virtual

Called by an implementation of dw::oof::OutOfFlowMgr (actually only OOFPosRelMgr) for the generator of a widget out of flow, when the reference size has changed.

(The size of the reference is 0 * 0 for all other implementations of dw::oof::OutOfFlowMgr.)

Reimplemented from dw::oof::OOFAwareWidget.

Definition at line 3074 of file textblock.cc.

References findLineOfWord(), dw::oof::OOFAwareWidget::makeParentRefInFlow(), and dw::core::Widget::queueResize().

◆ wordWrap()

◆ wrapWordInFlow()

◆ wrapWordOofRef()

◆ yOffsetOfLineCreated()

int dw::Textblock::yOffsetOfLineCreated ( Line line)
protected

◆ yOffsetOfLineToBeCreated()

Friends And Related Symbol Documentation

◆ TextblockIterator

friend class TextblockIterator
friend

Definition at line 528 of file textblock.hh.

Member Data Documentation

◆ anchors

lout::misc::SimpleVector<Anchor>* dw::Textblock::anchors
protected

Definition at line 612 of file textblock.hh.

Referenced by addAnchor(), hyphenateWord(), sizeAllocateImpl(), Textblock(), and ~Textblock().

◆ CLASS_ID

int dw::Textblock::CLASS_ID = -1
static

◆ divChars

Textblock::DivChar dw::Textblock::divChars
staticprivate
Initial value:
= {
{ "\xc2\xad", true, false, true, PENALTY_HYPHEN, -1 },
{ "-", false, true, true, -1, PENALTY_HYPHEN },
{ "\xe2\x80\x90", false, true, true, -1, PENALTY_HYPHEN },
{ "\xe2\x80\x94", false, true, false,
}

Definition at line 294 of file textblock.hh.

Referenced by addText().

◆ hasListitemValue

bool dw::Textblock::hasListitemValue
protected

◆ [struct]

◆ [struct]

◆ hoverLink

int dw::Textblock::hoverLink
protected

Definition at line 617 of file textblock.hh.

Referenced by enterNotifyImpl(), leaveNotifyImpl(), motionNotifyImpl(), and Textblock().

◆ hyphenDrawChar

const char * dw::Textblock::hyphenDrawChar = "-"
staticprivate

The character which is used to draw a hyphen at the end of a line, either caused by automatic hyphenation, or by soft hyphens.

Initially, soft hyphens were used, but they are not drawn on some platforms. Also, unconditional hyphens (U+2010) are not available in many fonts; so, a simple hyphen-minus is used.

Definition at line 296 of file textblock.hh.

Referenced by addText(), drawWord(), and hyphenateWord().

◆ ignoreLine1OffsetSometimes

bool dw::Textblock::ignoreLine1OffsetSometimes
protected

Definition at line 555 of file textblock.hh.

Referenced by initLine1Offset(), and Textblock().

◆ index

◆ lastWordDrawn

int dw::Textblock::lastWordDrawn
protected

Definition at line 576 of file textblock.hh.

Referenced by resizeDrawImpl(), rewrap(), sizeAllocateImpl(), and Textblock().

◆ leftInnerPadding

◆ limitTextWidth

bool dw::Textblock::limitTextWidth
protected

Definition at line 572 of file textblock.hh.

Referenced by calcLineBreakWidth(), and Textblock().

◆ line1Offset

int dw::Textblock::line1Offset
protected

◆ line1OffsetEff

int dw::Textblock::line1OffsetEff
protected

◆ lineBreakWidth

◆ lines

◆ mustQueueResize

bool dw::Textblock::mustQueueResize
protected

Definition at line 557 of file textblock.hh.

Referenced by addLine(), addParbreak(), flush(), Textblock(), and wrapWordInFlow().

◆ nChar

◆ newLineAscent

int dw::Textblock::newLineAscent
protected

Definition at line 606 of file textblock.hh.

Referenced by initNewLine().

◆ newLineDescent

int dw::Textblock::newLineDescent
protected

Definition at line 606 of file textblock.hh.

Referenced by initNewLine().

◆ newLineHasFloatLeft

bool dw::Textblock::newLineHasFloatLeft
protected

Definition at line 595 of file textblock.hh.

Referenced by balanceBreakPosAndHeight(), calcBorders(), and wrapWordInFlow().

◆ newLineHasFloatRight

bool dw::Textblock::newLineHasFloatRight
protected

Definition at line 595 of file textblock.hh.

Referenced by balanceBreakPosAndHeight(), calcBorders(), and wrapWordInFlow().

◆ newLineLeftBorder

int dw::Textblock::newLineLeftBorder
protected

◆ newLineLeftFloatHeight

int dw::Textblock::newLineLeftFloatHeight
protected

Definition at line 600 of file textblock.hh.

Referenced by calcBorders(), and wrapWordInFlow().

◆ newLineRightBorder

int dw::Textblock::newLineRightBorder
protected

Definition at line 596 of file textblock.hh.

Referenced by addLine(), calcBorders(), and calcLineBreakWidth().

◆ newLineRightFloatHeight

int dw::Textblock::newLineRightFloatHeight
protected

Definition at line 600 of file textblock.hh.

Referenced by calcBorders(), and wrapWordInFlow().

◆ nonTemporaryLines

int dw::Textblock::nonTemporaryLines
protected

Definition at line 610 of file textblock.hh.

Referenced by addLine(), removeTemporaryLines(), rewrap(), and Textblock().

◆ numSizeReferences

int dw::Textblock::numSizeReferences
protected

◆ paragraphs

◆ penalties

int dw::Textblock::penalties
staticprotected
Initial value:
= {
{ 100, 800 },
{ 800, 800 },
{ 100, 800 }
}

The penalties for hyphens and other, multiplied by 100.

So, 100 means 1.0. INT_MAX and INT_MIN are also allowed. See dw::Textblock::BadnessAndPenalty::setPenalty for more details. Set from preferences.

Definition at line 565 of file textblock.hh.

Referenced by addText(), hyphenateWord(), setPenaltyEmDashLeft(), setPenaltyEmDashRight(), setPenaltyEmDashRight2(), setPenaltyHyphen(), and setPenaltyHyphen2().

◆ redrawY

int dw::Textblock::redrawY
protected

◆ sizeReferences

Widget* dw::Textblock::sizeReferences[NUM_OOFM]
protected

Definition at line 620 of file textblock.hh.

Referenced by getExtremesReference(), notifySetParent(), and sizeRequestReference().

◆ sizeRequestParams

core::SizeParams dw::Textblock::sizeRequestParams
protected

◆ stretchabilityFactor

int dw::Textblock::stretchabilityFactor = 100
staticprotected

...

Definition at line 570 of file textblock.hh.

Referenced by getLineStretchability(), and setStretchabilityFactor().

◆ treatAsInline

bool dw::Textblock::treatAsInline
protected

Definition at line 573 of file textblock.hh.

Referenced by Textblock(), and usesMaxGeneratorWidth().

◆ words

◆ wrapRefLines

int dw::Textblock::wrapRefLines
protected

Definition at line 583 of file textblock.hh.

Referenced by markSizeChange(), rewrap(), sizeRequestImpl(), and Textblock().

◆ wrapRefLinesFCX

int dw::Textblock::wrapRefLinesFCX
protected

Definition at line 587 of file textblock.hh.

Referenced by sizeRequestImpl(), and Textblock().

◆ wrapRefLinesFCY

int dw::Textblock::wrapRefLinesFCY
protected

Definition at line 587 of file textblock.hh.

Referenced by sizeRequestImpl(), and Textblock().

◆ wrapRefParagraphs

int dw::Textblock::wrapRefParagraphs
protected

Definition at line 583 of file textblock.hh.

Referenced by fillParagraphs(), markExtremesChange(), and Textblock().


The documentation for this class was generated from the following files: