diff --git a/src/servers/app/drawing/AccelerantHWInterface.cpp b/src/servers/app/drawing/AccelerantHWInterface.cpp index 0e9ec5022f..e69b928293 100644 --- a/src/servers/app/drawing/AccelerantHWInterface.cpp +++ b/src/servers/app/drawing/AccelerantHWInterface.cpp @@ -365,7 +365,8 @@ AccelerantHWInterface::SetMode(const display_mode &mode) void AccelerantHWInterface::GetMode(display_mode *mode) { - *mode = fDisplayMode; + if (mode) + *mode = fDisplayMode; } status_t diff --git a/src/servers/app/drawing/DisplayDriver.cpp b/src/servers/app/drawing/DisplayDriver.cpp index 9dd83572ac..b64c250e1c 100644 --- a/src/servers/app/drawing/DisplayDriver.cpp +++ b/src/servers/app/drawing/DisplayDriver.cpp @@ -39,6 +39,9 @@ */ DisplayDriver::DisplayDriver() { + fDisplayMode.virtual_width = 640; + fDisplayMode.virtual_height = 480; + fDisplayMode.space = B_RGBA32; } /*! @@ -76,4 +79,32 @@ DisplayDriver::Shutdown() { } +/* + \brief Sets the screen mode to specified resolution and color depth. + \param mode Data structure as defined in Screen.h + + Subclasses must include calls to _SetDepth, _SetHeight, _SetWidth, and _SetMode + to update the state variables kept internally by the DisplayDriver class. +*/ +void +DisplayDriver::SetMode(const display_mode &mode) +{ + if (Lock()) { + fDisplayMode = mode; + Unlock(); + } +} + +// GetMode +void +DisplayDriver::GetMode(display_mode *mode) +{ + if (!mode) + return; + + if (Lock()) { + *mode = fDisplayMode; + Unlock(); + } +} diff --git a/src/servers/app/drawing/DisplayDriverImpl.cpp b/src/servers/app/drawing/DisplayDriverImpl.cpp index f1c8b1cb32..23d334b6d1 100644 --- a/src/servers/app/drawing/DisplayDriverImpl.cpp +++ b/src/servers/app/drawing/DisplayDriverImpl.cpp @@ -56,9 +56,6 @@ DisplayDriverImpl::DisplayDriverImpl() fDPMSState(B_DPMS_ON), fDPMSCaps(B_DPMS_ON) { - fDisplayMode.virtual_width = 640; - fDisplayMode.virtual_height = 480; - fDisplayMode.space = B_RGBA32; } @@ -2427,41 +2424,6 @@ DisplayDriverImpl::Unlock() } // Protected Internal Functions -/* - \brief Sets the screen mode to specified resolution and color depth. - \param mode Data structure as defined in Screen.h - - Subclasses must include calls to _SetDepth, _SetHeight, _SetWidth, and _SetMode - to update the state variables kept internally by the DisplayDriver class. -*/ -void -DisplayDriverImpl::SetMode(const display_mode &mode) -{ - fDisplayMode = mode; -} - -// GetMode -void -DisplayDriverImpl::GetMode(display_mode *mode) -{ - if (!mode) - return; - - Lock(); - *mode = fDisplayMode; - Unlock(); -} - -// DisplayMode -const display_mode* -DisplayDriverImpl::DisplayMode() -{ - const display_mode* mode = NULL; - Lock(); - mode = &fDisplayMode; - Unlock(); - return mode; -} /*! \brief Sets the driver's Display Power Management System state diff --git a/src/servers/app/drawing/DisplayDriverImpl.h b/src/servers/app/drawing/DisplayDriverImpl.h index 07bb0c9ef4..cba036d030 100644 --- a/src/servers/app/drawing/DisplayDriverImpl.h +++ b/src/servers/app/drawing/DisplayDriverImpl.h @@ -297,11 +297,6 @@ class DisplayDriverImpl : public DisplayDriver { virtual bool Lock(bigtime_t timeout = B_INFINITE_TIMEOUT); virtual void Unlock(); - // display mode access - virtual void SetMode(const display_mode &mode); - virtual void GetMode(display_mode *mode); - virtual const display_mode* DisplayMode(); - virtual bool DumpToFile(const char *path); virtual ServerBitmap* DumpToBitmap(); @@ -431,7 +426,6 @@ friend class WinBorder; BLocker fLocker; CursorHandler fCursorHandler; - display_mode fDisplayMode; uint32 fDPMSState; uint32 fDPMSCaps; }; diff --git a/src/servers/app/drawing/DisplayDriverPainter.cpp b/src/servers/app/drawing/DisplayDriverPainter.cpp index f2108af3eb..20edec7bdb 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.cpp +++ b/src/servers/app/drawing/DisplayDriverPainter.cpp @@ -871,6 +871,7 @@ DisplayDriverPainter::SetMode(const display_mode &mode) { if (Lock() && fGraphicsCard->SetMode(mode) >= B_OK) { fPainter->AttachToBuffer(fGraphicsCard->BackBuffer()); + DisplayDriver::SetMode(mode); Unlock(); } else { fprintf(stderr, "DisplayDriverPainter::SetMode() - unsupported mode!\n"); diff --git a/src/servers/app/drawing/DisplayDriverPainter.h b/src/servers/app/drawing/DisplayDriverPainter.h index 06a867df44..d9d7f5917e 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.h +++ b/src/servers/app/drawing/DisplayDriverPainter.h @@ -234,7 +234,7 @@ class DisplayDriverPainter : public DisplayDriver { // display mode access virtual void SetMode(const display_mode &mode); - + virtual bool DumpToFile(const char *path); virtual ServerBitmap* DumpToBitmap(); diff --git a/src/servers/app/drawing/HWInterface.h b/src/servers/app/drawing/HWInterface.h index d97397a1ff..e67b479fd1 100644 --- a/src/servers/app/drawing/HWInterface.h +++ b/src/servers/app/drawing/HWInterface.h @@ -29,7 +29,7 @@ class HWInterface : public BLocker { // screen mode stuff virtual status_t SetMode(const display_mode &mode) = 0; -// virtual void GetMode(display_mode *mode) = 0; + virtual void GetMode(display_mode *mode) = 0; virtual status_t GetDeviceInfo(accelerant_device_info *info) = 0; virtual status_t GetModeList(display_mode **mode_list, diff --git a/src/servers/app/drawing/Painter/Painter.cpp b/src/servers/app/drawing/Painter/Painter.cpp index 99a3259a36..1913a7ff3a 100644 --- a/src/servers/app/drawing/Painter/Painter.cpp +++ b/src/servers/app/drawing/Painter/Painter.cpp @@ -277,7 +277,7 @@ Painter::SetFont(const ServerFont& font) fFont.SetRotation(font.Rotation()); fFont.SetSize(font.Size()); - _UpdateFont(); + _UpdateFont(font.GetPath()); } // #pragma mark - @@ -1032,17 +1032,21 @@ Painter::_RebuildClipping() // _UpdateFont void -Painter::_UpdateFont() +Painter::_UpdateFont(const char* pathToFontFile) { - font_family family; - font_style style; - fFont.GetFamilyAndStyle(&family, &style); - - bool success = fTextRenderer->SetFamilyAndStyle(family, style); - if (!success) { - fprintf(stderr, "unable to set '%s' + '%s'\n", family, style); - fprintf(stderr, "font is still: '%s' + '%s'\n", - fTextRenderer->Family(), fTextRenderer->Style()); + if (pathToFontFile) { + fTextRenderer->SetFont(pathToFontFile); + } else { + font_family family; + font_style style; + fFont.GetFamilyAndStyle(&family, &style); + + bool success = fTextRenderer->SetFamilyAndStyle(family, style); + if (!success) { + fprintf(stderr, "unable to set '%s' + '%s'\n", family, style); + fprintf(stderr, "font is still: '%s' + '%s'\n", + fTextRenderer->Family(), fTextRenderer->Style()); + } } fTextRenderer->SetPointSize(fFont.Size()); diff --git a/src/servers/app/drawing/ViewDriver.cpp b/src/servers/app/drawing/ViewDriver.cpp index b929fd9104..6f11dfc6eb 100644 --- a/src/servers/app/drawing/ViewDriver.cpp +++ b/src/servers/app/drawing/ViewDriver.cpp @@ -316,6 +316,10 @@ void ViewDriver::SetMode(const display_mode &mode) return; } + fDisplayMode.virtual_width = mode.virtual_width; + fDisplayMode.virtual_height = mode.virtual_height; + fDisplayMode.space = mode.space; + screenwin->Lock(); BBitmap *tempbmp=new BBitmap(BRect(0,0,mode.virtual_width-1, mode.virtual_height-1), diff --git a/src/servers/app/drawing/ViewHWInterface.cpp b/src/servers/app/drawing/ViewHWInterface.cpp index f04578173d..27d5c297de 100644 --- a/src/servers/app/drawing/ViewHWInterface.cpp +++ b/src/servers/app/drawing/ViewHWInterface.cpp @@ -448,6 +448,14 @@ ViewHWInterface::SetMode(const display_mode &mode) return ret; } +// GetMode +void +ViewHWInterface::GetMode(display_mode* mode) +{ + if (mode) + *mode = fDisplayMode; +} + // GetDeviceInfo status_t ViewHWInterface::GetDeviceInfo(accelerant_device_info *info) diff --git a/src/servers/app/drawing/ViewHWInterface.h b/src/servers/app/drawing/ViewHWInterface.h index 6905ba1d81..deb5a49afa 100644 --- a/src/servers/app/drawing/ViewHWInterface.h +++ b/src/servers/app/drawing/ViewHWInterface.h @@ -29,7 +29,7 @@ class ViewHWInterface : public HWInterface { virtual status_t Shutdown(); virtual status_t SetMode(const display_mode &mode); -// virtual void GetMode(display_mode *mode); + virtual void GetMode(display_mode *mode); virtual status_t GetDeviceInfo(accelerant_device_info *info);