hrev47689 adds 3 changesets to branch 'master' old head: 36f126fd5a352cb25f196d1cbb428374954321a7 new head: 613468813b53f9dbc0d8b7b41276f517789f07ee overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=6134688+%5E36f126f ---------------------------------------------------------------------------- 1333f5f: Fix GL screensavers in non-direct mode. DirectDraw is called only in direct drawing mode (BDirectWindow). Our GL kit also works fine (but slower) in indirect mode (standard BWindow, GL stuff rendered offscreen then blitted). However, for this to work we need the screensavers to actually do something. Use the BScreenSaver::Draw method, which is called in either case. This makes it possible to use indirect mode for the preview of GL screensavers. The performance isn't really a problem on the very small preview (160x200 pixels). Fixes GLife and Gravity. Flurry still crashes Mesa. c8bd18f: Make ScreenSaver preferences work again. This reverts 0fb019bbf21e791ae1f7644652fea3697b3f3d9f. Making the window a BDirectWindow isn't a good idea, especially if you want things other than a direct rendering view in it. Moreover, this is completely unneeded as GL works just as well in non-direct mode. 6134688: Convert PreviewView to layout kit * Use a BGroupLayout with insets to make space for the monitor drawing * Don't put the "no preview available" inside the view passed to screensavers, this could confuse them * Have the actual preview area (not including borders) be 160x120 [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- 10 files changed, 40 insertions(+), 45 deletions(-) src/add-ons/screen_savers/flurry/Flurry.cpp | 2 +- src/add-ons/screen_savers/flurry/Flurry.h | 2 +- src/add-ons/screen_savers/glife/GLifeSaver.cpp | 2 +- src/add-ons/screen_savers/glife/GLifeSaver.h | 4 +- src/add-ons/screen_savers/gravity/Gravity.cpp | 2 +- src/add-ons/screen_savers/gravity/Gravity.h | 2 +- src/preferences/screensaver/PreviewView.cpp | 50 +++++++++++--------- src/preferences/screensaver/PreviewView.h | 4 +- .../screensaver/ScreenSaverWindow.cpp | 13 +---- src/preferences/screensaver/ScreenSaverWindow.h | 4 +- ############################################################################ Commit: 1333f5f77b3556974cac8ef2906ee03c3caf2875 URL: http://cgit.haiku-os.org/haiku/commit/?id=1333f5f Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Aug 14 09:37:07 2014 UTC Fix GL screensavers in non-direct mode. DirectDraw is called only in direct drawing mode (BDirectWindow). Our GL kit also works fine (but slower) in indirect mode (standard BWindow, GL stuff rendered offscreen then blitted). However, for this to work we need the screensavers to actually do something. Use the BScreenSaver::Draw method, which is called in either case. This makes it possible to use indirect mode for the preview of GL screensavers. The performance isn't really a problem on the very small preview (160x200 pixels). Fixes GLife and Gravity. Flurry still crashes Mesa. ---------------------------------------------------------------------------- diff --git a/src/add-ons/screen_savers/flurry/Flurry.cpp b/src/add-ons/screen_savers/flurry/Flurry.cpp index d0b78b7..befa124 100644 --- a/src/add-ons/screen_savers/flurry/Flurry.cpp +++ b/src/add-ons/screen_savers/flurry/Flurry.cpp @@ -360,7 +360,7 @@ Flurry::StopSaver() void -Flurry::DirectDraw(int32 frame) +Flurry::Draw(BView*, int32 frame) { fFlurryView->DrawFlurryScreenSaver(); } diff --git a/src/add-ons/screen_savers/flurry/Flurry.h b/src/add-ons/screen_savers/flurry/Flurry.h index 26c3512..6938840 100644 --- a/src/add-ons/screen_savers/flurry/Flurry.h +++ b/src/add-ons/screen_savers/flurry/Flurry.h @@ -54,7 +54,7 @@ public: virtual status_t StartSaver(BView* view, bool preview); virtual void StopSaver(); - virtual void DirectDraw(int32 frame); + virtual void Draw(BView*, int32 frame); virtual void DirectConnected(direct_buffer_info* info); virtual void StartConfig(BView* configView); diff --git a/src/add-ons/screen_savers/glife/GLifeSaver.cpp b/src/add-ons/screen_savers/glife/GLifeSaver.cpp index fdb0b7c..a243bb1 100644 --- a/src/add-ons/screen_savers/glife/GLifeSaver.cpp +++ b/src/add-ons/screen_savers/glife/GLifeSaver.cpp @@ -111,7 +111,7 @@ GLifeSaver::DirectConnected(direct_buffer_info* pdbiInfo) // ------------------------------------------------------ // GLifeSaver Class DirectDraw Definition void -GLifeSaver::DirectDraw(int32 iFrame) +GLifeSaver::Draw(BView*, int32 iFrame) { fGLifeViewport->Advance(); } diff --git a/src/add-ons/screen_savers/glife/GLifeSaver.h b/src/add-ons/screen_savers/glife/GLifeSaver.h index 5aad609..c5cf131 100644 --- a/src/add-ons/screen_savers/glife/GLifeSaver.h +++ b/src/add-ons/screen_savers/glife/GLifeSaver.h @@ -29,7 +29,7 @@ public: // Constructor GLifeSaver(BMessage*, image_id); - // State/Preferences Methods + // State/Preferences Methods status_t SaveState(BMessage*) const; void RestoreState(BMessage*); void StartConfig(BView*); @@ -40,7 +40,7 @@ public: // Graphics Methods void DirectConnected(direct_buffer_info*); - void DirectDraw(int32); + void Draw(BView*, int32); private: GLifeState fGLifeState; diff --git a/src/add-ons/screen_savers/gravity/Gravity.cpp b/src/add-ons/screen_savers/gravity/Gravity.cpp index b78aee6..9786dd3 100644 --- a/src/add-ons/screen_savers/gravity/Gravity.cpp +++ b/src/add-ons/screen_savers/gravity/Gravity.cpp @@ -90,7 +90,7 @@ Gravity::DirectConnected(direct_buffer_info* info) void -Gravity::DirectDraw(int32 frame) +Gravity::Draw(BView*, int32 frame) { fGravityView->DirectDraw(); } diff --git a/src/add-ons/screen_savers/gravity/Gravity.h b/src/add-ons/screen_savers/gravity/Gravity.h index b549aa6..80aa9a1 100644 --- a/src/add-ons/screen_savers/gravity/Gravity.h +++ b/src/add-ons/screen_savers/gravity/Gravity.h @@ -39,7 +39,7 @@ public: void StopSaver(); void DirectConnected(direct_buffer_info* info); - void DirectDraw(int32 frame); + void Draw(BView*, int32 frame); private: GravityView* fGravityView; ############################################################################ Commit: c8bd18f21fd3113231ea30fb77afc53c68db738f URL: http://cgit.haiku-os.org/haiku/commit/?id=c8bd18f Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Aug 14 09:41:21 2014 UTC Make ScreenSaver preferences work again. This reverts 0fb019bbf21e791ae1f7644652fea3697b3f3d9f. Making the window a BDirectWindow isn't a good idea, especially if you want things other than a direct rendering view in it. Moreover, this is completely unneeded as GL works just as well in non-direct mode. ---------------------------------------------------------------------------- diff --git a/src/preferences/screensaver/ScreenSaverWindow.cpp b/src/preferences/screensaver/ScreenSaverWindow.cpp index df5d84c..7714f17 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.cpp +++ b/src/preferences/screensaver/ScreenSaverWindow.cpp @@ -887,7 +887,7 @@ TabView::MouseDown(BPoint where) ScreenSaverWindow::ScreenSaverWindow() : - BDirectWindow(BRect(50, 50, 496, 375), + BWindow(BRect(50, 50, 496, 375), B_TRANSLATE_SYSTEM_NAME("ScreenSaver"), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS) { @@ -959,15 +959,6 @@ ScreenSaverWindow::~ScreenSaverWindow() void -ScreenSaverWindow::DirectConnected(direct_buffer_info* info) -{ - BScreenSaver* saver = fModulesView->ScreenSaver(); - if (saver != NULL) - saver->DirectConnected(info); -} - - -void ScreenSaverWindow::MessageReceived(BMessage* message) { switch (message->what) { @@ -982,7 +973,7 @@ ScreenSaverWindow::MessageReceived(BMessage* message) break; default: - BDirectWindow::MessageReceived(message); + BWindow::MessageReceived(message); } } diff --git a/src/preferences/screensaver/ScreenSaverWindow.h b/src/preferences/screensaver/ScreenSaverWindow.h index b9ddf45..e1f8834 100644 --- a/src/preferences/screensaver/ScreenSaverWindow.h +++ b/src/preferences/screensaver/ScreenSaverWindow.h @@ -26,13 +26,11 @@ class ModulesView; class TabView; -class ScreenSaverWindow : public BDirectWindow { +class ScreenSaverWindow : public BWindow { public: ScreenSaverWindow(); virtual ~ScreenSaverWindow(); - virtual void DirectConnected(direct_buffer_info* info); - virtual void MessageReceived(BMessage* message); virtual void ScreenChanged(BRect frame, color_space space); virtual bool QuitRequested(); ############################################################################ Revision: hrev47689 Commit: 613468813b53f9dbc0d8b7b41276f517789f07ee URL: http://cgit.haiku-os.org/haiku/commit/?id=6134688 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Aug 14 09:54:06 2014 UTC Convert PreviewView to layout kit * Use a BGroupLayout with insets to make space for the monitor drawing * Don't put the "no preview available" inside the view passed to screensavers, this could confuse them * Have the actual preview area (not including borders) be 160x120 ---------------------------------------------------------------------------- diff --git a/src/preferences/screensaver/PreviewView.cpp b/src/preferences/screensaver/PreviewView.cpp index 3e6ad9b..246e0b7 100644 --- a/src/preferences/screensaver/PreviewView.cpp +++ b/src/preferences/screensaver/PreviewView.cpp @@ -13,9 +13,11 @@ #include <iostream> #include <Catalog.h> +#include <GroupLayout.h> #include <Point.h> #include <Rect.h> #include <Size.h> +#include <StringView.h> #include <TextView.h> #include "Utility.h" @@ -53,18 +55,16 @@ scale2(int x1, int x2, int y1, int y2, BRect area) PreviewView::PreviewView(const char* name) : - BView(name, B_WILL_DRAW), + BView(name, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), fSaverView(NULL), fNoPreview(NULL) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - float aspectRatio = 4.0f / 3.0f; - // 4:3 monitor - float previewWidth = 160.0f; - float previewHeight = ceilf(previewWidth / aspectRatio); - - SetExplicitSize(BSize(previewWidth, previewHeight)); + BGroupLayout* layout = new BGroupLayout(B_VERTICAL); + // We draw the "monitor" around the preview, hence the strange insets. + layout->SetInsets(10, 8, 11, 16); + SetLayout(layout); } @@ -107,28 +107,32 @@ PreviewView::Draw(BRect updateRect) BView* PreviewView::AddPreview() { - BRect rect(scale2(1, 8, 1, 2, Bounds()).InsetBySelf(1.0f, 1.0f)); - fSaverView = new BView(rect, "preview", B_FOLLOW_NONE, B_WILL_DRAW); + fSaverView = new BView("preview", B_WILL_DRAW); fSaverView->SetViewColor(0, 0, 0); fSaverView->SetLowColor(0, 0, 0); AddChild(fSaverView); - BRect textRect(rect); - textRect.OffsetTo(-7.0f, 0.0f); - textRect.InsetBy(15.0f, 20.0f); - fNoPreview = new BTextView(rect, "no preview", textRect, B_FOLLOW_NONE, - B_WILL_DRAW); + float aspectRatio = 4.0f / 3.0f; + // 4:3 monitor + float previewWidth = 160.0f; + float previewHeight = ceilf(previewWidth / aspectRatio); + + fSaverView->SetExplicitSize(BSize(previewWidth, previewHeight)); + fSaverView->ResizeTo(previewWidth, previewHeight); + + fNoPreview = new BStringView("no preview", + B_TRANSLATE("No preview available")); + + fNoPreview->Hide(); + fNoPreview->SetExplicitSize(BSize(previewWidth, previewHeight)); + fNoPreview->ResizeTo(previewWidth, previewHeight); + + AddChild(fNoPreview); + fNoPreview->SetViewColor(0, 0, 0); fNoPreview->SetLowColor(0, 0, 0); - fNoPreview->SetFontAndColor(be_plain_font, B_FONT_ALL, &kWhite); - fNoPreview->SetText(B_TRANSLATE("No preview available")); + fNoPreview->SetHighColor(255, 255, 255); fNoPreview->SetAlignment(B_ALIGN_CENTER); - fNoPreview->MakeEditable(false); - fNoPreview->MakeResizable(false); - fNoPreview->MakeSelectable(false); - - fNoPreview->Hide(); - fSaverView->AddChild(fNoPreview); return fSaverView; } @@ -156,6 +160,7 @@ PreviewView::SaverView() void PreviewView::ShowNoPreview() const { + fSaverView->Hide(); fNoPreview->Show(); } @@ -164,4 +169,5 @@ void PreviewView::HideNoPreview() const { fNoPreview->Hide(); + fSaverView->Show(); } diff --git a/src/preferences/screensaver/PreviewView.h b/src/preferences/screensaver/PreviewView.h index f062f9c..5e1bff2 100644 --- a/src/preferences/screensaver/PreviewView.h +++ b/src/preferences/screensaver/PreviewView.h @@ -13,7 +13,7 @@ #include <View.h> -class BTextView; +class BStringView; class PreviewView : public BView { public: @@ -31,7 +31,7 @@ public: private: BView* fSaverView; - BTextView* fNoPreview; + BStringView* fNoPreview; };