added a menu to change the drawing mode
bounding boxes are now drawn alternatively red and green to differenciate between characters git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20751 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -40,6 +40,7 @@ ControlView::ControlView(BRect rect)
|
|||||||
fBoundingboxesCheckBox(NULL),
|
fBoundingboxesCheckBox(NULL),
|
||||||
fCyclingFontButton(NULL),
|
fCyclingFontButton(NULL),
|
||||||
fFontFamilyMenu(NULL),
|
fFontFamilyMenu(NULL),
|
||||||
|
fDrawingModeMenu(NULL),
|
||||||
fCycleFonts(false),
|
fCycleFonts(false),
|
||||||
fFontStyleindex(0)
|
fFontStyleindex(0)
|
||||||
{
|
{
|
||||||
@@ -111,6 +112,51 @@ ControlView::AttachedToWindow()
|
|||||||
new BMessage(ALIASING_MSG));
|
new BMessage(ALIASING_MSG));
|
||||||
fAliasingCheckBox->SetValue(B_CONTROL_ON);
|
fAliasingCheckBox->SetValue(B_CONTROL_ON);
|
||||||
AddChild(fAliasingCheckBox);
|
AddChild(fAliasingCheckBox);
|
||||||
|
|
||||||
|
rect.OffsetBy(0.0, offsetX);
|
||||||
|
fDrawingModeMenu = new BMenu("drawingmodemenu");
|
||||||
|
|
||||||
|
BMessage* drawingMsg = NULL;
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_COPY);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_COPY", drawingMsg));
|
||||||
|
fDrawingModeMenu->ItemAt(0)->SetMarked(true);
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_OVER);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_OVER", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_ERASE);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_ERASE", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_INVERT);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_INVERT", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_ADD);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_ADD", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_SUBTRACT);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_SUBTRACT", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_BLEND);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_BLEND", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_MIN);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_MIN", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_MAX);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_MAX", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_SELECT);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_SELECT", drawingMsg));
|
||||||
|
drawingMsg = new BMessage(DRAWINGMODE_CHANGED_MSG);
|
||||||
|
drawingMsg->AddInt32("_mode", B_OP_ALPHA);
|
||||||
|
fDrawingModeMenu->AddItem(new BMenuItem("B_OP_ALPHA", drawingMsg));
|
||||||
|
|
||||||
|
fDrawingModeMenu->SetLabelFromMarked(true);
|
||||||
|
|
||||||
|
BMenuField *drawingModeMenuField = new BMenuField(rect, "FontMenuField", "Drawing mode:", fDrawingModeMenu, true);
|
||||||
|
drawingModeMenuField->SetDivider(5+StringWidth("Drawing mode:"));
|
||||||
|
AddChild(drawingModeMenuField);
|
||||||
|
|
||||||
rect.OffsetBy(0.0, 22);
|
rect.OffsetBy(0.0, 22);
|
||||||
fBoundingboxesCheckBox = new BCheckBox(rect, "BoundingBoxes", "Bounding boxes",
|
fBoundingboxesCheckBox = new BCheckBox(rect, "BoundingBoxes", "Bounding boxes",
|
||||||
@@ -327,7 +373,8 @@ void
|
|||||||
ControlView::SetTarget(BHandler* handler)
|
ControlView::SetTarget(BHandler* handler)
|
||||||
{
|
{
|
||||||
delete fMessenger;
|
delete fMessenger;
|
||||||
fMessenger = new BMessenger(handler);
|
fMessenger = new BMessenger(handler);
|
||||||
|
fDrawingModeMenu->SetTargetForItems(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ class ControlView : public BView {
|
|||||||
BCheckBox* fBoundingboxesCheckBox;
|
BCheckBox* fBoundingboxesCheckBox;
|
||||||
BButton* fCyclingFontButton;
|
BButton* fCyclingFontButton;
|
||||||
BMenu* fFontFamilyMenu;
|
BMenu* fFontFamilyMenu;
|
||||||
|
BMenu* fDrawingModeMenu;
|
||||||
bool fCycleFonts;
|
bool fCycleFonts;
|
||||||
int32 fFontStyleindex;
|
int32 fFontStyleindex;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,6 +17,24 @@
|
|||||||
FontDemo::FontDemo()
|
FontDemo::FontDemo()
|
||||||
: BApplication("application/x-vnd.Haiku-FontDemo")
|
: BApplication("application/x-vnd.Haiku-FontDemo")
|
||||||
{
|
{
|
||||||
|
// Create the demo window where we draw the string
|
||||||
|
BWindow* demoWindow = new BWindow(BRect(80, 30, 490, 300), "FontDemo",
|
||||||
|
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
|
||||||
|
|
||||||
|
FontDemoView* demoView = new FontDemoView(demoWindow->Bounds());
|
||||||
|
demoWindow->AddChild(demoView);
|
||||||
|
|
||||||
|
BWindow* controlWindow = new BWindow(BRect(500, 30, 700, 402), "Controls",
|
||||||
|
B_FLOATING_WINDOW_LOOK, B_FLOATING_APP_WINDOW_FEEL,
|
||||||
|
B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS);
|
||||||
|
|
||||||
|
ControlView* controlView = new ControlView(controlWindow->Bounds());
|
||||||
|
controlWindow->AddChild(controlView);
|
||||||
|
|
||||||
|
controlView->SetTarget(demoView);
|
||||||
|
|
||||||
|
demoWindow->Show();
|
||||||
|
controlWindow->Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -28,24 +46,7 @@ FontDemo::~FontDemo()
|
|||||||
void
|
void
|
||||||
FontDemo::ReadyToRun()
|
FontDemo::ReadyToRun()
|
||||||
{
|
{
|
||||||
// Create the demo window where we draw the string
|
|
||||||
BWindow* demoWindow = new BWindow(BRect(80, 30, 490, 300), "FontDemo",
|
|
||||||
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
|
|
||||||
|
|
||||||
FontDemoView* demoView = new FontDemoView(demoWindow->Bounds());
|
|
||||||
demoWindow->AddChild(demoView);
|
|
||||||
|
|
||||||
BWindow* controlWindow = new BWindow(BRect(500,30, 700, 352), "Controls",
|
|
||||||
B_FLOATING_WINDOW_LOOK, B_FLOATING_APP_WINDOW_FEEL,
|
|
||||||
B_NOT_CLOSABLE | B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS);
|
|
||||||
|
|
||||||
ControlView* controlView = new ControlView(controlWindow->Bounds());
|
|
||||||
controlWindow->AddChild(controlView);
|
|
||||||
|
|
||||||
controlView->SetTarget(demoView);
|
|
||||||
|
|
||||||
demoWindow->Show();
|
|
||||||
controlWindow->Show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ FontDemoView::FontDemoView(BRect rect)
|
|||||||
fBufferView(NULL),
|
fBufferView(NULL),
|
||||||
fString(NULL),
|
fString(NULL),
|
||||||
fOutLineLevel(0),
|
fOutLineLevel(0),
|
||||||
|
fDrawingMode(B_OP_COPY),
|
||||||
fBoundingBoxes(false),
|
fBoundingBoxes(false),
|
||||||
fDrawShapes(false)
|
fDrawShapes(false)
|
||||||
{
|
{
|
||||||
@@ -76,6 +77,9 @@ FontDemoView::_DrawView(BView* view)
|
|||||||
{
|
{
|
||||||
if (!view)
|
if (!view)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
view->SetDrawingMode(B_OP_COPY);
|
||||||
|
|
||||||
|
|
||||||
BRect rect = view->Bounds();
|
BRect rect = view->Bounds();
|
||||||
view->SetHighColor(255, 255, 255);
|
view->SetHighColor(255, 255, 255);
|
||||||
@@ -152,12 +156,15 @@ FontDemoView::_DrawView(BView* view)
|
|||||||
view->StrokeShape(fShapes[i]);
|
view->StrokeShape(fShapes[i]);
|
||||||
} else {
|
} else {
|
||||||
view->SetHighColor(0, 0, 0);
|
view->SetHighColor(0, 0, 0);
|
||||||
view->SetDrawingMode(B_OP_OVER);
|
view->SetDrawingMode(fDrawingMode);
|
||||||
view->DrawChar(fString[i], BPoint(xCoordArray[i], yCoordArray[i]));
|
view->DrawChar(fString[i], BPoint(xCoordArray[i], yCoordArray[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoundingBoxes() && !OutLineLevel()) {
|
if (BoundingBoxes() && !OutLineLevel()) {
|
||||||
view->SetHighColor(255, 0, 0);
|
if (i % 2)
|
||||||
|
view->SetHighColor(0, 255, 0);
|
||||||
|
else
|
||||||
|
view->SetHighColor(255, 0, 0);
|
||||||
view->SetDrawingMode(B_OP_COPY);
|
view->SetDrawingMode(B_OP_COPY);
|
||||||
view->StrokeRect(boundBoxes[i]);
|
view->StrokeRect(boundBoxes[i]);
|
||||||
}
|
}
|
||||||
@@ -167,7 +174,7 @@ FontDemoView::_DrawView(BView* view)
|
|||||||
|
|
||||||
xCoord += (escapementArray[i] /*+ escapeDeltas[i].nonspace + escapeDeltas[i].space*/)
|
xCoord += (escapementArray[i] /*+ escapeDeltas[i].nonspace + escapeDeltas[i].space*/)
|
||||||
* FontSize() + Spacing();
|
* FontSize() + Spacing();
|
||||||
printf("xCoord %f\n", xCoord);
|
//printf("xCoord %f\n", xCoord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,6 +288,14 @@ FontDemoView::MessageReceived(BMessage* msg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case DRAWINGMODE_CHANGED_MSG:
|
||||||
|
{
|
||||||
|
if (msg->FindInt32("_mode", (int32 *)&fDrawingMode) == B_OK) {
|
||||||
|
Invalidate(/*&fBoxRegion*/);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case BOUNDING_BOX_MSG:
|
case BOUNDING_BOX_MSG:
|
||||||
{
|
{
|
||||||
bool boundingbox = false;
|
bool boundingbox = false;
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ class FontDemoView : public BView {
|
|||||||
float fFontSize;
|
float fFontSize;
|
||||||
float fSpacing;
|
float fSpacing;
|
||||||
int8 fOutLineLevel;
|
int8 fOutLineLevel;
|
||||||
|
drawing_mode fDrawingMode;
|
||||||
|
|
||||||
BRegion fBoxRegion;
|
BRegion fBoxRegion;
|
||||||
BFont fFont;
|
BFont fFont;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ const uint32 CYCLING_FONTS_MSG = 'cycl';
|
|||||||
const uint32 CYCLING_FONTS_UPDATE_MSG = 'cycU';
|
const uint32 CYCLING_FONTS_UPDATE_MSG = 'cycU';
|
||||||
const uint32 FONTSTYLE_CHANGED_MSG = 'fonS';
|
const uint32 FONTSTYLE_CHANGED_MSG = 'fonS';
|
||||||
const uint32 FONTFAMILY_CHANGED_MSG = 'fonF';
|
const uint32 FONTFAMILY_CHANGED_MSG = 'fonF';
|
||||||
|
const uint32 DRAWINGMODE_CHANGED_MSG = 'drmF';
|
||||||
const uint32 TEXT_CHANGED_MSG = 'text';
|
const uint32 TEXT_CHANGED_MSG = 'text';
|
||||||
|
|
||||||
#endif // MESSAGES_H
|
#endif // MESSAGES_H
|
||||||
|
|||||||
Reference in New Issue
Block a user