From 75de27f83b9482a5a32fb06b7e1a20a14383d8c6 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sat, 25 Jun 2005 06:30:09 +0000 Subject: [PATCH] more BScreen related stuff git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13270 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/app/ServerProtocol.h | 6 ++- src/kits/interface/PrivateScreen.cpp | 64 +++++++++++++++++++--------- src/servers/app/ServerApp.cpp | 40 +++++++++++++++++ 3 files changed, 88 insertions(+), 22 deletions(-) diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index 3debc723fa..b720cc0596 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -133,14 +133,16 @@ enum { AS_PROPOSE_MODE, AS_GET_MODE_LIST, - AS_SCREEN_GET_COLORMAP, + AS_GET_PIXEL_CLOCK_LIMITS, + AS_GET_TIMING_CONSTRAINTS, + AS_SCREEN_GET_COLORMAP, AS_GET_DESKTOP_COLOR, AS_SET_DESKTOP_COLOR, AS_GET_RETRACE_SEMAPHORE, AS_GET_ACCELERANT_INFO, - + // Global function call defs AS_SET_UI_COLORS, AS_GET_UI_COLORS, diff --git a/src/kits/interface/PrivateScreen.cpp b/src/kits/interface/PrivateScreen.cpp index 59fffd25fc..9ba8199f3e 100644 --- a/src/kits/interface/PrivateScreen.cpp +++ b/src/kits/interface/PrivateScreen.cpp @@ -152,24 +152,6 @@ BPrivateScreen::WaitForRetrace(bigtime_t timeout) } -sem_id -BPrivateScreen::RetraceSemaphore() -{ - sem_id id = B_BAD_SEM_ID; - - BPrivate::AppServerLink link; - link.StartMessage(AS_GET_RETRACE_SEMAPHORE); - link.Attach(ID()); - int32 reply; - if (link.FlushWithReply(reply) == B_OK - && reply == SERVER_TRUE) - link.Read(&id); - - return id; -} - - - uint8 BPrivateScreen::IndexForColor(uint8 red, uint8 green, uint8 blue, uint8 alpha) { @@ -385,7 +367,22 @@ BPrivateScreen::GetDeviceInfo(accelerant_device_info *info) status_t BPrivateScreen::GetPixelClockLimits(display_mode *mode, uint32 *low, uint32 *high) { - // TODO: Implement + if (mode == NULL || low == NULL || high == NULL) + return B_BAD_VALUE; + + BPrivate::AppServerLink link; + link.StartMessage(AS_GET_PIXEL_CLOCK_LIMITS); + link.Attach(ID()); + link.Attach(*mode); + + int32 code; + if (link.FlushWithReply(code) == B_OK && code == SERVER_TRUE) { + link.Read(low); + link.Read(high); + + return B_OK; + } + return B_ERROR; } @@ -393,7 +390,16 @@ BPrivateScreen::GetPixelClockLimits(display_mode *mode, uint32 *low, uint32 *hig status_t BPrivateScreen::GetTimingConstraints(display_timing_constraints *dtc) { - // TODO: Implement + BPrivate::AppServerLink link; + link.StartMessage(AS_GET_TIMING_CONSTRAINTS); + link.Attach(ID()); + + int32 code; + if (link.FlushWithReply(code) == B_OK && code == SERVER_TRUE) { + link.Read(dtc); + return B_OK; + } + return B_ERROR; } @@ -487,6 +493,24 @@ BPrivateScreen::get_screen_desc(screen_desc *desc) } +// private methods +sem_id +BPrivateScreen::RetraceSemaphore() +{ + sem_id id = B_BAD_SEM_ID; + + BPrivate::AppServerLink link; + link.StartMessage(AS_GET_RETRACE_SEMAPHORE); + link.Attach(ID()); + int32 reply; + if (link.FlushWithReply(reply) == B_OK + && reply == SERVER_TRUE) + link.Read(&id); + + return id; +} + + BPrivateScreen::BPrivateScreen() : fColorMap(NULL), diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 05da17aa8d..bf6b563aa4 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -2006,7 +2006,47 @@ status_t ret = B_ERROR; break; } + + case AS_GET_TIMING_CONSTRAINTS: + { + STRACE(("ServerApp %s: get timing constraints\n", fSignature.String())); + // We aren't using the screen_id for now... + screen_id id; + link.Read(&id); + display_timing_constraints constraints; + if (gDesktop->GetHWInterface()->GetTimingConstraints(&constraints) == B_OK) { + fLink.StartMessage(SERVER_TRUE); + fLink.Attach(constraints); + } else + fLink.StartMessage(SERVER_FALSE); + + fLink.Flush(); + break; + } + + case AS_GET_PIXEL_CLOCK_LIMITS: + { + STRACE(("ServerApp %s: get pixel clock limits\n", fSignature.String())); + // We aren't using the screen_id for now... + screen_id id; + link.Read(&id); + display_mode mode; + link.Read(&mode); + + uint32 low, high; + if (gDesktop->GetHWInterface()->GetPixelClockLimits(&mode, &low, &high) == B_OK) { + fLink.StartMessage(SERVER_TRUE); + fLink.Attach(low); + fLink.Attach(high); + } else + fLink.StartMessage(SERVER_FALSE); + + fLink.Flush(); + + break; + } + default: printf("ServerApp %s received unhandled message code offset %s\n", fSignature.String(), MsgCodeToBString(code).String());