From b30d7f0e0535bb739625e0143d3e94807efbe155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 6 May 2006 17:08:12 +0000 Subject: [PATCH] * Now calls BApplication::HideCursor() on creation and ShowCursor() when it's disconnected (so that you can still just call ShowCursor() to have it back, in case you want that). * Rewrote WindowScreen.h. * Cleanup, removed unused variables, renamed private methods. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17349 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/game/WindowScreen.h | 287 +++++++++++---------------------- src/kits/game/WindowScreen.cpp | 213 ++++++++++++------------ 2 files changed, 203 insertions(+), 297 deletions(-) diff --git a/headers/os/game/WindowScreen.h b/headers/os/game/WindowScreen.h index 42c6d00225..29b99470c7 100644 --- a/headers/os/game/WindowScreen.h +++ b/headers/os/game/WindowScreen.h @@ -1,227 +1,126 @@ -/******************************************************************************* -/ -/ File: WindowScreen.h -/ -/ Description: Client window class for direct screen access. -/ -/ Copyright 1993-98, Be Incorporated, All Rights Reserved. -/ -*******************************************************************************/ - - +/* + * Copyright 2006, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + */ #ifndef _WINDOW_SCREEN_H #define _WINDOW_SCREEN_H -#include -#include -#include -#include -#include -#include + #include +#include +#include +#include +#include +#include -/* private struct */ -typedef struct { - area_id memory_area; - area_id io_area; - char addon_path[64+B_FILE_NAME_LENGTH]; -} _direct_screen_info_; -/* private typedef */ -typedef int32 (*_add_on_control_)(uint32,void *); +_IMPEXP_GAME void set_mouse_position(int32 x, int32 y); + // Controls the mouse cursor position on screen -/* Global function, allowing to move the position of the mouse when the GameKit is in - control of the screen. */ -_IMPEXP_GAME -void set_mouse_position(int32 x, int32 y); - -/********************** WARNING - WARNING - WARNING *********************************** - This is the current version of WindowScreen. The main purpose of this object is to - establish a direct connexion between application and graphic driver, to increase - efficiency and abilities. The graphic driver architecture will overcome serious - changes in the next release, consequently this could only be a preview version of - the real WindowScreen API. - - Nevertheless, compatibility will be insure in future releases FOR MOST OF THE API, - through the use of a compatibility library (the new game library having a name - different from "libgame.so"), or a compatibility class (the new WindowScreen class - using a different name). Part of the API for which compatibility will not be insure - after the Preview Release are specifically pointed out in the following declarations. -****************************************************************************************/ enum { - B_ENABLE_VIEW_DRAWING = 0x0001, - B_ENABLE_DEBUGGER = 0x0002 + B_ENABLE_VIEW_DRAWING = 0x0001, + B_ENABLE_DEBUGGER = 0x0002 }; class BWindowScreen : public BWindow { -public: - BWindowScreen(const char *title, uint32 space, status_t *error, - bool debug_enable = false); - BWindowScreen(const char *title, uint32 space, uint32 attributes, - status_t *error); - virtual ~BWindowScreen(); + public: + BWindowScreen(const char* title, uint32 space, + status_t* _error, bool debugMode = false); + BWindowScreen(const char* title, uint32 space, + uint32 attributes, status_t* _error); + virtual ~BWindowScreen(); - virtual void Quit(); - virtual void ScreenConnected(bool active); - void Disconnect(); + virtual void Quit(); + virtual void ScreenConnected(bool active); + void Disconnect(); - virtual void WindowActivated(bool active); - virtual void WorkspaceActivated(int32 ws, bool state); - virtual void ScreenChanged(BRect screen_size, color_space depth); + virtual void WindowActivated(bool active); + virtual void WorkspaceActivated(int32 workspace, bool active); + virtual void ScreenChanged(BRect screenSize, color_space depth); - virtual void Hide(); - virtual void Show(); + virtual void Hide(); + virtual void Show(); - void SetColorList(rgb_color *list,int32 first_index = 0,int32 last_index = 255); - status_t SetSpace(uint32 space); - - bool CanControlFrameBuffer(); - status_t SetFrameBuffer(int32 width, int32 height); - status_t MoveDisplayArea(int32 x, int32 y); + void SetColorList(rgb_color* list, int32 firstIndex = 0, + int32 lastIndex = 255); + status_t SetSpace(uint32 space); - void *IOBase(); // Not supported anymore. It always returns NULL - - rgb_color *ColorList(); - frame_buffer_info *FrameBufferInfo(); - graphics_card_hook CardHookAt(int32 index); - graphics_card_info *CardInfo(); + bool CanControlFrameBuffer(); + status_t SetFrameBuffer(int32 width, int32 height); + status_t MoveDisplayArea(int32 x, int32 y); -/******************************* Debugger API Notice ******************************** - Those three calls, and the debug_enable flag in the constructor, have been added to - help debugging a WindowScreen application without a cross-developement platform or - the use of serial debug output. + rgb_color* ColorList(); + frame_buffer_info* FrameBufferInfo(); + graphics_card_hook CardHookAt(int32 index); + graphics_card_info* CardInfo(); - To use them, you need to : - - enable the debug mode by setting the debug_enable flag of the constructor to "true". - - register all threads that could be accessing the screen directly at any time. To do - that, call RegisterThread after spawning the new thread and before resuming - it (you should never draw from the Window thread itself, neither register it). - - launch your application from Terminal. The GameKit will first swicth to another - workspace before opening the WindowScreen. If you launch from workspace 0 [Alt-F1], - it will choose the workspace 1 [Alt-F2]. For any other workspace, it will choose - the previous one (for example, for workspace 3 (Alt-F4), it will choose workspace 2 - [Alt-F3]). + void RegisterThread(thread_id thread); + virtual void SuspensionHook(bool active); + void Suspend(char* label); - Then : - - You can use printf(...) anywhere to display informations that will be logged in the - Terminal window. You can go back to the Terminal Window at any time (using the - correct Alt-F?? key). Switching workspace will automatically suspend all the thread - you registered and save the graphic context. Switching back to the WindowScreen - workspace will restore everything and resume your application. - - If you need to save and restore more states when your application is suspended and - resumed, you can overwrite the ForceSwitchForDebug() method. This function is called - with active == true just after suspending your app, and active == false just before - resuming it. - - You can suspend your application by calling the Debugger() method. This will also - switch to the Terminal workspace. Then you can resume by just switchng back to the - WindowScreen workspace (using the good Alt-F?? key). It's better not to call Debugger() - with the WindowScreen locked. - - In case of crash : - - Use the safety short-cut : All the left modifiers (Ctrl, Shift, Option, Command, Alt - or equivalents) of your keyboard and F12. That should send you back to 640x480, and - the debugger terminal should be visible (and usable) if any. - - Then, you can also switch to your Terminal workspace to check the last printf infos. - - After you got (we hope) more information about your (or our :-) bug, quit the debugger - window. Then you should be able to change your code and run your application again. - In any case, check the Error() function immediately after the WindowScreen constructor. - A bad error code will mean that the GameKit is in a inconsistent state, and then you - have better to reboot your machine. If you don't wnat to reboot, you can also try to - run your application in a different workspace. - - It's far to be perfect, but we hope it will still help. - - The Debug API will not be support after the Preview Release (replaced by the debug - API in the new WindowScreen class). -***************************************************************************************/ - void RegisterThread(thread_id id); -virtual void SuspensionHook(bool active); - void Suspend(char *label); - - -virtual status_t Perform(perform_code d, void *arg); - -private: - - typedef BWindow inherited; - -virtual void _ReservedWindowScreen1(); -virtual void _ReservedWindowScreen2(); -virtual void _ReservedWindowScreen3(); -virtual void _ReservedWindowScreen4(); - - BWindowScreen(); - BWindowScreen(BWindowScreen &); - BWindowScreen &operator=(BWindowScreen &); - - char _unused; - char space_mode; - bool direct_enable; - bool fWorkState; - bool fWindowState; - bool fActivateState; - int32 fLockState; - int32 fScreenIndex; - - display_mode *fOldDisplayMode; - display_mode *fDisplayMode; - uint32 space0; - sem_id fActivateSem; - sem_id fDebugSem; - image_id fAddonImage; - - rgb_color fColorList[256]; - GetAccelerantHook fGetAccelerantHook; - graphics_card_info fCardInfo; - - graphics_card_hook hooks[B_HOOK_COUNT]; - _direct_screen_info_ info; - frame_buffer_info fFrameBufferInfo; - - char *fDebugBuffer; - bool fDebugState; - bool fDebugFirst; - int32 fDebugListCount; - int32 fDebugWorkspace; - thread_id *fDebugList; - - uint32 fAttributes; - uint32 fModeCount; - display_mode *fModeList; - - engine_token *fEngineToken; - wait_engine_idle m_wei; - acquire_engine m_ae; - release_engine m_re; - fill_rectangle fill_rect; - screen_to_screen_blit blit_rect; - screen_to_screen_transparent_blit trans_blit_rect; - screen_to_screen_scaled_filtered_blit scaled_filtered_blit_rect; - - uint32 _reserved_[24]; - - static BRect CalcFrame(int32 index, int32 space, display_mode *dmode); - status_t InitData(uint32 space, uint32 attributes); - status_t SetActiveState(int32 state); - status_t SetupAccelerantHooks(bool enable); - status_t GetCardInfo(); - void Suspend(); - void Resume(); - status_t GetModeFromSpace(uint32 space, display_mode *dmode); - status_t InitClone(); - status_t AssertDisplayMode(display_mode *dmode); -}; + private: + virtual status_t Perform(perform_code d, void* arg); +#if 0 + void* IOBase(); + // deprecated API, always returns NULL #endif + virtual void _ReservedWindowScreen1(); + virtual void _ReservedWindowScreen2(); + virtual void _ReservedWindowScreen3(); + virtual void _ReservedWindowScreen4(); + // not implemented: + BWindowScreen(); + BWindowScreen(BWindowScreen& other); + BWindowScreen &operator=(BWindowScreen& other); + status_t _InitData(uint32 space, uint32 attributes); + status_t _SetActiveState(int32 state); + status_t _SetupAccelerantHooks(bool enable); + status_t _GetCardInfo(); + void _Suspend(); + void _Resume(); + status_t _GetModeFromSpace(uint32 space, display_mode* mode); + status_t _InitClone(); + status_t _AssertDisplayMode(display_mode* mode); + uint16 _reserved0; + bool _reserved1; + bool fWorkState; + bool fWindowState; + bool fActivateState; + int32 fLockState; + int32 fWorkspaceIndex; + display_mode* fOriginalDisplayMode; + display_mode* fDisplayMode; + sem_id fActivateSem; + sem_id fDebugSem; + image_id fAddonImage; + uint32 fAttributes; + rgb_color fPalette[256]; + graphics_card_info fCardInfo; + frame_buffer_info fFrameBufferInfo; + char* fDebugFrameBuffer; + bool fDebugState; + bool fDebugFirst; + int32 fDebugWorkspace; + int32 fDebugThreadCount; + thread_id* fDebugThreads; + uint32 fModeCount; + display_mode* fModeList; + GetAccelerantHook fGetAccelerantHook; + wait_engine_idle fWaitEngineIdle; + uint32 _reserved[162]; +}; + +#endif // _WINDOW_SCREEN_H diff --git a/src/kits/game/WindowScreen.cpp b/src/kits/game/WindowScreen.cpp index 93349289c4..437ff105f9 100644 --- a/src/kits/game/WindowScreen.cpp +++ b/src/kits/game/WindowScreen.cpp @@ -1,9 +1,11 @@ -/* - * Copyright 2002-2006, - * Marcus Overhagen, - * Stefano Ceccherini (burton666@libero.it), - * Carwyn Jones (turok2@currantbun.com) - * All rights reserved. +/* + * Copyright 2002-2006, Haiku. All Rights Reserved. + * Copyright 2002-2005, + * Marcus Overhagen, + * Stefano Ceccherini (burton666@libero.it), + * Carwyn Jones (turok2@currantbun.com) + * All rights reserved. + * * Distributed under the terms of the MIT License. */ @@ -288,7 +290,7 @@ BWindowScreen::BWindowScreen(const char *title, uint32 space, if (debug_enable) attributes |= B_ENABLE_DEBUGGER; - status_t status = InitData(space, attributes); + status_t status = _InitData(space, attributes); if (error) *error = status; } @@ -301,7 +303,7 @@ BWindowScreen::BWindowScreen(const char *title, uint32 space, | B_NOT_ZOOMABLE | B_NOT_MOVABLE | B_NOT_RESIZABLE, B_CURRENT_WORKSPACE) { CALLED(); - status_t status = InitData(space, attributes); + status_t status = _InitData(space, attributes); if (error) *error = status; } @@ -321,7 +323,7 @@ BWindowScreen::~BWindowScreen() activate_workspace(fDebugWorkspace); free(fDisplayMode); - free(fOldDisplayMode); + free(fOriginalDisplayMode); free(fModeList); } @@ -349,8 +351,10 @@ BWindowScreen::Disconnect() if (fLockState == 1) { if (fDebugState) fDebugFirst = true; - SetActiveState(0); + _SetActiveState(0); } + + be_app->ShowCursor(); } @@ -359,8 +363,8 @@ BWindowScreen::WindowActivated(bool active) { CALLED(); fWindowState = active; - if(active && fLockState == 0 && fWorkState) - SetActiveState(1); + if (active && fLockState == 0 && fWorkState) + _SetActiveState(1); } @@ -371,14 +375,14 @@ BWindowScreen::WorkspaceActivated(int32 ws, bool state) fWorkState = state; if (state) { if (fLockState == 0 && fWindowState) { - SetActiveState(1); + _SetActiveState(1); if (!IsHidden()) { Activate(true); WindowActivated(true); } } } else if (fLockState) - SetActiveState(0); + _SetActiveState(0); } @@ -393,6 +397,7 @@ void BWindowScreen::Hide() { CALLED(); + Disconnect(); BWindow::Hide(); } @@ -402,10 +407,13 @@ void BWindowScreen::Show() { CALLED(); + BWindow::Show(); + if (!fActivateState) { release_sem(fActivateSem); fActivateState = true; + be_app->HideCursor(); } } @@ -421,7 +429,7 @@ BWindowScreen::SetColorList(rgb_color *list, int32 firstIndex, int32 lastIndex) if (!fActivateState) { // If we aren't active, we just change our local palette for (int32 x = firstIndex; x <= lastIndex; x++) { - fColorList[x] = list[x]; + fPalette[x] = list[x]; } } else { uint8 colors[3 * 256]; @@ -429,7 +437,7 @@ BWindowScreen::SetColorList(rgb_color *list, int32 firstIndex, int32 lastIndex) int32 j = 0; for (int32 x = firstIndex; x <= lastIndex; x++) { - fColorList[x] = list[x]; + fPalette[x] = list[x]; // update our local palette as well colors[j++] = list[x].red; @@ -459,10 +467,12 @@ status_t BWindowScreen::SetSpace(uint32 space) { CALLED(); + display_mode mode; - status_t status = GetModeFromSpace(space, &mode); + status_t status = _GetModeFromSpace(space, &mode); if (status == B_OK) - status = AssertDisplayMode(&mode); + status = _AssertDisplayMode(&mode); + return status; } @@ -490,7 +500,7 @@ BWindowScreen::SetFrameBuffer(int32 width, int32 height) BScreen screen(this); status_t status = screen.ProposeMode(&mode, &lowMode, &highMode); if (status == B_OK) - status = AssertDisplayMode(&mode); + status = _AssertDisplayMode(&mode); return status; } @@ -512,19 +522,21 @@ BWindowScreen::MoveDisplayArea(int32 x, int32 y) } +#if 0 void * BWindowScreen::IOBase() { // Not supported return NULL; } +#endif rgb_color * BWindowScreen::ColorList() { CALLED(); - return fColorList; + return fPalette; } @@ -581,7 +593,7 @@ BWindowScreen::CardInfo() void -BWindowScreen::RegisterThread(thread_id id) +BWindowScreen::RegisterThread(thread_id thread) { CALLED(); @@ -593,11 +605,11 @@ BWindowScreen::RegisterThread(thread_id id) if (status < B_OK) return; - void *newDebugList = realloc(fDebugList, (fDebugListCount + 1) * sizeof(thread_id)); + void *newDebugList = realloc(fDebugThreads, (fDebugThreadCount + 1) * sizeof(thread_id)); if (newDebugList != NULL) { - fDebugList = (thread_id *)newDebugList; - fDebugList[fDebugListCount] = id; - fDebugListCount++; + fDebugThreads = (thread_id *)newDebugList; + fDebugThreads[fDebugThreadCount] = thread; + fDebugThreadCount++; } release_sem(fDebugSem); } @@ -611,12 +623,13 @@ BWindowScreen::SuspensionHook(bool active) void -BWindowScreen::Suspend(char *label) +BWindowScreen::Suspend(char* label) { CALLED(); if (fDebugState) { fprintf(stderr, "## Debugger(\"%s\").", label); - fprintf(stderr, " Press Alt-F%ld or Cmd-F%ld to resume.\n", space0 + 1, space0 + 1); + fprintf(stderr, " Press Alt-F%ld or Cmd-F%ld to resume.\n", fWorkspaceIndex + 1, + fWorkspaceIndex + 1); if (IsLocked()) Unlock(); @@ -632,7 +645,7 @@ BWindowScreen::Suspend(char *label) status_t -BWindowScreen::Perform(perform_code d, void *arg) +BWindowScreen::Perform(perform_code d, void* arg) { return inherited::Perform(d, arg); } @@ -653,31 +666,20 @@ void BWindowScreen::_ReservedWindowScreen4() {} */ -BRect -BWindowScreen::CalcFrame(int32 index, int32 space, display_mode* mode) -{ - CALLED(); - - BScreen screen; - if (mode != NULL) - screen.GetMode(mode); - - return screen.Frame(); -} - - status_t -BWindowScreen::InitData(uint32 space, uint32 attributes) +BWindowScreen::_InitData(uint32 space, uint32 attributes) { CALLED(); fDebugState = attributes & B_ENABLE_DEBUGGER; - fDebugListCount = 0; - fDebugList = NULL; + fDebugThreadCount = 0; + fDebugThreads = NULL; fDebugFirst = true; - - fAttributes = attributes; - fScreenIndex = fDebugWorkspace = current_workspace(); + + fAttributes = attributes; + // TODO: not really used right now, but should probably be known by the app_server + + fWorkspaceIndex = fDebugWorkspace = current_workspace(); fLockState = 0; fAddonImage = -1; fWindowState = 0; @@ -693,16 +695,13 @@ BWindowScreen::InitData(uint32 space, uint32 attributes) if (fDisplayMode == NULL) return B_NO_MEMORY; - status = GetModeFromSpace(space, fDisplayMode); + status = _GetModeFromSpace(space, fDisplayMode); if (status < B_OK) return status; - space_mode = 1; - space0 = 0; + memcpy(fPalette, screen.ColorMap()->color_list, 256); - memcpy(fColorList, screen.ColorMap()->color_list, 256); - - status = GetCardInfo(); + status = _GetCardInfo(); if (status < B_OK) return status; @@ -718,25 +717,25 @@ BWindowScreen::InitData(uint32 space, uint32 attributes) fWorkState = 1; - fOldDisplayMode = (display_mode *)malloc(sizeof(display_mode)); - if (fOldDisplayMode == NULL) + fOriginalDisplayMode = (display_mode *)malloc(sizeof(display_mode)); + if (fOriginalDisplayMode == NULL) return B_NO_MEMORY; - screen.GetMode(fOldDisplayMode); + screen.GetMode(fOriginalDisplayMode); return B_OK; } status_t -BWindowScreen::SetActiveState(int32 state) +BWindowScreen::_SetActiveState(int32 state) { CALLED(); status_t status = B_ERROR; if (state == 1) { //be_app->HideCursor(); - status = AssertDisplayMode(fDisplayMode); - if (status == B_OK && (status = SetupAccelerantHooks(true)) == B_OK) { + status = _AssertDisplayMode(fDisplayMode); + if (status == B_OK && (status = _SetupAccelerantHooks(true)) == B_OK) { if (!fActivateState) { do { status = acquire_sem(fActivateSem); @@ -746,10 +745,10 @@ BWindowScreen::SetActiveState(int32 state) return status; } - SetColorList(fColorList); + SetColorList(fPalette); if (fDebugState && !fDebugFirst) { SuspensionHook(true); - Resume(); + _Resume(); } else { fDebugFirst = true; ScreenConnected(true); @@ -758,18 +757,17 @@ BWindowScreen::SetActiveState(int32 state) if (status == B_OK) return status; } else - SetupAccelerantHooks(false); - - be_app->ShowCursor(); + _SetupAccelerantHooks(false); } else { - AssertDisplayMode(fOldDisplayMode); + _AssertDisplayMode(fOriginalDisplayMode); + if (fDebugState && !fDebugFirst) { - Suspend(); + _Suspend(); SuspensionHook(false); } else ScreenConnected(false); - status = SetupAccelerantHooks(false); + status = _SetupAccelerantHooks(false); if (status == B_OK) { be_app->ShowCursor(); if (fActivateState) { @@ -783,11 +781,11 @@ BWindowScreen::SetActiveState(int32 state) status_t -BWindowScreen::SetupAccelerantHooks(bool enable) +BWindowScreen::_SetupAccelerantHooks(bool enable) { CALLED(); if (fAddonImage >= 0) { - m_wei(); + fWaitEngineIdle(); sFillRectHook = NULL; sBlitRectHook = NULL; sTransparentBlitHook = NULL; @@ -802,28 +800,37 @@ BWindowScreen::SetupAccelerantHooks(bool enable) status_t status = B_OK; if (enable) { + acquire_engine aquireEngine = NULL; + release_engine releaseEngine = NULL; + fill_rectangle fillRectangle = NULL; + screen_to_screen_blit blit = NULL; + screen_to_screen_transparent_blit transparentBlit = NULL; + screen_to_screen_scaled_filtered_blit scaledFilteredBlit = NULL; + if (fAddonImage < 0) { - status = InitClone(); + status = _InitClone(); if (status == B_OK) { - m_wei = (wait_engine_idle)fGetAccelerantHook(B_WAIT_ENGINE_IDLE, NULL); - m_re = (release_engine)fGetAccelerantHook(B_RELEASE_ENGINE, NULL); - m_ae = (acquire_engine)fGetAccelerantHook(B_ACQUIRE_ENGINE, NULL); - fill_rect = (fill_rectangle)fGetAccelerantHook(B_FILL_RECTANGLE, NULL); - blit_rect = (screen_to_screen_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_BLIT, NULL); - trans_blit_rect = (screen_to_screen_transparent_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT, NULL); - scaled_filtered_blit_rect = (screen_to_screen_scaled_filtered_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT, NULL); + fWaitEngineIdle = (wait_engine_idle)fGetAccelerantHook(B_WAIT_ENGINE_IDLE, NULL); + + releaseEngine = (release_engine)fGetAccelerantHook(B_RELEASE_ENGINE, NULL); + aquireEngine = (acquire_engine)fGetAccelerantHook(B_ACQUIRE_ENGINE, NULL); + fillRectangle = (fill_rectangle)fGetAccelerantHook(B_FILL_RECTANGLE, NULL); + blit = (screen_to_screen_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_BLIT, NULL); + transparentBlit = (screen_to_screen_transparent_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_TRANSPARENT_BLIT, NULL); + scaledFilteredBlit = (screen_to_screen_scaled_filtered_blit)fGetAccelerantHook(B_SCREEN_TO_SCREEN_SCALED_FILTERED_BLIT, NULL); } } if (status == B_OK) { - sFillRectHook = fill_rect; - sBlitRectHook = blit_rect; - sTransparentBlitHook = trans_blit_rect; - sScaledFilteredBlitHook = scaled_filtered_blit_rect; - sWaitIdleHook = m_wei; - sAcquireEngineHook = m_ae; - sReleaseEngineHook = m_re; - m_wei(); + sFillRectHook = fillRectangle; + sBlitRectHook = blit; + sTransparentBlitHook = transparentBlit; + sScaledFilteredBlitHook = scaledFilteredBlit; + sWaitIdleHook = fWaitEngineIdle; + sAcquireEngineHook = aquireEngine; + sReleaseEngineHook = releaseEngine; + + fWaitEngineIdle(); } } @@ -832,7 +839,7 @@ BWindowScreen::SetupAccelerantHooks(bool enable) status_t -BWindowScreen::GetCardInfo() +BWindowScreen::_GetCardInfo() { CALLED(); @@ -897,7 +904,7 @@ BWindowScreen::GetCardInfo() void -BWindowScreen::Suspend() +BWindowScreen::_Suspend() { CALLED(); @@ -910,33 +917,34 @@ BWindowScreen::Suspend() return; // Suspend all the registered threads - for (int32 i = 0; i < fDebugListCount; i++) { + for (int32 i = 0; i < fDebugThreadCount; i++) { snooze(10000); - suspend_thread(fDebugList[i]); + suspend_thread(fDebugThreads[i]); } graphics_card_info *info = CardInfo(); size_t fbSize = info->bytes_per_row * info->height; // Save the content of the frame buffer into the local buffer - fDebugBuffer = (char *)malloc(fbSize); - memcpy(fDebugBuffer, info->frame_buffer, fbSize); + fDebugFrameBuffer = (char *)malloc(fbSize); + memcpy(fDebugFrameBuffer, info->frame_buffer, fbSize); } void -BWindowScreen::Resume() +BWindowScreen::_Resume() { CALLED(); graphics_card_info *info = CardInfo(); // Copy the content of the debug_buffer back into the frame buffer. - memcpy(info->frame_buffer, fDebugBuffer, info->bytes_per_row * info->height); - free(fDebugBuffer); + memcpy(info->frame_buffer, fDebugFrameBuffer, info->bytes_per_row * info->height); + free(fDebugFrameBuffer); + fDebugFrameBuffer = NULL; // Resume all the registered threads - for (int32 i = 0; i < fDebugListCount; i++) { - resume_thread(fDebugList[i]); + for (int32 i = 0; i < fDebugThreadCount; i++) { + resume_thread(fDebugThreads[i]); } release_sem(fDebugSem); @@ -944,7 +952,7 @@ BWindowScreen::Resume() status_t -BWindowScreen::GetModeFromSpace(uint32 space, display_mode *dmode) +BWindowScreen::_GetModeFromSpace(uint32 space, display_mode *dmode) { CALLED(); @@ -966,7 +974,7 @@ BWindowScreen::GetModeFromSpace(uint32 space, display_mode *dmode) status_t -BWindowScreen::InitClone() +BWindowScreen::_InitClone() { CALLED(); @@ -975,7 +983,7 @@ BWindowScreen::InitClone() AppServerLink link; link.StartMessage(AS_GET_ACCELERANT_PATH); - link.Attach(fScreenIndex); + link.Attach(fWorkspaceIndex); status_t status = B_ERROR; if (link.FlushWithReply(status) < B_OK || status < B_OK) @@ -1008,7 +1016,7 @@ BWindowScreen::InitClone() } link.StartMessage(AS_GET_DRIVER_PATH); - link.Attach(fScreenIndex); + link.Attach(fWorkspaceIndex); if (link.FlushWithReply(status) == B_OK && status == B_OK) { BString driverPath; link.ReadString(driverPath); @@ -1026,7 +1034,7 @@ BWindowScreen::InitClone() status_t -BWindowScreen::AssertDisplayMode(display_mode* displayMode) +BWindowScreen::_AssertDisplayMode(display_mode* displayMode) { CALLED(); @@ -1048,10 +1056,9 @@ BWindowScreen::AssertDisplayMode(display_mode* displayMode) } memcpy(fDisplayMode, displayMode, sizeof(display_mode)); - space_mode = 1; } - status = GetCardInfo(); + status = _GetCardInfo(); if (status < B_OK) return status;