Merge pull request #65831 from bruvzg/vlk_edge_lag
[macOS] Fix redraw lag at the edge of the resizing window.
This commit is contained in:
commit
c2babb6558
3 changed files with 23 additions and 1 deletions
|
@ -85,6 +85,8 @@ public:
|
|||
Size2i max_size;
|
||||
Size2i size;
|
||||
|
||||
NSRect last_frame_rect;
|
||||
|
||||
bool im_active = false;
|
||||
Size2i im_position;
|
||||
|
||||
|
|
|
@ -61,6 +61,24 @@
|
|||
@implementation GodotContentView
|
||||
|
||||
- (void)setFrameSize:(NSSize)newSize {
|
||||
DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
|
||||
if (ds && ds->has_window(window_id)) {
|
||||
DisplayServerMacOS::WindowData &wd = ds->get_window(window_id);
|
||||
NSRect frameRect = [wd.window_object frame];
|
||||
bool left = (wd.last_frame_rect.origin.x != frameRect.origin.x);
|
||||
bool top = (wd.last_frame_rect.origin.y == frameRect.origin.y);
|
||||
if (left && top) {
|
||||
self.layerContentsPlacement = NSViewLayerContentsPlacementBottomRight;
|
||||
} else if (left && !top) {
|
||||
self.layerContentsPlacement = NSViewLayerContentsPlacementTopRight;
|
||||
} else if (!left && top) {
|
||||
self.layerContentsPlacement = NSViewLayerContentsPlacementBottomLeft;
|
||||
} else {
|
||||
self.layerContentsPlacement = NSViewLayerContentsPlacementTopLeft;
|
||||
}
|
||||
wd.last_frame_rect = frameRect;
|
||||
}
|
||||
|
||||
[super setFrameSize:newSize];
|
||||
[self.layer setNeedsDisplay]; // Force "drawRect" call.
|
||||
}
|
||||
|
|
|
@ -151,7 +151,9 @@
|
|||
|
||||
- (void)windowWillStartLiveResize:(NSNotification *)notification {
|
||||
DisplayServerMacOS *ds = (DisplayServerMacOS *)DisplayServer::get_singleton();
|
||||
if (ds) {
|
||||
if (ds && ds->has_window(window_id)) {
|
||||
DisplayServerMacOS::WindowData &wd = ds->get_window(window_id);
|
||||
wd.last_frame_rect = [wd.window_object frame];
|
||||
ds->set_is_resizing(true);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue