/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
Point aBoxPos = GetParent()->LogicToPixel(rPortionPaintArea.Pos());
Size aBoxSize = GetParent()->LogicToPixel(rPortionPaintArea.SSize());
// First calculate the size of the frame around the field int nPadding = aBoxSize.Height() / 4;
aBoxPos.AdjustX(-nPadding);
aBoxPos.AdjustY(-nPadding);
aBoxSize.AdjustWidth(2 * nPadding);
aBoxSize.AdjustHeight(2 * nPadding);
IMPL_LINK_NOARG(FormFieldButton, FieldPopupModeEndHdl, weld::Popover&, void)
{
DestroyPopup();
m_rFieldmark.Invalidate(); // Hide the button here and make it visible later, to make transparent background work with SAL_USE_VCLPLUGIN=gen
Show(false);
Invalidate();
}
//const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
Color aLineColor = COL_BLACK;
Color aFillColor(lcl_GetFillColor(aLineColor.getBColor(), (m_xFieldPopup ? 0.5 : 0.75)));
// Draw the frame around the field // GTK3 backend cuts down the frame's top and left border, to avoid that add a padding around the frame int nPadding = 1;
Point aPos(nPadding, nPadding);
Size aSize(m_aFieldFramePixel.GetSize().Width() - nPadding,
m_aFieldFramePixel.GetSize().Height() - nPadding); const tools::Rectangle aFrameRect(tools::Rectangle(aPos, aSize));
rRenderContext.SetLineColor(aLineColor); if (rRenderContext.HasAlpha())
rRenderContext.SetFillColor(COL_TRANSPARENT); else
rRenderContext.SetFillColor(COL_WHITE);
rRenderContext.DrawRect(aFrameRect);
// Draw the button next to the frame
Point aButtonPos(aFrameRect.TopLeft());
aButtonPos.AdjustX(aFrameRect.GetSize().getWidth() - 1);
Size aButtonSize(aFrameRect.GetSize());
aButtonSize.setWidth(GetSizePixel().getWidth() - aFrameRect.getOpenWidth() - nPadding); const tools::Rectangle aButtonRect(tools::Rectangle(aButtonPos, aButtonSize));
WindowHitTest FormFieldButton::ImplHitTest(const Point& rFramePos)
{ // We need to check whether the position hits the button (the frame should be mouse transparent)
WindowHitTest aResult = Control::ImplHitTest(rFramePos); if (aResult != WindowHitTest::Inside) return aResult; else
{ return rFramePos.X() >= m_aFieldFramePixel.Right() ? WindowHitTest::Inside
: WindowHitTest::Transparent;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.