Size DockCont::GetMinSize() const { if (ignoreminsize) return Size(0, 0); Size sz = tabbar.GetCount() ? GetCurrent().GetMinSize() : Size(0, 0); sz = AddFrameSize(sz); return sz; }
Size DockCont::GetStdSize() const { Size sz = usersize; if (IsNull(sz.cx) || IsNull(sz.cy)) { Size std = GetCurrent().GetStdSize(); if (IsNull(sz.cx)) sz.cx = std.cx; if (IsNull(sz.cy)) sz.cy = std.cy; } return AddFrameSize(sz); }
Size MenuItem::GetMinSize() const { Size sz1 = GetTextSize(text, font); Size sz2(0, 0); if(accel) { sz2 = GetTextSize(GetKeyDesc(accel), font); sz2.cx += Zx(12); } Size lsz = min(maxiconsize, licon.GetSize()); Size rsz = ricon.GetSize(); return AddFrameSize(Size(max(lsz.cx, leftgap) + sz1.cx + max(sz2.cx, (rsz.cx ? Zx(16) : 0)) + max(rsz.cx, Zx(16)) + textgap + Zx(10), max(max(lsz.cy, rsz.cy) + Zy(4), sz1.cy + Zy(6)))); }
void Puzzle::Generate() { int n = size.cx * size.cy; box.Alloc(n); n--; for(int i = 0; i < n; i++) box[i] = i + 1; box[n] = 0; hole = size - 1; n = 20 * size.cx * size.cy; while(n > 0) n -= Move(hole.x + (rand() % 3) - 1, hole.y + (rand() % 3) - 1); moves = 0; Status(); SetRect(GetWorkArea().CenterRect(AddFrameSize(size * 32))); }
Size ToolTip::GetMinSize() const { return AddFrameSize(GetSmartTextSize(text) + 4); }
Size TopMenuItem::GetMinSize() const { return AddFrameSize(GetTextSize(text, StdFont()) + Zsz(12, 7)); }
Size TopSubMenuItem::GetMinSize() const { return AddFrameSize(GetTextSize(text, font) + Size(12, 7)); }
Size DockCont::GetMaxSize() const { Size sz = tabbar.GetCount() ? GetCurrent().GetMaxSize() : Size(0, 0); return AddFrameSize(sz); }
void MenuBar::PopUp(Ctrl *owner, Point p, Size rsz) { bool szcx = true; bool szcy = true; bool szx = false; bool szy = false; if(parentmenu) { if(parentmenu->IsChild()) szcx = false; else szcy = false; WhenHelp = parentmenu->WhenHelp; } Rect r = GetWorkArea(p); restorefocus = GetFocusCtrl(); LLOG("PopUp " << UPP::Name(this) << " set restorefocus:" << UPP::Name(restorefocus)); DistributeAccessKeys(); frame.Set(style->popupframe); if(GUI_GlobalStyle() >= GUISTYLE_XP) SetFrame(frame); else SetFrame(OutsetFrame()); pane.SubMenu(); Size sz = pane.Repos(false, r.Height()); pane.RightPos(0, sz.cx).BottomPos(0, sz.cy); Size sz0 = sz; sz = AddFrameSize(sz); if(p.y + sz.cy > r.bottom) { if(p.y - r.top > r.bottom - p.y) { int y0; if (parentmenu && parentmenu->GetActiveSubmenu() && parentmenu->submenuitem) y0 = parentmenu->submenuitem->GetScreenRect().BottomRight().y + 2 + rsz.cy; else y0 = p.y + rsz.cy; szy = szcy; sz = pane.Repos(false, y0 - max(y0 - sz.cy, r.top) - (sz.cy - sz0.cy)); pane.RightPos(0, sz.cx).TopPos(0, sz.cy); sz = AddFrameSize(sz); p.y = y0 - sz.cy; } else { sz = pane.Repos(false, r.bottom - p.y - (sz.cy - sz0.cy)); pane.RightPos(0, sz.cx).BottomPos(0, sz.cy); sz = AddFrameSize(sz); } } if(p.x + sz.cx > r.right) { p.x = max(p.x + rsz.cx - sz.cx, r.left); szx = szcx; pane.LeftPos(0, sz.cx); } bool eff = parentmenu == NULL || parentmenu->doeffect; if(eff && GUI_PopUpEffect() == GUIEFFECT_SLIDE) SetRect(szx ? p.x + sz.cx : p.x, szy ? p.y + sz.cy : p.y, parentmenu ? sz.cx : 1, 1); else SetRect(p.x, p.y, sz.cx, sz.cy); #ifdef PLATFORM_WIN32 DWORD dummy; CloseHandle(CreateThread(NULL, 0, PlaySoundThread, NULL, 0, &dummy)); #endif doeffect = true; Ctrl::PopUp(owner, true, true, GUI_DropShadows(), !owner); GuiPlatformAfterMenuPopUp(); if(eff) Animate(*this, p.x, p.y, sz.cx, sz.cy); }