1 /*$ 2 Copyright (C) 2013-2020 Azel. 3 4 This file is part of AzPainter. 5 6 AzPainter is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 AzPainter is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 $*/ 19 20 /****************************** 21 * DrawData 定義 22 ******************************/ 23 24 #ifndef DEF_DRAW_H 25 #define DEF_DRAW_H 26 27 #include "mStrDef.h" 28 29 #include "defDrawGlobal.h" 30 #include "defCanvasInfo.h" 31 #include "defTool.h" 32 #include "ColorValue.h" 33 34 typedef struct _ImageBufRGB16 ImageBufRGB16; 35 typedef struct _ImageBuf8 ImageBuf8; 36 typedef struct _TileImage TileImage; 37 typedef struct _LayerList LayerList; 38 typedef struct _LayerItem LayerItem; 39 typedef struct _FillPolygon FillPolygon; 40 typedef struct _DrawFont DrawFont; 41 42 43 #define COLORMASK_MAXNUM 6 //色マスクの色最大数 44 #define COLPAL_GRADNUM 3 //中間色バーの数 45 #define LAYERCOLPAL_NUM 30 //レイヤ色パレットの数 46 #define RULE_RECORD_NUM 10 //定規の記録数 47 #define HEADTAIL_RECORD_NUM 10 //入り抜き記録数 48 49 50 /*---- data ----*/ 51 52 53 /** 描画用ポイントデータ */ 54 55 typedef struct _DrawPoint 56 { 57 double x,y,pressure; 58 }DrawPoint; 59 60 /** 定規の記録データ */ 61 62 typedef struct 63 { 64 uint8_t type; 65 double d[4]; 66 }RuleRecord; 67 68 69 /*---- sub data ----*/ 70 71 /** ツールデータ */ 72 73 typedef struct 74 { 75 int no; //現在のツール 76 uint8_t subno[TOOL_NUM], //ツールのサブ情報 77 opt_move, 78 opt_stamp; 79 80 uint16_t opt_fillpoly, 81 opt_fillpoly_erase, 82 opt_magicwand; 83 uint32_t opt_grad, 84 opt_fill; 85 }DrawToolData; 86 87 /** 色関連データ */ 88 89 typedef struct 90 { 91 uint32_t drawcol, //描画色(8bit) 92 bkgndcol, //背景色 93 gradcol[COLPAL_GRADNUM][2], //中間色、左右の色 (左の色の上位8bitは段階数) 94 layercolpal[LAYERCOLPAL_NUM]; //レイヤ色パレット 95 int32_t colmask_col[COLORMASK_MAXNUM + 1]; //マスク色。-1 で終端 96 uint16_t colpal_max_column; //カラーパレットの横最大数 97 uint8_t colmask_type, //色マスクタイプ (0:OFF 1:MASK 2:REV) 98 colmask_num, //色マスク、色数 99 hlspal_sel, //HLSパレット:H選択位置 100 hlspal_palx, //HLSパレット:パレット部分 XY 位置 101 hlspal_paly, 102 colpal_sel, //カラーパレットのタブ選択 103 colpal_cellw, //カラーパレットの表示幅 104 colpal_cellh; 105 106 RGBFix15 rgb15DrawCol, //描画色/背景色 15bitカラー 107 rgb15BkgndCol, 108 rgb15Colmask[COLORMASK_MAXNUM + 1]; //マスク色(15bit) r=0xffff で終端 109 }DrawColorData; 110 111 /** 定規データ */ 112 113 typedef struct 114 { 115 int type, 116 ntmp; 117 double parallel_rd, //平行線角度(ラジアン) 118 grid_rd, //グリッド線角度 119 ellipse_rd, //楕円角度 120 ellipse_yx, //楕円扁平率 (y/x) 121 dtmp[3]; 122 mDoublePoint press_pos, //ボタン押し時のイメージ位置 123 conc_pos, //集中線の中心位置 124 circle_pos, 125 ellipse_pos; 126 127 RuleRecord record[RULE_RECORD_NUM]; //記録データ 128 129 void (*funcGetPoint)(DrawData *,double *,double *); //点を補正する関数 130 }DrawRuleData; 131 132 /** 入り抜きデータ */ 133 134 typedef struct 135 { 136 uint8_t selno; //0:直線 1:ベジェ曲線 137 uint32_t curval[2], //現在の値 (上位16bit:入り 下位:抜き) 138 record[HEADTAIL_RECORD_NUM]; //登録リスト 139 }DrawHeadTailData; 140 141 /** テキスト描画データ */ 142 143 typedef struct 144 { 145 DrawFont *font; //テキスト描画用フォント 146 147 mStr strText, //現在の文字列 148 strName, //フォント名 149 strStyle; //フォントスタイル 150 int size, 151 char_space, 152 line_space, 153 create_dpi; //現在のフォントが作成された時の dpi 154 uint8_t weight, 155 slant, 156 hinting, 157 flags, 158 dakuten_combine, //濁点合成方法 159 in_dialog; //ダイアログ表示中か 160 }DrawTextData; 161 162 /** 選択範囲用データ */ 163 164 typedef struct 165 { 166 mRect rcsel; //選択のおおよその範囲 (tileimgSel != NULL の時) 167 168 TileImage *tileimgCopy; //コピーされたイメージ (ファイル出力失敗時) 169 uint32_t col_copyimg; //コピーされたイメージの線の色 170 }DrawSelectData; 171 172 /** 矩形編集用データ */ 173 174 typedef struct 175 { 176 mBox box; //範囲 (w == 0 で範囲なし) 177 uint8_t cursor_resize; //現在のリサイズカーソル状態(フラグ) 178 }DrawBoxEditData; 179 180 /** スタンプ用データ */ 181 182 typedef struct 183 { 184 TileImage *img; //スタンプ画像 185 mSize size; //スタンプ画像のサイズ 186 }DrawStampData; 187 188 /** 作業用データ */ 189 190 typedef struct 191 { 192 int ntmp[3], 193 optype, //現在の操作タイプ 194 opsubtype, //操作タイプのサブ情報 195 optoolno, //現在操作中のツール動作 196 press_btt, //操作開始時に押されたボタン (M_BTT_*) 197 release_only_btt, //ボタン番号。ボタン離し時は指定されたボタンのみ処理する 198 drag_cursor_type; //(ボタン押し時) グラブ中のみカーソルを変更する場合、APP_CURSOR_* を指定。 199 //-1 でカーソルはそのまま 200 201 uint32_t press_state; //操作開始時の装飾キー (M_MODS_*) 202 203 uint8_t opflags, //操作用オプションフラグ 204 drawinfo_flags, //drawOpSub_setDrawInfo() でセットされるフラグ 205 in_filter_dialog, //フィルタダイアログ中か (TRUE 時、ptmp = ダイアログのポインタ) 206 hide_canvas_select; //キャンバス描画で選択範囲の枠を非表示にするか (範囲イメージ移動で、移動中枠を表示しない場合) 207 208 mPoint ptLastArea, //前回のカーソル位置 (int) 209 pttmp[4]; 210 mDoublePoint ptd_tmp[1]; 211 mRect rcdraw, //描画範囲 212 rctmp[1]; 213 mBox boxtmp[1]; 214 215 DrawPoint dptAreaPress, //操作開始時のカーソル位置 216 dptAreaCur, //現在のカーソル位置 217 dptAreaLast; //前回のカーソル位置 218 219 void *ptmp; 220 uint64_t sec_midcol; //中間色作成の最初の押し時間 (sec) 221 222 RGBAFix15 rgbaDraw; //描画色 223 224 TileImage *dstimg, //描画先イメージ 225 *tileimg_filterprev; //フィルタのキャンバスプレビュー時の挿入イメージ (NULL でなし) 226 LayerItem *layer; //リンクの先頭レイヤ 227 228 FillPolygon *fillpolygon; 229 230 void (*funcMotion)(DrawData *,uint32_t); //ポインタ移動時の処理関数。NULL で何もしない 231 mBool (*funcRelease)(DrawData *); //ボタン離し時の処理関数。NULL でグラブ解放のみ行う 232 void (*funcPressInGrab)(DrawData *p,uint32_t); //グラブ中にボタンが押された時の処理関数 233 mBool (*funcAction)(DrawData *p,int action); //右ボタンやキーなどが押された時の処理関数 234 }DrawWorkData; 235 236 237 /*---- DrawData ----*/ 238 239 240 /** DrawData */ 241 242 typedef struct _DrawData 243 { 244 int imgw,imgh,imgdpi; //イメージ幅、高さ、DPI 245 246 /* キャンバス用 */ 247 248 int canvas_zoom, //表示倍率 (100% = 1000) 249 canvas_angle; //表示角度 (1度 = 100) 250 uint8_t canvas_mirror, //左右反転表示 251 bCanvasLowQuality; //キャンバス表示を低品質で行うか 252 mSize szCanvas; //キャンバスの領域サイズ 253 mPoint ptScroll; //キャンバススクロール位置 254 double imgoriginX, //イメージの原点位置 255 imgoriginY; 256 257 RGBFix15 rgb15ImgBkgnd, //イメージ背景色 258 rgb15BkgndPlaid[2]; //背景チェック柄の色 259 260 CanvasViewParam viewparam; //座標計算用パラメータ 261 262 // 263 264 DrawWorkData w; 265 DrawColorData col; 266 DrawToolData tool; 267 DrawRuleData rule; 268 DrawHeadTailData headtail; 269 DrawStampData stamp; 270 DrawSelectData sel; 271 DrawBoxEditData boxedit; 272 DrawTextData drawtext; 273 274 // 275 276 mStr strOptTexPath; //オプションテクスチャのファイルパス 277 278 ImageBufRGB16 *blendimg; //全レイヤ合成後のイメージ 279 ImageBuf8 *img8OptTex; //オプションテクスチャの現在イメージ 280 281 TileImage *tileimgSel, //選択範囲用 (1bit) 282 *tileimgDraw, //描画用作業イメージ (描画部分の元イメージ保存用) 283 *tileimgDraw2, //(ブラシ描画時の描画濃度バッファ) 284 *tileimgTmp; //操作中のみの作業用イメージ 285 286 LayerList *layerlist; //レイヤリスト 287 LayerItem *curlayer, //カレントレイヤ 288 *masklayer; //マスクレイヤ 289 }DrawData; 290 291 292 /** DrawTextData::flags */ 293 294 enum 295 { 296 DRAW_DRAWTEXT_F_PREVIEW = 1<<0, 297 DRAW_DRAWTEXT_F_VERT = 1<<1, 298 DRAW_DRAWTEXT_F_ANTIALIAS = 1<<2, 299 DRAW_DRAWTEXT_F_SIZE_PIXEL = 1<<3, 300 DRAW_DRAWTEXT_F_DPI_MONITOR = 1<<4 301 }; 302 303 #endif 304