1 /* 2 * Copyright 2019 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef LIB_TXT_SRC_PLACEHOLDER_RUN_H_ 18 #define LIB_TXT_SRC_PLACEHOLDER_RUN_H_ 19 20 #include "text_baseline.h" 21 22 namespace txt { 23 24 /// Where to vertically align the placeholder relative to the surrounding text. 25 enum class PlaceholderAlignment { 26 /// Match the baseline of the placeholder with the baseline. 27 kBaseline, 28 29 /// Align the bottom edge of the placeholder with the baseline such that the 30 /// placeholder sits on top of the baseline. 31 kAboveBaseline, 32 33 /// Align the top edge of the placeholder with the baseline specified in 34 /// such that the placeholder hangs below the baseline. 35 kBelowBaseline, 36 37 /// Align the top edge of the placeholder with the top edge of the font. 38 /// When the placeholder is very tall, the extra space will hang from 39 /// the top and extend through the bottom of the line. 40 kTop, 41 42 /// Align the bottom edge of the placeholder with the top edge of the font. 43 /// When the placeholder is very tall, the extra space will rise from 44 /// the bottom and extend through the top of the line. 45 kBottom, 46 47 /// Align the middle of the placeholder with the middle of the text. When the 48 /// placeholder is very tall, the extra space will grow equally from 49 /// the top and bottom of the line. 50 kMiddle, 51 }; 52 53 // Represents the metrics required to fully define a rect that will fit a 54 // placeholder. 55 // 56 // LibTxt will leave an empty space in the layout of the text of the size 57 // defined by this class. After layout, the framework will draw placeholders 58 // into the reserved space. 59 class PlaceholderRun { 60 public: 61 double width = 0; 62 double height = 0; 63 64 PlaceholderAlignment alignment; 65 66 TextBaseline baseline; 67 68 // Distance from the top edge of the rect to the baseline position. This 69 // baseline will be aligned against the alphabetic baseline of the surrounding 70 // text. 71 // 72 // Positive values drop the baseline lower (positions the rect higher) and 73 // small or negative values will cause the rect to be positioned underneath 74 // the line. When baseline == height, the bottom edge of the rect will rest on 75 // the alphabetic baseline. 76 double baseline_offset = 0; 77 78 PlaceholderRun(); 79 80 PlaceholderRun(double width, 81 double height, 82 PlaceholderAlignment alignment, 83 TextBaseline baseline, 84 double baseline_offset); 85 }; 86 87 } // namespace txt 88 89 #endif // LIB_TXT_SRC_PLACEHOLDER_RUN_H_ 90