mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-02 08:22:55 +00:00
Userland: Add FB_FLUSH ioctl for fbdev
This commit is contained in:
parent
34e9fa4d3b
commit
974e996d33
Notes:
sideshowbarker
2024-07-18 11:31:36 +09:00
Author: https://github.com/ccapitalK
Commit: 974e996d33
Pull-request: https://github.com/SerenityOS/serenity/pull/7130
Reviewed-by: https://github.com/Dexesttp
Reviewed-by: https://github.com/IdanHo
5 changed files with 27 additions and 0 deletions
|
@ -38,4 +38,9 @@ ALWAYS_INLINE int fb_set_buffer(int fd, int index)
|
|||
return ioctl(fd, FB_IOCTL_SET_BUFFER, index);
|
||||
}
|
||||
|
||||
ALWAYS_INLINE int fb_flush_buffer(int fd, FBRect* rect)
|
||||
{
|
||||
return ioctl(fd, FB_IOCTL_FLUSH_BUFFER, rect);
|
||||
}
|
||||
|
||||
__END_DECLS
|
||||
|
|
|
@ -23,6 +23,13 @@ struct FBResolution {
|
|||
unsigned height;
|
||||
};
|
||||
|
||||
struct FBRect {
|
||||
unsigned x;
|
||||
unsigned y;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
};
|
||||
|
||||
__END_DECLS
|
||||
|
||||
enum IOCtlNumber {
|
||||
|
@ -43,6 +50,7 @@ enum IOCtlNumber {
|
|||
FB_IOCTL_SET_RESOLUTION,
|
||||
FB_IOCTL_GET_BUFFER,
|
||||
FB_IOCTL_SET_BUFFER,
|
||||
FB_IOCTL_FLUSH_BUFFER,
|
||||
SIOCSIFADDR,
|
||||
SIOCGIFADDR,
|
||||
SIOCGIFHWADDR,
|
||||
|
@ -75,6 +83,7 @@ enum IOCtlNumber {
|
|||
#define FB_IOCTL_SET_RESOLUTION FB_IOCTL_SET_RESOLUTION
|
||||
#define FB_IOCTL_GET_BUFFER FB_IOCTL_GET_BUFFER
|
||||
#define FB_IOCTL_SET_BUFFER FB_IOCTL_SET_BUFFER
|
||||
#define FB_IOCTL_FLUSH_BUFFER FB_IOCTL_FLUSH_BUFFER
|
||||
#define SIOCSIFADDR SIOCSIFADDR
|
||||
#define SIOCGIFADDR SIOCGIFADDR
|
||||
#define SIOCGIFHWADDR SIOCGIFHWADDR
|
||||
|
|
|
@ -662,6 +662,7 @@ void Compositor::flush(Screen& screen)
|
|||
from_ptr = (const Gfx::RGBA32*)((const u8*)from_ptr + pitch);
|
||||
to_ptr = (Gfx::RGBA32*)((u8*)to_ptr + pitch);
|
||||
}
|
||||
screen.flush_display(a_rect.intersected(screen.rect()));
|
||||
};
|
||||
for (auto& rect : screen_data.m_flush_rects.rects())
|
||||
do_flush(rect);
|
||||
|
|
|
@ -316,4 +316,14 @@ void ScreenInput::on_receive_keyboard_data(::KeyEvent kernel_event)
|
|||
Core::EventLoop::current().post_event(WindowManager::the(), move(message));
|
||||
}
|
||||
|
||||
void Screen::flush_display(const Gfx::IntRect& flush_region)
|
||||
{
|
||||
FBRect rect {
|
||||
.x = static_cast<unsigned>(flush_region.x()) * scale_factor(),
|
||||
.y = static_cast<unsigned>(flush_region.y()) * scale_factor(),
|
||||
.width = static_cast<unsigned>(flush_region.width()) * scale_factor(),
|
||||
.height = static_cast<unsigned>(flush_region.height() * scale_factor())
|
||||
};
|
||||
fb_flush_buffer(m_framebuffer_fd, &rect);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,6 +160,8 @@ public:
|
|||
Gfx::IntSize size() const { return { m_virtual_rect.width(), m_virtual_rect.height() }; }
|
||||
Gfx::IntRect rect() const { return m_virtual_rect; }
|
||||
|
||||
void flush_display(const Gfx::IntRect& rect);
|
||||
|
||||
private:
|
||||
Screen(ScreenLayout::Screen&);
|
||||
bool open_device();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue