Spreadsheet: fix border rendering for merged cells
This commit is contained in:
@@ -850,25 +850,30 @@ Sheet::getCellBinding(Range &range,
|
||||
return PropertySheet::BindingNone;
|
||||
}
|
||||
|
||||
static inline unsigned _getBorder(
|
||||
const std::vector<App::Range> &ranges, const App::CellAddress &address)
|
||||
static inline unsigned _getBorder(const Sheet *sheet,
|
||||
const std::vector<App::Range> &ranges,
|
||||
const App::CellAddress &address)
|
||||
{
|
||||
unsigned flags = 0;
|
||||
int rows, cols;
|
||||
sheet->getSpans(address, rows, cols);
|
||||
--rows;
|
||||
--cols;
|
||||
for(auto &range : ranges) {
|
||||
auto from = range.from();
|
||||
auto to = range.to();
|
||||
if(address.row() < from.row()
|
||||
|| address.row() > to.row()
|
||||
|| address.row() + rows > to.row()
|
||||
|| address.col() < from.col()
|
||||
|| address.col() > to.col())
|
||||
|| address.col() + cols > to.col())
|
||||
continue;
|
||||
if(address.row() == from.row())
|
||||
flags |= Sheet::BorderTop;
|
||||
if(address.row() == to.row())
|
||||
if(address.row() == to.row() || address.row() + rows == to.row())
|
||||
flags |= Sheet::BorderBottom;
|
||||
if(address.col() == from.col())
|
||||
flags |= Sheet::BorderLeft;
|
||||
if(address.col() == to.col())
|
||||
if(address.col() == to.col() || address.col() + cols == to.col())
|
||||
flags |= Sheet::BorderRight;
|
||||
if(flags == Sheet::BorderAll)
|
||||
break;
|
||||
@@ -877,7 +882,7 @@ static inline unsigned _getBorder(
|
||||
}
|
||||
|
||||
unsigned Sheet::getCellBindingBorder(App::CellAddress address) const {
|
||||
return _getBorder(boundRanges, address);
|
||||
return _getBorder(this, boundRanges, address);
|
||||
}
|
||||
|
||||
void Sheet::updateBindings()
|
||||
@@ -1597,7 +1602,7 @@ unsigned Sheet::getCopyOrCutBorder(CellAddress address, bool copy) const
|
||||
{
|
||||
if(hasCopyRange != copy)
|
||||
return 0;
|
||||
return _getBorder(copyCutRanges, address);
|
||||
return _getBorder(this, copyCutRanges, address);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -109,7 +109,7 @@ static inline void drawBorder(QPainter *painter, const QStyleOptionViewItem &opt
|
||||
|
||||
QRect rect = option.rect.adjusted(1,1,0,0);
|
||||
if(flags == Sheet::BorderAll) {
|
||||
painter->drawRect(rect);
|
||||
painter->drawRect(rect.adjusted(0,0,-1,-1));
|
||||
return;
|
||||
}
|
||||
if(flags & Sheet::BorderLeft)
|
||||
|
||||
Reference in New Issue
Block a user