Home | History | Annotate | Download | only in css
      1 /*
      2  * CSS Media Query
      3  *
      4  * Copyright (C) 2005, 2006 Kimmo Kinnunen <kimmo.t.kinnunen (at) nokia.com>.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  *
     15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
     16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26  */
     27 
     28 #include "config.h"
     29 #include "MediaQuery.h"
     30 
     31 #include "MediaQueryExp.h"
     32 
     33 namespace WebCore {
     34 
     35 MediaQuery::MediaQuery(Restrictor r, const String& mediaType, Vector<MediaQueryExp*>* exprs)
     36     : m_restrictor(r)
     37     , m_mediaType(mediaType)
     38     , m_expressions(exprs)
     39 {
     40     if (!m_expressions)
     41         m_expressions = new Vector<MediaQueryExp*>;
     42 }
     43 
     44 MediaQuery::~MediaQuery()
     45 {
     46     if (m_expressions) {
     47         deleteAllValues(*m_expressions);
     48         delete m_expressions;
     49     }
     50 }
     51 
     52 bool MediaQuery::operator==(const MediaQuery& other) const
     53 {
     54     if (m_restrictor != other.m_restrictor
     55         || m_mediaType != other.m_mediaType
     56         || m_expressions->size() != other.m_expressions->size())
     57         return false;
     58 
     59     for (size_t i = 0; i < m_expressions->size(); ++i) {
     60         MediaQueryExp* exp = m_expressions->at(i);
     61         MediaQueryExp* oexp = other.m_expressions->at(i);
     62         if (!(*exp == *oexp))
     63             return false;
     64     }
     65 
     66     return true;
     67 }
     68 
     69 String MediaQuery::cssText() const
     70 {
     71     String text;
     72     switch (m_restrictor) {
     73         case MediaQuery::Only:
     74             text += "only ";
     75             break;
     76         case MediaQuery::Not:
     77             text += "not ";
     78             break;
     79         case MediaQuery::None:
     80         default:
     81             break;
     82     }
     83     text += m_mediaType;
     84     for (size_t i = 0; i < m_expressions->size(); ++i) {
     85         MediaQueryExp* exp = m_expressions->at(i);
     86         text += " and (";
     87         text += exp->mediaFeature();
     88         if (exp->value()) {
     89             text += ": ";
     90             text += exp->value()->cssText();
     91         }
     92         text += ")";
     93     }
     94     return text;
     95 }
     96 
     97 } //namespace
     98