--- /dev/null
+/*[
+ * 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()
+{
+};
+