fix bug where picture throws if image is empty
This commit is contained in:
parent
74f5a8f40b
commit
3dc7e3ae5b
@ -36,7 +36,6 @@ namespace nana
|
|||||||
void attached(widget_reference, graph_reference) override;
|
void attached(widget_reference, graph_reference) override;
|
||||||
private:
|
private:
|
||||||
void refresh(graph_reference) override;
|
void refresh(graph_reference) override;
|
||||||
void _m_draw_background(unsigned,unsigned);
|
|
||||||
private:
|
private:
|
||||||
implement * const impl_;
|
implement * const impl_;
|
||||||
};
|
};
|
||||||
|
@ -48,6 +48,22 @@ namespace nana
|
|||||||
std::unique_ptr<element::bground> bground; //If it is not a null ptr, the widget is stretchable mode
|
std::unique_ptr<element::bground> bground; //If it is not a null ptr, the widget is stretchable mode
|
||||||
bool stretchable{ false }; //If it is true, the widget is stretchable mode without changing aspect ratio.
|
bool stretchable{ false }; //If it is true, the widget is stretchable mode without changing aspect ratio.
|
||||||
}backimg;
|
}backimg;
|
||||||
|
|
||||||
|
void draw_background(const size& dimension)
|
||||||
|
{
|
||||||
|
if (graph_ptr && (!API::dev::copy_transparent_background(*wdg_ptr, *graph_ptr)))
|
||||||
|
{
|
||||||
|
if (dimension.width < graph_ptr->size().width || dimension.height < graph_ptr->size().height || backimg.image.alpha())
|
||||||
|
{
|
||||||
|
if (gradual_bground.gradual_from.invisible() || gradual_bground.gradual_to.invisible())
|
||||||
|
graph_ptr->rectangle(true, wdg_ptr->bgcolor());
|
||||||
|
else if (gradual_bground.gradual_from == gradual_bground.gradual_to)
|
||||||
|
graph_ptr->rectangle(true, gradual_bground.gradual_from);
|
||||||
|
else
|
||||||
|
graph_ptr->gradual_rectangle(::nana::rectangle{ graph_ptr->size() }, gradual_bground.gradual_from, gradual_bground.gradual_to, !gradual_bground.horizontal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class content_measurer
|
class content_measurer
|
||||||
@ -106,6 +122,13 @@ namespace nana
|
|||||||
|
|
||||||
if (!backimg.bground)
|
if (!backimg.bground)
|
||||||
{
|
{
|
||||||
|
if (backimg.image.empty())
|
||||||
|
{
|
||||||
|
impl_->draw_background({});
|
||||||
|
graph.setsta();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto valid_area = backimg.valid_area;
|
auto valid_area = backimg.valid_area;
|
||||||
if (valid_area.empty())
|
if (valid_area.empty())
|
||||||
valid_area.dimension(backimg.image.size());
|
valid_area.dimension(backimg.image.size());
|
||||||
@ -142,7 +165,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_m_draw_background(fit_size.width, fit_size.height);
|
impl_->draw_background(fit_size);
|
||||||
|
|
||||||
backimg.image.stretch(valid_area, graph, ::nana::rectangle{ pos, fit_size });
|
backimg.image.stretch(valid_area, graph, ::nana::rectangle{ pos, fit_size });
|
||||||
}
|
}
|
||||||
@ -173,7 +196,7 @@ namespace nana
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_m_draw_background(valid_area.width, valid_area.height);
|
impl_->draw_background(valid_area.dimension());
|
||||||
|
|
||||||
if ( ! backimg.image.empty())
|
if ( ! backimg.image.empty())
|
||||||
backimg.image.paste(valid_area, graph, pos);
|
backimg.image.paste(valid_area, graph, pos);
|
||||||
@ -181,7 +204,7 @@ namespace nana
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_m_draw_background(graphsize.width, graphsize.height);
|
impl_->draw_background(graphsize);
|
||||||
|
|
||||||
color invalid_clr_for_call;
|
color invalid_clr_for_call;
|
||||||
backimg.bground->draw(graph, invalid_clr_for_call, invalid_clr_for_call, rectangle{ graphsize }, element_state::normal);
|
backimg.bground->draw(graph, invalid_clr_for_call, invalid_clr_for_call, rectangle{ graphsize }, element_state::normal);
|
||||||
@ -189,25 +212,6 @@ namespace nana
|
|||||||
|
|
||||||
graph.setsta();
|
graph.setsta();
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawer::_m_draw_background(unsigned w, unsigned h)
|
|
||||||
{
|
|
||||||
auto graph = impl_->graph_ptr;
|
|
||||||
|
|
||||||
if (graph && (!API::dev::copy_transparent_background(*impl_->wdg_ptr, *graph)))
|
|
||||||
{
|
|
||||||
if (w < graph->size().width || h < graph->size().height || impl_->backimg.image.alpha())
|
|
||||||
{
|
|
||||||
auto & bground = impl_->gradual_bground;
|
|
||||||
if (bground.gradual_from.invisible() || bground.gradual_to.invisible())
|
|
||||||
graph->rectangle(true, impl_->wdg_ptr->bgcolor());
|
|
||||||
else if (bground.gradual_from == bground.gradual_to)
|
|
||||||
graph->rectangle(true, bground.gradual_from);
|
|
||||||
else
|
|
||||||
graph->gradual_rectangle(::nana::rectangle{ graph->size() }, bground.gradual_from, bground.gradual_to, !bground.horizontal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//end class drawer
|
//end class drawer
|
||||||
}//end namespace picture
|
}//end namespace picture
|
||||||
}//end namespace drawerbase
|
}//end namespace drawerbase
|
||||||
|
Loading…
x
Reference in New Issue
Block a user