mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 16:27:35 +00:00
Let userland retain the window backing store while drawing into it.
To start painting, call: gui$get_window_backing_store() Then finish up with: gui$release_window_backing_store() Process will retain the underlying GraphicsBitmap behind the scenes. This fixes racing between the WindowServer and GUI clients. This patch also adds a WSWindowLocker that is exactly what it sounds like.
This commit is contained in:
parent
ccf3fc4618
commit
86eae0f8df
22 changed files with 244 additions and 102 deletions
|
@ -42,7 +42,9 @@
|
|||
__ERROR(ENOTIMPL, "Not implemented") \
|
||||
__ERROR(EAFNOSUPPORT, "Address family not supported") \
|
||||
__ERROR(EWHYTHO, "Failed without setting an error code (Bug!)") \
|
||||
__ERROR(EBADWINDOW, "Bad Window ID") \
|
||||
__ERROR(EBADWINDOW, "Bad window ID") \
|
||||
__ERROR(EBADBACKING, "Bad backing store ID") \
|
||||
|
||||
|
||||
enum __errno_values {
|
||||
#undef __ERROR
|
||||
|
|
26
LibC/gui.cpp
26
LibC/gui.cpp
|
@ -21,14 +21,32 @@ int gui_get_window_backing_store(int window_id, GUI_WindowBackingStoreInfo* info
|
|||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int gui_get_window_parameters(int window_id, GUI_WindowParameters* params)
|
||||
int gui_release_window_backing_store(void* backing_store_id)
|
||||
{
|
||||
int rc = syscall(SC_gui_get_window_parameters, window_id, params);
|
||||
int rc = syscall(SC_gui_release_window_backing_store, backing_store_id);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int gui_set_window_parameters(int window_id, const GUI_WindowParameters* params)
|
||||
int gui_get_window_title(int window_id, char* buffer, size_t size)
|
||||
{
|
||||
int rc = syscall(SC_gui_set_window_parameters, window_id, params);
|
||||
int rc = syscall(SC_gui_get_window_title, window_id, buffer, size);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int gui_set_window_title(int window_id, const char* title, size_t length)
|
||||
{
|
||||
int rc = syscall(SC_gui_set_window_title, window_id, title, length);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int gui_get_window_rect(int window_id, GUI_Rect* rect)
|
||||
{
|
||||
int rc = syscall(SC_gui_get_window_rect, window_id, rect);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int gui_set_window_rect(int window_id, const GUI_Rect* rect)
|
||||
{
|
||||
int rc = syscall(SC_gui_set_window_rect, window_id, rect);
|
||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
|
|
@ -8,8 +8,11 @@ __BEGIN_DECLS
|
|||
int gui_create_window(const GUI_WindowParameters*);
|
||||
int gui_invalidate_window(int window_id, const GUI_Rect*);
|
||||
int gui_get_window_backing_store(int window_id, GUI_WindowBackingStoreInfo*);
|
||||
int gui_get_window_parameters(int window_id, GUI_WindowParameters*);
|
||||
int gui_set_window_parameters(int window_id, const GUI_WindowParameters*);
|
||||
int gui_release_window_backing_store(void* backing_store_id);
|
||||
int gui_get_window_title(int window_id, char*, size_t);
|
||||
int gui_set_window_title(int window_id, const char*, size_t);
|
||||
int gui_get_window_rect(int window_id, GUI_Rect*);
|
||||
int gui_set_window_rect(int window_id, const GUI_Rect*);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue