Files
haikuports/media-gfx/blender/patches/blender-2.47-haiku.diff

1658 lines
48 KiB
Diff

Index: intern/ghost/SConscript
===================================================================
--- intern/ghost/SConscript (revision 19951)
+++ intern/ghost/SConscript (working copy)
@@ -14,14 +14,22 @@
for f in pf:
sources.remove('intern' + os.sep + f + 'Win32.cpp')
sources.remove('intern' + os.sep + f + 'Carbon.cpp')
+ sources.remove('intern' + os.sep + f + 'Haiku.cpp')
elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross'):
for f in pf:
sources.remove('intern' + os.sep + f + 'X11.cpp')
sources.remove('intern' + os.sep + f + 'Carbon.cpp')
+ sources.remove('intern' + os.sep + f + 'Haiku.cpp')
elif window_system == 'darwin':
for f in pf:
sources.remove('intern' + os.sep + f + 'Win32.cpp')
sources.remove('intern' + os.sep + f + 'X11.cpp')
+ sources.remove('intern' + os.sep + f + 'Haiku.cpp')
+elif window_system == 'haiku1':
+ for f in pf:
+ sources.remove('intern' + os.sep + f + 'Win32.cpp')
+ sources.remove('intern' + os.sep + f + 'X11.cpp')
+ sources.remove('intern' + os.sep + f + 'Carbon.cpp')
else:
print "Unknown window system specified."
Exit()
Index: intern/ghost/intern/GHOST_ISystem.cpp
===================================================================
--- intern/ghost/intern/GHOST_ISystem.cpp (revision 19951)
+++ intern/ghost/intern/GHOST_ISystem.cpp (working copy)
@@ -42,12 +42,12 @@
#ifdef WIN32
# include "GHOST_SystemWin32.h"
+#elif __APPLE__
+# include "GHOST_SystemCarbon.h"
+#elif __HAIKU__
+# include "GHOST_SystemHaiku.h"
#else
-# ifdef __APPLE__
-# include "GHOST_SystemCarbon.h"
-# else
-# include "GHOST_SystemX11.h"
-# endif
+# include "GHOST_SystemX11.h"
#endif
@@ -60,13 +60,13 @@
if (!m_system) {
#ifdef WIN32
m_system = new GHOST_SystemWin32 ();
+#elif __APPLE__
+ m_system = new GHOST_SystemCarbon ();
+#elif __HAIKU__
+ m_system = new GHOST_SystemHaiku ();
#else
-# ifdef __APPLE__
- m_system = new GHOST_SystemCarbon ();
-# else
m_system = new GHOST_SystemX11 ();
-# endif
-#endif
+#endif
success = m_system != 0 ? GHOST_kSuccess : GHOST_kFailure;
}
else {
Index: intern/ghost/intern/GHOST_SystemHaiku.cpp
===================================================================
--- intern/ghost/intern/GHOST_SystemHaiku.cpp (revision 0)
+++ intern/ghost/intern/GHOST_SystemHaiku.cpp (revision 0)
@@ -0,0 +1,114 @@
+#include "GHOST_Debug.h"
+#include "GHOST_SystemHaiku.h"
+#include "GHOST_WindowHaiku.h"
+#include "GHOST_WindowManager.h"
+
+#include <stdio.h>
+
+GHOST_SystemHaiku::GHOST_SystemHaiku()
+ : fDisplayManager(NULL),
+ fApplication(NULL)
+{
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::init()
+{
+ GHOST_PRINT("GHOST_SystemHaiku::init()\n");
+
+ if (GHOST_kSuccess != GHOST_System::init()) {
+ printf("GHOST_SystemHaiku::init() : GHOST_System::init() failed!\n");;
+ return GHOST_kFailure;
+ }
+
+ fApplication = new BApplication("application/x-vnd.GHOST-BApplication");
+ fDisplayManager = new GHOST_DisplayManagerHaiku();
+
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::exit()
+{
+ GHOST_PRINT("GHOST_SystemHaiku::exit()\n");
+ fApplication->Quit();
+ return GHOST_System::exit();
+}
+
+GHOST_TUns8
+GHOST_SystemHaiku::getNumDisplays() const
+{
+ GHOST_TUns8 numDisplays;
+ fDisplayManager->getNumDisplays(numDisplays);
+ return numDisplays;
+}
+
+void
+GHOST_SystemHaiku::getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const
+{
+ //GHOST_PRINT("GHOST_SystemHaiku::getMainDisplayDimensions()\n");
+ GHOST_DisplaySetting setting;
+ fDisplayManager->getDisplaySetting((GHOST_TUns8)0, (GHOST_TInt32)0, setting);
+ width = setting.xPixels;
+ height = setting.yPixels;
+}
+
+GHOST_IWindow*
+GHOST_SystemHaiku::createWindow(
+ const STR_String& title,
+ GHOST_TInt32 left, GHOST_TInt32 top, GHOST_TUns32 width, GHOST_TUns32 height,
+ GHOST_TWindowState state, GHOST_TDrawingContextType type,
+ const bool stereoVisual)
+{
+ GHOST_WindowHaiku* window = new GHOST_WindowHaiku(
+ this, title, left, top, width, height, state, type, stereoVisual);
+
+ m_windowManager->addWindow(window);
+
+ return window;
+}
+
+bool
+GHOST_SystemHaiku::processEvents(bool waitForEvent)
+{
+ // TODO
+ //GHOST_PRINT("TODO GHOST_SystemHaiku::processEvents()");
+ return true;
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const
+{
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y) const
+{
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::getModifierKeys(GHOST_ModifierKeys& keys) const
+{
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_SystemHaiku::getButtons(GHOST_Buttons& buttons) const
+{
+ return GHOST_kFailure;
+}
+
+GHOST_TUns8*
+GHOST_SystemHaiku::getClipboard(int flag) const
+{
+ // TODO
+ return NULL;
+}
+
+void
+GHOST_SystemHaiku::putClipboard(GHOST_TInt8 *buffer, int flag) const
+{
+ // TODO
+}
Index: intern/ghost/intern/GHOST_NDOFManager.cpp
===================================================================
--- intern/ghost/intern/GHOST_NDOFManager.cpp (revision 19951)
+++ intern/ghost/intern/GHOST_NDOFManager.cpp (working copy)
@@ -28,7 +28,7 @@
// the variable is outside the class because it must be accessed from plugin
static volatile GHOST_TEventNDOFData currentNdofValues = {0,0,0,0,0,0,0,0,0,0,0};
-#if !defined(_WIN32) && !defined(__APPLE__)
+#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__HAIKU__)
#include "GHOST_SystemX11.h"
#endif
@@ -76,7 +76,7 @@
#if 0
printf("%i client \n", Pid);
#endif
- #if defined(_WIN32) || defined(__APPLE__)
+ #if defined(_WIN32) || defined(__APPLE__) || defined(__HAIKU__)
m_DeviceHandle = ndofDeviceOpen((void *)&currentNdofValues);
#else
GHOST_SystemX11 *sys;
Index: intern/ghost/intern/GHOST_DisplayManagerHaiku.cpp
===================================================================
--- intern/ghost/intern/GHOST_DisplayManagerHaiku.cpp (revision 0)
+++ intern/ghost/intern/GHOST_DisplayManagerHaiku.cpp (revision 0)
@@ -0,0 +1,104 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "GHOST_Debug.h"
+#include "GHOST_DisplayManagerHaiku.h"
+
+#include <Screen.h>
+
+GHOST_DisplayManagerHaiku::GHOST_DisplayManagerHaiku(void) {
+}
+
+GHOST_DisplayManagerHaiku::~GHOST_DisplayManagerHaiku(void) {
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::initialize(void) {
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::getNumDisplays(GHOST_TUns8& numDisplays) const {
+ /* For now, we only support one screen. */
+ numDisplays = 1;
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32& numSettings) const {
+ GHOST_ASSERT(display < 1, "GHOST_DisplayManagerHaiku::getNumDisplaySettings() : Single display support only!\n");
+ numSettings = GHOST_TInt32( 1 );
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting& setting) const {
+ GHOST_ASSERT(display < 1, "GHOST_DisplayManagerHaiku::getDisplaySetting() : Single display support only!\n");
+ GHOST_ASSERT(index < 1, "GHOST_DisplayManagerHaiku::getDisplaySetting() : Single display setting support only!\n");
+
+ BScreen screen;
+ if (!screen.IsValid())
+ return GHOST_kFailure;
+
+ color_space cspace;
+ cspace = screen.ColorSpace();
+
+ switch (cspace)
+ {
+ case B_CMAP8 :
+ {
+ setting.bpp = 8;
+ break;
+ }
+ case B_RGB15 :
+ case B_RGBA15 :
+ {
+ setting.bpp = 15;
+ break;
+ }
+ case B_RGB16 :
+ {
+ setting.bpp = 16;
+ break;
+ }
+ case B_RGB32 :
+ case B_RGBA32 :
+ {
+ setting.bpp = 32;
+ break;
+ }
+ default :
+ {
+ setting.bpp = 16;
+ }
+ }
+
+ display_mode mode;
+ screen.GetMode(&mode);
+
+ float total_size = mode.timing.h_total * mode.timing.v_total;
+ float refresh_rate = floor((((float)mode.timing.pixel_clock * 1000.0) / ((float)total_size)));
+
+ setting.xPixels = mode.timing.h_display;
+ setting.yPixels = mode.timing.v_display;
+ setting.frequency = (GHOST_TUns32)refresh_rate;
+
+#ifdef GHOST_DEBUG
+ printf("GHOST_DisplayManagerHaiku::getDisplaySetting() : %ldx%ldx%d refresh_rate:%luHz\n",
+ setting.xPixels, setting.yPixels, setting.bpp, setting.frequency);
+#endif
+
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting& setting) const {
+ return getDisplaySetting(display, (GHOST_TInt32)0, setting);
+}
+
+GHOST_TSuccess
+GHOST_DisplayManagerHaiku::setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting) {
+ GHOST_PRINT("TODO GHOST_DisplayManagerHaiku::setCurrentDisplaySetting() : TODO\n");
+ return GHOST_kFailure;
+}
Index: intern/ghost/intern/GHOST_WindowHaiku.h
===================================================================
--- intern/ghost/intern/GHOST_WindowHaiku.h (revision 0)
+++ intern/ghost/intern/GHOST_WindowHaiku.h (revision 0)
@@ -0,0 +1,216 @@
+#ifndef _GHOST_WINDOW_HAIKU_H_
+#define _GHOST_WINDOW_HAIKU_H_
+
+#include "GHOST_System.h"
+#include "GHOST_Window.h"
+
+#include <GLView.h>
+
+class GHOSTBWindow;
+
+class GHOST_WindowHaiku : public GHOST_Window
+{
+public:
+ /**
+ * Constructor.
+ * Creates a new window and opens it.
+ * To check if the window was created properly, use the getValid() method.
+ * @param title The text shown in the title bar of the window.
+ * @param left The coordinate of the left edge of the window.
+ * @param top The coordinate of the top edge of the window.
+ * @param width The width the window.
+ * @param heigh The height the window.
+ * @param state The state the window is initially opened with.
+ * @param type The type of drawing context installed in this window.
+ * @param stereoVisual Stereo visual for quad buffered stereo.
+ */
+ GHOST_WindowHaiku(
+ GHOST_System* system,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
+ const bool stereoVisual = false);
+
+ /**
+ * Returns indication as to whether the window is valid.
+ * @return The validity of the window.
+ */
+ virtual bool getValid() const;
+
+ /**
+ * Sets the title displayed in the title bar.
+ * @param title The title to display in the title bar.
+ */
+ virtual void setTitle(const STR_String& title);
+
+ /**
+ * Returns the title displayed in the title bar.
+ * @param title The title displayed in the title bar.
+ */
+ virtual void getTitle(STR_String& title) const;
+
+ /**
+ * Returns the window rectangle dimensions.
+ * These are screen coordinates.
+ * @param bounds The bounding rectangle of the window.
+ */
+ virtual void getWindowBounds(GHOST_Rect& bounds) const;
+
+ /**
+ * Returns the client rectangle dimensions.
+ * The left and top members of the rectangle are always zero.
+ * @param bounds The bounding rectangle of the client area of the window.
+ */
+ virtual void getClientBounds(GHOST_Rect& bounds) const;
+
+ /**
+ * Resizes client rectangle width.
+ * @param width The new width of the client area of the window.
+ */
+ virtual GHOST_TSuccess setClientWidth(GHOST_TUns32 width);
+
+ /**
+ * Resizes client rectangle height.
+ * @param height The new height of the client area of the window.
+ */
+ virtual GHOST_TSuccess setClientHeight(GHOST_TUns32 height);
+
+ /**
+ * Resizes client rectangle.
+ * @param width The new width of the client area of the window.
+ * @param height The new height of the client area of the window.
+ */
+ virtual GHOST_TSuccess setClientSize(GHOST_TUns32 width, GHOST_TUns32 height);
+
+ /**
+ * Converts a point in screen coordinates to client rectangle coordinates
+ * @param inX The x-coordinate on the screen.
+ * @param inY The y-coordinate on the screen.
+ * @param outX The x-coordinate in the client rectangle.
+ * @param outY The y-coordinate in the client rectangle.
+ */
+ virtual void screenToClient(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
+
+ /**
+ * Converts a point in screen coordinates to client rectangle coordinates
+ * @param inX The x-coordinate in the client rectangle.
+ * @param inY The y-coordinate in the client rectangle.
+ * @param outX The x-coordinate on the screen.
+ * @param outY The y-coordinate on the screen.
+ */
+ virtual void clientToScreen(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const;
+
+ /**
+ * Returns the state of the window (normal, minimized, maximized).
+ * @return The state of the window.
+ */
+ virtual GHOST_TWindowState getState() const;
+
+ /**
+ * Sets the state of the window (normal, minimized, maximized).
+ * @param state The state of the window.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess setState(GHOST_TWindowState state);
+
+ /**
+ * Sets the order of the window (bottom, top).
+ * @param order The order of the window.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess setOrder(GHOST_TWindowOrder order);
+
+ /**
+ * Swaps front and back buffers of a window.
+ * @return A boolean success indicator.
+ */
+ virtual GHOST_TSuccess swapBuffers();
+
+ /**
+ * Activates the drawing context of this window.
+ * @return A boolean success indicator.
+ */
+ virtual GHOST_TSuccess activateDrawingContext();
+
+ /**
+ * Invalidates the contents of this window.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess invalidate();
+
+ /**
+ * Returns the tablet data (pressure etc).
+ * @return The tablet data (pressure etc).
+ */
+ virtual const GHOST_TabletData* GetTabletData();
+
+ /**
+ * Tries to install a rendering context in this window.
+ * @param type The type of rendering context installed.
+ * @return Indication as to whether installation has succeeded.
+ */
+ virtual GHOST_TSuccess installDrawingContext(GHOST_TDrawingContextType type);
+
+ /**
+ * Removes the current drawing context.
+ * @return Indication as to whether removal has succeeded.
+ */
+ virtual GHOST_TSuccess removeDrawingContext();
+
+ /**
+ * Sets the cursor visibility on the window using
+ * native window system calls.
+ */
+ virtual GHOST_TSuccess setWindowCursorVisibility(bool visible);
+
+ /**
+ * Sets the cursor shape on the window using
+ * native window system calls.
+ */
+ virtual GHOST_TSuccess setWindowCursorShape(GHOST_TStandardCursor shape);
+
+ /**
+ * Sets the cursor shape on the window using
+ * native window system calls.
+ */
+ virtual GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 bitmap[16][2], GHOST_TUns8 mask[16][2],
+ int hotX, int hotY);
+
+ virtual GHOST_TSuccess setWindowCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask,
+ int szx, int szy, int hotX, int hotY, int fg, int bg);
+
+private:
+ GHOSTBWindow* fWindow;
+};
+
+#include <Window.h>
+
+class GHOSTBWindow : public BWindow
+{
+public:
+ GHOSTBWindow(GHOST_System* system, GHOST_Window* window,
+ BRect frame, const char* title,
+ window_look look, window_feel feel, uint32 flags,
+ uint32 workspace = B_CURRENT_WORKSPACE);
+
+ virtual void DispatchMessage(BMessage* msg, BHandler* target);
+
+ void InstantiateContext();
+
+ BGLView* View() { return fView; };
+
+private:
+ GHOST_System* fGSystem;
+
+ GHOST_Window* fGWindow;
+
+ BGLView* fView;
+
+ int32 fLastMouseButton;
+};
+
+#endif // _GHOST_WINDOW_HAIKU_H_
Index: intern/ghost/intern/GHOST_SystemHaiku.h
===================================================================
--- intern/ghost/intern/GHOST_SystemHaiku.h (revision 0)
+++ intern/ghost/intern/GHOST_SystemHaiku.h (revision 0)
@@ -0,0 +1,139 @@
+#ifndef _GHOST_SYSTEM_HAIKU_H_
+#define _GHOST_SYSTEM_HAIKU_H_
+
+#include "GHOST_System.h"
+#include "../GHOST_Types.h"
+#include "GHOST_DisplayManagerHaiku.h"
+
+#include <Application.h>
+
+/**
+ * Haiku GHOST_System implementation
+ * @author Michael Weirauch
+ * @date 2008-10-04
+ * @see GHOST_System
+ */
+class GHOST_SystemHaiku : public GHOST_System
+{
+public:
+ GHOST_SystemHaiku();
+
+ /**
+ * Initialize the system.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess init();
+
+ /**
+ * Shut the system down.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess exit();
+
+ /***************************************************************************************
+ ** Display/window management functionality
+ ***************************************************************************************/
+
+ /**
+ * Returns the number of displays on this system.
+ * @return The number of displays.
+ */
+ virtual GHOST_TUns8 getNumDisplays() const;
+
+ /**
+ * Returns the dimensions of the main display on this system.
+ * @return The dimension of the main display.
+ */
+ virtual void getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const;
+
+ /**
+ * Create a new window.
+ * The new window is added to the list of windows managed.
+ * Never explicitly delete the window, use disposeWindow() instead.
+ * @param title The name of the window (displayed in the title bar of the window if the OS supports it).
+ * @param left The coordinate of the left edge of the window.
+ * @param top The coordinate of the top edge of the window.
+ * @param width The width the window.
+ * @param height The height the window.
+ * @param state The state of the window when opened.
+ * @param type The type of drawing context installed in this window.
+ * @param stereoVisual Create a stereo visual for quad buffered stereo.
+ * @return The new window (or 0 if creation failed).
+ */
+ virtual GHOST_IWindow* createWindow(
+ const STR_String& title,
+ GHOST_TInt32 left, GHOST_TInt32 top, GHOST_TUns32 width, GHOST_TUns32 height,
+ GHOST_TWindowState state, GHOST_TDrawingContextType type,
+ const bool stereoVisual);
+
+ /***************************************************************************************
+ ** Event management functionality
+ ***************************************************************************************/
+
+ /**
+ * Retrieves events from the system and stores them in the queue.
+ * @param waitForEvent Flag to wait for an event (or return immediately).
+ * @return Indication of the presence of events.
+ */
+ virtual bool processEvents(bool waitForEvent);
+
+ /***************************************************************************************
+ ** Cursor management functionality
+ ***************************************************************************************/
+
+ /**
+ * Returns the current location of the cursor (location in screen coordinates)
+ * @param x The x-coordinate of the cursor.
+ * @param y The y-coordinate of the cursor.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess getCursorPosition(GHOST_TInt32& x, GHOST_TInt32& y) const;
+
+ /**
+ * Updates the location of the cursor (location in screen coordinates).
+ * Not all operating systems allow the cursor to be moved (without the input device being moved).
+ * @param x The x-coordinate of the cursor.
+ * @param y The y-coordinate of the cursor.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y) const;
+
+ /***************************************************************************************
+ ** Other (internal) functionality.
+ ***************************************************************************************/
+
+ /**
+ * Returns the state of all modifier keys.
+ * @param keys The state of all modifier keys (true == pressed).
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys& keys) const;
+
+ /**
+ * Returns the state of the mouse buttons (ouside the message queue).
+ * @param buttons The state of the buttons.
+ * @return Indication of success.
+ */
+ virtual GHOST_TSuccess getButtons(GHOST_Buttons& buttons) const;
+
+ /**
+ * Returns the selection buffer
+ * @param flag Only used on X11
+ * @return Returns the clipboard data
+ */
+ virtual GHOST_TUns8* getClipboard(int flag) const;
+
+ /**
+ * Put data to the Clipboard
+ * @param buffer The buffer to copy to the clipboard
+ * @param flag The clipboard to copy too only used on X11
+ */
+ virtual void putClipboard(GHOST_TInt8 *buffer, int flag) const;
+
+private:
+ GHOST_DisplayManagerHaiku* fDisplayManager;
+
+ BApplication* fApplication;
+};
+
+#endif /* _GHOST_SYSTEM_HAIKU_H_ */
Index: intern/ghost/intern/GHOST_DisplayManagerHaiku.h
===================================================================
--- intern/ghost/intern/GHOST_DisplayManagerHaiku.h (revision 0)
+++ intern/ghost/intern/GHOST_DisplayManagerHaiku.h (revision 0)
@@ -0,0 +1,75 @@
+#ifndef _GHOST_DISPLAY_MANAGER_HAIKU_H_
+#define _GHOST_DISPLAY_MANAGER_HAIKU_H_
+
+#include "GHOST_DisplayManager.h"
+
+class GHOST_SystemHaiku;
+
+/**
+ * Haiku GHOST_DisplayManager implementation
+ * @author Michael Weirauch
+ * @date 2008-10-04
+ * @see GHOST_DisplayManager
+ */
+class GHOST_DisplayManagerHaiku : public GHOST_DisplayManager {
+public:
+ /**
+ * Constructor.
+ */
+ GHOST_DisplayManagerHaiku(void);
+
+ /**
+ * Destructor.
+ */
+ ~GHOST_DisplayManagerHaiku(void);
+
+ /**
+ * Initializes the list with devices and settings.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess initialize(void);
+
+ /**
+ * Returns the number of display devices on this system.
+ * @param numDisplays The number of displays on this system.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess getNumDisplays(GHOST_TUns8& numDisplays) const;
+
+ /**
+ * Returns the number of display settings for this display device.
+ * @param display The index of the display to query with 0 <= display < getNumDisplays().
+ * @param setting The number of settings of the display device with this index.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32& numSettings) const;
+
+ /**
+ * Returns the current setting for this display device.
+ * @param display The index of the display to query with 0 <= display < getNumDisplays().
+ * @param index The setting index to be returned.
+ * @param setting The setting of the display device with this index.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting& setting) const;
+
+ /**
+ * Returns the current setting for this display device.
+ * @param display The index of the display to query with 0 <= display < getNumDisplays().
+ * @param setting The current setting of the display device with this index.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting& setting) const;
+
+ /**
+ * Changes the current setting for this display device.
+ * The setting given to this method is matched againts the available diplay settings.
+ * The best match is activated (@see findMatch()).
+ * @param display The index of the display to query with 0 <= display < getNumDisplays().
+ * @param setting The setting of the display device to be matched and activated.
+ * @return Indication of success.
+ */
+ GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting);
+};
+
+#endif /* _GHOST_DISPLAY_MANAGER_HAIKU_H_ */
Index: intern/ghost/intern/GHOST_WindowHaiku.cpp
===================================================================
--- intern/ghost/intern/GHOST_WindowHaiku.cpp (revision 0)
+++ intern/ghost/intern/GHOST_WindowHaiku.cpp (revision 0)
@@ -0,0 +1,555 @@
+#include "GHOST_Debug.h"
+#include "GHOST_Event.h"
+#include "GHOST_EventButton.h"
+#include "GHOST_EventCursor.h"
+#include "GHOST_EventWheel.h"
+#include "GHOST_Window.h"
+#include "GHOST_WindowHaiku.h"
+
+#include <Application.h>
+
+GHOST_WindowHaiku::GHOST_WindowHaiku(
+ GHOST_System* system,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type,
+ const bool stereoVisual)
+ : GHOST_Window(title,left,top,width,height,state,type,stereoVisual),
+ fWindow(NULL)
+{
+#ifdef GHOST_DEBUG
+ printf("GHOST_WindowHaiku::GHOST_WindowHaiku(%s)\n", (const char*)title);
+#endif
+ BRect frame(left, top, left + width, top + height);
+ fWindow = new GHOSTBWindow(
+ system,
+ this,
+ frame,
+ title,
+ B_TITLED_WINDOW_LOOK,
+ B_NORMAL_WINDOW_FEEL, 0);
+ // TODO respect state input param!
+ fWindow->Show();
+}
+
+bool
+GHOST_WindowHaiku::getValid() const
+{
+ GHOST_PRINT("GHOST_WindowHaiku::getValid()\n");
+ return NULL != fWindow;
+}
+
+void
+GHOST_WindowHaiku::setTitle(const STR_String& title)
+{
+ fWindow->SetTitle(title);
+}
+
+void
+GHOST_WindowHaiku::getTitle(STR_String& title) const
+{
+ const char* wTitle = fWindow->Title();
+ if (!wTitle)
+ title = wTitle;
+}
+
+void
+GHOST_WindowHaiku::getWindowBounds(GHOST_Rect& bounds) const
+{
+ BRect windowBounds = fWindow->Frame();
+ bounds.set(
+ windowBounds.left,
+ windowBounds.top,
+ windowBounds.right,
+ windowBounds.bottom);
+}
+
+void
+GHOST_WindowHaiku::getClientBounds(GHOST_Rect& bounds) const
+{
+ BRect windowBounds = fWindow->Bounds();
+ bounds.set(
+ 0,
+ 0,
+ windowBounds.right,
+ windowBounds.bottom);
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setClientWidth(GHOST_TUns32 width)
+{
+ BRect bounds = fWindow->Bounds();
+ fWindow->ResizeTo(width, bounds.bottom);
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setClientHeight(GHOST_TUns32 height)
+{
+ BRect bounds = fWindow->Bounds();
+ fWindow->ResizeTo(bounds.right, height);
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setClientSize(GHOST_TUns32 width, GHOST_TUns32 height)
+{
+ fWindow->ResizeTo(width, height);
+ return GHOST_kSuccess;
+}
+
+void
+GHOST_WindowHaiku::screenToClient(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const
+{
+ //GHOST_PRINT("GHOST_WindowHaiku::screenToClient()\n");
+
+ /*
+ * The mouse coordinates fired in GHOSTBWindow are
+ * already in client coordinates.
+ */
+ outX = inX;
+ outY = inY;
+}
+
+void
+GHOST_WindowHaiku::clientToScreen(GHOST_TInt32 inX, GHOST_TInt32 inY, GHOST_TInt32& outX, GHOST_TInt32& outY) const
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::clientToScreen() : TODO\n");
+}
+
+GHOST_TWindowState
+GHOST_WindowHaiku::getState() const
+{
+ // TODO other states
+ if (fWindow->IsMinimized())
+ return GHOST_kWindowStateMinimized;
+ else
+ return GHOST_kWindowStateNormal;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setState(GHOST_TWindowState state)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::setState() : TODO\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setOrder(GHOST_TWindowOrder order)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::setOrder() : TODO\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::swapBuffers()
+{
+ if (m_drawingContextType == GHOST_kDrawingContextTypeOpenGL) {
+ GHOST_PRINT("GHOST_WindowHaiku::swapBuffers(Success)\n");
+ fWindow->View()->SwapBuffers();
+ return GHOST_kSuccess;
+ }
+ GHOST_PRINT("GHOST_WindowHaiku::swapBuffers(No openGL context)\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::activateDrawingContext()
+{
+ // TODO investigate
+ if (m_drawingContextType == GHOST_kDrawingContextTypeOpenGL) {
+ GHOST_PRINT("GHOST_WindowHaiku::activateDrawingContext(OK) : INVESTIGATE\n");
+ // seems both things are not needed. just SwapBuffers() seems ok.
+ //fWindow->View()->LockGL();
+ // FIXME aquire/makecurrent the context here?
+ //fWindow->InstantiateContext();
+ return GHOST_kSuccess;
+ }
+ GHOST_PRINT("GHOST_WindowHaiku::activateDrawingContext(Failure) : INVESTIGATE\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::invalidate()
+{
+ // TODO investigate
+ GHOST_PRINT("GHOST_WindowHaiku::invalidate()\n");
+ fWindow->UpdateIfNeeded();
+ return GHOST_kSuccess;
+}
+
+const GHOST_TabletData*
+GHOST_WindowHaiku::GetTabletData()
+{
+ // TODO
+ return NULL;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::installDrawingContext(GHOST_TDrawingContextType type)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::installDrawingContext() : TODO\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::removeDrawingContext()
+{
+ // TODO investigate
+ GHOST_PRINT("GHOST_WindowHaiku::removeDrawingContext() : TODO\n");
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setWindowCursorVisibility(bool visible)
+{
+ GHOST_PRINT("GHOST_WindowHaiku::setWindowCursorVisibility()\n");
+ if (visible)
+ be_app->ShowCursor();
+ else
+ be_app->HideCursor();
+
+ return GHOST_kSuccess;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setWindowCursorShape(GHOST_TStandardCursor shape)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::setWindowCursorShape() : TODO\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setWindowCustomCursorShape(GHOST_TUns8 bitmap[16][2], GHOST_TUns8 mask[16][2],
+ int hotX, int hotY)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::setWindowCustomCursorShape() : TODO\n");
+ return GHOST_kFailure;
+}
+
+GHOST_TSuccess
+GHOST_WindowHaiku::setWindowCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask,
+ int szx, int szy, int hotX, int hotY, int fg, int bg)
+{
+ // TODO
+ GHOST_PRINT("GHOST_WindowHaiku::setWindowCustomCursorShape() : TODO\n");
+ return GHOST_kFailure;
+}
+
+/*
+ * GHOSTBWindow
+ */
+
+GHOSTBWindow::GHOSTBWindow(GHOST_System* system, GHOST_Window* window,
+ BRect frame, const char* title,
+ window_look look, window_feel feel, uint32 flags,
+ uint32 workspace)
+ : BWindow(frame, title, look, feel, flags, workspace),
+ fGSystem(system),
+ fGWindow(window),
+ fView(NULL),
+ fLastMouseButton(0)
+{
+ InstantiateContext();
+}
+
+void
+GHOSTBWindow::InstantiateContext() {
+ fView = new BGLView(
+ Bounds(),
+ "GHOST.BGLView",
+ B_FOLLOW_ALL,
+ 0,
+ BGL_RGB | BGL_DOUBLE | BGL_DEPTH | BGL_ALPHA | BGL_STENCIL
+ );
+ AddChild(fView);
+}
+
+void
+GHOSTBWindow::DispatchMessage(
+ BMessage* msg, BHandler* target)
+{
+ GHOST_Event* event = NULL;
+ bool dispatch = true;
+ switch (msg->what)
+ {
+// case B_KEY_DOWN :
+// case B_KEY_UP :
+// {
+// int8 bbyte = 0;
+// int32 bkey = 0;
+//
+// msg->FindInt8( "byte", &bbyte );
+// msg->FindInt32( "key", &bkey );
+//
+// GHOST_TKey gkey = GHOST_kKeyUnknown;
+//
+// if( ( bbyte >= 'A' ) && ( bbyte <= 'Z' ) )
+// {
+// gkey = GHOST_TKey( bbyte - 'A' + int( GHOST_kKeyA ) );
+// }
+// else if( ( bbyte >= 'a' ) && ( bbyte <= 'z' ) )
+// {
+// gkey = GHOST_TKey( bbyte - 'a' + int( GHOST_kKeyA ) );
+// }
+// else if( ( bkey >= B_F1_KEY ) && ( bkey <= B_F12_KEY ) )
+// {
+// gkey = GHOST_TKey( bkey - B_F1_KEY + int( GHOST_kKeyF1 ) );
+// }
+// else
+// {
+// /* multibyte character recognition could go in here */
+//
+// if( gkey == GHOST_kKeyUnknown )
+// {
+// switch( bkey )
+// {
+// /* Numpad keys */
+// case 0x64 : gkey = GHOST_kKeyNumpad0; break;
+// case 0x58 : gkey = GHOST_kKeyNumpad1; break;
+// case 0x59 : gkey = GHOST_kKeyNumpad2; break;
+// case 0x5a : gkey = GHOST_kKeyNumpad3; break;
+// case 0x48 : gkey = GHOST_kKeyNumpad4; break;
+// case 0x49 : gkey = GHOST_kKeyNumpad5; break;
+// case 0x4a : gkey = GHOST_kKeyNumpad6; break;
+// case 0x37 : gkey = GHOST_kKeyNumpad7; break;
+// case 0x38 : gkey = GHOST_kKeyNumpad8; break;
+// case 0x39 : gkey = GHOST_kKeyNumpad9; break;
+// case 0x65 : gkey = GHOST_kKeyNumpadPeriod; break;
+// case 0x5b : gkey = GHOST_kKeyNumpadEnter; break;
+// case 0x3a : gkey = GHOST_kKeyNumpadPlus; break;
+// case 0x25 : gkey = GHOST_kKeyNumpadMinus; break;
+// case 0x24 : gkey = GHOST_kKeyNumpadAsterisk; break;
+// case 0x23 : gkey = GHOST_kKeyNumpadSlash; break;
+//
+// /* Other keys */
+// case 0x1e : gkey = GHOST_kKeyBackSpace; break;
+// case 0x26 : gkey = GHOST_kKeyTab; break;
+// case 0x47 : gkey = GHOST_kKeyEnter; break;
+// case 0x1 : gkey = GHOST_kKeyEsc; break;
+// case 0x5e : gkey = GHOST_kKeySpace; break;
+//
+// /* Arrow keys */
+// case 0x61 : gkey = GHOST_kKeyLeftArrow; break;
+// case 0x63 : gkey = GHOST_kKeyRightArrow; break;
+// case 0x57 : gkey = GHOST_kKeyUpArrow; break;
+// case 0x62 : gkey = GHOST_kKeyDownArrow; break;
+//
+// /* Navigation keys */
+// case 0x1f : gkey = GHOST_kKeyInsert; break;
+// case 0x32 : gkey = GHOST_kKeyDelete; break;
+// case 0x20 : gkey = GHOST_kKeyHome; break;
+// case 0x35 : gkey = GHOST_kKeyEnd; break;
+// case 0x21 : gkey = GHOST_kKeyUpPage; break;
+// case 0x36 : gkey = GHOST_kKeyDownPage; break;
+// }
+// }
+//
+// if( gkey == GHOST_kKeyUnknown )
+// {
+// switch( bbyte )
+// {
+// /* normal Number keys */
+// case 0x30 : gkey = GHOST_kKey0; break;
+// case 0x31 : gkey = GHOST_kKey1; break;
+// case 0x32 : gkey = GHOST_kKey2; break;
+// case 0x33 : gkey = GHOST_kKey3; break;
+// case 0x34 : gkey = GHOST_kKey4; break;
+// case 0x35 : gkey = GHOST_kKey5; break;
+// case 0x36 : gkey = GHOST_kKey6; break;
+// case 0x37 : gkey = GHOST_kKey7; break;
+// case 0x38 : gkey = GHOST_kKey8; break;
+// case 0x39 : gkey = GHOST_kKey9; break;
+//
+// /* additional keys */
+// case 0x22 : gkey = GHOST_kKeyQuote; break;
+// case 0x2c : gkey = GHOST_kKeyComma; break;
+// case 0x2d : gkey = GHOST_kKeyMinus; break;
+// case 0x2e : gkey = GHOST_kKeyPeriod; break;
+// case 0x2f : gkey = GHOST_kKeySlash; break;
+// case 0x3b : gkey = GHOST_kKeySemicolon; break;
+// case 0x3d : gkey = GHOST_kKeyEqual; break;
+// case 0x5b : gkey = GHOST_kKeyLeftBracket; break;
+// case 0x5c : gkey = GHOST_kKeyBackslash; break;
+// case 0x5d : gkey = GHOST_kKeyRightBracket; break;
+// case 0x60 : gkey = GHOST_kKeyAccentGrave; break;
+// }
+// }
+//
+// /* Unhandled GHOST keys: */
+// // GHOST_kKeyLineFeed ?
+// // GHOST_kKeyClear ?
+// }
+//
+// GHOST_TEventType type;
+// if( msg->what == B_KEY_DOWN )
+// type = GHOST_kEventKeyDown;
+// else
+// type = GHOST_kEventKeyUp;
+//
+// fWindowZETA->getSystemZETA()->pushEvent(
+// new GHOST_EventKey(
+// fWindowZETA->getSystemZETA()->getMilliSeconds(),
+// type,
+// fWindowZETA,
+// gkey,
+// bbyte ) );
+//
+// /* needs to be forwarded */
+// BWindow::DispatchMessage( msg, target );
+//
+// break;
+// }
+ case B_MOUSE_DOWN :
+ case B_MOUSE_UP :
+ {
+ GHOST_TButtonMask bmask = GHOST_kButtonMaskLeft;
+ int32 buttons;
+ msg->FindInt32("buttons", &buttons);
+
+ /*
+ * As the B_MOUSE_UP message doesnt tell which button was released,
+ * we store the last button further below in fLastMouseButton.
+ * When we receive the B_MOUSE_UP, we switch(fLastMouseButton)
+ * instead against buttons.
+ */
+
+ switch(msg->what == B_MOUSE_DOWN ? buttons : fLastMouseButton)
+ {
+ case B_PRIMARY_MOUSE_BUTTON :
+ {
+ bmask = GHOST_kButtonMaskLeft;
+ break;
+ }
+ case B_SECONDARY_MOUSE_BUTTON :
+ {
+ bmask = GHOST_kButtonMaskRight;
+ break;
+ }
+ case B_TERTIARY_MOUSE_BUTTON :
+ {
+ bmask = GHOST_kButtonMaskMiddle;
+ break;
+ }
+ }
+
+ GHOST_TEventType type;
+ if (msg->what == B_MOUSE_DOWN)
+ {
+ fLastMouseButton = buttons;
+ type = GHOST_kEventButtonDown;
+ }
+ else
+ {
+ type = GHOST_kEventButtonUp;
+ }
+
+ // FIXME use message time????????
+ event = new GHOST_EventButton(
+ fGSystem->getMilliSeconds(),
+ type,
+ fGWindow,
+ bmask);
+ break;
+ }
+ case B_MOUSE_MOVED :
+ {
+ BPoint point;
+ msg->FindPoint("where", &point);
+
+ // FIXME use message time????????
+ event = new GHOST_EventCursor(
+ fGSystem->getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ fGWindow,
+ point.x,
+ point.y);
+ break;
+ }
+ case B_MOUSE_WHEEL_CHANGED :
+ {
+ float value;
+ msg->FindFloat("be:wheel_delta_y", &value);
+
+ //value *= 3; /* dunno if to unprecise */
+
+ // FIXME use message time????????
+ event = new GHOST_EventWheel(
+ fGSystem->getMilliSeconds(),
+ fGWindow,
+ floor(value));
+ break;
+ }
+ case B_WINDOW_ACTIVATED :
+ {
+ bool active;
+ msg->FindBool("active", &active);
+
+ GHOST_TEventType type;
+ if (active)
+ type = GHOST_kEventWindowActivate;
+ else
+ type = GHOST_kEventWindowDeactivate;
+
+ // FIXME use message time????????
+ event = new GHOST_Event(
+ fGSystem->getMilliSeconds(),
+ type,
+ fGWindow);
+ dispatch = false; // FIXME WHY?
+ break;
+ }
+ case B_WINDOW_RESIZED :
+ {
+ // FIXME use message time????????
+ event = new GHOST_Event(
+ fGSystem->getMilliSeconds(),
+ GHOST_kEventWindowSize,
+ fGWindow);
+ break;
+ }
+ case B_QUIT_REQUESTED :
+ {
+ // FIXME use message time????????
+ event = new GHOST_Event(
+ fGSystem->getMilliSeconds(),
+ GHOST_kEventWindowClose,
+ fGWindow);
+ /* Don't dispatch. */
+ dispatch = false;
+ break;
+ }
+ case _UPDATE_ :
+ case _UPDATE_IF_NEEDED_ :
+ {
+ // FIXME use message time????????
+ event = new GHOST_Event(
+ fGSystem->getMilliSeconds(),
+ GHOST_kEventWindowUpdate,
+ fGWindow);
+ break;
+ }
+ default :
+ {
+ BWindow::DispatchMessage(msg, target);
+ }
+ }
+
+ if (dispatch) {
+ BWindow::DispatchMessage(msg, target);
+ }
+
+ if (event) {
+ fGSystem->pushEvent(event);
+ }
+}
Index: source/blender/imbuf/intern/imbuf.h
===================================================================
--- source/blender/imbuf/intern/imbuf.h (revision 19951)
+++ source/blender/imbuf/intern/imbuf.h (working copy)
@@ -51,7 +51,7 @@
#include <sys/mman.h>
#endif
-#if !defined(WIN32) && !defined(__BeOS)
+#if !defined(WIN32) && !defined(__BeOS) && !defined(__HAIKU__)
#define O_BINARY 0
#endif
Index: source/blender/blenlib/intern/storage.c
===================================================================
--- source/blender/blenlib/intern/storage.c (revision 19951)
+++ source/blender/blenlib/intern/storage.c (working copy)
@@ -47,7 +47,7 @@
#include <time.h>
#include <sys/stat.h>
-#if defined (__sun__) || defined (__sun)
+#if defined (__sun__) || defined (__sun) || defined(__HAIKU__)
#include <sys/statvfs.h> /* Other modern unix os's should probably use this also */
#elif !defined(__FreeBSD__) && !defined(linux) && (defined(__sgi) || defined(__sparc) || defined(__sparc__))
#include <sys/statfs.h>
@@ -77,7 +77,7 @@
#include <fcntl.h>
-#if !defined(__BeOS) && !defined(WIN32)
+#if !defined(__BeOS) && !defined(WIN32) && !defined(__HAIKU__)
#include <sys/mtio.h> /* tape comando's */
#endif
#include <string.h> /* strcpy etc.. */
@@ -179,7 +179,7 @@
return (double) (freec*bytesps*sectorspc);
#else
-#if defined (__sun__) || defined (__sun)
+#if defined (__sun__) || defined (__sun) || defined(__HAIKU__)
struct statvfs disk;
#else
struct statfs disk;
@@ -204,7 +204,7 @@
return -1;
#endif
-#if defined (__sun__) || defined (__sun)
+#if defined (__sun__) || defined (__sun) || defined(__HAIKU__)
if (statvfs(name, &disk)) return(-1);
#elif !defined(__FreeBSD__) && !defined(linux) && (defined (__sgi) || defined(__sparc) || defined(__sparc__))
/* WARNING - This may not be supported by geeneric unix os's - Campbell */
Index: config/haiku1-config.py
===================================================================
--- config/haiku1-config.py (revision 0)
+++ config/haiku1-config.py (revision 0)
@@ -0,0 +1,191 @@
+import os
+import subprocess
+import sys
+
+HAIKU_DEVELOP_DIR = '/boot/develop'
+HAIKU_DEVELOP_LIB = HAIKU_DEVELOP_DIR + '/lib/x86' # TODO arch
+HAIKU_DEVELOP_INCLUDE = HAIKU_DEVELOP_DIR + '/headers'
+HAIKU_DEVELOP_INCLUDE_OS = HAIKU_DEVELOP_INCLUDE + '/os'
+HAIKU_DEVELOP_INCLUDE_3RDPARTY = HAIKU_DEVELOP_INCLUDE + '/3rdparty'
+HAIKU_COMMON_DIR = '/boot/common'
+HAIKU_COMMON_LIB = HAIKU_COMMON_DIR + '/lib'
+HAIKU_COMMON_INCLUDE = HAIKU_COMMON_DIR + '/include'
+
+WITH_BF_VERSE = 'false'
+BF_VERSE_INCLUDE = "#extern/verse/dist"
+
+BF_PYTHON = HAIKU_COMMON_DIR
+BF_PYTHON_VERSION = '2.5'
+BF_PYTHON_INC = HAIKU_COMMON_INCLUDE + '/python' + BF_PYTHON_VERSION
+BF_PYTHON_BINARY = BF_PYTHON + '/bin/python' + BF_PYTHON_VERSION
+BF_PYTHON_LIB = 'python' + BF_PYTHON_VERSION
+BF_PYTHON_LIBPATH = HAIKU_COMMON_LIB
+pipe = subprocess.Popen(['python' + BF_PYTHON_VERSION + '-config', '--ldflags'], stdout=subprocess.PIPE)
+BF_PYTHON_LINKFLAGS = pipe.communicate()[0]
+pipe.stdout.close()
+
+WITH_BF_OPENAL = 'false' # TODO
+#BF_OPENAL = '/usr'
+#BF_OPENAL_INC = '${BF_OPENAL}/include'
+#BF_OPENAL_LIB = 'openal'
+# some distros have a separate libalut
+# if you get linker complaints, you need to uncomment the line below
+# BF_OPENAL_LIB = 'openal alut'
+
+WITH_BF_SDL = 'true' # setting is ignored
+BF_SDL = HAIKU_COMMON_DIR
+BF_SDL_INC = HAIKU_COMMON_INCLUDE + '/SDL'
+BF_SDL_LIB = 'SDL'
+
+WITH_BF_FMOD = 'false' # TODO
+##BF_FMOD = LIBDIR + '/fmod'
+
+WITH_BF_OPENEXR = 'false' # TODO
+#BF_OPENEXR = '/usr'
+# when compiling with your own openexr lib you might need to set...
+# BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR ${BF_OPENEXR}/include'
+
+#BF_OPENEXR_INC = '${BF_OPENEXR}/include/OpenEXR'
+#BF_OPENEXR_LIB = 'Half IlmImf Iex Imath '
+# BF_OPENEXR_LIBPATH = '${BF_OPENEXR}/lib'
+
+WITH_BF_DDS = 'true'
+
+WITH_BF_JPEG = 'true' # setting is ignored
+BF_JPEG = HAIKU_COMMON_DIR
+BF_JPEG_INC = HAIKU_COMMON_INCLUDE
+BF_JPEG_LIB = 'jpeg'
+BF_JPEG_LIBPATH = HAIKU_COMMON_LIB
+
+WITH_BF_PNG = 'true'
+BF_PNG = HAIKU_DEVELOP_DIR
+BF_PNG_INC = HAIKU_DEVELOP_INCLUDE_3RDPARTY
+BF_PNG_LIB = 'png'
+
+WITH_BF_TIFF = 'true' # setting is ignored
+BF_TIFF = HAIKU_COMMON_DIR
+BF_TIFF_INC = HAIKU_COMMON_INCLUDE
+
+WITH_BF_ZLIB = 'true'
+BF_ZLIB = HAIKU_DEVELOP_DIR
+BF_ZLIB_INC = HAIKU_DEVELOP_INCLUDE_3RDPARTY
+BF_ZLIB_LIB = 'z'
+
+WITH_BF_INTERNATIONAL = 'false' # TODO
+
+#BF_GETTEXT = '/usr'
+#BF_GETTEXT_INC = '${BF_GETTEXT}/include'
+#BF_GETTEXT_LIB = 'gettextlib'
+#BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
+
+WITH_BF_FTGL = 'false' # TODO
+#BF_FTGL = '#extern/bFTGL'
+#BF_FTGL_INC = '${BF_FTGL}/include'
+#BF_FTGL_LIB = 'extern_ftgl'
+
+WITH_BF_GAMEENGINE='false' # TODO
+
+WITH_BF_ODE = 'false'
+##BF_ODE = LIBDIR + '/ode'
+BF_ODE_INC = BF_ODE + '/include'
+BF_ODE_LIB = BF_ODE + '/lib/libode.a'
+
+WITH_BF_BULLET = 'true'
+BF_BULLET = '#extern/bullet2/src'
+BF_BULLET_INC = '${BF_BULLET}'
+BF_BULLET_LIB = 'extern_bullet'
+
+BF_SOLID = '#extern/solid'
+BF_SOLID_INC = '${BF_SOLID}'
+BF_SOLID_LIB = 'extern_solid'
+
+WITH_BF_YAFRAY = 'true'
+
+#WITH_BF_NSPR = 'true'
+#BF_NSPR = $(LIBDIR)/nspr
+#BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
+#BF_NSPR_LIB =
+
+# Uncomment the following line to use Mozilla inplace of netscape
+#CPPFLAGS += -DMOZ_NOT_NET
+# Location of MOZILLA/Netscape header files...
+#BF_MOZILLA = $(LIBDIR)/mozilla
+#BF_MOZILLA_INC = -I$(BF_MOZILLA)/include/mozilla/nspr -I$(BF_MOZILLA)/include/mozilla -I$(BF_MOZILLA)/include/mozilla/xpcom -I$(BF_MOZILLA)/include/mozilla/idl
+#BF_MOZILLA_LIB =
+# Will fall back to look in BF_MOZILLA_INC/nspr and BF_MOZILLA_LIB
+# if this is not set.
+#
+# Be paranoid regarding library creation (do not update archives)
+#BF_PARANOID = 'true'
+
+# enable freetype2 support for text objects
+WITH_BF_FREETYPE = 'false'
+#BF_FREETYPE = '/usr'
+#BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
+#BF_FREETYPE_LIB = 'freetype'
+
+WITH_BF_QUICKTIME = 'false'
+#BF_QUICKTIME = '/usr/local'
+#BF_QUICKTIME_INC = '${BF_QUICKTIME}/include'
+
+WITH_BF_ICONV = 'false' # TODO
+##BF_ICONV = LIBDIR + "/iconv"
+#BF_ICONV_INC = '${BF_ICONV}/include'
+#BF_ICONV_LIB = 'iconv'
+#BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
+
+WITH_BF_BINRELOC = 'false' # TODO?
+
+# enable ffmpeg support
+WITH_BF_FFMPEG = 'false' # -DWITH_FFMPEG
+#BF_FFMPEG = '#extern/ffmpeg'
+#BF_FFMPEG_LIB = ''
+# Uncomment the following two lines to use system's ffmpeg
+# BF_FFMPEG = '/usr'
+# BF_FFMPEG_LIB = 'avformat avcodec swscale avutil'
+#BF_FFMPEG_INC = '${BF_FFMPEG}/include'
+#BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
+
+# Mesa Libs should go here if your using them as well....
+WITH_BF_STATICOPENGL = 'false'
+#BF_OPENGL = '/usr'
+BF_OPENGL_INC = '${HAIKU_DEVELOP_INCLUDE_OS}/opengl'
+BF_OPENGL_LIB = 'GL'
+BF_OPENGL_LIBPATH = '${HAIKU_DEVELOP_LIB}'
+#BF_OPENGL_LIB_STATIC = '${BF_OPENGL}/libGL.a ${BF_OPENGL}/libGLU.a ${BF_OPENGL}/libXxf86vm.a ${BF_OPENGL}/libX11.a ${BF_OPENGL}/libXi.a ${BF_OPENGL}/libXext.a ${BF_OPENGL}/libXxf86vm.a'
+
+##
+CC = 'gcc'
+CXX = 'g++'
+
+# TODO CHECK ALL VALUES!
+##CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing']
+
+##CPPFLAGS = ['-DXP_UNIX']
+##CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing']
+REL_CFLAGS = ['-O2']
+REL_CCFLAGS = ['-O2']
+##BF_DEPEND = 'true'
+##
+##AR = ar
+##ARFLAGS = ruv
+##ARFLAGSQUIET = ru
+##
+##C_WARN = '-Wall -Wno-char-subscripts -Wdeclaration-after-statement'
+
+##CC_WARN = '-Wall'
+
+##FIX_STUBS_WARNINGS = -Wno-unused
+
+LLIBS = 'stdc++ network be'
+##LOPTS = --dynamic
+##DYNLDFLAGS = -shared $(LDFLAGS)
+
+#BF_PROFILE_FLAGS = ['-pg','-g']
+#BF_PROFILE = 'false'
+
+BF_DEBUG = 'false'
+BF_DEBUG_FLAGS = '-g'
+
+BF_BUILDDIR = '../build-' + sys.platform
+BF_INSTALLDIR='../install-' + sys.platform
Index: extern/glew/src/glew.c
===================================================================
--- extern/glew/src/glew.c (revision 19951)
+++ extern/glew/src/glew.c (working copy)
@@ -32,7 +32,7 @@
#include <GL/glew.h>
#if defined(_WIN32)
# include <GL/wglew.h>
-#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
+#elif (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__)
# include <GL/glxew.h>
#endif
@@ -86,7 +86,7 @@
}
#endif /* __APPLE__ */
-#if defined(__sgi) || defined (__sun)
+#if defined(__sgi) || defined (__sun) || defined(__HAIKU__)
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
@@ -107,7 +107,7 @@
else
return dlsym(h, (const char*)name);
}
-#endif /* __sgi || __sun */
+#endif /* __sgi || __sun || __HAIKU__ */
/*
* Define glewGetProcAddress.
@@ -118,7 +118,7 @@
# if defined(__APPLE__)
# define glewGetProcAddress(name) NSGLGetProcAddress(name)
# else
-# if defined(__sgi) || defined(__sun)
+# if defined(__sgi) || defined(__sun) || defined(__HAIKU__)
# define glewGetProcAddress(name) dlGetProcAddress(name)
# else /* __linux */
# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name)
@@ -6422,7 +6422,7 @@
return GLEW_OK;
}
-#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
+#elif (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__)
PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL;
@@ -7139,7 +7139,7 @@
return GLEW_OK;
}
-#endif /* !__APPLE__ || GLEW_APPLE_GLX */
+#endif /* (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__) */
/* ------------------------------------------------------------------------ */
@@ -7176,7 +7176,7 @@
#if defined(_WIN32)
extern GLenum wglewContextInit (void);
-#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */
+#elif (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__)
extern GLenum glxewContextInit (void);
#endif /* _WIN32 */
@@ -7186,7 +7186,7 @@
if ( (r = glewContextInit()) ) return r;
#if defined(_WIN32)
return wglewContextInit();
-#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */
+#elif (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__)
return glxewContextInit();
#else
return r;
@@ -9429,7 +9429,7 @@
return ret;
}
-#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
+#elif (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) && !defined(__HAIKU__)
#if defined(GLEW_MX)
GLboolean glxewContextIsSupported (GLXEWContext* ctx, const char* name)