grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [GITGRUB] New menu interface (implementation)


From: Bean
Subject: Re: [GITGRUB] New menu interface (implementation)
Date: Tue, 6 Oct 2009 14:10:14 +0800

On Mon, Oct 5, 2009 at 9:40 PM, Michal Suchanek <address@hidden> wrote:
> 2009/10/5 Bean <address@hidden>:
>> On Mon, Oct 5, 2009 at 5:07 PM, Michal Suchanek <address@hidden> wrote:
>>> 2009/10/5 Bean <address@hidden>:
>>>> On Mon, Oct 5, 2009 at 6:20 AM, Michal Suchanek <address@hidden> wrote:
>>>>> Hello
>>>>>
>>>>> I tried to get some borders into the previous demo but I got overlapping 
>>>>> panels.
>>>>>
>>>>> This should not happen because it is not supported. That's what the
>>>>> layout manager is for.
>>>>
>>>> Hi,
>>>>
>>>> I think you misunderstand the meaning of margin_* properties. It means
>>>> that the widget is always at a constant distance from parent widget.
>>>> Once it's set, their position is fixed, it's not subject to the layout
>>>> manger. This is used to create sticky panels like docks. For example:
>>>>
>>>> panel
>>>> {
>>>>  panel { id="aa" margin_bottom=0 }
>>>>  panel { id="bb" }
>>>>  panel { id="cc" }
>>>>  panel { id="dd"}
>>>> }
>>>>
>>>> aa's location is fixed, bb, cc and dd's location is calculated by the
>>>> panel, they can overlap with aa.
>>>>
>>>> The sticky panel also doesn't move when view port is scrolled to
>>>> display active item.
>>>
>>> No, dock is easily created like
>>>
>>> panel
>>> {
>>>  panel { id="aa" margin_bottom=0 }
>>>  panel {
>>>  panel { id="bb" }
>>>  panel { id="cc" }
>>>  panel { id="dd"}
>>>  }
>>> }
>>>
>>> A panel should never be removed from layout management, it then
>>> becomes pointless.
>>
>> Hi,
>>
>> Sometimes it's useful to have absolute address, for example to adjust
>> the window according to the background image, it's quite tricky to do
>> this with dynamic positioning. If you want everything to be controlled
>
> How is it hard to measure the place where you want to place the
> element on the background bitmap and use that place as the margin (or
> outer space as you call it) and then align the element to the border
> from which you measured (as in valign = bottom)?
>
> You measure and enter the exact same value as you do with fixed
> positioning but the layout manages makes sure that another element
> does not cover your precisely positioned element.
>
>> by the layout manger, just don't use the property and wrap panels
>> around widgets.
>
> That does not work because I want to insert spacing which the layout
> manager does not do automatically.
>
>>
>> From your previous description, I think your meaning of margin is some
>> kind of space left around the border of panel, I think that could be
>> useful as well, but perhaps with a different name, I'm considering the
>> following properties:
>>
>> inner_left, inner_right, inner_top, inner_bottom: space reserved
>> inside the border
>> outer_left, outer_right, outer_top, outer_bottom: space reserved
>> outside the border
>>
>> Perhaps the naming of margin_* property is a little misleading,
>> perhaps I can rename them distance_* to remind it they're used as
>> fixed distance to borders of parent.
>
> Yes. margin is normally used for spacing, not absolute positioning.
> However, spacing and alignment can be used together to force an
> absolute position without the need for yet another property.

Hi,

I think you've overlooked a detail about grub's menu layout. The
smallest elements, text and image, both have fixed size, The largest
element, the screen, also have fixed size, therefore, we need to
adjust the middle layers to fit both ends, it's not as simple as it
seems.

There are two method to calculate the size of window. It can be
calculate using children widget, with auto layout, or parent widget,
with x,y,width,height coordinate, as the smallest and largest element
are fixed, we need to switch from children determined size to parent
determined size at some point during the walk of ui tree.

For operation system, the switch is at the window boundary. Consider
web browser. Inside the browser, elements are placed with layout
manager, no coordinate is needed, but the browser itself is placed on
the screen using x,y,width,height coordinate by the OS. For some OS
like chrome, it seems to incorporate the concept of using the whole
screen as browser. The menu system support both method, it's just a
matter of how you define the border, that's, when to switch from
x,y,width,height positioning to layout manager positioning.

Therefore, it needs to have two set of margin properties:

inner_*, outer_* : calculate from children to parent
attach_* : calculate from parent to children

-- 
Bean

gitgrub home: http://github.com/grub/grub/
my fork page: http://github.com/bean123/grub/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]