gfx/skia/trunk/src/views/animated/SkStaticTextView.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     2 /*
     3  * Copyright 2011 Google Inc.
     4  *
     5  * Use of this source code is governed by a BSD-style license that can be
     6  * found in the LICENSE file.
     7  */
     8 #include "SkWidgetViews.h"
     9 #include "SkTextBox.h"
    11 #ifdef SK_DEBUG
    12 static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char attr[])
    13 {
    14     const char* value = dom.findAttr(node, attr);
    15     if (value)
    16         SkDebugf("unknown attribute %s=\"%s\"\n", attr, value);
    17 }
    18 #else
    19     #define assert_no_attr(dom, node, attr)
    20 #endif
    22 SkStaticTextView::SkStaticTextView()
    23 {
    24     fMargin.set(0, 0);
    25     fMode = kFixedSize_Mode;
    26     fSpacingAlign = SkTextBox::kStart_SpacingAlign;
    28 //    init_skin_paint(kStaticText_SkinEnum, &fPaint);
    29 }
    31 SkStaticTextView::~SkStaticTextView()
    32 {
    33 }
    35 void SkStaticTextView::computeSize()
    36 {
    37     if (fMode == kAutoWidth_Mode)
    38     {
    39         SkScalar width = fPaint.measureText(fText.c_str(), fText.size());
    40         this->setWidth(width + fMargin.fX * 2);
    41     }
    42     else if (fMode == kAutoHeight_Mode)
    43     {
    44         SkScalar width = this->width() - fMargin.fX * 2;
    45         int lines = width > 0 ? SkTextLineBreaker::CountLines(fText.c_str(), fText.size(), fPaint, width) : 0;
    47         this->setHeight(lines * fPaint.getFontSpacing() + fMargin.fY * 2);
    48     }
    49 }
    51 void SkStaticTextView::setMode(Mode mode)
    52 {
    53     SkASSERT((unsigned)mode < kModeCount);
    55     if (fMode != mode)
    56     {
    57         fMode = SkToU8(mode);
    58         this->computeSize();
    59     }
    60 }
    62 void SkStaticTextView::setSpacingAlign(SkTextBox::SpacingAlign align)
    63 {
    64     fSpacingAlign = SkToU8(align);
    65     this->inval(NULL);
    66 }
    68 void SkStaticTextView::getMargin(SkPoint* margin) const
    69 {
    70     if (margin)
    71         *margin = fMargin;
    72 }
    74 void SkStaticTextView::setMargin(SkScalar dx, SkScalar dy)
    75 {
    76     if (fMargin.fX != dx || fMargin.fY != dy)
    77     {
    78         fMargin.set(dx, dy);
    79         this->computeSize();
    80         this->inval(NULL);
    81     }
    82 }
    84 size_t SkStaticTextView::getText(SkString* text) const
    85 {
    86     if (text)
    87         *text = fText;
    88     return fText.size();
    89 }
    91 size_t SkStaticTextView::getText(char text[]) const
    92 {
    93     if (text)
    94         memcpy(text, fText.c_str(), fText.size());
    95     return fText.size();
    96 }
    98 void SkStaticTextView::setText(const SkString& text)
    99 {
   100     this->setText(text.c_str(), text.size());
   101 }
   103 void SkStaticTextView::setText(const char text[])
   104 {
   105     if (text == NULL)
   106         text = "";
   107     this->setText(text, strlen(text));
   108 }
   110 void SkStaticTextView::setText(const char text[], size_t len)
   111 {
   112     if (!fText.equals(text, len))
   113     {
   114         fText.set(text, len);
   115         this->computeSize();
   116         this->inval(NULL);
   117     }
   118 }
   120 void SkStaticTextView::getPaint(SkPaint* paint) const
   121 {
   122     if (paint)
   123         *paint = fPaint;
   124 }
   126 void SkStaticTextView::setPaint(const SkPaint& paint)
   127 {
   128     if (fPaint != paint)
   129     {
   130         fPaint = paint;
   131         this->computeSize();
   132         this->inval(NULL);
   133     }
   134 }
   136 void SkStaticTextView::onDraw(SkCanvas* canvas)
   137 {
   138     this->INHERITED::onDraw(canvas);
   140     if (fText.isEmpty())
   141         return;
   143     SkTextBox    box;
   145     box.setMode(fMode == kAutoWidth_Mode ? SkTextBox::kOneLine_Mode : SkTextBox::kLineBreak_Mode);
   146     box.setSpacingAlign(this->getSpacingAlign());
   147     box.setBox(fMargin.fX, fMargin.fY, this->width() - fMargin.fX, this->height() - fMargin.fY);
   148     box.draw(canvas, fText.c_str(), fText.size(), fPaint);
   149 }
   151 void SkStaticTextView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
   152 {
   153 if (false) { // avoid bit rot, suppress warning
   154     this->INHERITED::onInflate(dom, node);
   156     int    index;
   157     if ((index = dom.findList(node, "mode", "fixed,auto-width,auto-height")) >= 0) {
   158         this->setMode((Mode)index);
   159     } else {
   160         assert_no_attr(dom, node, "mode");
   161     }
   163     if ((index = dom.findList(node, "spacing-align", "start,center,end")) >= 0) {
   164         this->setSpacingAlign((SkTextBox::SpacingAlign)index);
   165     } else {
   166         assert_no_attr(dom, node, "spacing-align");
   167     }
   169     SkScalar s[2];
   170     if (dom.findScalars(node, "margin", s, 2)) {
   171         this->setMargin(s[0], s[1]);
   172     } else {
   173         assert_no_attr(dom, node, "margin");
   174     }
   176     const char* text = dom.findAttr(node, "text");
   177     if (text) {
   178         this->setText(text);
   179     }
   181     if ((node = dom.getFirstChild(node, "paint")) != NULL &&
   182         (node = dom.getFirstChild(node, "screenplay")) != NULL)
   183     {
   184 // FIXME: Including inflate_paint causes Windows build to fail -- it complains
   185 //  that SKListView::SkListView is undefined.
   186 #if 0
   187         inflate_paint(dom, node, &fPaint);
   188 #endif
   189     }
   190 }
   191 }

mercurial