Added libarchive support to Dawn.

This commit is contained in:
2023-10-09 13:16:52 -05:00
parent 0692b2b6d1
commit 4dd4cb045c
38 changed files with 567 additions and 158 deletions

View File

@ -71,17 +71,6 @@ void UIComponent::updateAlignment() {
glm::vec2(align[0], align[2])
);
} else {
UIComponent::calculateDimensions(
this->alignY,
this->alignUnitTop,
this->alignUnitBottom,
&translate.y,
&this->height,
parentInnerHeight,
this->getContentHeight(),
this->width,
glm::vec2(align[1], align[3])
);
UIComponent::calculateDimensions(
this->alignX,
this->alignUnitLeft,
@ -93,6 +82,17 @@ void UIComponent::updateAlignment() {
this->height,
glm::vec2(align[0], align[2])
);
UIComponent::calculateDimensions(
this->alignY,
this->alignUnitTop,
this->alignUnitBottom,
&translate.y,
&this->height,
parentInnerHeight,
this->getContentHeight(),
this->width,
glm::vec2(align[1], align[3])
);
}
@ -104,6 +104,38 @@ void UIComponent::updateAlignment() {
this->eventAlignmentUpdated.invoke();
}
float_t UIComponent::getWidthFromAlignment() {
switch(this->alignX) {
case UI_COMPONENT_ALIGN_STRETCH:
case UI_COMPONENT_ALIGN_START:
case UI_COMPONENT_ALIGN_MIDDLE:
return alignment._realValue[2];
case UI_COMPONENT_ALIGN_END:
return alignment._realValue[0];
default:
assertUnreachable("UIComponent::getWidthFromAlignment: Unknown alignment");
return -1;
}
}
float_t UIComponent::getHeightFromAlignment() {
switch(this->alignY) {
case UI_COMPONENT_ALIGN_STRETCH:
case UI_COMPONENT_ALIGN_START:
case UI_COMPONENT_ALIGN_MIDDLE:
return alignment._realValue[3];
case UI_COMPONENT_ALIGN_END:
return alignment._realValue[1];
default:
assertUnreachable("UIComponent::getWidthFromAlignment: Unknown alignment");
return -1;
}
}
float_t UIComponent::calculateAlignmentValue(
float_t alignmentValue,
float_t parentSize,

View File

@ -44,6 +44,24 @@ namespace Dawn {
* Internal method to update the alignment of this item.
*/
virtual void updateAlignment();
/**
* Helper function used for UI components that intend to use whatever the
* dimensions that are set within the alignment parameter are for their
* width.
*
* @return The width as defined in the alignment.
*/
float_t getWidthFromAlignment();
/**
* Helper function used for UI components that intend to use whatever the
* dimensions that are set within the alignment parameter are for their
* height.
*
* @return The height as defined in the alignment.
*/
float_t getHeightFromAlignment();
public:
StateProperty<bool_t> alignmentNeedsUpdating;

View File

@ -10,10 +10,10 @@ using namespace Dawn;
UIEmpty::UIEmpty(SceneItem *item) : UIComponent(item) { }
float_t UIEmpty::getContentWidth() {
return this->getWidth();
return this->getWidthFromAlignment();
}
float_t UIEmpty::getContentHeight() {
return this->getHeight();
return this->getHeightFromAlignment();
}
float_t UIEmpty::getChildOffsetX() { return 0.0f; }
float_t UIEmpty::getChildOffsetY() { return 0.0f; }

View File

@ -10,7 +10,8 @@ using namespace Dawn;
UILabel::UILabel(SceneItem *item) :
UIComponentRenderable(item),
lineHeight(1.0f)
lineHeight(1.0f),
textAlign(UI_LABEL_TEXT_ALIGN_LEFT)
{
}

View File

@ -43,6 +43,13 @@ namespace Dawn {
UI_LABEL_VERTICAL_ALIGN_BOTTOM
};
enum UILabelTextAlign {
UI_LABEL_TEXT_ALIGN_LEFT,
UI_LABEL_TEXT_ALIGN_CENTER,
UI_LABEL_TEXT_ALIGN_RIGHT
// TODO: Add justify
};
class UILabel : public UIComponentRenderable {
private:
Mesh mesh;
@ -68,6 +75,9 @@ namespace Dawn {
// @optional
StateProperty<float_t> lineHeight;
// @optional
StateProperty<enum UILabelTextAlign> textAlign;
UILabel(SceneItem *item);
void onStart() override;