Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: Source/WebCore/html/shadow/DateTimeEditElement.cpp

Issue 11557024: Merge 136808 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1312/
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 15 matching lines...) Expand all
26 #include "config.h" 26 #include "config.h"
27 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 27 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
28 #include "DateTimeEditElement.h" 28 #include "DateTimeEditElement.h"
29 29
30 #include "DateComponents.h" 30 #include "DateComponents.h"
31 #include "DateTimeFieldElements.h" 31 #include "DateTimeFieldElements.h"
32 #include "DateTimeFieldsState.h" 32 #include "DateTimeFieldsState.h"
33 #include "DateTimeFormat.h" 33 #include "DateTimeFormat.h"
34 #include "DateTimeSymbolicFieldElement.h" 34 #include "DateTimeSymbolicFieldElement.h"
35 #include "EventHandler.h" 35 #include "EventHandler.h"
36 #include "FontCache.h"
36 #include "HTMLNames.h" 37 #include "HTMLNames.h"
37 #include "KeyboardEvent.h" 38 #include "KeyboardEvent.h"
38 #include "MouseEvent.h" 39 #include "MouseEvent.h"
39 #include "PlatformLocale.h" 40 #include "PlatformLocale.h"
41 #include "RenderStyle.h"
42 #include "StyleResolver.h"
40 #include "Text.h" 43 #include "Text.h"
41 #include <wtf/DateMath.h> 44 #include <wtf/DateMath.h>
42 #include <wtf/text/StringBuilder.h> 45 #include <wtf/text/StringBuilder.h>
43 46
44 namespace WebCore { 47 namespace WebCore {
45 48
46 using namespace HTMLNames; 49 using namespace HTMLNames;
47 50
48 class DateTimeEditBuilder : private DateTimeFormat::TokenHandler { 51 class DateTimeEditBuilder : private DateTimeFormat::TokenHandler {
49 WTF_MAKE_NONCOPYABLE(DateTimeEditBuilder); 52 WTF_MAKE_NONCOPYABLE(DateTimeEditBuilder);
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 DateTimeEditElement::EditControlOwner::~EditControlOwner() 297 DateTimeEditElement::EditControlOwner::~EditControlOwner()
295 { 298 {
296 } 299 }
297 300
298 DateTimeEditElement::DateTimeEditElement(Document* document, EditControlOwner& e ditControlOwner) 301 DateTimeEditElement::DateTimeEditElement(Document* document, EditControlOwner& e ditControlOwner)
299 : HTMLDivElement(divTag, document) 302 : HTMLDivElement(divTag, document)
300 , m_editControlOwner(&editControlOwner) 303 , m_editControlOwner(&editControlOwner)
301 { 304 {
302 DEFINE_STATIC_LOCAL(AtomicString, dateTimeEditPseudoId, ("-webkit-datetime-e dit")); 305 DEFINE_STATIC_LOCAL(AtomicString, dateTimeEditPseudoId, ("-webkit-datetime-e dit"));
303 setShadowPseudoId(dateTimeEditPseudoId); 306 setShadowPseudoId(dateTimeEditPseudoId);
307 setHasCustomCallbacks();
304 } 308 }
305 309
306 DateTimeEditElement::~DateTimeEditElement() 310 DateTimeEditElement::~DateTimeEditElement()
307 { 311 {
308 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex) 312 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
309 m_fields[fieldIndex]->removeEventHandler(); 313 m_fields[fieldIndex]->removeEventHandler();
310 } 314 }
311 315
312 void DateTimeEditElement::addField(PassRefPtr<DateTimeFieldElement> field) 316 void DateTimeEditElement::addField(PassRefPtr<DateTimeFieldElement> field)
313 { 317 {
314 if (m_fields.size() == m_fields.capacity()) 318 if (m_fields.size() == m_fields.capacity())
315 return; 319 return;
316 m_fields.append(field.get()); 320 m_fields.append(field.get());
317 appendChild(field); 321 appendChild(field);
318 } 322 }
319 323
320 void DateTimeEditElement::blurByOwner() 324 void DateTimeEditElement::blurByOwner()
321 { 325 {
322 if (DateTimeFieldElement* field = focusedField()) 326 if (DateTimeFieldElement* field = focusedField())
323 field->blur(); 327 field->blur();
324 } 328 }
325 329
326 PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document* document, EditControlOwner& editControlOwner) 330 PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document* document, EditControlOwner& editControlOwner)
327 { 331 {
328 RefPtr<DateTimeEditElement> container = adoptRef(new DateTimeEditElement(doc ument, editControlOwner)); 332 RefPtr<DateTimeEditElement> container = adoptRef(new DateTimeEditElement(doc ument, editControlOwner));
329 return container.release(); 333 return container.release();
330 } 334 }
331 335
336 PassRefPtr<RenderStyle> DateTimeEditElement::customStyleForRenderer()
337 {
338 // FIXME: This is a kind of layout. We might want to introduce new renderer.
339 FontCachePurgePreventer fontCachePurgePreventer;
340 RefPtr<RenderStyle> originalStyle = document()->styleResolver()->styleForEle ment(this);
341 RefPtr<RenderStyle> style = RenderStyle::clone(originalStyle.get());
342 float width = 0;
343 for (Node* child = firstChild(); child; child = child->nextSibling()) {
344 if (!child->isElementNode())
345 continue;
346 Element* childElement = toElement(child);
347 if (childElement->isDateTimeFieldElement()) {
348 // We need to pass the Font of this element because child elements
349 // can't resolve inherited style at this timing.
350 width += static_cast<DateTimeFieldElement*>(childElement)->maximumWi dth(style->font());
351 } else {
352 // ::-webkit-datetime-edit-text case. It has no
353 // border/padding/margin in html.css.
354 width += style->font().width(childElement->textContent());
355 }
356 }
357 style->setMinWidth(Length(ceilf(width), Fixed));
358 return style.release();
359 }
360
332 void DateTimeEditElement::didBlurFromField() 361 void DateTimeEditElement::didBlurFromField()
333 { 362 {
334 if (m_editControlOwner) 363 if (m_editControlOwner)
335 m_editControlOwner->didBlurFromControl(); 364 m_editControlOwner->didBlurFromControl();
336 } 365 }
337 366
338 void DateTimeEditElement::didFocusOnField() 367 void DateTimeEditElement::didFocusOnField()
339 { 368 {
340 if (m_editControlOwner) 369 if (m_editControlOwner)
341 m_editControlOwner->didFocusOnControl(); 370 m_editControlOwner->didFocusOnControl();
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 { 589 {
561 DateTimeFieldsState dateTimeFieldsState; 590 DateTimeFieldsState dateTimeFieldsState;
562 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex) 591 for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
563 m_fields[fieldIndex]->populateDateTimeFieldsState(dateTimeFieldsState); 592 m_fields[fieldIndex]->populateDateTimeFieldsState(dateTimeFieldsState);
564 return dateTimeFieldsState; 593 return dateTimeFieldsState;
565 } 594 }
566 595
567 } // namespace WebCore 596 } // namespace WebCore
568 597
569 #endif 598 #endif
OLDNEW
« no previous file with comments | « Source/WebCore/html/shadow/DateTimeEditElement.h ('k') | Source/WebCore/html/shadow/DateTimeFieldElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698