[haiku-commits] haiku: hrev47689 - in src: preferences/screensaver add-ons/screen_savers/glife add-ons/screen_savers/flurry add-ons/screen_savers/gravity

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 14 Aug 2014 11:56:09 +0200 (CEST)

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;
 };
 
 


Other related posts:

  • » [haiku-commits] haiku: hrev47689 - in src: preferences/screensaver add-ons/screen_savers/glife add-ons/screen_savers/flurry add-ons/screen_savers/gravity - pulkomandy