2007-10-25 12:28:22 +00:00
|
|
|
/*
|
|
|
|
Copyright 1999, Be Incorporated. All Rights Reserved.
|
|
|
|
This file may be used under the terms of the Be Sample Code License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2011-05-20 16:28:11 +00:00
|
|
|
#include <new>
|
|
|
|
|
|
|
|
#include <Catalog.h>
|
2007-10-25 12:28:22 +00:00
|
|
|
#include <InterfaceKit.h>
|
|
|
|
#include <Point.h>
|
2011-05-20 16:28:11 +00:00
|
|
|
#include <Rect.h>
|
2007-10-25 12:28:22 +00:00
|
|
|
|
|
|
|
#include "TeapotWindow.h"
|
|
|
|
|
2011-05-20 16:28:11 +00:00
|
|
|
#undef B_TRANSLATE_CONTEXT
|
|
|
|
#define B_TRANSLATE_CONTEXT "TeapotWindow"
|
|
|
|
|
2010-06-27 10:17:50 +00:00
|
|
|
TeapotWindow::TeapotWindow(BRect rect, const char* name, window_type wt,
|
|
|
|
ulong something)
|
|
|
|
:
|
|
|
|
BDirectWindow(rect, name, wt, something)
|
2007-10-25 12:28:22 +00:00
|
|
|
{
|
|
|
|
GLenum type = BGL_RGB | BGL_DEPTH | BGL_DOUBLE;
|
2011-05-20 16:28:11 +00:00
|
|
|
|
2007-10-25 12:28:22 +00:00
|
|
|
Lock();
|
2008-02-23 13:41:57 +00:00
|
|
|
BRect bounds = Bounds();
|
|
|
|
bounds.bottom = bounds.top + 14;
|
|
|
|
BMenuBar* menuBar = new BMenuBar(bounds, "main menu");
|
2007-10-25 12:28:22 +00:00
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
BMenu* menu;
|
|
|
|
BMessage msg(kMsgAddModel);
|
2007-10-25 12:28:22 +00:00
|
|
|
|
2011-05-20 16:28:11 +00:00
|
|
|
menuBar->AddItem(menu = new BMenu(B_TRANSLATE("File")));
|
2008-02-23 13:41:57 +00:00
|
|
|
AddChild(menuBar);
|
2011-05-20 16:28:11 +00:00
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
menuBar->ResizeToPreferred();
|
2007-10-25 12:28:22 +00:00
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
bounds = Bounds();
|
|
|
|
bounds.top = menuBar->Bounds().bottom + 1;
|
|
|
|
BView *subView = new BView(bounds, "subview", B_FOLLOW_ALL, 0);
|
|
|
|
AddChild(subView);
|
2011-05-20 16:28:11 +00:00
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
bounds = subView->Bounds();
|
2011-05-20 16:28:11 +00:00
|
|
|
fObjectView = new(std::nothrow) ObjectView(bounds, "objectView",
|
|
|
|
B_FOLLOW_ALL_SIDES, type);
|
|
|
|
subView->AddChild(fObjectView);
|
|
|
|
|
2007-10-25 12:28:22 +00:00
|
|
|
BMenuItem* item;
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.AddInt32("num", 256);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Add a teapot"),
|
|
|
|
new BMessage(msg), 'N'));
|
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
menu->AddSeparatorItem();
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Quit"),
|
|
|
|
new BMessage(B_QUIT_REQUESTED), 'Q'));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(be_app);
|
|
|
|
msg.RemoveName("num");
|
2011-05-20 16:28:11 +00:00
|
|
|
menuBar->AddItem(menu = new BMenu(B_TRANSLATE("Options")));
|
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Perspective"),
|
|
|
|
new BMessage(kMsgPerspective)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(false);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("FPS display"),
|
|
|
|
new BMessage(kMsgFPS)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Filled polygons"),
|
|
|
|
new BMessage(kMsgFilled)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Lighting"),
|
|
|
|
new BMessage(kMsgLighting)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Backface culling"),
|
|
|
|
new BMessage(kMsgCulling)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Z-buffered"),
|
|
|
|
new BMessage(kMsgZBuffer)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Gouraud shading"),
|
|
|
|
new BMessage(kMsgGouraud)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2008-02-23 13:41:57 +00:00
|
|
|
// menu->AddItem(item = new BMenuItem("Texture mapped", new BMessage(kMsgTextured)));
|
2007-10-25 12:28:22 +00:00
|
|
|
// item->SetTarget(fObjectView);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(B_TRANSLATE("Fog"),
|
|
|
|
new BMessage(kMsgFog)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
BMenu *subMenu;
|
2011-05-20 16:28:11 +00:00
|
|
|
menuBar->AddItem(menu = new BMenu(B_TRANSLATE("Lights")));
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.what = kMsgLights;
|
2007-10-25 12:28:22 +00:00
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.AddInt32("num", 1);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(subMenu =
|
|
|
|
new BMenu(B_TRANSLATE("Upper center")), NULL));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.AddInt32("color", lightNone);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Off"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
subMenu->AddSeparatorItem();
|
|
|
|
msg.ReplaceInt32("color", lightWhite);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("White"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightYellow);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Yellow"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightBlue);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Blue"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightRed);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Red"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightGreen);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Green"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
|
|
|
|
msg.RemoveName("color");
|
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("num", 2);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(subMenu =
|
|
|
|
new BMenu(B_TRANSLATE("Lower left")), NULL));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.AddInt32("color", lightNone);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Off"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
subMenu->AddSeparatorItem();
|
|
|
|
msg.ReplaceInt32("color", lightWhite);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("White"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightYellow);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Yellow"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightBlue);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Blue"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightRed);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Red"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightGreen);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Green"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
|
|
|
|
msg.RemoveName("color");
|
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("num", 3);
|
2011-05-20 16:28:11 +00:00
|
|
|
menu->AddItem(item = new BMenuItem(subMenu =
|
|
|
|
new BMenu(B_TRANSLATE("Right")), NULL));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.AddInt32("color", lightNone);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Off"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
item->SetMarked(true);
|
2008-02-23 13:41:57 +00:00
|
|
|
subMenu->AddSeparatorItem();
|
|
|
|
msg.ReplaceInt32("color", lightWhite);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("White"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightYellow);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Yellow"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightBlue);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Blue"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightRed);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Red"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
2008-02-23 13:41:57 +00:00
|
|
|
msg.ReplaceInt32("color", lightGreen);
|
2011-05-20 16:28:11 +00:00
|
|
|
subMenu->AddItem(item = new BMenuItem(B_TRANSLATE("Green"),
|
|
|
|
new BMessage(msg)));
|
2007-10-25 12:28:22 +00:00
|
|
|
item->SetTarget(fObjectView);
|
|
|
|
|
2008-02-23 13:41:57 +00:00
|
|
|
float f = menuBar->Bounds().IntegerHeight() + 1;
|
|
|
|
SetSizeLimits(32, 1024, 32 + f, 1024 + f);
|
|
|
|
//TODO: verify, adding an height to x seems strange
|
2007-10-25 12:28:22 +00:00
|
|
|
Unlock();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
TeapotWindow::QuitRequested()
|
|
|
|
{
|
2008-09-12 19:08:31 +00:00
|
|
|
if (fObjectView != NULL)
|
|
|
|
fObjectView->EnableDirectMode(false);
|
2011-05-20 16:28:11 +00:00
|
|
|
|
2007-10-25 12:28:22 +00:00
|
|
|
be_app->PostMessage(B_QUIT_REQUESTED);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
TeapotWindow::DirectConnected(direct_buffer_info* info)
|
|
|
|
{
|
2012-03-16 03:39:31 +00:00
|
|
|
// TODO: Direct rendering causes the mouse to flicker due
|
|
|
|
// to the lack of a Hardware Cursor, however without
|
|
|
|
// it the teapot freezes on mouse move. (bug?)
|
|
|
|
#if 1
|
2008-09-12 19:08:31 +00:00
|
|
|
if (fObjectView != NULL) {
|
2011-05-20 16:28:11 +00:00
|
|
|
fObjectView->DirectConnected(info);
|
2008-09-12 19:08:31 +00:00
|
|
|
fObjectView->EnableDirectMode(true);
|
|
|
|
}
|
2012-03-16 03:39:31 +00:00
|
|
|
#endif
|
2007-10-25 12:28:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
TeapotWindow::MessageReceived(BMessage* msg)
|
|
|
|
{
|
|
|
|
// msg->PrintToStream();
|
|
|
|
switch (msg->what) {
|
|
|
|
default:
|
|
|
|
BDirectWindow::MessageReceived(msg);
|
2011-05-20 16:28:11 +00:00
|
|
|
}
|
2007-10-25 12:28:22 +00:00
|
|
|
}
|