180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye/* 280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Copyright (C) 2011 The Android Open Source Project 380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * you may not use this file except in compliance with the License. 680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * You may obtain a copy of the License at 780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * http://www.eclipse.org/org/documents/epl-v10.php 980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 1080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Unless required by applicable law or agreed to in writing, software 1180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS, 1280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * See the License for the specific language governing permissions and 1480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * limitations under the License. 1580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 1680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyepackage com.android.ide.common.layout.relative; 1780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 1880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.BASELINE; 1980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.BOTTOM; 2080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.CENTER_HORIZONTAL; 2180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.CENTER_VERTICAL; 2280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.LEFT; 2380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.RIGHT; 2480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.TOP; 2580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport static com.android.ide.common.api.SegmentType.UNKNOWN; 2612d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ABOVE; 2712d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_BASELINE; 2812d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_BOTTOM; 2912d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_LEFT; 3012d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_PARENT_BOTTOM; 3112d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_PARENT_LEFT; 3212d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_PARENT_RIGHT; 3312d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_PARENT_TOP; 3412d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_RIGHT; 3512d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_ALIGN_TOP; 3612d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_BELOW; 3712d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_CENTER_HORIZONTAL; 3812d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_CENTER_IN_PARENT; 3912d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_CENTER_VERTICAL; 4012d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_TO_LEFT_OF; 4112d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_LAYOUT_TO_RIGHT_OF; 4280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 430cb8e647ef345f5c2a6b7eb08b517421131bca4eTor Norbyeimport com.android.annotations.NonNull; 440cb8e647ef345f5c2a6b7eb08b517421131bca4eTor Norbyeimport com.android.annotations.Nullable; 4580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport com.android.ide.common.api.SegmentType; 4680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 4780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport java.util.HashMap; 4880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeimport java.util.Map; 4980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 5080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye/** 5180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Each constraint type corresponds to a type of constraint available for the 5280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * RelativeLayout; for example, {@link #LAYOUT_ABOVE} corresponds to the layout_above constraint. 5380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 5480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbyeenum ConstraintType { 5580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_ABOVE(ATTR_LAYOUT_ABOVE, 5680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye null /* sourceX */, BOTTOM, null /* targetX */, TOP, 5780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye false /* targetParent */, true /* horizontalEdge */, false /* verticalEdge */, 5880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye true /* relativeToMargin */), 5980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 6080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_BELOW(ATTR_LAYOUT_BELOW, null, TOP, null, BOTTOM, false, true, false, true), 6180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_TOP(ATTR_LAYOUT_ALIGN_TOP, null, TOP, null, TOP, false, true, false, false), 6280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_BOTTOM(ATTR_LAYOUT_ALIGN_BOTTOM, null, BOTTOM, null, BOTTOM, false, true, false, false), 6380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_LEFT(ATTR_LAYOUT_ALIGN_LEFT, LEFT, null, LEFT, null, false, false, true, false), 6480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_RIGHT(ATTR_LAYOUT_ALIGN_RIGHT, RIGHT, null, RIGHT, null, false, false, true, false), 6580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_LEFT_OF(ATTR_LAYOUT_TO_LEFT_OF, RIGHT, null, LEFT, null, false, false, true, true), 6680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_RIGHT_OF(ATTR_LAYOUT_TO_RIGHT_OF, LEFT, null, RIGHT, null, false, false, true, true), 6780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_PARENT_TOP(ATTR_LAYOUT_ALIGN_PARENT_TOP, null, TOP, null, TOP, true, true, false, false), 6880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_BASELINE(ATTR_LAYOUT_ALIGN_BASELINE, null, BASELINE, null, BASELINE, false, true, false, 6980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye false), 7080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_PARENT_LEFT(ATTR_LAYOUT_ALIGN_PARENT_LEFT, LEFT, null, LEFT, null, true, false, true, 7180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye false), 7280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_PARENT_RIGHT(ATTR_LAYOUT_ALIGN_PARENT_RIGHT, RIGHT, null, RIGHT, null, true, false, true, 7380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye false), 7480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ALIGN_PARENT_BOTTOM(ATTR_LAYOUT_ALIGN_PARENT_BOTTOM, null, BOTTOM, null, BOTTOM, true, true, 7580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye false, false), 7680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_CENTER_HORIZONTAL(ATTR_LAYOUT_CENTER_HORIZONTAL, CENTER_VERTICAL, null, CENTER_VERTICAL, 7780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye null, true, true, false, false), 7880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_CENTER_VERTICAL(ATTR_LAYOUT_CENTER_VERTICAL, null, CENTER_HORIZONTAL, null, 7980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye CENTER_HORIZONTAL, true, false, true, false), 8080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye LAYOUT_CENTER_IN_PARENT(ATTR_LAYOUT_CENTER_IN_PARENT, CENTER_VERTICAL, CENTER_HORIZONTAL, 8180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye CENTER_VERTICAL, CENTER_HORIZONTAL, true, true, true, false); 8280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 8380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye private ConstraintType(String name, SegmentType sourceSegmentTypeX, 8480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye SegmentType sourceSegmentTypeY, SegmentType targetSegmentTypeX, 8580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye SegmentType targetSegmentTypeY, boolean targetParent, boolean horizontalEdge, 8680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye boolean verticalEdge, boolean relativeToMargin) { 8780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye assert horizontalEdge || verticalEdge; 8880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 8980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.name = name; 9080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.sourceSegmentTypeX = sourceSegmentTypeX != null ? sourceSegmentTypeX : UNKNOWN; 9180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.sourceSegmentTypeY = sourceSegmentTypeY != null ? sourceSegmentTypeY : UNKNOWN; 9280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.targetSegmentTypeX = targetSegmentTypeX != null ? targetSegmentTypeX : UNKNOWN; 9380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.targetSegmentTypeY = targetSegmentTypeY != null ? targetSegmentTypeY : UNKNOWN; 9480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.targetParent = targetParent; 9580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.horizontalEdge = horizontalEdge; 9680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.verticalEdge = verticalEdge; 9780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye this.relativeToMargin = relativeToMargin; 9880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 9980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 10080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** The attribute name of the constraint */ 10180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final String name; 10280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 10380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** The horizontal position of the source of the constraint */ 10480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final SegmentType sourceSegmentTypeX; 10580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 10680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** The vertical position of the source of the constraint */ 10780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final SegmentType sourceSegmentTypeY; 10880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 10980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** The horizontal position of the target of the constraint */ 11080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final SegmentType targetSegmentTypeX; 11180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 11280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** The vertical position of the target of the constraint */ 11380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final SegmentType targetSegmentTypeY; 11480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 11580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** 11680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * If true, the constraint targets the parent layout, otherwise it targets another 11780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * view 11880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 11980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final boolean targetParent; 12080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 12180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** If true, this constraint affects the horizontal dimension */ 12280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final boolean horizontalEdge; 12380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 12480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** If true, this constraint affects the vertical dimension */ 12580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final boolean verticalEdge; 12680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 12780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** 12880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Whether this constraint is relative to the margin bounds of the node rather than 12980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * the node's actual bounds 13080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 13180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public final boolean relativeToMargin; 13280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 13380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** Map from attribute name to constraint type */ 13480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye private static Map<String, ConstraintType> sNameToType; 13580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 13680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** 13780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Returns the {@link ConstraintType} corresponding to the given attribute name, or 13880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * null if not found. 13980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 14080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @param attribute the name of the attribute to look up 14180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @return the corresponding {@link ConstraintType} 14280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 1430cb8e647ef345f5c2a6b7eb08b517421131bca4eTor Norbye @Nullable 1440cb8e647ef345f5c2a6b7eb08b517421131bca4eTor Norbye public static ConstraintType fromAttribute(@NonNull String attribute) { 14580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye if (sNameToType == null) { 14680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye ConstraintType[] types = ConstraintType.values(); 14742b2f34604a3f8e8ac191831d8f01a0498760d38Tor Norbye Map<String, ConstraintType> map = new HashMap<String, ConstraintType>(types.length); 14880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye for (ConstraintType type : types) { 14942b2f34604a3f8e8ac191831d8f01a0498760d38Tor Norbye map.put(type.name, type); 15080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 15142b2f34604a3f8e8ac191831d8f01a0498760d38Tor Norbye sNameToType = map; 15280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 15380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return sNameToType.get(attribute); 15480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 15580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 15680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** 15780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Returns true if this constraint type represents a constraint where the target edge 15880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * is one of the parent edges (actual edge, not center/baseline segments) 15980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 16080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @return true if the target segment is a parent edge 16180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 16280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public boolean isRelativeToParentEdge() { 16380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return this == ALIGN_PARENT_LEFT || this == ALIGN_PARENT_RIGHT || this == ALIGN_PARENT_TOP 16480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye || this == ALIGN_PARENT_BOTTOM; 16580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 16680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 16780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye /** 16880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * Returns a {@link ConstraintType} for a potential match of edges. 16980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * 17080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @param withParent if true, the target is the parent 17180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @param from the source edge 17280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @param to the target edge 17380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye * @return a {@link ConstraintType}, or null 17480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye */ 1750cb8e647ef345f5c2a6b7eb08b517421131bca4eTor Norbye @Nullable 17680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye public static ConstraintType forMatch(boolean withParent, SegmentType from, SegmentType to) { 17780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye // Attached to parent edge? 17880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye if (withParent) { 17980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (from) { 18080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case TOP: 18180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_PARENT_TOP; 18280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BOTTOM: 18380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_PARENT_BOTTOM; 18480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case LEFT: 18580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_PARENT_LEFT; 18680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case RIGHT: 18780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_PARENT_RIGHT; 18880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case CENTER_HORIZONTAL: 18980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_CENTER_VERTICAL; 19080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case CENTER_VERTICAL: 19180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_CENTER_HORIZONTAL; 19280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 19380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 19480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return null; 19580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 19680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 19780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye // Attached to some other node. 19880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (from) { 19980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case TOP: 20080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (to) { 20180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case TOP: 20280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_TOP; 20380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BOTTOM: 20480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_BELOW; 20580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BASELINE: 20680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_BASELINE; 20780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 20880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye break; 20980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BOTTOM: 21080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (to) { 21180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case TOP: 21280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_ABOVE; 21380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BOTTOM: 21480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_BOTTOM; 21580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BASELINE: 21680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_BASELINE; 21780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 21880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye break; 21980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case LEFT: 22080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (to) { 22180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case LEFT: 22280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_LEFT; 22380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case RIGHT: 22480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_RIGHT_OF; 22580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 22680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye break; 22780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case RIGHT: 22880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye switch (to) { 22980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case LEFT: 23080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return LAYOUT_LEFT_OF; 23180d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case RIGHT: 23280d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_RIGHT; 23380d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 23480d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye break; 23580d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye case BASELINE: 23680d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return ALIGN_BASELINE; 23780d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 23880d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye 23980d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye return null; 24080d9301c2e874b29889c41adb0623666cf534fa0Tor Norbye } 24112d4581faa6438941e65a9dc83213be34c6ca970Tor Norbye} 242