using namespace ucl;
+ // Related to ImageGrid //
const TString SLOT_PART_FMT {"swallow.cell_%d"};
+ // Related to Button //
constexpr ElmStyle ITEM_BTN_STYLE {"gallery_image"};
-
+ constexpr EdjePart PART_BTN_BG {"swallow.bg"};
constexpr SmartEvent BTN_CLICKED {"clicked"};
}}}
RefCountAware(&rc),
m_imageGrid(imageGrid),
m_btn(elm_button_add(parent)),
- m_image(evas_object_image_filled_add(m_btn.getEvas())),
+ m_image(elm_image_add(m_btn)),
m_realizeIndex(-1),
+ m_imageLoadSize(0),
m_wasUpdated(false)
{
m_btn.setFocusAlowed(false);
m_btn.setStyle(impl::ITEM_BTN_STYLE);
- m_btn.setContent(m_image);
show(m_btn);
+
+ elm_image_preload_disabled_set(m_image, EINA_FALSE);
+ elm_image_aspect_fixed_set(m_image, EINA_TRUE);
+ elm_image_fill_outside_set(m_image, EINA_TRUE);
+ m_btn.setContent(m_image);
show(m_image);
m_btn.addEventHandler(impl::BTN_CLICKED, WEAK_DELEGATE(
void setImageLoadSize(const int value)
{
- evas_object_image_load_size_set(m_image, value, value);
+ m_imageLoadSize = value;
+ elm_image_prescale_set(m_image, m_imageLoadSize);
}
bool isRealized() const
return false;
}
+ updateImage(params);
+ updateBgImage(params);
+
+ makeWhite(m_btn);
+
m_wasUpdated = true;
+ return true;
+ }
+
+ private:
+ void updateImage(const ItemParams ¶ms)
+ {
if (isEmpty(params.imagePath)) {
- makeTransparent(m_btn);
- return true;
+ if (!m_wasUpdated || (params.flags & UF_LOSE_IMAGE)) {
+ makeTransparent(m_image);
+ }
+ return;
}
- evas_object_image_file_set(m_image,
- params.imagePath.c_str(), NULL);
+ elm_image_file_set(m_image, params.imagePath.c_str(), NULL);
- int w, h;
- evas_object_image_size_get(m_image, &w, &h);
- m_image.setARHint(WidgetARHint::NEITHER, w, h);
+ makeWhite(m_image);
+ }
- makeWhite(m_btn);
+ void updateBgImage(const ItemParams ¶ms)
+ {
+ if (isEmpty(params.bgImagePath)) {
+ if (m_bgImage && (!m_wasUpdated ||
+ (params.flags & UF_LOSE_BG))) {
+ makeTransparent(*m_bgImage);
+ }
+ return;
+ }
- return true;
+ if (!m_bgImage) {
+ m_bgImage = makeShared<Widget>(
+ evas_object_image_filled_add(m_btn.getEvas()));
+ evas_object_image_load_size_set(*m_bgImage,
+ m_imageLoadSize, m_imageLoadSize);
+ m_btn.setContent(impl::PART_BTN_BG, *m_bgImage);
+ show(*m_bgImage);
+ }
+
+ evas_object_image_file_set(*m_bgImage,
+ params.bgImagePath.c_str(), NULL);
+
+ int w, h;
+ evas_object_image_size_get(*m_bgImage, &w, &h);
+ m_bgImage->setARHint(WidgetARHint::NEITHER, w, h);
+
+ makeWhite(*m_bgImage);
}
- private:
void onClicked(Widget &wifget, void *eventInfo)
{
if (isRealized()) {
private:
const ImageGrid &m_imageGrid;
StyledWidget m_btn;
- Widget m_image;
+ StyledWidget m_image;
+ WidgetSRef m_bgImage;
int m_realizeIndex;
+ int m_imageLoadSize;
bool m_wasUpdated;
};
int ImageGrid::calcOptimalSlotCount()
{
- return ((((m_scrollerSize - 1) + (m_slotSize - 1)) /
- m_slotSize + 1) * 2);
+ return (((m_scrollerSize * 3 + m_slotSize / 2) / m_slotSize) * 2);
}
bool ImageGrid::updateMaxSlotCount()
void ImageGrid::updateScrollBias()
{
- m_scrollBias = (((m_optimalSlotCount / 2 - 1) * m_slotSize -
- m_scrollerSize) / 2 + m_padSize1);
+ m_scrollBias = ((m_slotCount / 2 - 1) / 2 * m_slotSize + m_padSize1);
}
void ImageGrid::updateRectMins()