From 8575beb8d637d54fe734dab18df473b197fd462f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 25 Mar 2005 13:18:26 +0000 Subject: [PATCH] by Stefano Ceccherini Ifdeffed R5 specific stuff so DirectWindow.cpp and WindowScreen.cpp compile on haiku too. That doesnt' mean they work there though. This introduced some warnings which I didn't fix, as they'll go away later. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@11982 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/game/DirectWindow.cpp | 26 +++++++---- src/kits/game/Jamfile | 13 ++++-- src/kits/game/WindowScreen.cpp | 79 +++++++++++++++++++++++----------- 3 files changed, 81 insertions(+), 37 deletions(-) diff --git a/src/kits/game/DirectWindow.cpp b/src/kits/game/DirectWindow.cpp index efa8605794..4e7a279d2a 100644 --- a/src/kits/game/DirectWindow.cpp +++ b/src/kits/game/DirectWindow.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2004, Haiku Inc. + * Copyright 2003-2005, Haiku Inc. * Authors: * Stefano Ceccherini (burton666@libero.it). * Carwyn Jones (turok2@currantbun.com) @@ -10,9 +10,10 @@ #include #include +#ifdef COMPILE_FOR_R5 #include #include - +#endif // TODO: We'll want to move this to a private header, // accessible by the app server. @@ -283,6 +284,8 @@ BDirectWindow::SetFullScreen(bool enable) { status_t status = B_ERROR; if (Lock()) { + +#ifdef COMPILE_FOR_R5 a_session->swrite_l(DW_SET_FULLSCREEN); a_session->swrite_l(server_token); a_session->swrite_l((int32)enable); @@ -291,6 +294,7 @@ BDirectWindow::SetFullScreen(bool enable) status_t fullScreen; a_session->sread(sizeof(status_t), &fullScreen); a_session->sread(sizeof(status_t), &status); +#endif Unlock(); // TODO: Revisit this when we move to our app_server @@ -312,13 +316,15 @@ BDirectWindow::IsFullScreen() const bool BDirectWindow::SupportsWindowMode(screen_id id) { + int32 result = 0; + +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(DW_SUPPORTS_WINDOW_MODE); link.fSession->swrite_l(id.id); link.fSession->sync(); - - int32 result; link.fSession->sread(sizeof(result), &result); +#endif return result & true; } @@ -421,16 +427,20 @@ BDirectWindow::InitData() direct_driver = NULL; if (Lock()) { + struct dw_sync_data sync_data; + status_t status = B_ERROR; + +#ifdef COMPILE_FOR_R5 a_session->swrite_l(DW_GET_SYNC_DATA); a_session->swrite_l(server_token); + Flush(); - - struct dw_sync_data sync_data; + a_session->sread(sizeof(sync_data), &sync_data); - status_t status; - a_session->sread(sizeof(status), &status); + a_session->sread(sizeof(status), &status); +#endif Unlock(); if (status == B_OK) { diff --git a/src/kits/game/Jamfile b/src/kits/game/Jamfile index 98daeec5b4..8318ca494e 100644 --- a/src/kits/game/Jamfile +++ b/src/kits/game/Jamfile @@ -3,6 +3,16 @@ SubDir OBOS_TOP src kits game ; UsePrivateHeaders interface ; UsePrivateHeaders input ; +if ! $(HAIKU_COMPATIBLE) { + SubDirC++Flags -DCOMPILE_FOR_R5 ; + + # Hack to have DirectWindow.cpp and WindowScreen.cpp + # include the R5 header. + PrependObjectHdrs DirectWindow.cpp : /boot/develop/headers/be/interface ; + PrependObjectHdrs WindowScreen.cpp : /boot/develop/headers/be/interface ; +} + + SharedLibrary game : # Public Game Kit DirectWindow.cpp @@ -20,9 +30,6 @@ SharedLibrary game : GSUtility.cpp ; -# Hack to have DirectWindow.cpp and WindowScreen.cpp include the R5 header. -PrependObjectHdrs DirectWindow.cpp : /boot/develop/headers/be/interface ; -PrependObjectHdrs WindowScreen.cpp : /boot/develop/headers/be/interface ; LinkSharedOSLibs libgame.so : be libmedia.so diff --git a/src/kits/game/WindowScreen.cpp b/src/kits/game/WindowScreen.cpp index 363fc6d892..c62fe240d0 100644 --- a/src/kits/game/WindowScreen.cpp +++ b/src/kits/game/WindowScreen.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2004, + * Copyright 2002-2005, * Marcus Overhagen, * Stefano Ceccherini (burton666@libero.it), * Carwyn Jones (turok2@currantbun.com) @@ -17,10 +17,13 @@ #include #include // For IS_SET_MOUSE_POSITION -#include #include +#ifdef COMPILE_FOR_R5 +#include +#endif + // WindowScreen commands #define WS_PROPOSE_MODE 0x00000102 #define WS_MOVE_DISPLAY 0x00000108 @@ -328,10 +331,12 @@ BWindowScreen::~BWindowScreen() delete_sem(debug_sem); if (debug_state) { +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_SWITCH_WORKSPACE); link.fSession->swrite_l(debug_workspace); link.fSession->sync(); +#endif } free(new_space); @@ -453,6 +458,7 @@ BWindowScreen::SetColorList(rgb_color *list, int32 first_index, int32 last_index colorList[x] = list[x]; // Tell the app_server about our changes +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_SET_PALETTE); link.fSession->swrite_l(screen_index); @@ -460,7 +466,7 @@ BWindowScreen::SetColorList(rgb_color *list, int32 first_index, int32 last_index link.fSession->swrite_l(last_index); link.fSession->swrite(colorCount * sizeof(rgb_color), colorList); link.fSession->sync(); - +#endif screen.WaitForRetrace(); } @@ -500,6 +506,9 @@ BWindowScreen::SetFrameBuffer(int32 width, int32 height) // equivalent to BScreen::ProposeMode() // TODO: So why don't we just use it instead? + status_t status = B_ERROR; + +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_DISPLAY_UTILS); link.fSession->swrite_l(screen_index); @@ -508,10 +517,9 @@ BWindowScreen::SetFrameBuffer(int32 width, int32 height) link.fSession->swrite(sizeof(display_mode), &mode); link.fSession->swrite(sizeof(display_mode), &lowMode); link.fSession->sync(); - - status_t status; link.fSession->sread(sizeof(status), &status); link.fSession->sread(sizeof(display_mode), &mode); +#endif // If the mode is supported, change the workspace // to that mode. @@ -525,16 +533,18 @@ BWindowScreen::SetFrameBuffer(int32 width, int32 height) status_t BWindowScreen::MoveDisplayArea(int32 x, int32 y) { + status_t status = B_ERROR; + +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_DISPLAY_UTILS); link.fSession->swrite_l(screen_index); link.fSession->swrite_l(WS_MOVE_DISPLAY); link.fSession->swrite(sizeof(int16), (int16*)&x); link.fSession->swrite(sizeof(int16), (int16*)&y); - link.fSession->sync(); - - status_t status; + link.fSession->sync(); link.fSession->sread(sizeof(status), &status); +#endif if (status == B_OK) { format_info.display_x = x; @@ -658,11 +668,12 @@ BWindowScreen::Suspend(char *label) Unlock(); // Switch to debug workspace +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_SWITCH_WORKSPACE); link.fSession->swrite_l(debug_workspace); link.fSession->sync(); - +#endif // Suspend ourself suspend_thread(find_thread(NULL)); @@ -707,19 +718,21 @@ BWindowScreen::CalcFrame(int32 index, int32 space, display_mode *dmode) int32 BWindowScreen::SetFullscreen(int32 enable) { + int32 result = -1, retval = -1; + +#ifdef COMPILE_FOR_R5 a_session->swrite_l(WS_SET_FULLSCREEN); a_session->swrite_l(server_token); a_session->swrite_l(enable); a_session->sync(); - - int32 result, retval; - a_session->sread(sizeof(result), &result); a_session->sread(sizeof(retval), &retval); +#endif return retval; } + status_t BWindowScreen::InitData(uint32 space, uint32 attributes) { @@ -807,20 +820,23 @@ BWindowScreen::SetActiveState(int32 state) if (status == B_OK) { be_app->ShowCursor(); if (activate_state) { + const color_map *colorMap = system_colors(); +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_SET_PALETTE); link.fSession->swrite_l(screen_index); link.fSession->swrite_l(0); link.fSession->swrite_l(255); - const color_map *colorMap = system_colors(); link.fSession->swrite(256 * sizeof(rgb_color), const_cast(colorMap->color_list)); - link.fSession->sync(); + link.fSession->sync(); +#endif } } } return status; } + status_t BWindowScreen::SetLockState(int32 state) { @@ -835,18 +851,20 @@ BWindowScreen::SetLockState(int32 state) acquire_engine_global = NULL; release_engine_global = NULL; } - + + status_t status = B_ERROR; + +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_SET_LOCK_STATE); link.fSession->swrite_l(screen_index); link.fSession->swrite_l(state); link.fSession->swrite_l(server_token); link.fSession->sync(); - - status_t status; link.fSession->sread(sizeof(status), &status); +#endif - if (status == B_NO_ERROR) { + if (status == B_OK) { lock_state = state; if (state == 1) { if (addon_state == 0) { @@ -923,16 +941,19 @@ BWindowScreen::GetCardInfo() card_info.flags |= B_PARALLEL_BUFFER_ACCESS; screen_id id = screen.ID(); + + status_t result = B_ERROR; + +#ifdef COMPILE_FOR_R5 _BAppServerLink_ link; link.fSession->swrite_l(WS_GET_FRAMEBUFFER); link.fSession->swrite_l(id.id); link.fSession->sync(); - - int32 result; link.fSession->sread(sizeof(result), &result); + link.fSession->sread(sizeof(frame_buffer_config), &config); +#endif - if(result == B_NO_ERROR) { - link.fSession->sread(sizeof(frame_buffer_config), &config); + if(result == B_OK) { card_info.id = id.id; card_info.frame_buffer = config.frame_buffer; card_info.bytes_per_row = config.bytes_per_row; @@ -1009,6 +1030,11 @@ BWindowScreen::GetModeFromSpace(uint32 space, display_mode *dmode) status_t BWindowScreen::InitClone() { +#ifndef COMPILE_FOR_R5 + // TODO: Too much stuff to change, I'll just + return B_ERROR; + // for now +#else // TODO: Using BScreen::GetDeviceInfo() could do the job, I think, // but it always returns B_ERROR on my system (Rudolf's Nvidia driver) _BAppServerLink_ link; @@ -1072,23 +1098,24 @@ BWindowScreen::InitClone() } return result; +#endif } status_t BWindowScreen::AssertDisplayMode(display_mode *dmode) { - status_t result; - _BAppServerLink_ link; + status_t result = B_ERROR; // TODO: Why not BScreen::SetMode() ? +#ifdef COMPILE_FOR_R5 + _BAppServerLink_ link; link.fSession->swrite_l(WS_GET_DISPLAY_MODE); // check display_mode valid command link.fSession->swrite_l(screen_index); link.fSession->swrite(sizeof(display_mode), (void *)dmode); link.fSession->sync(); - link.fSession->sread(sizeof(result), &result); - +#endif // if the result is B_OK, we copy the dmode to new_space if (result == B_OK) { memcpy(new_space, dmode, sizeof(display_mode));