*See comments inline.* On Mon, Aug 1, 2016 at 12:48 PM, Yousuf 'Jay' Philips <[email protected]> wrote:
> On 08/01/2016 01:41 PM, Jos van den Oever wrote: > >> Good morning, >> >> Quite a puzzle, this topic. Had to rewrite my reply as I caught on to the >> thoughts you already put into it. >> > > Yes this is definitely a very confusing topic. :D > > On Monday 01 August 2016 09:14:40 Yousuf 'Jay' Philips wrote: >> >>> On 07/31/2016 11:11 PM, Jos van den Oever wrote: >>> >>> The concept of what ODF defines as a layer or group isnt something most >>> users will comprehend as its a foreign concept that no other app >>> implements and a concept not possible to conveniently show in a layering >>> tree. >>> >> >> I get that now. You could perhaps show the layer name in a (optional) >> column. >> > > With the limited space in the tree list, dedicating a column to show the > layer name wouldnt be a wise use of space, especially when layer and shape > names can be long. > > If ODF supporting apps have to support both what ODF defines as a layer >>> and group and what other formats define them as, unfortunately these >>> apps will likely stick with what the other formats define, which is what >>> karbon and flow have done. I would assume the best way to deal with this >>> complication is for ODF supporting software to have two layering modes >>> that handle specific formats, as the standard layering concept can be >>> saved to ODF, but ODF layering cant be saved back. >>> >> >> Indeed, looking at rendering order, an draw:layer is a group and a a >> draw:group is a layer. >> I think layers is a useful concept, but it does require a separate list >> from >> the navigator. I kind of like the current tabs in LO that show the layers. >> Toggle buttons for protection and visibility could go on the tabs. >> > > ODF layers and groups are interesting as a concept but seem to make things > more complicated than they should be. I can see the point of layers being > presented in horizontal tabs, as that best symbolizes that they dont affect > z-order, though i'm not so sure that toggle buttons on tabs would work. > > Regarding z-index, what does it mean to change the z-index on a group if >> the >> objects in the group also have a z-index? This is not defined in ODF. >> Presumably, objects inherit z-index from a group but can override it. >> >> ODF says: "The draw:z-index attribute defines a rendering order for >> shapes in a >> document instance. Shapes are rendered in the order in which they appear >> in >> the document in the absence of this attribute." >> > > With my limited knowledge of ODF, groups dont have z-index only shapes do, > so though you can pretend to move a group's z-index, you are actually > moving the z-index of the shapes. *In ODF (LO 5.1), groups do have a z-index. When a group is created, it is created as a new shape and assigned a z index. The sub shapes are assigned new z indices starting from the lowest z index, in order of the shapes contained within the group, but referenced to the group shape. Think of a sub array within an array.* *The ODF Specification also defines a group element <draw:g> which has the attribute <draw:z-index>. Here is the reference: * *http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-draw_g <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-draw_g> * *All shapes with z indices greater than the lowest z index to be included in the group, but less than the highest z index of the shapes to be included in the group are reassigned indices, in the order they were before the grouping, beginning at the index of the lowest shape to be included in the group. The group is then assigned the next z index to follow. All remaining shapes with z indices higher than the index of the last shape to be included are then reassigned in order beginning with the first index following the group.* *For example take the following array of shapes: [a, b, c, d, e, f, g, h].* *Here is the result after grouping shapes b, d, and f: [a,c,e, [b, d, f], g, h].* *The group now has the index of 3, and the index for h changed from 7 to 5. The rendering order is now a, c, e, b, d, f, g, h.* > In CSS, each element has it's own stacking order. So, no interleaving is >> possible unless the elements are interleaved. SVG has no z-index at all, >> only >> document order. So it's normal that Inkscape is simpler/less powerful in >> this >> regard. >> > > Not sure why CSS would be an example of a drawing format, so maybe you can > clarify that. With SVG defining that document order is equivalent to > z-index, it doesnt have to define an actual z-index value. This is no > different than pages in a book or slides in a presentation. > > CSS and SVG are conceptually nice and simple. In ODF, a separate z-index >> based >> array is necessary to do efficient drawing. >> > > I believe efficient drawing can be done with a document order type > z-index, as i would assume photoshop's psd format and illustrator's ai > format follow this simple ordering. Even ODF states "Shapes are rendered in > the order in which they appear in the document in the absence of this > attribute." > > I'm not sure how many documents we'd break if we'd go for a the simple CSS >> z- >> index model. If it's not too many, we could make the specification >> language >> more precise and the same as CSS. >> >> Yes i guessed that any app using the standard layering would have the >>> same problem of loading ODF layering, but there is a workaround that >>> could be done to still maintain the correct layering to some degree, >>> though it wouldnt work for groups across layers. >>> >> >> What is that workaround? >> > > So lets say we have 2 layers called Mobile and Tablet and we have 3 > objects on these two layers called iPhone, Nexus and iPad, with the below > ODF structure. > > [Layer] Mobile > [Object] iPhone (z-index: 1) > [Object] Nexus (z-index: 3) > [Layer] Tablet > [Object] iPad (z-index: 2) > > This could be processed into the standard layering system like so. > > [Layer] Mobile1 > [Object] iPhone (z-index: 1) > [Layer] Tablet > [Object] iPad (z-index: 2) > [Layer] Mobile2 > [Object] Nexus (z-index: 3) > > So basically it breaks up layers when objects of a z-index reside within > the objects on the layer. *While this is a good workaround, I don't know that it is entirely necessary. I think both layering schemes could easily be incorporated with a change in UI terminology and an LO specific layer feature that also manages z-index. Since the existing layers are essentially nothing more than visibility layers, I suggest renaming them as such in the UI, or perhaps V-Layers for short. The LO specific layers could be called Z-Layers. Unlike a V-Layer which only has attributes: draw:display, draw:name, and draw:protected, and does not change draw:z-index, a Z-Layer could have V-Layers as child elements, and also manage the draw:z-index of its child elements, simply by assigning the values of both attributes: draw:layer, and draw:z-index for each drawing object that is a child element. * *Each drawing object has the attributes <draw:layer> and <draw:z-index>. * *http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-draw_layer-set <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#element-draw_layer-set>* *http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#attribute-draw_z-index <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#attribute-draw_z-index>* * Using your workaround example, I could import the first ODF structure like so:* *[Z-Layer] Default* * [V-Layer] Mobile [Object] iPhone (z-index: 1) [Object] Nexus (z-index: 3) [V-Layer] Tablet [Object] iPad (z-index: 2)* *I could then add objects and layers, while maintaining and ODF readable document like so:* *[Z-Layer] Default [V-Layer] Mobile [Object] iPhone (z-index: 1) [Object] Nexus (z-index: 3) [V-Layer] Tablet [Object] iPad (z-index: 2) [Object] Galaxy Tab(z-index: 4) [V-Layer] PC [Object] Laptop (z-index: 5)[Z-Layer] New [V-Layer] Data [Object] Specs (z-index: 6)* *Since Z-Layers are LO specific, they are ignored by ODF, but since we structured it like this the resulting ODF document opened in another application would maintain the same structure and appearance, as shown below:* * [V-Layer] Mobile [Object] iPhone (z-index: 1) [Object] Nexus (z-index: 3) [V-Layer] Tablet [Object] iPad (z-index: 2) [Object] Galaxy Tab(z-index: 4) [V-Layer] PC [Object] Laptop (z-index: 5) [V-Layer] Data [Object] Specs (z-index: 6)* Yes i've reported the issue as i noticed the same and it comes down to >> LO not supporting <draw:layer-set> as a child element of <draw:page>. >> >> https://bugs.documentfoundation.org/show_bug.cgi?id=101218 >> > > Awesome to see the report and the discussion on it already. > Does your test suite have test documents for layers, groups, and stuff and it would be good to test to find out what else LO doesnt support correctly. Dont think that would help much, especially when you have a long layer >> list. We've gone with the idea to include the layer name after the shape >> name and/or in a tooltip. >> > > Right layers are orthogonal to grouping with draw:g. So still a separate > list > of layers. > Showing which elements belong to a layer by hightlighting when hovering the > layer tab could help for users to see the relation between the layer and > the > object > I guess such highlighting would be also useful in the navigator. > In browsers, with 'inspect element' this is a very nice feature that helps > a > lot to understand where all the parts of the document are. > I had played around with Draw last year as a new user and never noticed the tabs, but during that time i never felt that i was missing out of features that would have caused me to search around for them, as it treated the functionality just like any other app i was used to which dealt with stackable objects. But if i did notice the layers and clicked on them to try them out and draw some shapes on them, i doubt i would notice anything special, as layers didnt limit the movement of the object's z-index. But you can have a tree from the layer into the objects and allow changing >>> the z-index for the groups and the objects in the groups. >>> >> >> Likely this view is fine for advanced users who specifically want to use >> ODF's layering concept, but not something that the average user will. >> > > As you pointed out, layers and groups are independent concepts and do not > fit > in one hierarchy, so keeping the tabs for the layers might be simplest. > Yes layers are being kept in their own hierarchy separate from objects in expert mode. The choice to not include groups in the hierarchy is where it really gets tricking. Unfortunately you cant as group isnt limited to a layer, so its possible >> to have a group with two objects from two different layers. It would be >> great if there was some text or mockup from ODF of a hierarchical view >> to demonstrate how it could look. >> > > At this point I had to redo rewrite my reply mail. I totally missed that in > earlier mails. Knowing this, I agree that the layer cannot go in the same > hierarchy. > How we intend to separate layers - https://design.blog.documentfoundation.org/wp-content/uploads/sites/2/2016/07/20160730_ExpertMode.png That was for shapes and not layers, but its strange that i cant >> reproduce it now. >> > > If you name a layer 'Locked' then an object may have draw:layer="Locked" > as an > attribute. Same goes for 'Invisible'. Perhaps you used those names when > creating an example file. > > I do not think that Karbon has hardcoded layer names. > Yep that might have been it and i got confused. :D This is what i would like to propose: >> >> 1) draw:display - used in <draw:layer> to be ported to groups and objects. >> >> 2) draw:opacity - used in <style:graphic-properties> to be ported to >> layers and groups to alter the opacity of all underlying shapes. >> > > This is already in the spec, because of style inheritance. If opacity is > not > defined on object (via the style) directly, it will look at the parent > styles. > If the parent styles do not set it, than opacity should be inherited from > the > parent group. This is similar to how e.g. font size is inherited. > From what i understood with draw:opacity is that it isnt an attribute of layers or groups. "The <draw:opacity> element specifies an opacity gradient for a graphic object." http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1416472_253892949 *<draw:opacity> isn't an attribute of layers or groups, but it appears that it can be used to modify the opacity of a layer or group, since layers and groups are graphical objects. Ref: http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1415788_253892949 <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1415788_253892949>Even if by chance layers and groups can't be directly modified by <draw:opacity>, then it can be used to modify the list of elements contained therein.* > > 3) tree:collapse - a boolean value for saving the state of whether a >>> layer or group was open or closed. >>> >> >> That's a UI dependent thing. It should not go into the content.xml or >> styles.xml but into settings.xml where application specific UI settings >> are >> stored. >> > > The intend would be for other apps to support this as well and it not be > just an application specific feature. Everytime i opened up a document in > Karbon the layers werent collapsed, so i had to repeatedly expand them to > get to the shapes i wanted to work on. Any app that would display a > hierarchy in this manner would benefit from this feature. > *I don't see why any application specific feature couldn't be structured such that they will still display properly in other applications, since the application specific features could still be using the ODF specified features to accomplish their task.* > > Cheers, >> Jos >> > > On my quest to find some other app that has a similar type of layering > system, i found it in visio (just another reason why i correctly compare > draw with visio and not inkscape ;D). Their expert focused "Drawing > Explorer" shows the structure and leaves out the manipulation of z-index, > which allows the successful hierarchy of shapes and groups. Definitely > something to consider for expert mode. > > http://i.stack.imgur.com/l9Qts.png > > https://youtu.be/fCBcpBfxrgI?t=4m36s > > Yousuf > > > -- > To unsubscribe e-mail to: [email protected] > Problems? > http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/ > Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette > List archive: http://listarchives.libreoffice.org/global/design/ > All messages sent to this list will be publicly archived and cannot be > deleted > > > -- To unsubscribe e-mail to: [email protected] Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/ Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette List archive: http://listarchives.libreoffice.org/global/design/ All messages sent to this list will be publicly archived and cannot be deleted
