Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / Source / core / layout / LayoutFileUploadControl.h
blobc33c2a348bdb3812cc2cce7ae511d0faeed303ed
1 /*
2 * Copyright (C) 2006, 2007, 2009, 2012 Apple Inc. All rights reserved.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
21 #ifndef LayoutFileUploadControl_h
22 #define LayoutFileUploadControl_h
24 #include "core/CoreExport.h"
25 #include "core/layout/LayoutBlockFlow.h"
27 namespace blink {
29 class HTMLInputElement;
31 // Each LayoutFileUploadControl contains a LayoutButton (for opening the file chooser), and
32 // sufficient space to draw a file icon and filename. The LayoutButton has a shadow node
33 // associated with it to receive click/hover events.
35 class CORE_EXPORT LayoutFileUploadControl final : public LayoutBlockFlow {
36 public:
37 LayoutFileUploadControl(HTMLInputElement*);
38 ~LayoutFileUploadControl() override;
40 bool isOfType(LayoutObjectType type) const override { return type == LayoutObjectFileUploadControl || LayoutBlockFlow::isOfType(type); }
42 String buttonValue();
43 String fileTextValue() const;
45 HTMLInputElement* uploadButton() const;
46 int uploadButtonWidth();
48 static const int afterButtonSpacing = 4;
50 const char* name() const override { return "LayoutFileUploadControl"; }
52 private:
53 void updateFromElement() override;
54 void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override;
55 void computePreferredLogicalWidths() override;
56 void paintObject(const PaintInfo&, const LayoutPoint&) override;
58 int maxFilenameWidth() const;
60 PositionWithAffinity positionForPoint(const LayoutPoint&) override;
62 bool m_canReceiveDroppedFiles;
65 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutFileUploadControl, isFileUploadControl());
67 } // namespace blink
69 #endif // LayoutFileUploadControl_h