* Added FixSizeConstraints() functions, which adjust the elements of a (min,
max, preferred) size triple so that they are compatible with each other. * Implemented AlignInFrame(BView*, BRect). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21353 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -22,6 +22,11 @@ public:
|
|||||||
// static float SubtractSizesFloat(float a, float b);
|
// static float SubtractSizesFloat(float a, float b);
|
||||||
static int32 SubtractSizesInt32(int32 a, int32 b);
|
static int32 SubtractSizesInt32(int32 a, int32 b);
|
||||||
static float SubtractDistances(float a, float b);
|
static float SubtractDistances(float a, float b);
|
||||||
|
|
||||||
|
static void FixSizeConstraints(float& min, float& max,
|
||||||
|
float& preferred);
|
||||||
|
static void FixSizeConstraints(BSize& min, BSize& max,
|
||||||
|
BSize& preferred);
|
||||||
|
|
||||||
static BSize ComposeSize(BSize size, BSize layoutSize);
|
static BSize ComposeSize(BSize size, BSize layoutSize);
|
||||||
static BAlignment ComposeAlignment(BAlignment alignment,
|
static BAlignment ComposeAlignment(BAlignment alignment,
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <LayoutUtils.h>
|
#include <LayoutUtils.h>
|
||||||
|
|
||||||
|
#include <View.h>
|
||||||
|
|
||||||
|
|
||||||
// // AddSizesFloat
|
// // AddSizesFloat
|
||||||
// float
|
// float
|
||||||
@@ -24,6 +26,7 @@
|
|||||||
// return AddSizesFloat(AddSizesFloat(a, b), c);
|
// return AddSizesFloat(AddSizesFloat(a, b), c);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
// AddSizesInt32
|
// AddSizesInt32
|
||||||
int32
|
int32
|
||||||
BLayoutUtils::AddSizesInt32(int32 a, int32 b)
|
BLayoutUtils::AddSizesInt32(int32 a, int32 b)
|
||||||
@@ -33,6 +36,7 @@ BLayoutUtils::AddSizesInt32(int32 a, int32 b)
|
|||||||
return a + b;
|
return a + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// AddSizesInt32
|
// AddSizesInt32
|
||||||
int32
|
int32
|
||||||
BLayoutUtils::AddSizesInt32(int32 a, int32 b, int32 c)
|
BLayoutUtils::AddSizesInt32(int32 a, int32 b, int32 c)
|
||||||
@@ -40,6 +44,7 @@ BLayoutUtils::AddSizesInt32(int32 a, int32 b, int32 c)
|
|||||||
return AddSizesInt32(AddSizesInt32(a, b), c);
|
return AddSizesInt32(AddSizesInt32(a, b), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// AddDistances
|
// AddDistances
|
||||||
float
|
float
|
||||||
BLayoutUtils::AddDistances(float a, float b)
|
BLayoutUtils::AddDistances(float a, float b)
|
||||||
@@ -51,6 +56,7 @@ BLayoutUtils::AddDistances(float a, float b)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// AddDistances
|
// AddDistances
|
||||||
float
|
float
|
||||||
BLayoutUtils::AddDistances(float a, float b, float c)
|
BLayoutUtils::AddDistances(float a, float b, float c)
|
||||||
@@ -58,6 +64,7 @@ BLayoutUtils::AddDistances(float a, float b, float c)
|
|||||||
return AddDistances(AddDistances(a, b), c);
|
return AddDistances(AddDistances(a, b), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// // SubtractSizesFloat
|
// // SubtractSizesFloat
|
||||||
// float
|
// float
|
||||||
// BLayoutUtils::SubtractSizesFloat(float a, float b)
|
// BLayoutUtils::SubtractSizesFloat(float a, float b)
|
||||||
@@ -67,6 +74,7 @@ BLayoutUtils::AddDistances(float a, float b, float c)
|
|||||||
// return a - b - 1;
|
// return a - b - 1;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
// SubtractSizesInt32
|
// SubtractSizesInt32
|
||||||
int32
|
int32
|
||||||
BLayoutUtils::SubtractSizesInt32(int32 a, int32 b)
|
BLayoutUtils::SubtractSizesInt32(int32 a, int32 b)
|
||||||
@@ -76,6 +84,7 @@ BLayoutUtils::SubtractSizesInt32(int32 a, int32 b)
|
|||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// SubtractDistances
|
// SubtractDistances
|
||||||
float
|
float
|
||||||
BLayoutUtils::SubtractDistances(float a, float b)
|
BLayoutUtils::SubtractDistances(float a, float b)
|
||||||
@@ -85,6 +94,29 @@ BLayoutUtils::SubtractDistances(float a, float b)
|
|||||||
return a - b - 1;
|
return a - b - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// FixSizeConstraints
|
||||||
|
void
|
||||||
|
BLayoutUtils::FixSizeConstraints(float& min, float& max, float& preferred)
|
||||||
|
{
|
||||||
|
if (max < min)
|
||||||
|
max = min;
|
||||||
|
if (preferred < min)
|
||||||
|
preferred = min;
|
||||||
|
else if (preferred > max)
|
||||||
|
preferred = max;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// FixSizeConstraints
|
||||||
|
void
|
||||||
|
BLayoutUtils::FixSizeConstraints(BSize& min, BSize& max, BSize& preferred)
|
||||||
|
{
|
||||||
|
FixSizeConstraints(min.width, max.width, preferred.width);
|
||||||
|
FixSizeConstraints(min.height, max.height, preferred.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ComposeSize
|
// ComposeSize
|
||||||
BSize
|
BSize
|
||||||
BLayoutUtils::ComposeSize(BSize size, BSize layoutSize)
|
BLayoutUtils::ComposeSize(BSize size, BSize layoutSize)
|
||||||
@@ -97,6 +129,7 @@ BLayoutUtils::ComposeSize(BSize size, BSize layoutSize)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ComposeAlignment
|
// ComposeAlignment
|
||||||
BAlignment
|
BAlignment
|
||||||
BLayoutUtils::ComposeAlignment(BAlignment alignment, BAlignment layoutAlignment)
|
BLayoutUtils::ComposeAlignment(BAlignment alignment, BAlignment layoutAlignment)
|
||||||
@@ -109,6 +142,7 @@ BLayoutUtils::ComposeAlignment(BAlignment alignment, BAlignment layoutAlignment)
|
|||||||
return alignment;
|
return alignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// AlignInFrame
|
// AlignInFrame
|
||||||
BRect
|
BRect
|
||||||
BLayoutUtils::AlignInFrame(BRect frame, BSize maxSize, BAlignment alignment)
|
BLayoutUtils::AlignInFrame(BRect frame, BSize maxSize, BAlignment alignment)
|
||||||
@@ -130,38 +164,38 @@ BLayoutUtils::AlignInFrame(BRect frame, BSize maxSize, BAlignment alignment)
|
|||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// AlignInFrame
|
// AlignInFrame
|
||||||
void
|
void
|
||||||
BLayoutUtils::AlignInFrame(BView* view, BRect frame)
|
BLayoutUtils::AlignInFrame(BView* view, BRect frame)
|
||||||
{
|
{
|
||||||
// TODO:...
|
BSize maxSize = view->MaxSize();
|
||||||
// BSize maxSize = view->MaxSize();
|
BAlignment alignment = view->Alignment();
|
||||||
// BAlignment alignment = view->Alignment();
|
|
||||||
//
|
if (view->HasHeightForWidth()) {
|
||||||
// if (view->HasHeightForWidth()) {
|
// The view has height for width, so we do the horizontal alignment
|
||||||
// // The view has height for width, so we do the horizontal alignment
|
// ourselves and restrict the height max constraint respectively.
|
||||||
// // ourselves and restrict the height max constraint respectively.
|
|
||||||
//
|
if (maxSize.width < frame.Width()
|
||||||
// if (maxSize.width < frame.width
|
&& alignment.horizontal != B_ALIGN_USE_FULL_WIDTH) {
|
||||||
// && alignment.horizontal != B_ALIGN_USE_FULL_WIDTH) {
|
frame.OffsetBy(floor((frame.Width() - maxSize.width)
|
||||||
// frame.x += (int)((frame.width - maxSize.width)
|
* alignment.RelativeHorizontal()), 0);
|
||||||
// * alignment.RelativeHorizontal());
|
frame.right = frame.left + maxSize.width;
|
||||||
// frame.width = maxSize.width;
|
}
|
||||||
// }
|
alignment.horizontal = B_ALIGN_USE_FULL_WIDTH;
|
||||||
// alignment.horizontal = BAlignment.B_ALIGN_USE_FULL_WIDTH;
|
|
||||||
//
|
float minHeight;
|
||||||
// float minHeight;
|
float maxHeight;
|
||||||
// float maxHeight;
|
float preferredHeight;
|
||||||
// float preferredHeight;
|
view->GetHeightForWidth(frame.Width(), &minHeight, &maxHeight,
|
||||||
// view->GetHeightForWidth(frame.width, &minHeight, &maxHeight,
|
&preferredHeight);
|
||||||
// &preferredHeight);
|
|
||||||
//
|
frame.bottom = frame.top + max_c(frame.Height(), minHeight);
|
||||||
// frame.height = max_c(frame.height, info.min);
|
maxSize.height = minHeight;
|
||||||
// maxSize.height = minHeight;
|
}
|
||||||
// }
|
|
||||||
//
|
frame = AlignInFrame(frame, maxSize, alignment);
|
||||||
// frame = AlignInFrame(frame, maxSize, alignment);
|
view->MoveTo(frame.LeftTop());
|
||||||
// view->SetLocation(frame.x, frame.y);
|
view->ResizeTo(frame.Size());
|
||||||
// view->SetSize(frame.getSize());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user