| // Copyright 2010-2014, Google Inc. |
| // All rights reserved. |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are |
| // met: |
| // |
| // * Redistributions of source code must retain the above copyright |
| // notice, this list of conditions and the following disclaimer. |
| // * Redistributions in binary form must reproduce the above |
| // copyright notice, this list of conditions and the following disclaimer |
| // in the documentation and/or other materials provided with the |
| // distribution. |
| // * Neither the name of Google Inc. nor the names of its |
| // contributors may be used to endorse or promote products derived from |
| // this software without specific prior written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| #ifndef MOZC_RENDERER_TABLE_LAYOUT_H_ |
| #define MOZC_RENDERER_TABLE_LAYOUT_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/coordinates.h" |
| #include "base/port.h" |
| #include "renderer/table_layout_interface.h" |
| |
| namespace mozc { |
| namespace renderer { |
| |
| // ------------------------------------------------------------------------ |
| // Schematic view of layout system |
| // ------------------------------------------------------------------------ |
| // |
| // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| // +HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH+ |
| // +HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH+ |
| // +...................................................II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +...................................................II+ |
| // +...................................................II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +...................................................II+ |
| // +...................................................II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +.0000000001111122222222222222222222233333333 .II+ |
| // +...................................................II+ |
| // +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF+ |
| // +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF+ |
| // +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF+ |
| // +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| // |
| // Legend: |
| // +: WindowBorder (window_border_pixels_) |
| // .: RowRectPadding (row_rect_padding_pixels_) |
| // I: Position Indicator |
| // H: Header width = total_size_.width - 2 * window_border_pixels_ |
| // >= minimum_header_size_.width |
| // height = minimum_header_size_.height |
| // F: Footer width = total_size_.width - 2 * window_border_pixels_ |
| // >= minimum_footer_size_.width |
| // height = minimum_footer_size_.height |
| // 1: First Cell width = column_width_[0] |
| // height = row_height_ - 2 * row_rect_padding_pixels_ |
| // 2: Second Cell width = column_width_[1] |
| // height = row_height_ - 2 * row_rect_padding_pixels_ |
| // |
| // All cells have the same height. |
| // All cells within the same column have the same width. |
| // |
| // GetRowRect(1) |
| // .................................................. |
| // .0000000001111122222222222222222222233333333 . |
| // .0000000001111122222222222222222222233333333 . |
| // .0000000001111122222222222222222222233333333 . |
| // .................................................. |
| // |
| // GetColumnRect(1) |
| // ..... |
| // 11111 |
| // 11111 |
| // 11111 |
| // ..... |
| // ..... |
| // 11111 |
| // 11111 |
| // 11111 |
| // ..... |
| // ..... |
| // 11111 |
| // 11111 |
| // 11111 |
| // ..... |
| |
| class TableLayout : public TableLayoutInterface { |
| public: |
| TableLayout(); |
| |
| // Reset layout freeze and initialize the number of rows and columns. |
| void Initialize(int num_rows, int num_columns); |
| |
| // Set layout element. |
| void SetVScrollBar(int width_in_pixels); |
| void SetWindowBorder(int width_in_pixels); |
| void SetRowRectPadding(int width_pixels); |
| |
| // Ensure the cell size is same to or larger than the specified size. |
| // - size.width affects cells within the specified column. |
| // - size.height affects all cells. |
| // You should not call this function when the layout is frozen. |
| void EnsureCellSize(int column, const Size &size); |
| |
| // Ensure the total width from "from_column" to "to_width" is at |
| // least "width" or larger. If total width is smaller than the |
| // "width", the last column (== "to_column") will extend. If this |
| // method is called twice, parameters specified by the second call |
| // will be used. Note that "to_column" should be bigger than |
| // "from_column". Otherwise, the call will be ignored. If you |
| // want to ensure a cell width, you should use EnsureCellSize instead. |
| void EnsureColumnsWidth(int from_column, int to_column, int width); |
| |
| // Ensure the size of header/footer is same to or larger than the |
| // specified size. |
| // You should not call this function when the layout is frozen. |
| void EnsureFooterSize(const Size &size_in_pixels); |
| void EnsureHeaderSize(const Size &size_in_pixels); |
| |
| // Fix the layout and calculate the total size. |
| void FreezeLayout(); |
| bool IsLayoutFrozen() const; |
| |
| // Get the rect which is bounding the specified cell. |
| // This rect does not include RowRectPadding. |
| // You should call FreezeLayout prior to this function. |
| Rect GetCellRect(int row, int column) const; |
| |
| // Get specified component rect. |
| // You should call FreezeLayout prior to these function. |
| Size GetTotalSize() const; |
| Rect GetHeaderRect() const; |
| Rect GetFooterRect() const; |
| Rect GetVScrollBarRect() const; |
| Rect GetVScrollIndicatorRect( |
| int begin_index, int end_index, int candidates_total) const; |
| |
| // Get the rect which is bounding the specified row. |
| // This rect includes RowRectPadding. |
| // You should call FreezeLayout prior to these function. |
| Rect GetRowRect(int row) const; |
| |
| // Get specified row rect. |
| // This rect includes RowRectPadding. |
| // You should call FreezeLayout prior to these function. |
| Rect GetColumnRect(int column) const; |
| |
| // Parameter getters |
| int number_of_rows() const; |
| int number_of_columns() const; |
| |
| private: |
| vector<int> column_width_list_; |
| Size padding_pixels_; |
| Size total_size_; // this value is valid only when the layout is frozen. |
| Size minimum_footer_size_; |
| Size minimum_header_size_; |
| |
| int ensure_width_from_column_; |
| int ensure_width_to_column_; |
| int ensure_width_; |
| |
| int number_of_rows_; |
| int number_of_columns_; |
| int window_border_pixels_; |
| int row_rect_padding_pixels_; |
| int row_height_; // this value includes (row_rect_padding * 2) |
| int vscroll_width_pixels_; |
| |
| bool layout_frozen_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TableLayout); |
| }; |
| |
| } // namespace renderer |
| } // namespace mozc |
| |
| #endif // MOZC_RENDERER_TABLE_LAYOUT_H_ |