Fix drawing of dirty block overlays
This commit is contained in:
@@ -1753,7 +1753,6 @@ void DrawDirtyBlocks()
|
|||||||
DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY;
|
DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY;
|
||||||
if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WINDOW_DIRTY))) {
|
if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WINDOW_DIRTY))) {
|
||||||
flags |= DOWF_SHOW_DEBUG;
|
flags |= DOWF_SHOW_DEBUG;
|
||||||
_dirty_block_colour.fetch_add(1, std::memory_order_relaxed);
|
|
||||||
}
|
}
|
||||||
DrawOverlappedWindowWithClipping(w, w->left, w->top, w->left + w->width, w->top + w->height, flags);
|
DrawOverlappedWindowWithClipping(w, w->left, w->top, w->left + w->width, w->top + w->height, flags);
|
||||||
w->flags &= ~(WF_DIRTY | WF_WIDGETS_DIRTY);
|
w->flags &= ~(WF_DIRTY | WF_WIDGETS_DIRTY);
|
||||||
@@ -1765,7 +1764,6 @@ void DrawDirtyBlocks()
|
|||||||
DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY;
|
DrawOverlappedWindowFlags flags = DOWF_MARK_DIRTY;
|
||||||
if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WIDGET_DIRTY))) {
|
if (unlikely(HasBit(_gfx_debug_flags, GDF_SHOW_WIDGET_DIRTY))) {
|
||||||
flags |= DOWF_SHOW_DEBUG;
|
flags |= DOWF_SHOW_DEBUG;
|
||||||
_dirty_block_colour.fetch_add(1, std::memory_order_relaxed);
|
|
||||||
}
|
}
|
||||||
DrawOverlappedWindowWithClipping(w, w->left + widget->pos_x, w->top + widget->pos_y, w->left + widget->pos_x + widget->current_x, w->top + widget->pos_y + widget->current_y, flags);
|
DrawOverlappedWindowWithClipping(w, w->left + widget->pos_x, w->top + widget->pos_y, w->left + widget->pos_x + widget->current_x, w->top + widget->pos_y + widget->current_y, flags);
|
||||||
}
|
}
|
||||||
|
@@ -2215,7 +2215,7 @@ void ViewportDrawDirtyBlocks(const DrawPixelInfo *dpi, bool increment_colour)
|
|||||||
int bottom = UnScaleByZoom(dpi->height, dpi->zoom);
|
int bottom = UnScaleByZoom(dpi->height, dpi->zoom);
|
||||||
|
|
||||||
const uint dirty_block_colour = increment_colour ? _dirty_block_colour.fetch_add(1, std::memory_order_relaxed) : _dirty_block_colour.load(std::memory_order_relaxed);
|
const uint dirty_block_colour = increment_colour ? _dirty_block_colour.fetch_add(1, std::memory_order_relaxed) : _dirty_block_colour.load(std::memory_order_relaxed);
|
||||||
int colour = _string_colourmap[dirty_block_colour];
|
int colour = _string_colourmap[dirty_block_colour & 0xF];
|
||||||
|
|
||||||
dst = dpi->dst_ptr;
|
dst = dpi->dst_ptr;
|
||||||
|
|
||||||
|
@@ -948,8 +948,9 @@ void DrawOverlappedWindow(Window *w, int left, int top, int right, int bottom, D
|
|||||||
dp->zoom = ZOOM_LVL_NORMAL;
|
dp->zoom = ZOOM_LVL_NORMAL;
|
||||||
w->OnPaint();
|
w->OnPaint();
|
||||||
if (unlikely(flags & DOWF_SHOW_DEBUG)) {
|
if (unlikely(flags & DOWF_SHOW_DEBUG)) {
|
||||||
|
if (w->viewport != nullptr) ViewportDoDrawProcessAllPending();
|
||||||
extern void ViewportDrawDirtyBlocks(const DrawPixelInfo *dpi, bool increment_colour);
|
extern void ViewportDrawDirtyBlocks(const DrawPixelInfo *dpi, bool increment_colour);
|
||||||
ViewportDrawDirtyBlocks(_cur_dpi, false);
|
ViewportDrawDirtyBlocks(_cur_dpi, true);
|
||||||
}
|
}
|
||||||
if (flags & DOWF_MARK_DIRTY) {
|
if (flags & DOWF_MARK_DIRTY) {
|
||||||
VideoDriver::GetInstance()->MakeDirty(left, top, right - left, bottom - top);
|
VideoDriver::GetInstance()->MakeDirty(left, top, right - left, bottom - top);
|
||||||
|
Reference in New Issue
Block a user