summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2014-06-02 00:02:52 +0200
committerSebastian Geerken <devnull@localhost>2014-06-02 00:02:52 +0200
commit0b8eaee1a82718d9fe7faab78aa57ab43c29a7be (patch)
tree725185d5d26e2313615e9295a25e1b815636560d
parent82d447e97678d8eafc6267ff00b0a4464b295a8f (diff)
Some work on extremes.
-rw-r--r--dw/ruler.cc6
-rw-r--r--dw/ruler.hh1
-rw-r--r--dw/table.cc10
-rw-r--r--dw/textblock.cc44
-rw-r--r--dw/ui.cc1
-rw-r--r--dw/widget.cc1
6 files changed, 17 insertions, 46 deletions
diff --git a/dw/ruler.cc b/dw/ruler.cc
index 3599c32a..b014654d 100644
--- a/dw/ruler.cc
+++ b/dw/ruler.cc
@@ -40,6 +40,12 @@ void Ruler::sizeRequestImpl (core::Requisition *requisition)
requisition->descent = getStyle()->boxRestHeight ();
}
+void Ruler::getExtremesImpl (core::Extremes *extremes)
+{
+ extremes->minWidth = extremes->maxWidth = getStyle()->boxDiffWidth ();
+ correctExtremes (extremes);
+}
+
bool Ruler::isBlockLevel ()
{
return true;
diff --git a/dw/ruler.hh b/dw/ruler.hh
index 0a0cd2b2..eea1f952 100644
--- a/dw/ruler.hh
+++ b/dw/ruler.hh
@@ -17,6 +17,7 @@ class Ruler: public core::Widget
{
protected:
void sizeRequestImpl (core::Requisition *requisition);
+ void getExtremesImpl (core::Extremes *extremes);
void draw (core::View *view, core::Rectangle *area);
public:
diff --git a/dw/table.cc b/dw/table.cc
index d15100b7..22d7e8ad 100644
--- a/dw/table.cc
+++ b/dw/table.cc
@@ -131,14 +131,8 @@ void Table::getExtremesImpl (core::Extremes *extremes)
extremes->minWidth += colExtremes->getRef(col)->minWidth;
extremes->maxWidth += colExtremes->getRef(col)->maxWidth;
}
- if (core::style::isAbsLength (getStyle()->width)) {
- extremes->minWidth =
- misc::max (extremes->minWidth,
- core::style::absLengthVal(getStyle()->width));
- extremes->maxWidth =
- misc::max (extremes->maxWidth,
- core::style::absLengthVal(getStyle()->width));
- }
+
+ correctExtremes (extremes);
_MSG(" Table::getExtremesImpl, {%d, %d} numCols=%d\n",
extremes->minWidth, extremes->maxWidth, numCols);
diff --git a/dw/textblock.cc b/dw/textblock.cc
index c1cd1dbe..84e58f86 100644
--- a/dw/textblock.cc
+++ b/dw/textblock.cc
@@ -413,44 +413,10 @@ void Textblock::sizeRequestImpl (core::Requisition *requisition)
*/
void Textblock::getWordExtremes (Word *word, core::Extremes *extremes)
{
- if (word->content.type == core::Content::WIDGET_IN_FLOW) {
- if (word->content.widget->usesHints ()) {
- word->content.widget->getExtremes (extremes);
-
- if (core::style::isAbsLength (word->content.widget
- ->getStyle()->width)) {
- int width =
- core::style::absLengthVal (word->content.widget
- ->getStyle()->width);
- if (extremes->minWidth < width)
- extremes->minWidth = width;
- if (extremes->maxWidth > width)
- // maxWidth not smaller than minWidth
- extremes->maxWidth = misc::max (width, extremes->minWidth);
- }
- } else {
- if (core::style::isPerLength
- (word->content.widget->getStyle()->width)) {
- extremes->minWidth = 0;
- if (word->content.widget->hasContents ())
- extremes->maxWidth = 1000000;
- else
- extremes->maxWidth = 0;
- } else if (core::style::isAbsLength
- (word->content.widget->getStyle()->width)) {
- /* Fixed lengths are only applied to the content, so we have to
- * add padding, border and margin. */
- extremes->minWidth = extremes->maxWidth =
- core::style::absLengthVal (word->content.widget->getStyle()
- ->width)
- + word->style->boxDiffWidth ();
- } else
- word->content.widget->getExtremes (extremes);
- }
- } else {
- extremes->minWidth = word->size.width;
- extremes->maxWidth = word->size.width;
- }
+ if (word->content.type == core::Content::WIDGET_IN_FLOW)
+ word->content.widget->getExtremes (extremes);
+ else
+ extremes->minWidth = extremes->maxWidth = word->size.width;
}
void Textblock::getExtremesImpl (core::Extremes *extremes)
@@ -491,6 +457,8 @@ void Textblock::getExtremesImpl (core::Extremes *extremes)
extremes->maxWidth = misc::max (extremes->maxWidth, oofMaxWidth);
}
+ correctExtremes (extremes);
+
DBG_OBJ_MSGF ("resize", 1, "=> %d / %d",
extremes->minWidth, extremes->maxWidth);
diff --git a/dw/ui.cc b/dw/ui.cc
index 2560ebc1..7b394cc5 100644
--- a/dw/ui.cc
+++ b/dw/ui.cc
@@ -56,6 +56,7 @@ void Embed::sizeRequestImpl (Requisition *requisition)
void Embed::getExtremesImpl (Extremes *extremes)
{
resource->getExtremes (extremes);
+ correctExtremes (extremes);
}
void Embed::sizeAllocateImpl (Allocation *allocation)
diff --git a/dw/widget.cc b/dw/widget.cc
index 2f9a7de4..8dab44ad 100644
--- a/dw/widget.cc
+++ b/dw/widget.cc
@@ -936,6 +936,7 @@ void Widget::getExtremesImpl (Extremes *extremes)
Requisition requisition;
sizeRequest (&requisition);
extremes->minWidth = extremes->maxWidth = requisition.width;
+ correctExtremes (extremes);
}
void Widget::sizeAllocateImpl (Allocation *allocation)