Some minor work on minimum window sizes. A WinBorder now makes sure it has

a valid size on construction; DefaultDecorator should do that as well.
ServerApp AS_CREATE_WINDOW now makes sure it passes a valid rectangle to
ServerWindow's constructor.
Smaller default size for Layers that have been created with an invalid frame.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13291 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2005-06-27 02:06:15 +00:00
parent 0d58f3c284
commit 08d9a6e30d
4 changed files with 36 additions and 8 deletions
+4 -1
View File
@@ -58,8 +58,11 @@ DefaultDecorator::DefaultDecorator(BRect rect, int32 wlook, int32 wfeel, int32 w
// Do initial decorator setup
_DoLayout();
// ToDo: if the decorator was created with a frame too small, it should resize itself!
STRACE(("DefaultDecorator:\n"));
STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",rect.left,rect.top,rect.right,rect.bottom));
STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",
rect.left, rect.top, rect.right, rect.bottom));
}
DefaultDecorator::~DefaultDecorator(void)
+2 -2
View File
@@ -126,7 +126,7 @@ char helper[1024];
sprintf(helper, "Layer::Layer(BRect(%.1f, %.1f, %.1f, %.1f), name: %s, token: %ld) - frame is invalid\n",
frame.left, frame.top, frame.right, frame.bottom, name, token);
CRITICAL(helper);
fFrame.Set(0, 0, 10, 10);
fFrame.Set(0, 0, 1, 1);
}
if (!fDriver)
@@ -1040,7 +1040,7 @@ void
Layer::ResizeBy(float x, float y)
{
STRACE(("Layer(%s)::ResizeBy() START\n", Name()));
if (!fParent) {
printf("ERROR: in Layer::ResizeBy()! - No parent!\n");
return;
+6
View File
@@ -443,6 +443,12 @@ ServerApp::_MessageLooper()
if (receiver.ReadString(&title) != B_OK)
break;
if (!frame.IsValid()) {
// make sure we pass a valid rectangle to ServerWindow
frame.right = frame.left + 1;
frame.bottom = frame.top + 1;
}
// ServerWindow constructor will reply with port_id of a newly created port
ServerWindow *window = new ServerWindow(title, this, clientReplyPort,
looperPort, token, frame, look, feel, flags, workspaces);
+24 -5
View File
@@ -57,7 +57,7 @@
# define STRACE_CLICK(x) ;
#endif
WinBorder::WinBorder(const BRect &r,
WinBorder::WinBorder(const BRect &frame,
const char *name,
const uint32 wlook,
const uint32 wfeel,
@@ -65,7 +65,7 @@ WinBorder::WinBorder(const BRect &r,
const uint32 wwksindex,
ServerWindow *win,
DisplayDriver *driver)
: Layer(r, name, B_NULL_TOKEN, B_FOLLOW_NONE, 0UL, driver),
: Layer(frame, name, B_NULL_TOKEN, B_FOLLOW_NONE, 0UL, driver),
fDecorator(NULL),
fTopLayer(NULL),
@@ -116,10 +116,29 @@ WinBorder::WinBorder(const BRect &r,
QuietlySetFeel(wfeel);
if (fFeel != B_NO_BORDER_WINDOW_LOOK) {
fDecorator = gDecorManager.AllocateDecorator(r, name, fLook, fFeel,
// ToDo: these should probably restricted by the decorator only, but
// the code there doesn't look too robust to me currently
fMinWidth = 20;
fMinHeight = 20;
}
if (fFrame.Width() < fMinWidth)
fFrame.right = fFrame.left + fMinWidth;
if (fFrame.Height() < fMinHeight)
fFrame.bottom = fFrame.top + fMinHeight;
if (fFeel != B_NO_BORDER_WINDOW_LOOK) {
fDecorator = gDecorManager.AllocateDecorator(frame, name, fLook, fFeel,
fWindowFlags, fDriver);
if (fDecorator)
if (fDecorator) {
fDecorator->GetSizeLimits(&fMinWidth, &fMinHeight, &fMaxWidth, &fMaxHeight);
// we need to change our size to let the decorator fit
if (fMinWidth > fFrame.Width())
fFrame.right = fFrame.left + fMinWidth;
if (fMinHeight > fFrame.Height())
fFrame.bottom = fFrame.top + fMinHeight;
}
}
#ifndef NEW_CLIPPING
@@ -130,7 +149,7 @@ WinBorder::WinBorder(const BRect &r,
STRACE(("WinBorder %s:\n", GetName()));
STRACE(("\tFrame: (%.1f, %.1f, %.1f, %.1f)\n", r.left, r.top, r.right, r.bottom));
STRACE(("\tWindow %s\n",win ? win->Title() : "NULL"));
STRACE(("\tWindow %s\n", win ? win->Title() : "NULL"));
}
WinBorder::~WinBorder()