diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp index 72623f7..14d126d 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderFileUploadControl.cpp @@ -21,6 +21,7 @@ #include "config.h" #include "RenderFileUploadControl.h" +#include "Chrome.h" #include "FileList.h" #include "Frame.h" #include "FrameView.h" @@ -63,8 +64,13 @@ private: RenderFileUploadControl::RenderFileUploadControl(HTMLInputElement* input) : RenderBlock(input) , m_button(0) - , m_fileChooser(FileChooser::create(this, input->value())) { + FileList* list = input->files(); + Vector<String> filenames; + unsigned length = list ? list->length() : 0; + for (unsigned i = 0; i < length; ++i) + filenames.append(list->item(i)->path()); + m_fileChooser = FileChooser::create(this, filenames); } RenderFileUploadControl::~RenderFileUploadControl() @@ -103,15 +109,32 @@ bool RenderFileUploadControl::allowsMultipleFiles() return !input->getAttribute(multipleAttr).isNull(); } +String RenderFileUploadControl::acceptTypes() +{ + return static_cast<HTMLInputElement*>(node())->accept(); +} + +void RenderFileUploadControl::chooseIconForFiles(const Vector<String>& filenames) +{ + if (Chrome* chromePointer = chrome()) + chromePointer->chooseIconForFiles(filenames, m_fileChooser); +} + void RenderFileUploadControl::click() { + if (Chrome* chromePointer = chrome()) + chromePointer->runOpenPanel(node()->document()->frame(), m_fileChooser); +} + +Chrome* RenderFileUploadControl::chrome() const +{ Frame* frame = node()->document()->frame(); if (!frame) - return; + return 0; Page* page = frame->page(); if (!page) - return; - page->chrome()->runOpenPanel(frame, m_fileChooser); + return 0; + return page->chrome(); } void RenderFileUploadControl::updateFromElement() @@ -184,7 +207,7 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, int tx, int ty) } if (paintInfo.phase == PaintPhaseForeground) { - const String& displayedFilename = m_fileChooser->basenameForWidth(style()->font(), maxFilenameWidth()); + const String& displayedFilename = fileTextValue(); unsigned length = displayedFilename.length(); const UChar* string = displayedFilename.characters(); TextRun textRun(string, length, false, 0, 0, style()->direction() == RTL, style()->unicodeBidi() == Override); @@ -204,7 +227,7 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, int tx, int ty) + buttonRenderer->marginTop() + buttonRenderer->borderTop() + buttonRenderer->paddingTop() + buttonRenderer->baselinePosition(true, false); - paintInfo.context->setFillColor(style()->color()); + paintInfo.context->setFillColor(style()->color(), style()->colorSpace()); // Draw the filename paintInfo.context->drawBidiText(style()->font(), textRun, IntPoint(textX, textY)); @@ -284,7 +307,7 @@ String RenderFileUploadControl::buttonValue() return m_button->value(); } -String RenderFileUploadControl::fileTextValue() +String RenderFileUploadControl::fileTextValue() const { return m_fileChooser->basenameForWidth(style()->font(), maxFilenameWidth()); } |