/******************************************************************************* * Copyright (c) 2012 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.runtime.swt.internal.widgets.win32.win32.x86; import java.util.concurrent.Callable; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import com.windowtester.runtime.swt.internal.widgets.TabItemReference; /** * A {@link TabItem} reference that uses native win32_x86-specific code to access bounds. */ public class TabItemReference_win32_win32_x86 extends TabItemReference { public TabItemReference_win32_win32_x86(TabItem control) { super(control); } /* (non-Javadoc) * @see com.windowtester.runtime.swt.internal.widgets.TabItemReference#getDisplayBounds() */ @Override public Rectangle getDisplayBounds() { return displayRef.execute(new Callable<Rectangle>() { public Rectangle call() throws Exception { TabItem tabItem = getWidget(); TabFolder parent = tabItem.getParent(); int index = parent.indexOf (tabItem); if (index == -1) return new Rectangle (0, 0, 0, 0); int [] rect = new int [4]; Win32.SendMessage (parent, /*TCM_GETITEMRECT*/ 0x130a, index, rect); int width = rect [2] - rect[0]; int height = rect [3] - rect [1]; Rectangle bounds = new Rectangle (rect [0], rect [1], width, height); return tabItem.getDisplay().map (tabItem.getParent (), null, bounds); } }); } }