[DEV] integrate corect image rendering with dynamic event
This commit is contained in:
parent
ea4515f63c
commit
bb92817774
@ -29,6 +29,7 @@ ewol::widget::Image::Image() :
|
|||||||
m_distanceFieldMode(*this, "distance-field", false, "Distance field mode"),
|
m_distanceFieldMode(*this, "distance-field", false, "Distance field mode"),
|
||||||
m_smooth(*this, "smooth", true, "Smooth display of the image") {
|
m_smooth(*this, "smooth", true, "Smooth display of the image") {
|
||||||
addObjectType("ewol::widget::Image");
|
addObjectType("ewol::widget::Image");
|
||||||
|
m_imageRenderSize = vec2(0,0);
|
||||||
m_colorProperty = ewol::resource::ColorFile::create("THEME:COLOR:Image.json");
|
m_colorProperty = ewol::resource::ColorFile::create("THEME:COLOR:Image.json");
|
||||||
if (m_colorProperty != nullptr) {
|
if (m_colorProperty != nullptr) {
|
||||||
m_colorId = m_colorProperty->request("foreground");
|
m_colorId = m_colorProperty->request("foreground");
|
||||||
@ -66,7 +67,7 @@ void ewol::widget::Image::onRegenerateDisplay() {
|
|||||||
vec2 imageBoder = m_border->getPixel();
|
vec2 imageBoder = m_border->getPixel();
|
||||||
vec2 origin = imageBoder;
|
vec2 origin = imageBoder;
|
||||||
imageBoder *= 2.0f;
|
imageBoder *= 2.0f;
|
||||||
vec2 imageRealSize = m_realllll - imageBoder;
|
vec2 imageRealSize = m_imageRenderSize - imageBoder;
|
||||||
vec2 imageRealSizeMax = m_size - imageBoder;
|
vec2 imageRealSizeMax = m_size - imageBoder;
|
||||||
|
|
||||||
vec2 ratioSizeDisplayRequested = m_posStop.get() - m_posStart.get();
|
vec2 ratioSizeDisplayRequested = m_posStop.get() - m_posStart.get();
|
||||||
@ -75,13 +76,47 @@ void ewol::widget::Image::onRegenerateDisplay() {
|
|||||||
if (m_userFill->x() == true) {
|
if (m_userFill->x() == true) {
|
||||||
imageRealSize.setX(imageRealSizeMax.x());
|
imageRealSize.setX(imageRealSizeMax.x());
|
||||||
} else {
|
} else {
|
||||||
origin.setX(origin.x() + (m_size.x()-m_minSize.x())*0.5f);
|
switch(m_gravity) {
|
||||||
|
case gravityCenter:
|
||||||
|
case gravityTop:
|
||||||
|
case gravityButtom:
|
||||||
|
origin.setX(origin.x() + (m_size.x()-m_imageRenderSize.x())*0.5f);
|
||||||
|
break;
|
||||||
|
case gravityTopLeft:
|
||||||
|
case gravityButtomLeft:
|
||||||
|
case gravityLeft:
|
||||||
|
// nothing to do ...
|
||||||
|
break;
|
||||||
|
case gravityTopRight:
|
||||||
|
case gravityRight:
|
||||||
|
case gravityButtomRight:
|
||||||
|
origin.setX(origin.x() + (m_size.x()-m_imageRenderSize.x())*0.5f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (m_userFill->y() == true) {
|
if (m_userFill->y() == true) {
|
||||||
imageRealSize.setY(imageRealSizeMax.y());
|
imageRealSize.setY(imageRealSizeMax.y());
|
||||||
} else {
|
} else {
|
||||||
origin.setY(origin.y() + (m_size.y()-m_minSize.y())*0.5f);
|
//
|
||||||
|
switch(m_gravity) {
|
||||||
|
case gravityCenter:
|
||||||
|
case gravityRight:
|
||||||
|
case gravityLeft:
|
||||||
|
origin.setY(origin.y() + (m_size.y()-m_imageRenderSize.y())*0.5f);
|
||||||
|
break;
|
||||||
|
case gravityTopLeft:
|
||||||
|
case gravityTop:
|
||||||
|
case gravityTopRight:
|
||||||
|
origin.setY(origin.y() + (m_size.y()-m_imageRenderSize.y()));
|
||||||
|
break;
|
||||||
|
case gravityButtomRight:
|
||||||
|
case gravityButtom:
|
||||||
|
case gravityButtomLeft:
|
||||||
|
// nothing to do ...
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_keepRatio == true) {
|
if (m_keepRatio == true) {
|
||||||
vec2 tmpSize = m_compositing.getRealSize();
|
vec2 tmpSize = m_compositing.getRealSize();
|
||||||
//float ratio = tmpSize.x() / tmpSize.y();
|
//float ratio = tmpSize.x() / tmpSize.y();
|
||||||
@ -117,7 +152,7 @@ void ewol::widget::Image::calculateMinMaxSize() {
|
|||||||
vec2 imageBoder = m_border->getPixel()*2.0f;
|
vec2 imageBoder = m_border->getPixel()*2.0f;
|
||||||
vec2 imageSize = m_imageSize->getPixel();
|
vec2 imageSize = m_imageSize->getPixel();
|
||||||
vec2 size = m_userMinSize->getPixel();
|
vec2 size = m_userMinSize->getPixel();
|
||||||
if (imageSize!=vec2(0,0)) {
|
if (imageSize != vec2(0,0)) {
|
||||||
m_minSize = imageBoder+imageSize;
|
m_minSize = imageBoder+imageSize;
|
||||||
m_maxSize = m_minSize;
|
m_maxSize = m_minSize;
|
||||||
} else {
|
} else {
|
||||||
@ -130,10 +165,10 @@ void ewol::widget::Image::calculateMinMaxSize() {
|
|||||||
m_maxSize = imageBoder+m_userMaxSize->getPixel();
|
m_maxSize = imageBoder+m_userMaxSize->getPixel();
|
||||||
m_minSize.setMin(m_maxSize);
|
m_minSize.setMin(m_maxSize);
|
||||||
}
|
}
|
||||||
m_realllll = m_minSize;
|
m_imageRenderSize = m_minSize;
|
||||||
m_minSize.setMax(size);
|
m_minSize.setMax(size);
|
||||||
m_maxSize.setMax(m_minSize);
|
m_maxSize.setMax(m_minSize);
|
||||||
//EWOL_DEBUG("set widget min=" << m_minSize << " max=" << m_maxSize << " with real Image size=" << imageSizeReal);
|
//EWOL_ERROR("set widget min=" << m_minSize << " max=" << m_maxSize << " with real Image size=" << m_imageRenderSize << " img size=" << imageSize << " " << m_imageSize);
|
||||||
markToRedraw();
|
markToRedraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ namespace ewol {
|
|||||||
};
|
};
|
||||||
protected:
|
protected:
|
||||||
ewol::parameter::Value<gale::Dimension> m_imageSize; //!< border to add at the image.
|
ewol::parameter::Value<gale::Dimension> m_imageSize; //!< border to add at the image.
|
||||||
vec2 m_realllll;
|
vec2 m_imageRenderSize; //!< size of the image when we render it
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief set tge Border size around the image
|
* @brief set tge Border size around the image
|
||||||
|
Loading…
x
Reference in New Issue
Block a user