336 lines
8.3 KiB
C++
336 lines
8.3 KiB
C++
#include <Bitmap.h>
|
|
#include <Path.h>
|
|
#include <Picture.h>
|
|
#include <Region.h>
|
|
#include <View.h>
|
|
#include "YabWindow.h"
|
|
#include "YabView.h"
|
|
|
|
YabView::YabView(BRect frame, const char *name, uint32 resizingMode, uint32 flags)
|
|
: BView(frame, name, resizingMode, flags)
|
|
{
|
|
/*
|
|
SetViewColor(216,216,216,255);
|
|
SetLowColor(216,216,216,255);
|
|
SetHighColor(0,0,0,255);
|
|
*/
|
|
|
|
rgb_color b1 = ui_color(B_PANEL_BACKGROUND_COLOR);
|
|
rgb_color b2 = {0,0,0,255};
|
|
|
|
SetViewColor(b1);
|
|
SetLowColor(b1);
|
|
SetHighColor(b2);
|
|
|
|
drawList = new BList(1);
|
|
|
|
YabDrawing *t = new YabDrawing();
|
|
t->command = 6;
|
|
t->r = 0; t->g = 0;
|
|
t->b = 0; t->alpha = 255;
|
|
drawList->AddItem(t);
|
|
|
|
YabDrawing *t2 = new YabDrawing();
|
|
t2->command = 7;
|
|
t2->r = b1.red; t2->g = b1.green;
|
|
t2->b = b1.blue; t2->alpha = 255;
|
|
drawList->AddItem(t2);
|
|
|
|
mouseMovedInfo = 1;
|
|
mouseStateInfo = -1;
|
|
prevMouseStateInfo = 0;
|
|
|
|
mouseX = 0;
|
|
mouseY = 0;
|
|
mouseLButton = 0;
|
|
mouseMButton = 0;
|
|
mouseRButton = 0;
|
|
dropZone = false;
|
|
pressedKeys.SetTo("");
|
|
SetDrawingMode(B_OP_COPY);
|
|
}
|
|
|
|
YabView::~YabView()
|
|
{
|
|
while(drawList->CountItems()>0)
|
|
{
|
|
YabDrawing *t = (YabDrawing*)drawList->LastItem();
|
|
drawList->RemoveItem(t);
|
|
if(t->command == 0) delete [] t->chardata;
|
|
delete t;
|
|
}
|
|
delete drawList;
|
|
}
|
|
|
|
void YabView::MessageReceived(BMessage *msg)
|
|
{
|
|
entry_ref ref;
|
|
switch (msg->what)
|
|
{
|
|
case B_SIMPLE_DATA:
|
|
{
|
|
if(dropZone)
|
|
{
|
|
BString tmp("");
|
|
int32 count;
|
|
uint32 type;
|
|
const char* name;
|
|
int i =0;
|
|
|
|
while(msg->FindRef("refs", i, &ref) == B_OK)
|
|
{
|
|
BEntry dropEntry(&ref);
|
|
BPath tmpDirectory;
|
|
dropEntry.GetPath(&tmpDirectory);
|
|
tmp << Name();
|
|
tmp << ":_Dropped";
|
|
tmp << ":" << tmpDirectory.Path();
|
|
tmp << "|";
|
|
i++;
|
|
}
|
|
YabWindow *yabWin = (YabWindow*)Window();
|
|
yabWin->dropMsg.SetTo(tmp);
|
|
}
|
|
else
|
|
BView::MessageReceived(msg);
|
|
}
|
|
break;
|
|
default:
|
|
BView::MessageReceived(msg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void YabView::Draw(BRect updateRect)
|
|
{
|
|
SetFont(be_plain_font);
|
|
updateRect = Bounds();
|
|
for(int i=0; i<drawList->CountItems(); i++)
|
|
{
|
|
YabDrawing *e = (YabDrawing*)drawList->ItemAt(i);
|
|
switch(e->command)
|
|
{
|
|
case 0: DrawString(e->chardata, BPoint(e->x1, e->y1));
|
|
break;
|
|
case 1: StrokeLine(BPoint(e->x1,e->y1),BPoint(e->x2,e->y2), e->p);
|
|
break;
|
|
case 2: StrokeEllipse(BPoint(e->x1,e->y1), e->x2, e->y2, e->p);
|
|
break;
|
|
case 3: FillEllipse(BPoint(e->x1,e->y1), e->x2, e->y2, e->p);
|
|
break;
|
|
case 4: StrokeRect(BRect(e->x1,e->y1,e->x2,e->y2), e->p);
|
|
break;
|
|
case 5: FillRect(BRect(e->x1,e->y1,e->x2,e->y2), e->p);
|
|
break;
|
|
case 6: {
|
|
if(e->alpha == 255)
|
|
SetDrawingMode(B_OP_COPY);
|
|
else
|
|
SetDrawingMode(B_OP_ALPHA);
|
|
SetHighColor(e->r,e->g,e->b,e->alpha);
|
|
}
|
|
break;
|
|
case 7: {
|
|
if(e->alpha == 255)
|
|
SetDrawingMode(B_OP_COPY);
|
|
else
|
|
SetDrawingMode(B_OP_ALPHA);
|
|
SetLowColor(e->r,e->g,e->b,e->alpha);
|
|
}
|
|
break;
|
|
case 8: {
|
|
BPoint p[4];
|
|
p[0].Set(e->x1,e->y1);
|
|
p[1].Set(e->x2,e->y2);
|
|
p[2].Set(e->x3,e->y3);
|
|
p[3].Set(e->x4,e->y4);
|
|
SetPenSize(1.01);
|
|
StrokeBezier(p, e->p);
|
|
SetPenSize(1.0);
|
|
}
|
|
break;
|
|
case 9: {
|
|
BPoint p[4];
|
|
p[0].Set(e->x1,e->y1);
|
|
p[1].Set(e->x2,e->y2);
|
|
p[2].Set(e->x3,e->y3);
|
|
p[3].Set(e->x4,e->y4);
|
|
SetPenSize(2.0);
|
|
FillBezier(p, e->p);
|
|
SetPenSize(1.0);
|
|
}
|
|
break;
|
|
case 10: {
|
|
drawing_mode mode = DrawingMode();
|
|
if(IsPrinting())
|
|
SetDrawingMode(B_OP_COPY);
|
|
else
|
|
SetDrawingMode(B_OP_ALPHA);
|
|
DrawBitmap(e->bitmap, BPoint(e->x1, e->y1));
|
|
SetDrawingMode(mode);
|
|
}
|
|
break;
|
|
case 11: {
|
|
drawing_mode mode = DrawingMode();
|
|
if(IsPrinting())
|
|
SetDrawingMode(B_OP_COPY);
|
|
else
|
|
SetDrawingMode(B_OP_ALPHA);
|
|
DrawBitmap(e->bitmap, BRect(e->x1, e->y1, e->x2, e->y2));
|
|
SetDrawingMode(mode);
|
|
}
|
|
break;
|
|
case 12: {
|
|
// SetFont(&e->font, B_FONT_FAMILY_AND_STYLE);
|
|
// SetFont(&e->font, B_FONT_SIZE);
|
|
SetFont(&e->font, B_FONT_ALL);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void YabView::MouseDown(BPoint point)
|
|
{
|
|
BPoint ptCursor;
|
|
uint32 uButtons = 0;
|
|
GetMouse(&ptCursor, &uButtons, false);
|
|
|
|
mouseX = (int)ptCursor.x;
|
|
mouseY = (int)ptCursor.y;
|
|
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
mouseStateInfo = 4;
|
|
BView::MouseDown(point);
|
|
}
|
|
|
|
void YabView::MouseUp(BPoint point)
|
|
{
|
|
BPoint ptCursor;
|
|
uint32 uButtons = 0;
|
|
GetMouse(&ptCursor, &uButtons, false);
|
|
|
|
mouseX = (int)ptCursor.x;
|
|
mouseY = (int)ptCursor.y;
|
|
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
mouseStateInfo = 5;
|
|
BView::MouseUp(point);
|
|
}
|
|
|
|
void YabView::MouseMoved(BPoint point, uint32 transit, const BMessage *message)
|
|
{
|
|
BPoint ptCursor;
|
|
uint32 uButtons = 0;
|
|
GetMouse(&ptCursor, &uButtons, true);
|
|
|
|
mouseX = (int)ptCursor.x;
|
|
mouseY = (int)ptCursor.y;
|
|
if(uButtons & B_PRIMARY_MOUSE_BUTTON) mouseLButton = 1; else mouseLButton = 0;
|
|
if(uButtons & B_SECONDARY_MOUSE_BUTTON) mouseRButton = 1; else mouseRButton = 0;
|
|
if(uButtons & B_TERTIARY_MOUSE_BUTTON) mouseMButton = 1; else mouseMButton = 0;
|
|
|
|
switch(transit)
|
|
{
|
|
case B_INSIDE_VIEW:
|
|
if(prevMouseStateInfo==1)
|
|
mouseStateInfo = 0;
|
|
else
|
|
{
|
|
mouseStateInfo = 1;
|
|
prevMouseStateInfo = 1;
|
|
}
|
|
mouseMovedInfo = 0;
|
|
break;
|
|
case B_ENTERED_VIEW:
|
|
mouseStateInfo = 1;
|
|
mouseMovedInfo = 0;
|
|
break;
|
|
case B_OUTSIDE_VIEW:
|
|
mouseStateInfo = 2;
|
|
mouseMovedInfo = 1;
|
|
break;
|
|
case B_EXITED_VIEW:
|
|
mouseStateInfo = 3;
|
|
mouseMovedInfo = 1;
|
|
prevMouseStateInfo = 0;
|
|
break;
|
|
}
|
|
|
|
BView::MouseMoved(point, transit, message);
|
|
}
|
|
|
|
void YabView::KeyDown(const char *bytes, int32 numBytes)
|
|
{
|
|
BMessage *msg = Window()->CurrentMessage();
|
|
if(msg)
|
|
{
|
|
pressedKeys.SetTo("");
|
|
int32 key, modifiers;
|
|
msg->FindInt32("key", &key);
|
|
msg->FindInt32("modifiers", &modifiers);
|
|
if(modifiers&B_CONTROL_KEY) pressedKeys << "ctrl-";
|
|
if(modifiers&B_COMMAND_KEY) pressedKeys << "command-";
|
|
if(modifiers&B_OPTION_KEY) pressedKeys << "option-";
|
|
if(modifiers&B_SHIFT_KEY) pressedKeys << "shift-";
|
|
switch(bytes[0])
|
|
{
|
|
case B_BACKSPACE: pressedKeys << "backspace"; break;
|
|
case B_ENTER: pressedKeys << "enter"; break;
|
|
case B_TAB: pressedKeys << "tab"; break;
|
|
case B_ESCAPE: pressedKeys << "esc"; break;
|
|
case B_LEFT_ARROW: pressedKeys << "left"; break;
|
|
case B_RIGHT_ARROW: pressedKeys << "right"; break;
|
|
case B_UP_ARROW: pressedKeys << "up"; break;
|
|
case B_DOWN_ARROW: pressedKeys << "down"; break;
|
|
case B_INSERT: pressedKeys << "insert"; break;
|
|
case B_DELETE: pressedKeys << "del"; break;
|
|
case B_HOME: pressedKeys << "home"; break;
|
|
case B_END: pressedKeys << "end"; break;
|
|
case B_PAGE_UP: pressedKeys << "pageup"; break;
|
|
case B_PAGE_DOWN: pressedKeys << "pagedown"; break;
|
|
case B_FUNCTION_KEY:
|
|
{
|
|
switch(key)
|
|
{
|
|
case B_F1_KEY: pressedKeys << "f1"; break;
|
|
case B_F2_KEY: pressedKeys << "f2"; break;
|
|
case B_F3_KEY: pressedKeys << "f3"; break;
|
|
case B_F4_KEY: pressedKeys << "f4"; break;
|
|
case B_F5_KEY: pressedKeys << "f5"; break;
|
|
case B_F6_KEY: pressedKeys << "f6"; break;
|
|
case B_F7_KEY: pressedKeys << "f7"; break;
|
|
case B_F8_KEY: pressedKeys << "f8"; break;
|
|
case B_F9_KEY: pressedKeys << "f9"; break;
|
|
case B_F10_KEY: pressedKeys << "f10"; break;
|
|
case B_F11_KEY: pressedKeys << "f11"; break;
|
|
case B_F12_KEY: pressedKeys << "f12"; break;
|
|
case B_PRINT_KEY: pressedKeys << "print"; break;
|
|
case B_SCROLL_KEY: pressedKeys << "scroll"; break;
|
|
case B_PAUSE_KEY: pressedKeys << "pause"; break;
|
|
default:
|
|
pressedKeys.SetTo(bytes);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
pressedKeys.SetTo(bytes);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
pressedKeys.SetTo(bytes);
|
|
|
|
if(bytes[0]!=B_TAB) BView::KeyDown(bytes,numBytes);
|
|
}
|
|
|
|
void YabView::KeyUp(const char *bytes, int32 numBytes)
|
|
{
|
|
pressedKeys.SetTo("");
|
|
BView::KeyUp(bytes,numBytes);
|
|
}
|
|
|