Initial release of Maemo 5 port of gnuplot
[gnuplot] / src / beos / GPView.cpp
diff --git a/src/beos/GPView.cpp b/src/beos/GPView.cpp
new file mode 100644 (file)
index 0000000..3c7459d
--- /dev/null
@@ -0,0 +1,162 @@
+/*[
+ * Copyright 1986 - 1993, 1998, 2004   Thomas Williams, Colin Kelley
+ *
+ * Permission to use, copy, and distribute this software and its
+ * documentation for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.
+ *
+ * Permission to modify the software is granted, but not the right to
+ * distribute the complete modified source code.  Modifications are to
+ * be distributed as patches to the released version.  Permission to
+ * distribute binaries produced by compiling modified sources is granted,
+ * provided you
+ *   1. distribute the corresponding source modifications from the
+ *    released version in the form of a patch file along with the binaries,
+ *   2. add special version identification to distinguish your version
+ *    in addition to the base release version number,
+ *   3. provide your name and address as the primary contact for the
+ *    support of your modified version, and
+ *   4. retain our contact information in regard to use of the base
+ *    software.
+ * Permission to distribute the released version of the source code along
+ * with corresponding source modifications in the form of a patch file is
+ * granted with same provisions 2 through 4 for binary distributions.
+ *
+ * This software is provided "as is" without express or implied warranty
+ * to the extent permitted by applicable law.
+]*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "GPBitmap.h"
+#include "GPView.h"
+#include "constants.h"
+#include <Region.h>
+#include <ScrollBar.h>
+
+
+/*******************************************************************/
+// GPView
+
+GPView::GPView(BRect rect, ulong resizeMode,
+       ulong flags, GPBitmap *bitmap)
+       : BView(rect,"BitmapEditor",resizeMode,flags|B_SUBPIXEL_PRECISE|B_FRAME_EVENTS)
+{
+       m_bitmap = (bitmap) ? bitmap : new GPBitmap(rect.Width(), rect.Height());
+       SetScale(1);
+};
+
+void GPView::GetMaxSize(float *width, float *height)
+{
+       BRect r = m_bitmap->Bounds();
+       *width = floor((r.right+1)*m_scale - 0.5);
+       *height = floor((r.bottom+1)*m_scale - 0.5);
+};
+
+void GPView::MessageReceived(BMessage *msg)
+{
+       switch (msg->what) {
+               case bmsgBitmapDirty:
+               {
+//                     m_bitmap->Lock();
+//                     m_bitmap->display();
+//                     m_bitmap->Unlock();
+//                     printf("view (dirty) displaying %d commands\n",m_bitmap->ncommands);
+                       Draw(Bounds());
+                       break;
+               };
+               case bmsgBitmapResize:
+               {
+                       BRect r;
+                       msg->FindRect("rect",&r);
+                       m_bitmap->ResizeTo(r.Width(),r.Height(),0);
+                       break;
+               };
+               case bmsgNewCmd:
+               {
+                       char *cmd = NULL;
+                       int32 i, num;
+                       num = msg->FindInt32("numcmds");
+                       m_bitmap->addCommands(msg,num);
+//                     printf("view (new cmds) displaying %d commands\n",m_bitmap->ncommands);
+                       Draw(Bounds());
+                       break;
+               }
+               case bmsgClrCmd:
+               {
+                       m_bitmap->clearCommands();
+                       break;
+               }
+               default:
+                       BView::MessageReceived(msg);
+       };
+};
+
+GPView::~GPView()
+{
+};
+
+void GPView::SetScale(float scale)
+{
+       m_scale = scale;
+//     FixupScrollbars();
+       Invalidate();
+};
+
+float GPView::Scale()
+{
+       return m_scale;
+};
+
+void GPView::FrameResized(float width, float height)
+{
+       uint32 buttons;
+       BPoint cursor;
+       printf("resising\n");
+//     ResizeTo(width, height);
+//     GetMouse(&cursor, &buttons);
+       m_bitmap->Lock();
+       m_bitmap->ResizeTo(width, height,1);
+       BBitmap *b = m_bitmap->RealBitmap();
+       DrawBitmap(b,b->Bounds(),Bounds());
+       Sync();
+       m_bitmap->Unlock();
+//     Draw(Bounds());
+//     FixupScrollbars();
+};
+
+void GPView::AttachedToWindow()
+{
+//     FixupScrollbars();
+       SetViewColor(B_TRANSPARENT_32_BIT);
+};
+
+void GPView::MouseDown(BPoint point)
+{
+       printf("Mouse Down\n");
+};
+
+void GPView::MouseUp(BPoint point)
+{
+       printf("Mouse Up\n");
+       Draw(Bounds());
+};
+
+void GPView::Draw(BRect updateRect)
+{
+       m_bitmap->Lock();
+       m_bitmap->display(Bounds().Width(),Bounds().Height());
+       BBitmap *b = m_bitmap->RealBitmap();
+       DrawBitmap(b,b->Bounds(),Bounds());
+       Sync();
+       m_bitmap->Unlock();
+};
+
+void GPView::FixupScrollbars()
+{
+};
+