1/* 2 * Copyright 2003-2009, Haiku Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stefano Ceccherini (burton666@libero.it) 7 * Axel D��rfler, axeld@pinc-software.de 8 */ 9 10 11#include <Screen.h> 12 13#include <Window.h> 14 15#include <PrivateScreen.h> 16 17 18using namespace BPrivate; 19 20 21BScreen::BScreen(screen_id id) 22{ 23 fScreen = BPrivateScreen::Get(id.id); 24} 25 26 27BScreen::BScreen(BWindow* window) 28{ 29 fScreen = BPrivateScreen::Get(window); 30} 31 32 33BScreen::~BScreen() 34{ 35 BPrivateScreen::Put(fScreen); 36} 37 38 39bool 40BScreen::IsValid() 41{ 42 return fScreen != NULL && fScreen->IsValid(); 43} 44 45 46status_t 47BScreen::SetToNext() 48{ 49 if (fScreen != NULL) { 50 BPrivateScreen* screen = BPrivateScreen::GetNext(fScreen); 51 if (screen != NULL) { 52 fScreen = screen; 53 return B_OK; 54 } 55 } 56 return B_ERROR; 57} 58 59 60color_space 61BScreen::ColorSpace() 62{ 63 if (fScreen != NULL) 64 return fScreen->ColorSpace(); 65 66 return B_NO_COLOR_SPACE; 67} 68 69 70BRect 71BScreen::Frame() 72{ 73 if (fScreen != NULL) 74 return fScreen->Frame(); 75 76 return BRect(0, 0, 0, 0); 77} 78 79 80screen_id 81BScreen::ID() 82{ 83 if (fScreen != NULL) { 84 screen_id id = { fScreen->ID() }; 85 return id; 86 } 87 88 return B_MAIN_SCREEN_ID; 89} 90 91 92status_t 93BScreen::WaitForRetrace() 94{ 95 return WaitForRetrace(B_INFINITE_TIMEOUT); 96} 97 98 99status_t 100BScreen::WaitForRetrace(bigtime_t timeout) 101{ 102 if (fScreen != NULL) 103 return fScreen->WaitForRetrace(timeout); 104 105 return B_ERROR; 106} 107 108 109uint8 110BScreen::IndexForColor(uint8 red, uint8 green, uint8 blue, uint8 alpha) 111{ 112 if (fScreen != NULL) 113 return fScreen->IndexForColor(red, green, blue, alpha); 114 115 return 0; 116} 117 118 119rgb_color 120BScreen::ColorForIndex(const uint8 index) 121{ 122 if (fScreen != NULL) 123 return fScreen->ColorForIndex(index); 124 125 return rgb_color(); 126} 127 128 129uint8 130BScreen::InvertIndex(uint8 index) 131{ 132 if (fScreen != NULL) 133 return fScreen->InvertIndex(index); 134 135 return 0; 136} 137 138 139const color_map* 140BScreen::ColorMap() 141{ 142 if (fScreen != NULL) 143 return fScreen->ColorMap(); 144 145 return NULL; 146} 147 148 149status_t 150BScreen::GetBitmap(BBitmap** _bitmap, bool drawCursor, BRect* bounds) 151{ 152 if (fScreen != NULL) 153 return fScreen->GetBitmap(_bitmap, drawCursor, bounds); 154 155 return B_ERROR; 156} 157 158 159status_t 160BScreen::ReadBitmap(BBitmap* bitmap, bool drawCursor, BRect* bounds) 161{ 162 if (fScreen != NULL) 163 return fScreen->ReadBitmap(bitmap, drawCursor, bounds); 164 165 return B_ERROR; 166} 167 168 169rgb_color 170BScreen::DesktopColor() 171{ 172 if (fScreen != NULL) 173 return fScreen->DesktopColor(B_CURRENT_WORKSPACE_INDEX); 174 175 return rgb_color(); 176} 177 178 179rgb_color 180BScreen::DesktopColor(uint32 workspace) 181{ 182 if (fScreen != NULL) 183 return fScreen->DesktopColor(workspace); 184 185 return rgb_color(); 186} 187 188 189void 190BScreen::SetDesktopColor(rgb_color color, bool stick) 191{ 192 if (fScreen != NULL) 193 fScreen->SetDesktopColor(color, B_CURRENT_WORKSPACE_INDEX, stick); 194} 195 196 197void 198BScreen::SetDesktopColor(rgb_color color, uint32 workspace, bool stick) 199{ 200 if (fScreen != NULL) 201 fScreen->SetDesktopColor(color, workspace, stick); 202} 203 204 205status_t 206BScreen::ProposeMode(display_mode* target, const display_mode* low, 207 const display_mode* high) 208{ 209 if (fScreen != NULL) 210 return fScreen->ProposeMode(target, low, high); 211 212 return B_ERROR; 213} 214 215 216status_t 217BScreen::GetModeList(display_mode** _modeList, uint32* _count) 218{ 219 if (fScreen != NULL) 220 return fScreen->GetModeList(_modeList, _count); 221 222 return B_ERROR; 223} 224 225 226status_t 227BScreen::GetMode(display_mode* mode) 228{ 229 if (fScreen != NULL) 230 return fScreen->GetMode(B_CURRENT_WORKSPACE_INDEX, mode); 231 232 return B_ERROR; 233} 234 235 236status_t 237BScreen::GetMode(uint32 workspace, display_mode* mode) 238{ 239 if (fScreen != NULL) 240 return fScreen->GetMode(workspace, mode); 241 242 return B_ERROR; 243} 244 245 246status_t 247BScreen::SetMode(display_mode* mode, bool makeDefault) 248{ 249 if (fScreen != NULL) 250 return fScreen->SetMode(B_CURRENT_WORKSPACE_INDEX, mode, makeDefault); 251 252 return B_ERROR; 253} 254 255 256status_t 257BScreen::SetMode(uint32 workspace, display_mode* mode, bool makeDefault) 258{ 259 if (fScreen != NULL) 260 return fScreen->SetMode(workspace, mode, makeDefault); 261 262 return B_ERROR; 263} 264 265 266status_t 267BScreen::GetDeviceInfo(accelerant_device_info* info) 268{ 269 if (fScreen != NULL) 270 return fScreen->GetDeviceInfo(info); 271 272 return B_ERROR; 273} 274 275 276status_t 277BScreen::GetMonitorInfo(monitor_info* info) 278{ 279 if (fScreen != NULL) 280 return fScreen->GetMonitorInfo(info); 281 282 return B_ERROR; 283} 284 285 286status_t 287BScreen::GetPixelClockLimits(display_mode* mode, uint32* _low, uint32* _high) 288{ 289 if (fScreen != NULL) 290 return fScreen->GetPixelClockLimits(mode, _low, _high); 291 292 return B_ERROR; 293} 294 295 296status_t 297BScreen::GetTimingConstraints(display_timing_constraints* constraints) 298{ 299 if (fScreen != NULL) 300 return fScreen->GetTimingConstraints(constraints); 301 302 return B_ERROR; 303} 304 305 306status_t 307BScreen::SetDPMS(uint32 dpmsState) 308{ 309 if (fScreen != NULL) 310 return fScreen->SetDPMS(dpmsState); 311 312 return B_ERROR; 313} 314 315 316uint32 317BScreen::DPMSState() 318{ 319 if (fScreen != NULL) 320 return fScreen->DPMSState(); 321 322 return 0; 323} 324 325 326uint32 327BScreen::DPMSCapabilites() 328{ 329 if (fScreen != NULL) 330 return fScreen->DPMSCapabilites(); 331 332 return 0; 333} 334 335 336status_t 337BScreen::GetBrightness(float* brightness) 338{ 339 if (fScreen != NULL) 340 return fScreen->GetBrightness(brightness); 341 return B_ERROR; 342} 343 344 345status_t 346BScreen::SetBrightness(float brightness) 347{ 348 if (fScreen != NULL) 349 return fScreen->SetBrightness(brightness); 350 return B_ERROR; 351} 352 353 354// #pragma mark - Deprecated methods 355 356 357BPrivate::BPrivateScreen* 358BScreen::private_screen() 359{ 360 return fScreen; 361} 362 363 364status_t 365BScreen::ProposeDisplayMode(display_mode* target, const display_mode* low, 366 const display_mode* high) 367{ 368 return ProposeMode(target, low, high); 369} 370 371 372void* 373BScreen::BaseAddress() 374{ 375 if (fScreen != NULL) 376 return fScreen->BaseAddress(); 377 378 return NULL; 379} 380 381 382uint32 383BScreen::BytesPerRow() 384{ 385 if (fScreen != NULL) 386 return fScreen->BytesPerRow(); 387 388 return 0; 389} 390