// --------------------------------------------------------------------------- #include #include #include #pragma hdrstop #include "Text_F.h" #include "MainImage.h" #include "Palette.h" #include "Undo.h" #include "winbase.h" #include "LogData.h" // --------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "RzEdit" #pragma link "RzSpnEdt" #pragma link "RzLabel" #pragma link "RzBckgnd" #pragma link "RzButton" #pragma link "RzCmboBx" #pragma link "RzRadChk" #pragma resource "*.dfm" // --------------------------------------------------------------------------- #define IDS_FONT StringTable[0] #define IDS_SHAPE StringTable[1] #define IDS_HORV StringTable[2] #define IDS_CIRCLE StringTable[3] #define IDS_INTERVAL StringTable[4] #define IDS_TUNNELCOUNT StringTable[5] #define IDS_RUNTUNNEL StringTable[6] #define IDS_REARRANGE StringTable[7] #define IDS_TUNNEL StringTable[8] #define IDS_CONTINUOUS StringTable[9] #define IDS_RZSIZE StringTable[10] #define IDS_NORMAL StringTable[11] #define IDS_FIXSIZE StringTable[12] #define IDS_FREE StringTable[13] #define IDS_BOLD StringTable[14] #define IDS_ITALIC StringTable[15] #define IDS_BOLD_ITALIC StringTable[16] // --------------------------------------------------------------------------- TTextForm *TextForm; // --------------------------------------------------------------------------- FIXED __fastcall FixedFormDouble(double d) { long l; l = (long)(d * 65536L); return *(FIXED*) & l; } // --------------------------------------------------------------------------- __fastcall TTextForm::TTextForm(TComponent* Owner) : TForm(Owner) { BEGIN_LOG(""); // ========================================================== StringTable.Create(DirectoryBin, Language, "Text"); /* SetSmallFont(Font); SetSmallFont(rxHeight->Font); SetSmallFont(rxInterval->Font); SetSmallFont(ComboBoxShape->Font); SetSmallFont(Label1->Font); SetSmallFont(Label2->Font); SetSmallFont(Label3->Font); SetSmallFont(Label4->Font); SetSmallFont(Label6->Font); SetSmallFont(spRun->Font); SetSmallFont(spReArrange->Font); SetSmallFont(LabelFont->Font); SetSmallFont(ButtonFont->Font); SetSmallFont(Edit->Font); */ // ButtonFont->Caption = IDS_FONT; Label1->Caption = IDS_FONT; // Label2->Caption = IDS_COMMON_SIZE; Label3->Caption = IDS_SHAPE; // Label4->Caption = IDS_INTERVAL; Label5->Caption = IDS_RZSIZE; Label6->Caption = IDS_TUNNELCOUNT; RzCheckBox1->Caption = IDS_CONTINUOUS; RzCheckBox2->Caption = IDS_COMMON_REPEAT; spRun->Hint = IDS_RUNTUNNEL; spReArrange->Hint = IDS_REARRANGE; ComboBoxShape->Items->Clear(); ComboBoxShape->Items->Add(IDS_HORV); ComboBoxShape->Items->Add(IDS_COMMON_OBLIQUE); ComboBoxShape->Items->Add(IDS_CIRCLE); ComboBoxShape->Items->Add(IDS_TUNNEL); ComboBoxShape->Items->Add(IDS_COMMON_CURVE); // ============================================= by hjs ³ªÁß¿¡ tdw ÆÄÀÏÀ» º¯°æÇؾßÇÔ... // ComboBoxShape->Items->Add(IDS_VER); // ¼öÁ÷¾²±â Àü¿ë // ============================================== ButtonOK->Caption = IDS_COMMON_BUTTONOK; // =========================================================== rzcbSizeType->Items->Clear(); rzcbSizeType->Items->Add(IDS_NORMAL); rzcbSizeType->Items->Add(IDS_FIXSIZE); rzcbSizeType->Items->Add(IDS_FREE); rzcbFontStyle->Items->Clear(); rzcbFontStyle->Items->Add(IDS_NORMAL); rzcbFontStyle->Items->Add(IDS_BOLD); rzcbFontStyle->Items->Add(IDS_ITALIC); rzcbFontStyle->Items->Add(IDS_BOLD_ITALIC); rzcbFontStyle->ItemIndex = 0; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::FormCreate(TObject *Sender) { TFont *font = MainImageForm->iMainImage->Canvas->Font; // ±âº»ÀûÀ¸·Î ÆùÆ®¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î Items¸¦ ¹Þ¾Æ¿À´Â °ÍÀº ÁÖ¼®Ã³¸®ÇÏ¿´´Ù. // 2007.08.22.diekun // FontNameBox->Items = MainMenuForm->getVectorFontName->VectorFontName; // default_index¸¦ 0À¸·Î Çϸé Çѱۿ¡¼­´Â ¼¼·Î¹®Á¦°¡ ¼±ÅõDZ⠶§¹®¿¡ // ¾Æ·¡¿Í °°ÀÌ Ã³¸®Çß´Ù. À©µµ¿ì¸¶´Ù ÆùÆ®°³¼ö°¡ ´Ù¸£±â ¶§¹®¿¡ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. 20080522 by david TFont *tfont = new TFont(); tfont->Handle = (HFONT)GetStockObject(DEFAULT_GUI_FONT); // ±¼¸² String _DefaultFontName = tfont->Name; delete tfont; tfont = NULL; int default_index = FontNameBox->Items->IndexOf(font->Name); if (default_index < 0) { default_index = FontNameBox->Items->IndexOf(DefaultFontName); if (default_index < 0) default_index = 0; } FontNameBox->ItemIndex = default_index; String fontname; if (FontNameBox->SelectedFont) fontname = FontNameBox->SelectedFont->Name; // Text; else fontname = FontNameBox->FontName; font->Name = fontname; } // --------------------------------------------------------------------------- void __fastcall TTextForm::seHeightChange(TObject *Sender) { BEGIN_LOG(""); double rval; int DPI = MainImageForm->CanvasInfor.DotsPerInch; if (seHeight->Text.Length() > 0) { if (seHeight->Value < 0) { ChangeValue(int(DPI / 2.54)); } FHeight = ConvertToDot(seHeight->Value); if (SizeItem == 0) { MainImageForm->iMainImage->Canvas->Font->Size = FHeight; } GetTextMetrics(MainImageForm->iMainImage->Canvas->Handle, &TextMetric); } /* // Old Version if (seHeight->Text.Length()>0) { if (seHeight->Value < 0) seHeight->Value = 0; DPI = MainImageForm->CanvasInfor.DotsPerInch; FHeight = int(seHeight->Value*DPI/2.54); if (SizeItem == 0) { MainImageForm->iMainImage->Canvas->Font->Size = FHeight; } GetTextMetrics(MainImageForm->iMainImage->Canvas->Handle, &TextMetric); UpdateMenu(); } */ END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::seIntervalChange(TObject *Sender) { BEGIN_LOG(""); if (seInterval->Text.Length() > 0) { if (seInterval->Value < 0) seInterval->Value = 0; GetTextMetrics(MainImageForm->iMainImage->Canvas->Handle, &TextMetric); } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ComboBoxShapeChange(TObject *Sender) { // BEGIN_LOG(""); // // // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) // pnCurveOption->Visible = false; // pnTunnelOption->Visible = false; // // POINT *pData=NULL; // for (int i = 0; i < pstore->Count; i++) { // pData = (POINT *)pstore->Items[i]; // if (pData) delete pData; // } // pstore->Clear(); // // if(ComboBoxShape->ItemIndex == 3) { // if (SizeItem>0) { // Shape = ComboBoxShape->ItemIndex; // } else { // ShowMessage(IDS_MESSAGE_NOTTUNNEL); //lhskys ¿¡·¯ ¸Þ¼¼Áö Áß Fix size »èÁ¦ // ComboBoxShape->ItemIndex = Shape; // } // } else if(ComboBoxShape->ItemIndex == 4) { // if(SizeItem==1) // Shape = ComboBoxShape->ItemIndex; // else { // ShowMessage(IDS_MESSAGE_NOTCURVE); // ComboBoxShape->ItemIndex = Shape; // } // } else { // Shape = ComboBoxShape->ItemIndex; // } // // if(ComboBoxShape->ItemIndex == 4 && SizeItem==1) { // RzCheckBox1->Enabled = true; // pnCurveOption->Top = pnTunnelOption->Top; // pnCurveOption->BringToFront(); // pnCurveOption->Visible = true; // } // else RzCheckBox1->Enabled=false; // // RzCheckBox2->Enabled=RzCheckBox1->Enabled; // // MainImageForm->ResetDraw(true); // UpdateMenu(); // Step = 0; // bPosition = false; // IsPosition(); // // END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::EditChange(TObject *Sender) { BEGIN_LOG(""); int tnt = 0; if (OSVERSION < 2) { // win 98, win 95, win 3.1 if (SizeItem == 0) { if (bPosition) { CursorOldPos = CursorNewPos; CursorNewPos = Edit->SelStart; if (Shape == 2) ViewCircle(); else ViewOblique(); } } } else { // NT, win 2000 if (SizeItem == 0) { if (bPosition) { CursorOldPos = CursorNewPos; tnt = Edit->SelStart; if ((tnt - CursorNewPos) % 2) { // Language = English CursorNewPos = tnt; } else { // Language = Koran CursorNewPos = tnt - 2; } if (Shape == 2) ViewCircle(); else ViewOblique(); } } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::EditClick(TObject *Sender) { Edit->SetFocus(); } // --------------------------------------------------------------------------- void __fastcall TTextForm::ButtonOKClick(TObject *Sender) { BEGIN_LOG(""); ///* //BeConverted by linuxjun Don't Forget!! Undo_Method bool undoSw = false; THistoryData *ud; TPException ec = EC_NONE; if (Shape != 4) DeleteText(); if (Shape == 4) { Curve_TextOut(pstore); } if (MainImageForm->AutoRepeat && (MainImageForm->LayerCNT == MainImageForm->ARLayerCnt)) MainImageForm->RedrawingRepeat(false, false); // 2001.6.19 by lhskys autorepeat if ((undoSw = MainImageForm->UndoSave(UK_PATTERN, Rect(0, 0, 0, 0))) == false) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((ud = MainImageForm->Undo->GetLast()) == NULL) { ec = EC_UNDO_NONE; goto fail; } MainImageForm->iMainImage->uBitmap->PartialUndo->LoadLast(ud->FromRgb); // Original = ud->uBitmap; Original = ud->uBitmap; // by linuxjun // if (ud->LayerMask) OrigMask = ud->LayerMask; if (ud->LayerMask) { OrigMask = ud->LayerMask; // by linuxjun MainImageForm->iMainImage->LayerMask->PartialUndo->LoadLast(ud->FromRgb); } else OrigMask = NULL; Step = 0; bPosition = false; IsPosition(); MainImageForm->ResetDraw(); ::RepaintImage(); g_FocusControl->SetFocus(); END_LOG; return; fail: if (undoSw == true) MainImageForm->Undo->RemoveLast(); EXCEPTION_MESSAGE_OK(ec); /* //BeConverted by linuxjun Don't Forget!! Undo_Method bool undoSw = false; TUndoData *ud; int ec = EC_NONE; if(Shape!=4)DeleteText(); if(Shape==4){ Curve_TextOut(pstore); } if ((undoSw = MainImageForm->UndoSave(UK_PATTERN, Rect(0, 0, MainImageForm->iMainImage->uBitmap->Width, MainImageForm->iMainImage->uBitmap->Height))) == false) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((ud = Undo->Last)==NULL) { ec = EC_UNDO_NONE; goto fail; } Original = ud->Bitmap; if (ud->LayerMask) OrigMask = ud->LayerMask; else OrigMask = NULL; Step = 0; bPosition = false; IsPosition(); MainImageForm->ResetDraw(); if (MainImageForm->AutoRepeat && (MainImageForm->LayerCNT == MainImageForm->ARLayerCnt)) MainImageForm->RedrawingRepeat(false, false); //2001.6.19 by lhskys autorepeat ::RepaintImage(); return; fail: if (undoSw == true) Undo->RemoveLast(); EXCEPTION_MESSAGE_OK(ec); */ END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::Timer200msTimer(TObject *Sender) { BEGIN_LOG(""); int tnt; if (OSVERSION < 2) { // win 98, win 95, win 3.1 if (SizeItem == 0) { if (bPosition && CursorNewPos != Edit->SelStart) { CursorOldPos = CursorNewPos; CursorNewPos = Edit->SelStart; if (Shape == 2) ViewCircle(); else ViewOblique(); } } } else { // NT, win 2000 if (SizeItem == 0) { if (bPosition && CursorNewPos != Edit->SelStart) { CursorOldPos = CursorNewPos; tnt = Edit->SelStart; if ((tnt - CursorNewPos) % 2) { // Language = English CursorNewPos = tnt; } else { // Language = Korean CursorNewPos = tnt - 2; } if (Shape == 2) ViewCircle(); else ViewOblique(); } } } /* if (SizeItem == 0) { if (bPosition && CursorNewPos!=Edit->SelStart) { CursorOldPos = CursorNewPos; CursorNewPos = Edit->SelStart; if (Shape==2) ViewCircle(); else ViewOblique(); } } */ END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::EditKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { BEGIN_LOG(""); // ======================================= by hjs(jons) /* LANGID langidDefault; // ¼±ÅÃµÈ ¾ð¾î¸¦ ÆÇ´Ü langidDefault = GetSystemDefaultLangID(); */ // {T_VEng, T_HEng, T_HKor } TDLang int k; k = Pos[1].x - Pos[0].x; if (k == 0) { // ¼öÁ÷ ¾²±â ÇÒ °æ¿ì lang = T_Ver; } // English else { // ¼öÆò¾²±â ÇÒ°æ¿ì lang = T_Hor; if (intvc) { seInterval->Value = oldintv; intvc = false; } } // ==================================================== /* if (SizeItem == 0) { //2001.7.21 lhskys ¹®ÀÚ¿¡¼­ if (Key == VK_RETURN) { //µÎ¹ø undosaveµÇ´Â°ÍÀ» ó¸®ÇϱâÀ§ÇÏ¿© ¸·À½ ButtonOKClick(ButtonOK); } } */ END_LOG; } // --------------------------------------------------------------------------- // Private Method // --------------------------------------------------------------------------- void __fastcall TTextForm::DeleteText() { BEGIN_LOG(""); TTextData *td; while (Text->Count > 0) { td = (TTextData*)Text->First(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } if (SizeItem == 0) Edit->Text = ""; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::UpdateMenu() { BEGIN_LOG(""); if (TextMetric.tmPitchAndFamily & TMPF_TRUETYPE) { ComboBoxShape->Enabled = true; seInterval->Enabled = true; rzcbSizeType->Enabled = true; if (SizeItem == 0) { seHeight->Enabled = true; seTCnt->Enabled = false; spReArrange->Enabled = false; if (bPosition) { Edit->Enabled = true; ButtonOK->Enabled = true; } else { Edit->Enabled = false; ButtonOK->Enabled = false; } } else if (SizeItem == 1) { seHeight->Enabled = true; seTCnt->Enabled = false; Edit->Enabled = true; spRun->Enabled = false; if (bPosition) { spReArrange->Enabled = true; ButtonOK->Enabled = true; } else { spReArrange->Enabled = false; ButtonOK->Enabled = false; } if (Shape == 3) { spRun->Enabled = true; seTCnt->Enabled = true; pnTunnelOption->BringToFront(); pnTunnelOption->Visible = true; } else { spRun->Enabled = false; seTCnt->Enabled = false; } } else { seHeight->Enabled = false; Edit->Enabled = true; if (bPosition) { ButtonOK->Enabled = true; spReArrange->Enabled = true; } else { ButtonOK->Enabled = false; spReArrange->Enabled = false; } if (Shape == 3) { spRun->Enabled = true; seTCnt->Enabled = true; pnTunnelOption->BringToFront(); pnTunnelOption->Visible = true; } else { spRun->Enabled = false; seTCnt->Enabled = false; } } } else { ComboBoxShape->Enabled = false; seInterval->Enabled = false; rzcbSizeType->Enabled = false; seHeight->Enabled = false; seTCnt->Enabled = false; spReArrange->Enabled = false; Edit->Enabled = false; ButtonOK->Enabled = false; spRun->Enabled = false; Step = 0; } if (pnTunnelOption->Visible || pnCurveOption->Visible) { pnOk->Top = 138; this->Height = 212; } else { pnOk->Top = pnTunnelOption->Top; this->ClientHeight = pnOk->Top + pnOk->Height; } END_LOG; } // --------------------------------------------------------------------------- TList *__fastcall TTextForm::MakeTextList() { BEGIN_LOG(""); TList *tl = NULL; int i, j, k, l, m; TTextData *ntd = NULL, *otd; TPException ec = EC_NONE; if ((tl = new TList) == NULL) { END_LOG; return NULL; } for (i = 1; i <= Edit->Text.Length(); i++) { if ((ntd = (TTextData*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TTextData))) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (ntd) { /* ntd->c = (Byte)Edit->Text[i]; if (IsDBCSLeadByte(ntd->c)) { i++; ntd->c = (ntd->c<<8)|(Byte)Edit->Text[i]; } */ ntd->c = Edit->Text[i]; ntd->pos = i; ntd->hMem = 0; ntd->color = -1; tl->Add(ntd); } } m = CursorOldPos > CursorNewPos ? CursorNewPos : CursorOldPos; i = 0; while (i < Text->Count) { otd = (TTextData*)Text->Items[i]; j = otd->pos; if (j > m) break; ntd = (TTextData*)tl->Items[i]; if (otd->c != ntd->c) break; ntd->gm = otd->gm; ntd->hMem = otd->hMem; otd->hMem = 0; ntd->color = otd->color; i++; } k = tl->Count - 1; if (k > i) { l = Text->Count - 1; while (l >= i && k >= 0) { otd = (TTextData*)Text->Items[l]; ntd = (TTextData*)tl->Items[k]; if (otd->c == ntd->c) { j = otd->pos; // if (j>=((TTextData *)(Text->Last()))->pos-(((TTextData *)(tl->Last()))->pos-CursorNewPos)) { if (j > ((TTextData*)(Text->Last()))->pos - (((TTextData*)(tl->Last())) ->pos - CursorNewPos)) { ntd->gm = otd->gm; ntd->hMem = otd->hMem; otd->hMem = 0; } // } ntd->color = otd->color; } l--; k--; } } END_LOG; return tl; fail: EXCEPTION_MESSAGE_OK(ec); END_LOG; return NULL; } // --------------------------------------------------------------------------- TList *__fastcall TTextForm::FHMakeTextList() { BEGIN_LOG(""); TList *tl = NULL; int i; TTextData *ntd = NULL; TPException ec = EC_NONE; if ((tl = new TList) == NULL) { END_LOG; return NULL; } for (i = 1; i <= Edit->Text.Length(); i++) { if ((ntd = (TTextData*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TTextData))) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (ntd) { /* ntd->c = (Byte)Edit->Text[i]; if (IsDBCSLeadByte(ntd->c)) { i++; ntd->c = (ntd->c<<8)|(Byte)Edit->Text[i]; } */ ntd->c = Edit->Text[i]; ntd->pos = i; ntd->hMem = 0; ntd->color = -1; tl->Add(ntd); } } END_LOG; return tl; fail: EXCEPTION_MESSAGE_OK(ec); END_LOG; return NULL; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ObliqueFont(TTextData *td, int sx, int sy, Byte *fbm) { BEGIN_LOG(""); TPItemImage *Image; int l, fx, fy, xx, yy; unsigned x, y; Byte *dst, *lp; COLORREF c = td->color; Image = MainImageForm->iMainImage; fx = sx + td->gm.gmptGlyphOrigin.x; fy = sy - td->gm.gmptGlyphOrigin.y; l = ((td->gm.gmBlackBoxX + 31) >> 5) << 2; if (Image->uBitmap->BitsPerPixel == 8) { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); lp = Image->LayerMask->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = c; //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 lp[xx] = 0; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = c; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } else { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; lp = Image->LayerMask->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 SetPixel24(dst, c); //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 *(lp + (xx >> 3)) &= ~(0x80 >> (xx & 7)); //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 SetPixel24(dst, c); //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ViewOblique() { BEGIN_LOG(""); TPItemImage *Image; TList *tl = NULL; // ============================= by hjs double Theta, sx, sy, tmp; // tmp : °¢µµ¸¦ Àӽà ÀúÀåÇϱâ À§ÇØ »ç¿ë // ============================= DWORD dwRet; void *lpBuf = NULL; int i, j, k, l, fx, fy, xx, yy, width; unsigned int x, y; Byte *fbm = NULL, *src, *dst, *lp, *slp; MAT2 m2; TTextData *td; int olddist, Width, Height, DPI; TPException ec = EC_NONE; double ssx, ssy; THistoryData * ud; Width = MainImageForm->iMainImage->uBitmap->Width; Height = MainImageForm->iMainImage->uBitmap->Height; olddist = newdist; DPI = MainImageForm->CanvasInfor.DotsPerInch; // ======================================= by hjs // if ( lang == T_Ver ) { // if ( seInterval->Value < 0.7 ) { // ¿µ¾î·Î ¼¼·Î¾²±â ÇÒ °æ¿ì Çѱ۰ú ´Þ¸® ±ÛÀÚ¸¶´Ù À§Ä¡°¡ ´Þ¶ó // oldintv = seInterval->Value; // ƯÈ÷ Á߽ɾƷ¡·Î ³»·Á°¡´Â ¼Ò¹®ÀÚÀÇ °æ¿ì °ãÃÄÁö´Â Çö»óÀ» ¸·±âÀ§ÇØ // seInterval->Value = 0.7; // °£°ÝÀ» µÎ¾úÀ½... // intvc = true; // } // } // ======================================= newdist = ConvertToDot(seInterval->Value); Image = MainImageForm->iMainImage; // try{ if (Pos[1].y != Pos[0].y || Pos[1].x != Pos[0].x) Theta = -atan2(Pos[1].y - Pos[0].y, Pos[1].x - Pos[0].x); // }catch(Exception &exception){ else Theta = 0; // } if (Theta < 0) Theta = Theta + 2 * M_PI; if (Original == NULL) { END_LOG; return; } else { if (!(Original->StartUndoScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (OrigMask) { if (!(OrigMask->StartUndoScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } } } if (!(Image->uBitmap->StartScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (Image->LayerMask) { if (!(Image->LayerMask->StartScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } } k = CursorOldPos > CursorNewPos ? CursorNewPos : CursorOldPos; sx = Pos[0].x; sy = Pos[0].y; for (i = 0; i < Text->Count; i++) { if ((ud = MainImageForm->Undo->GetLast()) == NULL) { ec = EC_UNDO_NONE; goto fail; } //////////////// ////////////////// MainImageForm->iMainImage->uBitmap->StopUndoScanLine(); MainImageForm->iMainImage->uBitmap->PartialUndo->LoadLast(ud->FromRgb); MainImageForm->iMainImage->uBitmap->StartUndoScanLine(); // if (ud->LayerMask&&Image->LayerMask) if (ud->LayerMask) { MainImageForm->iMainImage->LayerMask->StopUndoScanLine(); MainImageForm->iMainImage->LayerMask->PartialUndo->LoadLast(ud->FromRgb); MainImageForm->iMainImage->LayerMask->StartUndoScanLine(); } td = (TTextData*)Text->Items[i]; width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (td->pos > k) { if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } fbm = (Byte*)lpBuf; fx = sx + td->gm.gmptGlyphOrigin.x; fy = sy - td->gm.gmptGlyphOrigin.y; l = ((td->gm.gmBlackBoxX + 31) >> 5) << 2; if (Image->uBitmap->BitsPerPixel == 8) { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); lp = Image->LayerMask->GetScanLine(yy); src = Original->GetUndoScanLine(yy); slp = OrigMask->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = src[xx]; //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 lp[xx] = slp[xx]; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); src = Original->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = src[xx]; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } else { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; lp = Image->LayerMask->GetScanLine(yy); src = Original->GetUndoScanLine(yy) + 3 * fx; slp = OrigMask->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, src += 3, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 CopyPixel24(dst, src); //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (slp[xx >> 3] & (0x80 >> (xx & 7))) { //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 *(lp + (xx >> 3)) |= 0x80 >> (xx & 7); //////adsfadsf_Variable_Checked } else { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 *(lp + (xx >> 3)) &= ~(0x80 >> (xx & 7)); //////adsfadsf_Variable_Checked } } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; src = Original->GetUndoScanLine(yy) + 3 * fx; int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, src += 3, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 CopyPixel24(dst, src); //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } GlobalUnlock(td->hMem); lpBuf = NULL; fbm = NULL; } sx += (width + olddist) * cos(Theta); sy -= (width + olddist) * sin(Theta); } if ((tl = MakeTextList()) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } // ============================================ by hjs switch(lang) { // case T_Ver : tmp = Theta+M_PI/2; // ¼öÁ÷¹æÇâ ¿µ¾îÇ¥±â¸¦ À§ÇØ ... // break; case T_Hor: tmp = Theta; // ¼öÆò¹æÇâ ¿µ¾îÇ¥±â¸¦ À§ÇØ ... break; default: tmp = Theta; } m2.eM11 = FixedFormDouble(cos(tmp)); m2.eM12 = FixedFormDouble(sin(tmp)); m2.eM21 = FixedFormDouble(-sin(tmp)); m2.eM22 = FixedFormDouble(cos(tmp)); // ============================================ sx = Pos[0].x; sy = Pos[0].y; Cursor[0].x = sx - TextMetric.tmDescent * cos(Theta + M_PI / 2); Cursor[0].y = sy + TextMetric.tmDescent * sin(Theta + M_PI / 2); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Theta + M_PI / 2); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Theta + M_PI / 2); /* ============================================================ by hjs Cursor[0].x = sx-TextMetric.tmDescent*cos(Theta+M_PI); Cursor[0].y = sy+TextMetric.tmDescent*sin(Theta+M_PI); Cursor[1].x = Cursor[0].x+TextMetric.tmHeight*cos(Theta+M_PI); Cursor[1].y = Cursor[0].y-TextMetric.tmHeight*sin(Theta+M_PI); ============================================================ */ for (j = 0; j < tl->Count; j++) { td = (TTextData*)tl->Items[j]; if (td->hMem) { width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (td->pos >= k) { if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } ObliqueFont(td, sx, sy, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; } } else { if (td->color == -1) { td->color = PaletteForm->DIB256Palette->GetFGCOLORREF (Image->uBitmap->BitsPerPixel); } if ((dwRet = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRet)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRet, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); ObliqueFont(td, sx, sy, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; } sx += (width + newdist) * cos(Theta); sy -= (width + newdist) * sin(Theta); if (td->pos <= CursorNewPos) { if ((sx > 0 && sx < Width) && (sy > 0 && sy < Height)) { Cursor[0].x = sx - TextMetric.tmDescent * cos(Theta + M_PI / 2); Cursor[0].y = sy + TextMetric.tmDescent * sin(Theta + M_PI / 2); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Theta + M_PI / 2); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Theta + M_PI / 2); IsCursor = true; } else { IsCursor = false; } } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); Original->StopUndoScanLine(); if (OrigMask) OrigMask->StopUndoScanLine(); Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); Original->StopUndoScanLine(); if (OrigMask) OrigMask->StopUndoScanLine(); EXCEPTION_MESSAGE_OK(ec); Edit->Text = ""; ButtonOK->Enabled = false; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::CircleFont(TTextData *td, double R, double Alpha, Byte *fbm) { BEGIN_LOG(""); TPItemImage *Image; int l, fx, fy, xx, yy; unsigned int x, y; Byte *dst, *lp; COLORREF c = td->color; Image = MainImageForm->iMainImage; fx = Pos[1].x + R * cos(Alpha) + td->gm.gmptGlyphOrigin.x; fy = Pos[1].y - R * sin(Alpha) - td->gm.gmptGlyphOrigin.y; l = ((td->gm.gmBlackBoxX + 31) >> 5) << 2; if (Image->uBitmap->BitsPerPixel == 8) { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); lp = Image->LayerMask->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = c; //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 lp[xx] = 0; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = c; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } else { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; lp = Image->LayerMask->GetScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 SetPixel24(dst, c); //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 *(lp + (xx >> 3)) &= ~(0x80 >> (xx & 7)); //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 SetPixel24(dst, c); //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ViewCircle() { BEGIN_LOG(""); TList *tl = NULL; MAT2 m2; TPItemImage *Image; DWORD dwRet; void *lpBuf = NULL; int i, j, k, l, fx, fy, xx, yy, width, lx, ly; unsigned int x, y; Byte *fbm = NULL, *src, *dst, *lp, *slp; TTextData *td; double Alpha, Theta, R, a; bool cursor, out; int olddist, Width, Height, cx, cy, compx, compy, DPI; TPException ec = EC_NONE; THistoryData *ud; Width = MainImageForm->iMainImage->uBitmap->Width; Height = MainImageForm->iMainImage->uBitmap->Height; olddist = newdist; DPI = MainImageForm->CanvasInfor.DotsPerInch; newdist = ConvertToDot(seInterval->Value); Image = MainImageForm->iMainImage; lx = Pos[0].x - Pos[1].x; ly = Pos[0].y - Pos[1].y; R = sqrt(lx * lx + ly * ly); // try{ if (ly != 0 || lx != 0) Alpha = -atan2(ly, lx); else // }catch(Exception &exception){ Alpha = 0; // } // Alpha = -atan2(ly, lx); if (Alpha < 0) Alpha += 2 * M_PI; k = CursorOldPos > CursorNewPos ? CursorNewPos : CursorOldPos; if (Original == NULL) { END_LOG; return; } else { if (!(Original->StartUndoScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (OrigMask) { if (!(OrigMask->StartUndoScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } } } if (!(Image->uBitmap->StartScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if (Image->LayerMask) { if (!(Image->LayerMask->StartScanLine())) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } } for (i = 0; i < Text->Count; i++) { if ((ud = MainImageForm->Undo->GetLast()) == NULL) { ec = EC_UNDO_NONE; goto fail; } /* MainImageForm->iMainImage->uBitmap->StopUndoScanLine(); MainImageForm->iMainImage->uBitmap->PartialUndo->LoadLast(ud->FromRgb); MainImageForm->iMainImage->uBitmap->StartUndoScanLine(); */ MainImageForm->iMainImage->uBitmap->LoadLastUb(ud->FromRgb); // if (ud->LayerMask&&Image->LayerMask) if (ud->LayerMask) { /* MainImageForm->iMainImage->LayerMask->StopUndoScanLine(); MainImageForm->iMainImage->LayerMask->PartialUndo->LoadLast(ud->FromRgb); MainImageForm->iMainImage->LayerMask->StartUndoScanLine(); */ MainImageForm->iMainImage->uBitmap->LoadLastUb(ud->FromRgb); } td = (TTextData*)Text->Items[i]; width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (td->pos > k && td->hMem) { if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } fbm = (Byte*)lpBuf; fx = Pos[1].x + R * cos(Alpha) + td->gm.gmptGlyphOrigin.x; fy = Pos[1].y - R * sin(Alpha) - td->gm.gmptGlyphOrigin.y; l = ((td->gm.gmBlackBoxX + 31) >> 5) << 2; if (Image->uBitmap->BitsPerPixel == 8) { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); lp = Image->LayerMask->GetScanLine(yy); src = Original->GetUndoScanLine(yy); slp = OrigMask->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = src[xx]; //////adsfadsf_Variable_Checked lp[xx] = slp[xx]; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy); src = Original->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 dst[xx] = src[xx]; //////adsfadsf_Variable_Checked } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } else { if (Image->LayerMask) { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; lp = Image->LayerMask->GetScanLine(yy); src = Original->GetUndoScanLine(yy) + 3 * fx; slp = OrigMask->GetUndoScanLine(yy); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, src += 3, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 CopyPixel24(dst, src); //////adsfadsf_Variable_Checked if (slp[xx >> 3] & (0x80 >> (xx & 7))) { //////adsfadsf_Variable_Checked *(lp + (xx >> 3)) |= 0x80 >> (xx & 7); //////adsfadsf_Variable_Checked } else { *(lp + (xx >> 3)) &= ~(0x80 >> (xx & 7)); //////adsfadsf_Variable_Checked } } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } else { for (y = 0; y < td->gm.gmBlackBoxY; y++) { yy = fy + y; if (yy >= 0 && yy < Image->uBitmap->Height) { dst = Image->uBitmap->GetScanLine(yy) + 3 * fx; src = Original->GetUndoScanLine(yy) + 3 * fx; int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = 0; x < td->gm.gmBlackBoxX; x++, src += 3, dst += 3) { //////adsfadsf_for xx = fx + x; if (xx >= 0 && xx < Image->uBitmap->Width) { if (fbm[x >> 3] & (0x80 >> (x & 7))) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 //7_22¿¡·¯ ¼öÁ¤À» À§ÇØ ÇÊ¿äÇѺκРCopyPixel24(dst, src); } } } Image->uBitmap->PutScanLine(yy, StartX + fx, EndX - StartX + 1); ////adsfadsf } fbm += l; } } } GlobalUnlock(td->hMem); lpBuf = NULL; fbm = NULL; } Alpha -= (width + olddist) / R; if (Alpha < 0) Alpha += 2 * M_PI; } if ((tl = MakeTextList()) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } // try{ if (ly != 0 || lx != 0) Alpha = -atan2(ly, lx); // }catch(Exception &exception){ else Alpha = 0; // } // Alpha = -atan2(ly, lx); if (Alpha < 0) Alpha += 2 * M_PI; a = 0; Cursor[0].x = Pos[1].x + (R - TextMetric.tmDescent) * cos(Alpha); Cursor[0].y = Pos[1].y - (R - TextMetric.tmDescent) * sin(Alpha); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Alpha); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Alpha); for (j = 0; j < tl->Count; j++) { td = (TTextData*)tl->Items[j]; if (td->hMem) { width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (td->pos >= k) { GlobalFree(td->hMem); Theta = Alpha - M_PI / 2; if (Theta < 0) Theta += 2 * M_PI; /* //======================================= by hjs <= À̺κÐÀÇ °¢µµ¸¦ º¯°æ½ÃŰ¸é ¿ø¾ÈÂÊÀ¸·Î ±ÛÀ̽áÁöÁö¾ÊÀ»±î? m2.eM11 = FixedFormDouble(cos(Theta + M_PI)); m2.eM12 = FixedFormDouble(sin(Theta + M_PI)); m2.eM21 = FixedFormDouble(-sin(Theta + M_PI)); m2.eM22 = FixedFormDouble(cos(Theta + M_PI)); */ // ========================================= by lhskys ´Ù½Ãº¹±¸ m2.eM11 = FixedFormDouble(cos(Theta)); m2.eM12 = FixedFormDouble(sin(Theta)); m2.eM21 = FixedFormDouble(-sin(Theta)); m2.eM22 = FixedFormDouble(cos(Theta)); // ========================================= if ((dwRet = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRet)) == NULL) goto fail; if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRet, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } width = sqrt (td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (a + (width + newdist) / R < 2 * M_PI) { CircleFont(td, R, Alpha, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; cursor = true; } else { GlobalUnlock(td->hMem); lpBuf = NULL; GlobalFree(td->hMem); td->hMem = 0; cursor = false; } } else { cursor = true; } } else { if (td->color == -1) { td->color = PaletteForm->DIB256Palette->GetFGCOLORREF (Image->uBitmap->BitsPerPixel); } Theta = Alpha - M_PI / 2; if (Theta < 0) Theta += 2 * M_PI; /* //========================================== by hjs À̺κÐÀÇ °¢µµ¸¦ º¯°æ½ÃŰ¸é ¿ø¾ÈÂÊÀ¸·Î ±ÛÀÌ ½áÁöÁö ¾ÊÀ»·±Áö m2.eM11 = FixedFormDouble(cos(Theta + M_PI)); m2.eM12 = FixedFormDouble(sin(Theta + M_PI)); m2.eM21 = FixedFormDouble(-sin(Theta + M_PI)); m2.eM22 = FixedFormDouble(cos(Theta + M_PI)); */ // ========================================= by lhskys ´Ù½Ãº¹±¸ m2.eM11 = FixedFormDouble(cos(Theta)); m2.eM12 = FixedFormDouble(sin(Theta)); m2.eM21 = FixedFormDouble(-sin(Theta)); m2.eM22 = FixedFormDouble(cos(Theta)); // ========================================= if ((dwRet = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRet)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRet, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (a + (width + newdist) / R < 2 * M_PI) { CircleFont(td, R, Alpha, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; cursor = true; } else { GlobalUnlock(td->hMem); lpBuf = NULL; GlobalFree(td->hMem); td->hMem = 0; cursor = false; } } Alpha -= (width + newdist) / R; if (Alpha < 0) Alpha += 2 * M_PI; a += (width + newdist) / R; if (cursor) { if (td->pos <= CursorNewPos) { Cursor[0].x = Pos[1].x + (R - TextMetric.tmDescent) * cos(Alpha); Cursor[0].y = Pos[1].y - (R - TextMetric.tmDescent) * sin(Alpha); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Alpha); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Alpha); if ((Cursor[1].x > 0 && Cursor[1].x < Width) && (Cursor[1].y > 0 && Cursor[1].y < Height)) IsCursor = true; else IsCursor = false; } } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); Original->StopUndoScanLine(); if (OrigMask) OrigMask->StopUndoScanLine(); Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); if (OrigMask) OrigMask->StopUndoScanLine(); EXCEPTION_MESSAGE_OK(ec); Edit->Text = ""; ButtonOK->Enabled = false; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::DrawLocate() { BEGIN_LOG(""); POINT l; double r; MainImageForm->ResetDraw(); if (Shape == 2) { l.x = Pos[1].x - Pos[0].x; l.y = Pos[1].y - Pos[0].y; r = sqrt(l.x * l.x + l.y * l.y); MainImageForm->DrawEllipseLocate(Rect(Pos[1].x - r, Pos[1].y - r, Pos[1].x + r, Pos[1].y + r)); } else { MainImageForm->DrawLineLocate(Pos[0], Pos[1]); } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::IsPosition() { BEGIN_LOG(""); if (SizeItem == 0) { if (bPosition) { Edit->Enabled = true; Edit->SetFocus(); ButtonOK->Enabled = true; } else { Edit->Enabled = false; ButtonOK->Enabled = false; g_FocusControl->SetFocus(); } } else { if (bPosition) { ButtonOK->Enabled = true; spReArrange->Enabled = true; spRun->Enabled = false; if (Shape == 3) { spRun->Enabled = true; spReArrange->Enabled = false; ButtonOK->Enabled = false; } } else { ButtonOK->Enabled = false; spReArrange->Enabled = false; spRun->Enabled = false; } Edit->Enabled = true; Edit->SetFocus(); } END_LOG; } // --------------------------------------------------------------------------- // Public Method // --------------------------------------------------------------------------- bool __fastcall TTextForm::InitForm() { BEGIN_LOG(""); ///* //BeConverted by linuxjun Don't Forget!! Undo_Method pstore = new TList; pstore->Clear(); TIniFile *IniFile = NULL; TPException ec = EC_NONE; int DPI; double fs = 1.0, fi = 0.0; String str; bool undoSw = false; THistoryData *ud; OSVERSIONINFO osvi; DPI = MainImageForm->CanvasInfor.DotsPerInch; // FontDialog Styleµé ÃʱâÈ­½ÃÄÑÁÖ±â by tmddn85 // bBold = false; // bItalic = false; // bUnderline = false; // bStrikeOut = false; // ======================================= tcnt = 7; Modify = false; spRun->Enabled = false; MainImageForm->iMainImage->OnPaintZoom = DrawTunnel; if (ComboBoxShape->ItemIndex == 4 && SizeItem == 1) RzCheckBox1->Enabled = true; else RzCheckBox1->Enabled = false; RzCheckBox2->Enabled = RzCheckBox1->Enabled; // ======================================= if ((Text = new TList) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } IniFile = new TIniFile(AppDataItem + "\\Text.ini"); if (IniFile) { MainImageForm->iMainImage->Canvas->Font->Name = IniFile->ReadString("Font", "Name", DefaultFontName); fs = IniFile->ReadFloat("Font", "Size", 1.0); fi = IniFile->ReadFloat("Font", "Interval", 0.0); str = IniFile->ReadString("Font", "Unit", "Cm"); Shape = IniFile->ReadInteger("Font", "Shape", 0); SizeItem = IniFile->ReadInteger("Font", "SizeType", 0); rzcbSizeType->ItemIndex = SizeItem; seTCnt->Value = IniFile->ReadInteger("Font", "TunnelCount", 0); RzCheckBox1->Checked = IniFile->ReadBool("Font", "Continouos", false); RzCheckBox2->Checked = IniFile->ReadBool("Font", "Repeat", false); FontName = IniFile->ReadString("Font", "FontName", "@±¼¸²"); FontSize = IniFile->ReadInteger("Font", "FontSize", 12); // bBold = IniFile->ReadBool("Font", "bBold", false); // bItalic = IniFile->ReadBool("Font", "bItalic", false); // bUnderline = IniFile->ReadBool("Font", "bUnderline", false); // bStrikeOut = IniFile->ReadBool("Font", "bStrikeOut", false); seHeight->Value = fs; seInterval->Value = fi; rxHeight->Caption = str; rxInterval->Caption = str; if (str == "Dot") { Unit = 0; seHeight->Increment = 1; seInterval->Increment = 1; } else if (str == "Inch") { fs = fs * DPI; Unit = 1; seHeight->Increment = 0.1; seInterval->Increment = 0.1; } else { fs = fs * DPI / 2.54; Unit = 2; seHeight->Increment = 0.1; seInterval->Increment = 0.1; } FHeight = int(fs); MainImageForm->iMainImage->Canvas->Font->Size = FHeight; delete IniFile; } GetTextMetrics(MainImageForm->iMainImage->Canvas->Handle, &TextMetric); bPosition = false; IsPosition(); Step = 0; newdist = 0; IsDraw = false; MainImageForm->iMainImage->OnPaintLocate = NULL; /////////////////by jeegeo IsCursor = true; OSVERSION = 1; // WINDOWS 98 // ========================== by hjs intvc = false; oldintv = 0; // ¼öÁ÷¹æÇâÀ¸·Î ¿µ¹®Ç¥±â½Ã °­Á¦Àû°£°ÝÀ» »ç¿ëÇϱâÀü ÀÌÀü °£°ÝÀ» ±â¾ïÇϱâÀ§ÇѺ¯¼ö // ================================= osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); OSVERSION = osvi.dwPlatformId; CursorOldPos = CursorNewPos = 0; // Undo->Maximum++; // 2001.8.8 By GreenFish Ä«¿îÆ® ÀÌ»ó¹®Á¦ ÇØ°á //blocked by linuxjun For New Undo_Method /* if ((undoSw = MainImageForm->UndoSave(UK_PATTERN, Rect(0, 0, MainImageForm->iMainImage->uBitmap->Width, MainImageForm->iMainImage->uBitmap->Height))) == false) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } */ if ((undoSw = MainImageForm->UndoSave(UK_PATTERN, Rect(0, 0, 0, 0))) == false) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((ud = MainImageForm->Undo->GetLast()) == NULL) { ec = EC_UNDO_NONE; goto fail; } MainImageForm->iMainImage->uBitmap->PartialUndo->LoadLast(ud->FromRgb); // Original = ud->uBitmap; Original = ud->uBitmap; if (ud->LayerMask) { MainImageForm->iMainImage->LayerMask->PartialUndo->LoadLast(ud->FromRgb); OrigMask = ud->LayerMask; } else OrigMask = NULL; ComboBoxShape->ItemIndex = Shape; // ======================================= // View(); ------> ´ë½Å¿¡ ¹ØÀÇ µÎ ¶óÀÎÀ¸·Î ´ëÄ¡ // LabelFont->Caption = MainImageForm->iMainImage->Canvas->Font->Name; UpdateMenu(); END_LOG; return true; fail: if (undoSw == true) MainImageForm->Undo->RemoveLast(); EXCEPTION_MESSAGE_OK(ec); END_LOG; return false; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ExitForm() { BEGIN_LOG(""); int DPI; TIniFile *IniFile; MainImageForm->Undo->UndoRead(); // BeConverted by linuxjun Don't Forget!! Undo_Method // Undo ¼öÁ¤ (Undo->Read ¿¡¼­ Undo->UndoRead·Î) // Undo->Maximum--; //BeConverted by linuxjun Don't Forget!! Undo_Method // Undo ¼öÁ¤ (Undo->Read ¿¡¼­ Undo->UndoRead·Î) // initform¿¡¼­ ¿Ã·ÁÁØ °ªÀ» Á¤»óÈ­ By GreenFish Original = NULL; OrigMask = NULL; DPI = MainImageForm->CanvasInfor.DotsPerInch; IniFile = new TIniFile(AppDataItem + "\\Text.ini"); if (IniFile) { IniFile->WriteString("Font", "Name", MainImageForm->iMainImage->Canvas->Font->Name); IniFile->WriteFloat("Font", "Size", seHeight->Value); IniFile->WriteFloat("Font", "Interval", seInterval->Value); IniFile->WriteString("Font", "Unit", rxHeight->Caption); IniFile->WriteInteger("Font", "Shape", ComboBoxShape->ItemIndex); IniFile->WriteInteger("Font", "SizeType", rzcbSizeType->ItemIndex); IniFile->WriteInteger("Font", "TunnelCount", seTCnt->Value); IniFile->WriteBool("Font", "Continouos", RzCheckBox1->Checked); IniFile->WriteBool("Font", "Repeat", RzCheckBox2->Checked); delete IniFile; } DeleteText(); // ================================================================= MainImageForm->iMainImage->OnPaintZoom = NULL; // ================================================================= delete Text; // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) POINT *pData = NULL; for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); MainImageForm->ResetDraw(); ::RepaintImage(); /* if (MainImageForm->AutoRepeat && (MainImageForm->LayerCNT == MainImageForm->ARLayerCnt)){ //2001.6.19 by lhskys autorepeat MainImageForm->RedrawingRepeat(false, false); ::RepaintImage(); } */ ::RepaintColor(); // for Updating color in palette // PaletteForm->InitForm(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::iMainImageMouseDown(TMouseButton Button, TShiftState Shift, int X, int Y) { BEGIN_LOG(""); // /* //BeConverted by linuxjun Don't Forget!! Undo_Method POINT l; int length; bool undoSw = false; THistoryData *ud; TPException ec = EC_NONE; double R, Alpha, Theta; if (Button == mbMiddle || (Shift.Contains(ssShift) && Button == mbLeft)) { END_LOG; return; } if (Button == mbLeft) { if (SizeItem > 0) { if (Edit->Text.Length() <= 0) { ShowMessage(IDS_MESSAGE_WRITESENTENCE); Step = 0; bPosition = false; END_LOG; return; } if (Step == 2) { if (Shape == 2) { FreeArc_TextOut(X, Y); bPosition = true; Step = 0; } else if (Shape == 3) { Modify = ComparePoint(X, Y); } else if (Shape == 4) { if (RzCheckBox1->Checked == false) { Step = 0; MainImageForm->ResetDraw(true); // by jeegeo AddCurve(Pos[0], Pos[1], Point(X, Y), pstore); Curve_TextOut(pstore); } else { Step = 1; AddCurve(Pos[0], Pos[1], Point(X, Y), pstore); Pos[0] = Pos[1]; Pos[1] = Point(X, Y); DrawCurve(Pos[0], Pos[1], Point(X, Y), pstore); } } } else if (Step == 1) { if (Shape == 0) { if (abs(X - Pos[0].x) < abs(Y - Pos[0].y)) Pos[1] = Point(Pos[0].x, Y); else Pos[1] = Point(X, Pos[0].y); } else { Pos[1] = Point(X, Y); } switch(Shape) { case 0: case 1: FreeLine_TextOut(); bPosition = true; Step = 0; break; case 2: Step = 2; break; case 3: bPosition = true; Step = 2; if (rzcbSizeType->ItemIndex == 1) { Pos[1] = FixTurnelPos(Pos[0], Pos[1]); } Theta = Opp_Point(); Find_Point(Theta); MainImageForm->ResetDraw(true); // by jeegeo break; case 4: Step = 2; DrawCurve(Pos[0], Pos[1], Pos[1], pstore); break; } } else { DeleteText(); // MainImageForm->iMainImage->uBitmap->Copy(Original, SRCCOPY); MainImageForm->iMainImage->uBitmap->PartialUndo-> LoadUndoWithOutIndexChange(); if (MainImageForm->iMainImage->LayerMask) // MainImageForm->iMainImage->LayerMask->Copy(OrigMask, SRCCOPY); MainImageForm->iMainImage->LayerMask->PartialUndo-> LoadUndoWithOutIndexChange(); if (MainImageForm->AutoRepeat && (MainImageForm->LayerCNT == MainImageForm->ARLayerCnt)) MainImageForm->RedrawingRepeat(false, false); // 2001.6.19 by lhskys autorepeat ::RepaintImage(); Pos[0] = Point(X, Y); Pos[1] = Pos[0]; bPosition = false; Step = 1; // DrawLocate(); } IsPosition(); } else { if (Step > 0) { Pos[1] = Point(X, Y); switch(Shape) { case 0: // case 4: // by hjs Shape =4 ¼öÁ÷¼±¸¸ l.x = Pos[1].x - Pos[0].x; l.y = Pos[1].y - Pos[0].y; if (abs(l.x) < abs(l.y)) { Pos[1].x = Pos[0].x; if (l.y < 0) { Cursor[0] = Point(Pos[0].x + TextMetric.tmDescent, Pos[0].y); Cursor[1] = Point(Cursor[0].x - TextMetric.tmHeight, Cursor[0].y); } else { Cursor[0] = Point(Pos[0].x - TextMetric.tmDescent, Pos[0].y); Cursor[1] = Point(Cursor[0].x + TextMetric.tmHeight, Cursor[0].y); } } else { Pos[1].y = Pos[0].y; if (l.x < 0) { Cursor[0] = Point(Pos[0].x, Pos[0].y - TextMetric.tmDescent); Cursor[1] = Point(Cursor[0].x, Cursor[0].y + TextMetric.tmHeight); } else { Cursor[0] = Point(Pos[0].x, Pos[0].y + TextMetric.tmDescent); Cursor[1] = Point(Cursor[0].x, Cursor[0].y - TextMetric.tmHeight); } } bPosition = true; Step = 0; break; case 1: // try{ if (Pos[1].y - Pos[0].y != 0 || Pos[1].x - Pos[0].x != 0) Theta = -atan2(Pos[1].y - Pos[0].y, Pos[1].x - Pos[0].x) + M_PI / 2; // }catch(Exception &exception){ else Theta = M_PI / 2; ; // } // Theta = -atan2(Pos[1].y-Pos[0].y, Pos[1].x-Pos[0].x)+M_PI/2; if (Theta < 0) Theta = Theta + 2 * M_PI; Cursor[0].x = Pos[0].x - TextMetric.tmDescent * cos(Theta); Cursor[0].y = Pos[0].y + TextMetric.tmDescent * sin(Theta); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Theta); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Theta); bPosition = true; Step = 0; break; case 2: l.x = Pos[0].x - Pos[1].x; l.y = Pos[0].y - Pos[1].y; R = sqrt(l.x * l.x + l.y * l.y); // try{ if (l.y != 0 || l.x != 0) Alpha = -atan2(l.y, l.x); else // }catch(Exception &exception){ Alpha = 0; // } // Alpha = -atan2(l.y, l.x); if (Alpha < 0) Alpha += 2 * M_PI; Cursor[0].x = Pos[1].x + (R - TextMetric.tmDescent) * cos(Alpha); Cursor[0].y = Pos[1].y - (R - TextMetric.tmDescent) * sin(Alpha); Cursor[1].x = Cursor[0].x + TextMetric.tmHeight * cos(Alpha); Cursor[1].y = Cursor[0].y - TextMetric.tmHeight * sin(Alpha); bPosition = true; Step = 0; break; } } else { DeleteText(); // MainImageForm->iMainImage->uBitmap->Copy(Original, SRCCOPY); MainImageForm->iMainImage->uBitmap->PartialUndo-> LoadUndoWithOutIndexChange(); if (MainImageForm->iMainImage->LayerMask) // MainImageForm->iMainImage->LayerMask->Copy(OrigMask, SRCCOPY); MainImageForm->iMainImage->LayerMask->PartialUndo-> LoadUndoWithOutIndexChange(); if (MainImageForm->AutoRepeat && (MainImageForm->LayerCNT == MainImageForm->ARLayerCnt)) MainImageForm->RedrawingRepeat(false, false); // 2001.6.19 by lhskys autorepeat ::RepaintImage(); Pos[0] = Point(X, Y); Pos[1] = Pos[0]; bPosition = false; Step = 1; } IsPosition(); DrawLocate(); IsDraw = true; IsCursor = bPosition; } } if ((Shape == 4 && SizeItem == 1 && Step == 1 && RzCheckBox1->Checked) || (!RzCheckBox1->Checked && Step == 0)) ButtonOK->Enabled = true; END_LOG; return; fail: EXCEPTION_MESSAGE_OK(ec); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::iMainImageMouseMove(TShiftState Shift, int X, int Y) { BEGIN_LOG(""); POINT l; if (SizeItem) { if (Step == 2) { if (Shape == 2) DrawArc(X, Y); else if (Shape == 3) { if (Modify) { tp[updown][index] = Point(X, Y); MainImageForm->iMainImage->Repaint(); } } else if (Shape == 4) { DrawCurve(Pos[0], Pos[1], Point(X, Y), pstore); } } else if (Step == 1) { if (Shape == 4) { Pos[1] = Point(X, Y); DrawCurve(Pos[0], Pos[1], Point(X, Y), pstore); END_LOG; return; } if (IsDraw) DrawLocate(); Pos[1] = Point(X, Y); if (Shape == 0) { l.x = Pos[1].x - Pos[0].x; l.y = Pos[1].y - Pos[0].y; if (abs(l.x) < abs(l.y)) { Pos[1].x = Pos[0].x; } else { Pos[1].y = Pos[0].y; } } DrawLocate(); IsDraw = true; } } else { if (Step > 0) { if (IsDraw) DrawLocate(); Pos[1] = Point(X, Y); if (Shape == 0 /* || Shape == 4 */ ) { // by hjs Shape=4 ¼öÁ÷¼± Ãß°¡ l.x = Pos[1].x - Pos[0].x; l.y = Pos[1].y - Pos[0].y; if (abs(l.x) < abs(l.y)) { Pos[1].x = Pos[0].x; } else { Pos[1].y = Pos[0].y; } } DrawLocate(); IsDraw = true; } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::iMainImageMouseUp(TMouseButton Button, int X, int Y) { BEGIN_LOG(""); if (Button == mbLeft) { if ((Shape == 3) && Modify) { tp[updown][index] = Point(X, Y); Modify = false; } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::iMainImagePaint() { IsDraw = false; MainImageForm->iMainImage->OnPaintLocate = NULL; /////////////////by jeegeo } // --------------------------------------------------------------------------- void __fastcall TTextForm::DrawCursor() { BEGIN_LOG(""); static bool blink = true; if (SizeItem == 0) { if (bPosition && IsCursor) { MainImageForm->ResetDraw(); if (blink) { MainImageForm->DrawLineLocate(Cursor[0], Cursor[1]); } MainImageForm->iMainImage->Repaint(); } } blink = !blink; END_LOG; } // --------------------------------------------------------------------------- // ============================================================================== // ********************* New Text ****************************** // ============================================================================== void __fastcall TTextForm::seTCntChange(TObject *Sender) { if (tcnt != seTCnt->Value) { tcnt = seTCnt->Value; if (Shape == 3 && Step == 2) { Modify = false; bPosition = true; double Theta = Opp_Point(); Find_Point(Theta); IsPosition(); MainImageForm->ResetDraw(); MainImageForm->iMainImage->Repaint(); } } } // --------------------------------------------------------------------------- void __fastcall TTextForm::FreeLine_TextOut() { BEGIN_LOG(""); ///* //BeConverted by linuxjun Don't Forget!! Undo_Method int i, cnt, length, tbfl, bfl, width; int sx, sy, DPI, sum_width; TPException ec = EC_NONE; double theta, vcos, vsin; bool undoSw = false; void *lpBuf = NULL; Char *chp; COLORREF c; TList *tl = NULL; TTextData *td; DWORD dwRect; MAT2 m2; String str = Edit->Text; THistoryData *ud; TPItemImage *Image = MainImageForm->iMainImage; if ((Pos[0].x == Pos[1].x) && (Pos[0].y == Pos[1].y)) theta = 0; else theta = -atan2(Pos[1].y - Pos[0].y, Pos[1].x - Pos[0].x); if (theta < 0) theta += 2 * M_PI; DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); if (SizeItem == 2) { cnt = str.Length(); tbfl = (cnt - 1) * bfl; length = sqrt((Pos[1].x - Pos[0].x) * (Pos[1].x - Pos[0].x) + (Pos[1].y - Pos[0].y) * (Pos[1].y - Pos[0].y)); FontHeight(length - tbfl); ChangeValue(FHeight); } Image->Canvas->Font->Height = FHeight; if (Shape == 0) { if (Pos[0].x == Pos[1].x) { vcos = 0; if (Pos[0].y < Pos[1].y) vsin = -1; else vsin = 1; } else { vsin = 0; if (Pos[0].x < Pos[1].x) vcos = 1; else vcos = -1; } } else { vcos = cos(theta); vsin = sin(theta); } chp = str.c_str(); if ((tl = FHMakeTextList()) == NULL) goto fail; m2.eM11 = FixedFormDouble(vcos); m2.eM12 = FixedFormDouble(vsin); m2.eM21 = FixedFormDouble(-vsin); m2.eM22 = FixedFormDouble(vcos); sx = Pos[0].x; sy = Pos[0].y; sum_width = 0; c = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->uBitmap->BitsPerPixel); Image->uBitmap->StartScanLine(); if (Image->LayerMask) Image->LayerMask->StartScanLine(); for (i = 0; i < tl->Count; i++) { td = (TTextData*)tl->Items[i]; td->color = c; if ((dwRect = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRect)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRect, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } // width = sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX + td->gm.gmCellIncY*td->gm.gmCellIncY); // sum_width += sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX + td->gm.gmCellIncY*td->gm.gmCellIncY); // current // if (chp[i] & 0x80) // Korean // sum_width += abs(td->gm.gmCellIncX); // else // English sum_width += sqrt (td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); ObliqueFont(td, sx, sy, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; sx = Pos[0].x + (sum_width + (i + 1) * bfl) * vcos; sy = Pos[0].y - (sum_width + (i + 1) * bfl) * vsin; } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); MainImageForm->ResetDraw(); // by jeegeo Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); EXCEPTION_MESSAGE_OK(ec); /* //BeConverted by linuxjun Don't Forget!! Undo_Method int i, cnt, length, tbfl, bfl, width; int sx, sy, DPI, sum_width; int ec = EC_NONE; double theta, vcos, vsin; bool undoSw = false; void *lpBuf = NULL; Char *chp; COLORREF c; TList *tl = NULL; TTextData *td; DWORD dwRect; MAT2 m2; String str = Edit->Text; TUndoData *ud; TPItemImage *Image = MainImageForm->iMainImage; theta = -atan2(Pos[1].y - Pos[0].y, Pos[1].x - Pos[0].x); if (theta < 0) theta += 2*M_PI; DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); if (SizeItem == 2) { cnt = str.Length(); tbfl = (cnt - 1)*bfl; length = sqrt((Pos[1].x-Pos[0].x)*(Pos[1].x-Pos[0].x) + (Pos[1].y-Pos[0].y)*(Pos[1].y-Pos[0].y)); FontHeight(length-tbfl); ChangeValue(FHeight); } Image->Canvas->Font->Height = FHeight; if (Shape == 0 ) { if (Pos[0].x == Pos[1].x) { vcos = 0; if (Pos[0].y < Pos[1].y) vsin = -1; else vsin = 1; } else { vsin = 0; if (Pos[0].x < Pos[1].x) vcos = 1; else vcos = -1; } } else { vcos = cos(theta); vsin = sin(theta); } chp = str.c_str(); if ((tl = FHMakeTextList()) == NULL) goto fail; m2.eM11 = FixedFormDouble(vcos); m2.eM12 = FixedFormDouble(vsin); m2.eM21 = FixedFormDouble(-vsin); m2.eM22 = FixedFormDouble(vcos); sx = Pos[0].x; sy = Pos[0].y; sum_width = 0; c = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->uBitmap->BitsPerPixel); Image->uBitmap->StartScanLine(); if (Image->LayerMask) Image->LayerMask->StartScanLine(); for (i=0; iCount; i++) { td = (TTextData *)tl->Items[i]; td->color = c; if ((dwRect = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail;} if ((td->hMem = GlobalAlloc(GPTR, dwRect)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail;} if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail;} if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRect, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail;} // width = sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX + td->gm.gmCellIncY*td->gm.gmCellIncY); // sum_width += sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX + td->gm.gmCellIncY*td->gm.gmCellIncY); // current // if (chp[i] & 0x80) // Korean // sum_width += abs(td->gm.gmCellIncX); // else // English sum_width += sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX + td->gm.gmCellIncY*td->gm.gmCellIncY); ObliqueFont(td, sx, sy, (Byte *)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; sx = Pos[0].x + (sum_width + (i+1)*bfl)*vcos; sy = Pos[0].y - (sum_width + (i+1)*bfl)*vsin; } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); MainImageForm->ResetDraw();//by jeegeo Image->Repaint(); while (Text->Count) { td = (TTextData *)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData *)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); EXCEPTION_MESSAGE_OK(ec); */ END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::FreeArc_TextOut(int X, int Y) { BEGIN_LOG(""); int i, cnt, width, cwidth, length, bfl, tbfl, DPI; TPException ec = EC_NONE; double Theta, Alpha, Radius, sum_theta = 0, calpha; bool undoSw = false; void *lpBuf = NULL; TList *tl = NULL; COLORREF c; MAT2 m2; DWORD dwRect; TTextData *td; String str = Edit->Text; Char *chp; TPItemImage *Image = MainImageForm->iMainImage; DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); Radius = sqrt((Pos[1].x - Pos[0].x) * (Pos[1].x - Pos[0].x) + (Pos[1].y - Pos[0].y) * (Pos[1].y - Pos[0].y)); if (Radius == 0) Radius = 1; // "for removing division by zero error" if (SizeItem == 2) { cnt = str.Length(); tbfl = (cnt - 1) * bfl; Theta = ARC_Theta(X, Y); length = Radius * Theta; FontHeight(length - tbfl); ChangeValue(FHeight); } Image->Canvas->Font->Height = FHeight; // try{ if (Pos[0].y - Pos[1].y != 0 || Pos[0].x - Pos[1].x != 0) Alpha = -atan2(Pos[0].y - Pos[1].y, Pos[0].x - Pos[1].x); // }catch(Exception &exception){ else Alpha = 0; // } if (Alpha < 0) Alpha += 2 * M_PI; if ((tl = FHMakeTextList()) == NULL) goto fail; chp = str.c_str(); c = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->uBitmap->BitsPerPixel); Image->uBitmap->StartScanLine(); if (Image->LayerMask) Image->LayerMask->StartScanLine(); for (i = 0; i < tl->Count; i++) { td = (TTextData*)tl->Items[i]; td->color = c; cwidth = Image->Canvas->TextWidth(chp[i]); calpha = cwidth / (2 * Radius); if (chp[i] & 0x80) Theta = Alpha - M_PI / 2; else Theta = Alpha - M_PI / 2 - calpha; // Theta = Alpha - M_PI/2; if (Theta < 0) Theta += 2 * M_PI; m2.eM11 = FixedFormDouble(cos(Theta)); m2.eM12 = FixedFormDouble(sin(Theta)); m2.eM21 = FixedFormDouble(-sin(Theta)); m2.eM22 = FixedFormDouble(cos(Theta)); if ((dwRect = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRect)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRect, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } // if (chp[i] & 0x80) // Korean // width = abs(td->gm.gmCellIncX); // else // English // width = sqrt(td->gm.gmCellIncX*td->gm.gmCellIncX+td->gm.gmCellIncY*td->gm.gmCellIncY); width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if ((sum_theta + (width + bfl) / Radius) < 2 * M_PI) { CircleFont(td, Radius, Alpha, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; } Alpha -= (width + bfl) / Radius; if (Alpha < 0) Alpha += 2 * M_PI; sum_theta += (width + bfl) / Radius; } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); MainImageForm->ResetDraw(); // by jeegeo Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); EXCEPTION_MESSAGE_OK(ec); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::DrawArc(int X, int Y) { BEGIN_LOG(""); int lx, ly; int r; POINT sp, ep, tsp, tep; TPItemImage *Image = MainImageForm->iMainImage; /* X = Image->BitmapToCanvasX(X); Y = Image->BitmapToCanvasY(Y); tsp = Point(Image->BitmapToCanvasX(Pos[0].x), Image->BitmapToCanvasY(Pos[0].y)); tep = Point(Image->BitmapToCanvasX(Pos[1].x), Image->BitmapToCanvasY(Pos[1].y)); */ lx = Pos[1].x - Pos[0].x; ly = Pos[1].y - Pos[0].y; r = sqrt(lx * lx + ly * ly); /* sp = Point(tep.x - r, tep.y - r); ep = Point(tep.x + r, tep.y + r); */ // Image->Repaint(); ////////by jeegeo // Image->Canvas->Pen->Color = clBlack; // Arc(Image->Canvas->Handle, sp.x, sp.y, ep.x, ep.y, X, Y, tsp.x, tsp.y); if (X - Pos[1].x == 0 || Pos[0].x - Pos[1].x == 0) { END_LOG; return; } MainImageForm->DrawArcLocate(Point(Pos[1].x, Pos[1].y), r, 0, (X - Pos[1].x > 0) ? atan((float)(Pos[1].y - Y) / (float)(X - Pos[1].x)) : atan((float)(Pos[1].y - Y) / (float)(X - Pos[1].x)) + M_PI, (Pos[0].x - Pos[1].x > 0) ? atan((float)(Pos[1].y - Pos[0].y) / (float) (Pos[0].x - Pos[1].x)) : atan((float)(Pos[1].y - Pos[0].y) / (float) (Pos[0].x - Pos[1].x)) + M_PI, true, false); END_LOG; } // --------------------------------------------------------------------------- double __fastcall TTextForm::Cal_Theta(int X, int Y, double &a, double &b, int &index) { BEGIN_LOG(""); int ty; double theta; theta = Theta(X, Y); if (Pos[0].x < Pos[1].x) { a = -(double)(Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x); b = -Pos[0].y - a * Pos[0].x; ty = a * X + b; index = 0; if (-Y < ty) theta = 2 * M_PI - theta; } else if (Pos[0].x > Pos[1].x) { a = -(double)(Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x); b = -Pos[0].y - a * Pos[0].x; ty = a * X + b; index = 1; if (-Y > ty) theta = 2 * M_PI - theta; } else { if (Pos[0].y > Pos[1].y) { if (X > Pos[0].x) theta = 2 * M_PI - theta; } else { if (X < Pos[0].x) theta = 2 * M_PI - theta; } a = 0; b = 0; index = 2; } END_LOG; return theta; } // --------------------------------------------------------------------------- double __fastcall TTextForm::Theta(int x, int y) { BEGIN_LOG(""); double a, b, c, value; a = sqrt((x - Pos[0].x) * (x - Pos[0].x) + (y - Pos[0].y) * (y - Pos[0].y)); b = sqrt((x - Pos[1].x) * (x - Pos[1].x) + (y - Pos[1].y) * (y - Pos[1].y)); c = sqrt((Pos[1].x - Pos[0].x) * (Pos[1].x - Pos[0].x) + (Pos[1].y - Pos[0].y) * (Pos[1].y - Pos[0].y)); if (b == 0) value = 0; else value = ArcCos((b * b + c * c - a * a) / (2 * b * c)); END_LOG; return value; } // --------------------------------------------------------------------------- void __fastcall TTextForm::spReArrangeClick(TObject *Sender) { BEGIN_LOG(""); double Theta; // MainImageForm->iMainImage->uBitmap->Copy(Original, SRCCOPY); MainImageForm->iMainImage->uBitmap->PartialUndo->LoadUndoWithOutIndexChange(); if (MainImageForm->iMainImage->LayerMask) // MainImageForm->iMainImage->LayerMask->Copy(OrigMask, SRCCOPY); MainImageForm->iMainImage->LayerMask->PartialUndo-> LoadUndoWithOutIndexChange(); bPosition = false; if (Shape == 3) { Modify = false; Step = 2; bPosition = true; // RearrangeÇÒ ¶§ ±âÁ¸ À§Ä¡¸¦ ³²°Ü ´Þ¶ó´Â µðÀÚÀÎ½Ç ¿äûÀ¸·Î // v11ºÎÅÍ ¾Æ·¡¿Í °°ÀÌ ÁÖ¼®À¸·Î ó¸® ÇÔ by david 100810 // Theta = Opp_Point(); // Find_Point(Theta); } else if (Shape == 2) { Step = 2; } else { Step = 1; } IsPosition(); MainImageForm->iMainImage->Repaint(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::FontHeight(int length) { BEGIN_LOG(""); int tl, ml, min; String str = Edit->Text; TPItemImage *Image = MainImageForm->iMainImage; Image->Canvas->Font->Height = 100; tl = Image->Canvas->TextWidth(str); FHeight = 100 * length / tl; Image->Canvas->Font->Height = FHeight; tl = Image->Canvas->TextWidth(str); min = tl - length; while (1) { if (min < 0) { Image->Canvas->Font->Height = FHeight + 1; ml = Image->Canvas->TextWidth(str); if (abs(ml - length) >= abs(min)) break; FHeight++; } else { Image->Canvas->Font->Height = FHeight - 1; ml = Image->Canvas->TextWidth(str); if (abs(ml - length) >= abs(min)) break; FHeight--; } } length = ml; END_LOG; } // --------------------------------------------------------------------------- double __fastcall TTextForm::ARC_Theta(int X, int Y) { BEGIN_LOG(""); int ty; double a, b, theta; theta = Theta(X, Y); if (Pos[0].x < Pos[1].x) { a = -(double)(Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x); b = -Pos[0].y - a * Pos[0].x; ty = int(a * X + b); if (-Y < ty) theta = 2 * M_PI - theta; } else if (Pos[0].x > Pos[1].x) { a = -(double)(Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x); b = -Pos[0].y - a * Pos[0].x; ty = int(a * X + b); if (-Y > ty) theta = 2 * M_PI - theta; } else { if (Pos[0].y > Pos[1].y) { if (X > Pos[0].x) theta = 2 * M_PI - theta; } else { if (X < Pos[0].x) theta = 2 * M_PI - theta; } } END_LOG; return theta; } // --------------------------------------------------------------------------- void __fastcall TTextForm::DrawTunnel(TObject *Sender, HDC hDC) { BEGIN_LOG(""); int i, j; POINT sp, ep; double t; HPEN hOPen = NULL, hNPen = NULL; HBRUSH hOBrush = NULL, hNBrush = NULL; TPItemImage *Image = MainImageForm->iMainImage; if ((Shape == 3) && (Step == 2)) { for (i = 0; i < 2; i++) { sp.x = Image->BitmapToCanvasX(tp[i][0].x); sp.y = Image->BitmapToCanvasY(tp[i][0].y); if (i) { hNPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); hNBrush = CreateSolidBrush(RGB(0, 0, 255)); } else { hNPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hNBrush = CreateSolidBrush(RGB(255, 0, 0)); } hOPen = (HPEN)SelectObject(hDC, hNPen); hOBrush = (HBRUSH)SelectObject(hDC, hNBrush); MoveToEx(hDC, sp.x, sp.y, NULL); for (j = 0; j < tcnt - 2; j++) { // »õ·Î¿î ¸Å°³º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© °î¼±À» ±×·Á¾ß ÇÔ. for (t = 0; t < 1; t += 0.05) { Set_Axis(t, i, j); LineTo(hDC, Image->BitmapToCanvasX(mx), Image->BitmapToCanvasY(my)); } } LineTo(hDC, Image->BitmapToCanvasX(tp[i][tcnt - 1].x), Image->BitmapToCanvasY(tp[i][tcnt - 1].y)); for (j = 0; j < tcnt; j++) { Rectangle(hDC, Image->BitmapToCanvasX(tp[i][j].x) - 4, Image->BitmapToCanvasY(tp[i][j].y) - 4, Image->BitmapToCanvasX(tp[i][j].x) + 4, Image->BitmapToCanvasY(tp[i][j].y) + 4); } SelectObject(hDC, hOBrush); DeleteObject(hNBrush); SelectObject(hDC, hOPen); DeleteObject(hNPen); } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::Set_Axis(double t, int i, int j) { BEGIN_LOG(""); double a, b, c, tw; TPItemImage *Image = MainImageForm->iMainImage; tw = t * t; a = 0.5 - t + tw / 2.0; b = t - tw + 0.5; c = tw / 2.0; mx = a * tp[i][j].x + b * tp[i][j + 1].x + c * tp[i][j + 2].x; my = a * tp[i][j].y + b * tp[i][j + 1].y + c * tp[i][j + 2].y; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::CheckSet_Axis(double t, int i, int j) { // BEGIN_LOG(""); double a, b, c, tw; tw = t * t; a = 0.5 - t + tw / 2.0; b = t - tw + 0.5; c = tw / 2.0; mx = a * ctp[i][j].x + b * ctp[i][j + 1].x + c * ctp[i][j + 2].x; my = a * ctp[i][j].y + b * ctp[i][j + 1].y + c * ctp[i][j + 2].y; // END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::Tunnel_TextOut() { BEGIN_LOG(""); int i, bfl, DPI; TPException ec = EC_NONE; double vcos, vsin, width; bool undoSw = false; void *lpBuf = NULL; COLORREF c; DWORD dwRect; MAT2 m2; String str = Edit->Text; TList *tl = NULL; TTextData *td; TPItemImage *Image = MainImageForm->iMainImage; DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); Image->Canvas->Font->Height = FHeight; if (Pos[0].x == Pos[1].x) { if (Pos[0].y < Pos[1].y) tun_theta = M_PI / 2; else tun_theta = 3 * M_PI / 2; } else { tun_theta = atan(double(Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x)); if (Pos[0].x < Pos[1].x) tun_theta += 2 * M_PI; else tun_theta += M_PI; } for (i = 0; i < tcnt; i++) { ctp[0][i] = M1(tp[0][i].x, tp[0][i].y, tun_theta); ctp[1][i] = M1(tp[1][i].x, tp[1][i].y, tun_theta); } CheckSet_Axis(0, 0, 0); xx[0] = mx; yy[0] = my; CheckSet_Axis(0, 1, 0); xx[1] = mx; yy[1] = my; CheckSet_Axis(1, 0, tcnt - 3); xx[2] = mx; yy[2] = my; CheckSet_Axis(1, 1, tcnt - 3); xx[3] = mx; yy[3] = my; if ((tl = FHMakeTextList()) == NULL) goto fail; m2.eM11 = FixedFormDouble(1.0); m2.eM12 = FixedFormDouble(0.0); m2.eM21 = FixedFormDouble(0.0); m2.eM22 = FixedFormDouble(1.0); vcos = cos(tun_theta); vsin = sin(tun_theta); tsx = Pos[0].x; tsy = Pos[0].y; c = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->uBitmap->BitsPerPixel); Image->uBitmap->StartScanLine(); if (Image->LayerMask) Image->LayerMask->StartScanLine(); for (i = 0; i < tl->Count; i++) { td = (TTextData*)tl->Items[i]; td->color = c; if ((dwRect = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRect)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRect, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); fpx = td->gm.gmptGlyphOrigin.x; fpy = td->gm.gmptGlyphOrigin.y; fsx = td->gm.gmBlackBoxX; fsy = td->gm.gmBlackBoxY; if (Convert_Size() == 0) { View_Font(td, FHeight - fpy, (Byte*)lpBuf); } GlobalUnlock(td->hMem); lpBuf = NULL; tsx += (width + bfl) * vcos; tsy += (width + bfl) * vsin; } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); EXCEPTION_MESSAGE_OK(ec); END_LOG; } // --------------------------------------------------------------------------- int __fastcall TTextForm::Convert_Size() { BEGIN_LOG(""); int i, x, y, mm = -1; POINT rp; rp = M1(tsx, tsy, tun_theta); x = rp.x; y = rp.y; x += fpx; sx = x; // sx = rp.x + fpx; for (i = 0; i < fsx; i++) { if (Find_Pos(0, x + i) == 0) { M2(mx, my, &mx, &my, tun_theta); if (mm) { min[0] = max[0] = mx; min[1] = max[1] = my; mm = 0; } else { if (mx < min[0]) min[0] = mx; if (mx > max[0]) max[0] = mx; if (my < min[1]) min[1] = my; if (my > max[1]) max[1] = my; } } if (Find_Pos(1, x + i) == 0) { M2(mx, my, &mx, &my, tun_theta); if (mm) { min[0] = max[0] = mx; min[1] = max[1] = my; mm = 0; } else { if (mx < min[0]) min[0] = mx; if (mx > max[0]) max[0] = mx; if (my < min[1]) min[1] = my; if (my > max[1]) max[1] = my; } } } END_LOG; return mm; } // --------------------------------------------------------------------------- void __fastcall TTextForm::View_Font(TTextData *td, int gab, Byte *fbm) { BEGIN_LOG(""); int ix, iy; int www, hhh; int dx, dy, y0, y1; int x, y; double cal_y; POINT rp; Byte *ddp, *tp, *tdp, *lp; COLORREF C = td->color; TPItemImage *Image = MainImageForm->iMainImage; cal_y = ((fsx + 31) >> 5) << 2; www = Image->uBitmap->Width; hhh = Image->uBitmap->Height; tp = fbm; if (Image->LayerMask) { for (y = min[1]; y < max[1]; y++) { if (y >= 0 && y < hhh) { ddp = Image->uBitmap->GetScanLine(y); lp = Image->LayerMask->GetScanLine(y); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = min[0]; x < max[0]; x++) { //////adsfadsf_for if (x >= 0 && x < www) { rp = M1(x, y, tun_theta); dx = rp.x; dy = rp.y; ix = dx - sx; if (ix >= 0 && ix < fsx) { if (Find_Pos(0, dx) == 0) { y0 = my; } else { break; } if (Find_Pos(1, dx) == 0) { y1 = my; } else { break; } if (y0 != y1) { iy = 1.2 * FHeight * (dy - y1) / (y0 - y1) - gab; // (FHeight-fpy); if (iy >= 0 && iy < fsy) { tp = fbm +int(iy * cal_y); if (tp[ix >> 3] & (0x80 >> (ix & 7))) { if (Image->uBitmap->BitsPerPixel == 8) { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 ddp[x] = C; //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 lp[x] = 0; //////adsfadsf_Variable_Checked } else { if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 tdp = ddp + 3 * x; //////adsfadsf_Variable_Checked SetPixel24(tdp, C); if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 *(lp + (x >> 3)) &= ~(0x80 >> (x & 7)); //////adsfadsf_Variable_Checked } } } } } } } Image->uBitmap->PutScanLine(y, StartX, EndX - StartX + 1); ////adsfadsf Image->LayerMask->PutScanLine(y, StartX, EndX - StartX + 1); ////adsfadsf } } } else { for (y = min[1]; y < max[1]; y++) { if (y >= 0 && y < hhh) { ddp = Image->uBitmap->GetScanLine(y); int StartX = 0; int EndX = -1; // adsfadsf_for_declare for (x = min[0]; x < max[0]; x++) { //////adsfadsf_for if (x >= 0 && x < www) { //////adsfadsf_Variable_Checked rp = M1(x, y, tun_theta); dx = rp.x; dy = rp.y; ix = dx - sx; if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (ix >= 0 && ix < fsx) { //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (Find_Pos(0, dx) == 0) { //////adsfadsf_Variable_Checked y0 = my; } else { break; } if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (Find_Pos(1, dx) == 0) { //////adsfadsf_Variable_Checked y1 = my; } else { break; } if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (y0 != y1) { //////adsfadsf_Variable_Checked iy = 1.2 * FHeight * (dy - y1) / (y0 - y1) - gab; // (FHeight-fpy); if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (iy >= 0 && iy < fsy) { //////adsfadsf_Variable_Checked tp = fbm +int(iy * cal_y); if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (tp[ix >> 3] & (0x80 >> (ix & 7))) { //////adsfadsf_Variable_Checked if (EndX == -1) { StartX = x; } EndX = x; // adsfadsf_i_f1 if (Image->uBitmap->BitsPerPixel == 8) { //////adsfadsf_Variable_Checked ddp[x] = C; } else { tdp = ddp + 3 * x; SetPixel24(tdp, C); } } } } } } } Image->uBitmap->PutScanLine(y, StartX, EndX - StartX + 1); ////adsfadsf } } } END_LOG; } // --------------------------------------------------------------------------- int __fastcall TTextForm::Find_Pos(int ud, double z) { // BEGIN_LOG(""); int j, k; double a, b, c, d, t, tt; if (z < xx[ud]) { mx = z; my = (double)(ctp[ud][0].y - yy[ud]) / (ctp[ud][0].x - xx[ud]) * (mx - xx[ud]) + yy[ud]; } else if (z > xx[ud + 2]) { mx = z; my = (double)(ctp[ud][tcnt - 1].y - yy[ud + 2]) / (ctp[ud][tcnt - 1].x - xx[ud + 2]) * (mx - xx[ud + 2]) + yy[ud + 2]; } else { k = -1; for (j = 0; j < tcnt - 2; j++) { a = ctp[ud][j].x - 2 * ctp[ud][j + 1].x + ctp[ud][j + 2].x; b = 2 * (ctp[ud][j + 1].x - ctp[ud][j].x); c = ctp[ud][j].x + ctp[ud][j + 1].x - 2 * z; if (a != 0) { d = b * b - 4.0 * a * c; if (d > 0) { a = a * 2.0; t = (-b + sqrt(d)) / a; if ((t >= 0.0) && (t <= 1.0)) { CheckSet_Axis(t, ud, j); /* END_LOG; */ return 0; } if ((k < 0) || (fabs(tt - 0.5) > fabs(t - 0.5))) { tt = t; k = j; } t = (-b - sqrt(d)) / a; if ((t >= 0.0) && (t <= 1.0)) { CheckSet_Axis(t, ud, j); /* END_LOG; */ return 0; } if ((k < 0) || (fabs(tt - 0.5) > fabs(t - 0.5))) { tt = t; k = j; } } } else if (b != 0) { t = -c / b; if ((t >= 0.0) && (t <= 1.0)) { CheckSet_Axis(t, ud, j); /* END_LOG; */ return 0; } if ((k < 0) || (fabs(tt - 0.5) > fabs(t - 0.5))) { tt = t; k = j; } } } if (k < 0) { /* END_LOG; */ return -1; } CheckSet_Axis(tt, ud, k); } // END_LOG; return 0; } // --------------------------------------------------------------------------- POINT __fastcall TTextForm::M1(int ix, int iy, double t) { // BEGIN_LOG(""); POINT rp; double st = sin(-t), ct = cos(-t); rp = Point(ix * ct - iy * st - Pos[0].x * ct + Pos[0].y * st, ix * st + iy * ct - Pos[0].x * st - Pos[0].y * ct); // END_LOG; return rp; } // --------------------------------------------------------------------------- void __fastcall TTextForm::M2(int ix, int iy, int *ox, int *oy, double t) { // BEGIN_LOG(""); double st = sin(t), ct = cos(t); *ox = ix * ct - iy * st + Pos[0].x; *oy = ix * st + iy * ct + Pos[0].y; // END_LOG; } // --------------------------------------------------------------------------- bool __fastcall TTextForm::ComparePoint(int X, int Y) { BEGIN_LOG(""); int i; for (i = 0; i < tcnt; i++) { if ((X >= (tp[0][i].x - 5)) && (X <= (tp[0][i].x + 5))) { if ((Y >= (tp[0][i].y - 5)) && (Y <= (tp[0][i].y + 5))) { updown = 0; index = i; END_LOG; return true; } } if ((X >= (tp[1][i].x - 5)) && (X <= (tp[1][i].x + 5))) { if ((Y >= (tp[1][i].y - 5)) && (Y <= (tp[1][i].y + 5))) { updown = 1; index = i; END_LOG; return true; } } } END_LOG; return false; } // --------------------------------------------------------------------------- double __fastcall TTextForm::Opp_Point() { BEGIN_LOG(""); int length, tbfl, bfl, cnt, DPI; double theta, vcos, vsin; String str = Edit->Text; if (SizeItem == 2) { cnt = str.Length(); DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); tbfl = bfl * (cnt - 1); length = sqrt((Pos[1].y - Pos[0].y) * (Pos[1].y - Pos[0].y) + (Pos[1].x - Pos[0].x) * (Pos[1].x - Pos[0].x)); FontHeight(length - tbfl); ChangeValue(FHeight); } if (Pos[0].x == Pos[1].x) { theta = M_PI / 2; if (Pos[0].y < Pos[1].y) { aPos[0] = Point(Pos[0].x + FHeight, Pos[0].y); aPos[1] = Point(Pos[1].x + FHeight, Pos[1].y); } else { aPos[0] = Point(Pos[0].x - FHeight, Pos[0].y); aPos[1] = Point(Pos[1].x - FHeight, Pos[1].y); } } else if (Pos[0].y == Pos[1].y) { theta = 0; if (Pos[0].x < Pos[1].x) { aPos[0] = Point(Pos[0].x, Pos[0].y - FHeight); aPos[1] = Point(Pos[1].x, Pos[1].y - FHeight); } else { aPos[0] = Point(Pos[0].x, Pos[0].y + FHeight); aPos[1] = Point(Pos[1].x, Pos[1].y + FHeight); } } else { theta = atan((double) - (Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x)); // ÁÂÇ¥°¡ Ʋ¸®¹Ç·Î -1À» °öÇØÁÜ vcos = cos(theta); vsin = sin(theta); if (Pos[0].x < Pos[1].x) { aPos[0] = Point(Pos[0].x - FHeight * vsin, Pos[0].y - FHeight * vcos); aPos[1] = Point(Pos[1].x - FHeight * vsin, Pos[1].y - FHeight * vcos); } else { aPos[0] = Point(Pos[0].x + FHeight * vsin, Pos[0].y + FHeight * vcos); aPos[1] = Point(Pos[1].x + FHeight * vsin, Pos[1].y + FHeight * vcos); } MainImageForm->DrawLineLocate(Pos[0], Pos[1]); MainImageForm->DrawLineLocate(aPos[0], aPos[1]); } END_LOG; return theta; } // --------------------------------------------------------------------------- void __fastcall TTextForm::Find_Point(double th) { BEGIN_LOG(""); int i, length, length1, cal_length; int cal_x = 1, cal_y = 1; double vtan; tp[0][0] = Point(Pos[0].x, Pos[0].y); tp[0][tcnt - 1] = Point(Pos[1].x, Pos[1].y); tp[1][0] = Point(aPos[0].x, aPos[0].y); tp[1][tcnt - 1] = Point(aPos[1].x, aPos[1].y); if (th == 0) { length = (Pos[1].x - Pos[0].x) / (tcnt - 1); for (i = 1; i < tcnt - 1; i++) { tp[0][i] = Point(Pos[0].x + i * length, Pos[0].y); tp[1][i] = Point(aPos[0].x + i * length, aPos[0].y); } } else if (th == M_PI / 2) { length = (Pos[1].y - Pos[0].y) / (tcnt - 1); for (i = 1; i < tcnt - 1; i++) { tp[0][i] = Point(Pos[0].x, Pos[0].y + i * length); tp[1][i] = Point(aPos[0].x, aPos[0].y + i * length); } } else { length = abs((Pos[1].x - Pos[0].x) / (tcnt - 1)); // ======================================================== 2001.4.19. by lhskys 7.21 error ¼öÁ¤! length1 = abs((Pos[1].y - Pos[0].y) / (tcnt - 1)); if (length == 0) { length = length1; for (i = 1; i < tcnt - 1; i++) { tp[0][i] = Point(Pos[0].x, Pos[0].y + i * length); tp[1][i] = Point(aPos[0].x, aPos[0].y + i * length); } } else { // ======================================================== vtan = fabs(tan(th)); if (Pos[1].x < Pos[0].x) cal_x = -1; if (Pos[1].y < Pos[0].y) cal_y = -1; for (i = 1; i < tcnt - 1; i++) { cal_length = i * vtan * length; tp[0][i] = Point(Pos[0].x + cal_x * length * i, Pos[0].y + cal_y * cal_length); tp[1][i] = Point(aPos[0].x + cal_x * length * i, aPos[0].y + cal_y * cal_length); } } } END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::seEditClick(TObject *Sender) { TRzSpinEdit *sp = (TRzSpinEdit*)Sender; sp->SetFocus(); sp->SelectAll(); } // --------------------------------------------------------------------------- void __fastcall TTextForm::spRunClick(TObject *Sender) { BEGIN_LOG(""); TCursor cursor = Screen->Cursor; Screen->Cursor = crHourGlass; Step = 0; bPosition = false; Tunnel_TextOut(); spReArrange->Enabled = true; ButtonOK->Enabled = true; spRun->Enabled = false; Screen->Cursor = cursor; END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ChangeValue(int value) { int DPI = MainImageForm->CanvasInfor.DotsPerInch; switch(Unit) { case 0: seHeight->Value = value; break; // Dot case 1: seHeight->Value = value / DPI; break; // Dot --> Inch case 2: seHeight->Value = value * 2.54 / DPI; break; // Dot --> Cm } } // --------------------------------------------------------------------------- double __fastcall TTextForm::ConvertToDot(double value) { double rvalue; int DPI = MainImageForm->CanvasInfor.DotsPerInch; switch(Unit) { case 0: rvalue = value; break; // Dot case 1: rvalue = value * DPI; break; // Inch --> Dot case 2: rvalue = value * DPI / 2.54; break; // Cm --> Dot } return rvalue; } // --------------------------------------------------------------------------- void __fastcall TTextForm::UnitLabelClick(TObject *Sender) { BEGIN_LOG(""); if (Unit == 0) { // Dot-->Inch Unit = 1; seHeight->Increment = 0.1; seInterval->Increment = 0.1; } else if (Unit == 1) { // Inch-->Cm Unit = 2; seHeight->Increment = 0.1; seInterval->Increment = 0.1; } else { // Cm-->Dot Unit = 0; seHeight->Increment = 1; seInterval->Increment = 1; } ChangeEditValue(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ChangeEditValue() { BEGIN_LOG(""); int DPI = MainImageForm->CanvasInfor.DotsPerInch; switch(Unit) { case 0: // Cm --> Dot seHeight->Value = int(seHeight->Value * DPI / 2.54); seInterval->Value = int(seInterval->Value * DPI / 2.54); rxHeight->Caption = "Dot"; rxInterval->Caption = "Dot"; break; case 1: // Dot --> Inch seHeight->Value = (seHeight->Value / DPI); seInterval->Value = (seInterval->Value / DPI); rxHeight->Caption = "Inch"; rxInterval->Caption = "Inch"; break; case 2: // Inch --> Cm seHeight->Value = (seHeight->Value * 2.54); seInterval->Value = (seInterval->Value * 2.54); rxHeight->Caption = "Cm"; rxInterval->Caption = "Cm"; break; } END_LOG; } // --------------------------------------------------------------------------- POINT __fastcall TTextForm::FixTurnelPos(POINT st, POINT ed) { BEGIN_LOG(""); int cwidth; POINT pt; double theta, vtan, vsin, vcos; int cal_x = 1, cal_y = 1; int i, length, cal_length; MainImageForm->iMainImage->Canvas->Font->Size = FHeight; cwidth = MainImageForm->iMainImage->Canvas->TextWidth(Edit->Text); if (st.x == ed.x) { theta = M_PI / 2; } else if (st.y == ed.y) { theta = 0; } else { theta = atan((double) - (Pos[1].y - Pos[0].y) / (Pos[1].x - Pos[0].x)); // ÁÂÇ¥°¡ Ʋ¸®¹Ç·Î -1À» °öÇØÁÜ } if (theta == 0) { if (st.x > ed.x) { cwidth = -(cwidth); } pt = Point(st.x + cwidth, st.y); } else if (theta == M_PI / 2) { if (st.y > ed.y) { cwidth = -(cwidth); } pt = Point(st.x, st.y + cwidth); } else { vsin = sin(theta); vcos = cos(theta); if (st.x > ed.x) cal_x = -1; if (st.y > ed.y) cal_y = -1; pt = Point(st.x + cal_x * cwidth * fabs(vcos), st.y + cal_y * cwidth * fabs(vsin)); } END_LOG; return pt; } // --------------------------------------------------------------------------- void __fastcall TTextForm::iMainImageKeyPress(int Key) { // if((Key == '\n' || Key == '\r') && spRun->Enabled)spRunClick(this); // else if (Key == '\n' || Key == '\r')ButtonOKClick(this); //lhskys ¿£ÅÍ¿¡¼­ ½ÇÇà } // --------------------------------------------------------------------------- // added by maxleo21c (05.04.07) void __fastcall TTextForm::iMainImageKeyDown(WORD Key, TShiftState Shift) { BEGIN_LOG(""); if ((Key == VK_RETURN) && spRun->Enabled) spRunClick(this); else if (Key == VK_RETURN) ButtonOKClick(this); // lhskys ¿£ÅÍ¿¡¼­ ½ÇÇà END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::Curve_TextOut(TList *pstore) // by jeegeo { BEGIN_LOG(""); POINT *pData = NULL; if (pstore->Count <= 1) { // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); END_LOG; return; } int i, cnt, cwidth, length, bfl, tbfl, DPI; TPException ec = EC_NONE; double Theta, Alpha, Radius, sum_theta = 0, length_sum = 0, total_len, width; bool undoSw = false; void *lpBuf = NULL; TList *tl = NULL; COLORREF c; MAT2 m2; DWORD dwRect; TTextData *td; String str = Edit->Text, oldstr = Edit->Text; Char *chp; TPItemImage *Image = MainImageForm->iMainImage; TCursor cursor = Screen->Cursor; Screen->Cursor = crHourGlass; DPI = MainImageForm->CanvasInfor.DotsPerInch; bfl = ConvertToDot(seInterval->Value); Image->Canvas->Font->Height = FHeight; total_len = GetLength(pstore); Pos[1] = Point(0, 0); if (RzCheckBox2->Checked == true) for (i = 0; i < 10; i++) str = str + str; // 2^10¹è·Î ´Ã¸°´Ù i = 0; chp = str.c_str(); while (length_sum <= total_len && i < str.Length()) { cwidth = Image->Canvas->TextWidth(chp[i]); length_sum += (bfl + cwidth); i++; } i *= 1.41; // ½ÇÁ¦ ±ÛÀÚ¸¦ ½èÀ» ¶§ÀÇ Å©±â¿Í °î¼±ÀÇ ±æÀ̰¡ ¾à°£ ´Ù¸¦¼ö À־ ³Ë³ËÈ÷ Ű¿î´Ù // sqrt(2) str.SetLength(i); Edit->Text = str; if ((tl = FHMakeTextList()) == NULL) goto fail; length_sum = 0; c = PaletteForm->DIB256Palette->GetFGCOLORREF(Image->uBitmap->BitsPerPixel); Image->uBitmap->StartScanLine(); if (Image->LayerMask) Image->LayerMask->StartScanLine(); for (i = 0; i < tl->Count; i++) { td = (TTextData*)tl->Items[i]; td->color = c; POINT charpoint = GetPoint(pstore, length_sum); /////pstoreÀÇ ±ËÀûÀ» ÃßÀûÇÏ¿© °Å¸®°¡ tracelengthÀÎ Á¡À» ¹Ýȯ//by jeegeo // try{ if (charpoint.y - Pos[1].y != 0 || charpoint.x - Pos[1].x != 0) Alpha = -atan2(charpoint.y - Pos[1].y, charpoint.x - Pos[1].x); // }catch(Exception &exception){ else Alpha = 0; // } Radius = sqrt((Pos[1].x - charpoint.x) * (Pos[1].x - charpoint.x) + (Pos[1].y - charpoint.y) * (Pos[1].y - charpoint.y)); if (Alpha < 0) Alpha += 2 * M_PI; // cwidth = Image->Canvas->TextWidth(chp[i]); Theta = GetAngle(pstore, length_sum); /////pstoreÀÇ ±ËÀûÀ» ÃßÀûÇÏ¿© °Å¸®°¡ tracelengthÀÎ Á¡¿¡¼­ ±ÍÀûÀÇ °¢À» ¹Ýȯ//by jeegeo if (Theta < 0) Theta += 2 * M_PI; m2.eM11 = FixedFormDouble(cos(Theta)); m2.eM12 = FixedFormDouble(sin(Theta)); m2.eM21 = FixedFormDouble(-sin(Theta)); m2.eM22 = FixedFormDouble(cos(Theta)); if ((dwRect = GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, 0, NULL, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } if ((td->hMem = GlobalAlloc(GPTR, dwRect)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((lpBuf = GlobalLock(td->hMem)) == NULL) { ec = EC_MEMORY_LACK; SAVE_EXCEPTION(ec); goto fail; } if ((GetGlyphOutline(Image->Canvas->Handle, td->c, GGO_BITMAP, &td->gm, dwRect, lpBuf, &m2)) == GDI_ERROR) { ec = EC_FONT_NOSUPPORT; goto fail; } width = sqrt(td->gm.gmCellIncX * td->gm.gmCellIncX + td->gm.gmCellIncY * td->gm.gmCellIncY); if (length_sum < total_len) { CircleFont(td, Radius, Alpha, (Byte*)lpBuf); GlobalUnlock(td->hMem); lpBuf = NULL; } length_sum += (width + bfl); } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); MainImageForm->ResetDraw(); // by jeegeo Image->Repaint(); while (Text->Count) { td = (TTextData*)Text->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); Text->Remove(td); } delete Text; Text = tl; // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); Edit->Text = oldstr; Screen->Cursor = cursor; END_LOG; return; fail: if (tl) { if (lpBuf) GlobalUnlock(td->hMem); while (tl->Count) { td = (TTextData*)tl->Last(); if (td->hMem) GlobalFree(td->hMem); HeapFree(GetProcessHeap(), 0, td); tl->Remove(td); } } if (Image->LayerMask) Image->LayerMask->StopScanLine(); Image->uBitmap->StopScanLine(); // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); Edit->Text = oldstr; Screen->Cursor = cursor; EXCEPTION_MESSAGE_OK(ec); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::DrawCurve(POINT First, POINT Second, POINT Third, TList *pstore) { // by jeegeo BEGIN_LOG(""); MainImageForm->ResetDraw(); for (int i = 0; i < pstore->Count; i++) { POINT pt = *((POINT*)pstore->Items[i]); MainImageForm->DrawFreeLineLocate(pt, -2); } int x2, y2, mx, my, sx2, sy2, ex2, ey2; int sx = First.x, sy = First.y, ex = Second.x, ey = Second.y, tx = Third.x, ty = Third.y; int t; double Theta, c, s; double alphas, alphae, tangent; double m; double d1, d2, d3; d1 = sqrt((double)(sx - tx) * (sx - tx) + (sy - ty) * (sy - ty)); d2 = sqrt((double)(ex - tx) * (ex - tx) + (ey - ty) * (ey - ty)); d3 = sqrt((double)(ex - sx) * (ex - sx) + (ey - sy) * (ey - sy)); if (d1 + d2 == 0) { END_LOG; return; } if (d1 == d2 + d3 || d2 == d1 + d3 || d3 == d1 + d2) { MainImageForm->DrawFreeLineLocate(Point(sx, sy), -2); MainImageForm->DrawFreeLineLocate(Point(ex, ey)); END_LOG; return; } m = d1 / (d1 + d2); mx = ex * m + sx * (1 - m); my = ey * m + sy * (1 - m); if ((tx - mx) == 0) { Theta = 0; } else { tangent = -(double)(my - ty) / (mx - tx); Theta = M_PI / 2.0 - atan(tangent); if (mx - tx < 0) Theta += M_PI; } c = cos(Theta); s = sin(Theta); sx2 = (sx - tx) * c - (ty - sy) * s + 0.5; sy2 = (ty - sy) * c + (sx - tx) * s + 0.5; ex2 = (ex - tx) * c - (ty - ey) * s + 0.5; ey2 = (ty - ey) * c + (ex - tx) * s + 0.5; if ((double)sx2 * (double)sx2 == 0) alphas = sy2 * 0xFFFFFFFF; else alphas = (double)sy2 / ((double)sx2 * (double)sx2); if ((double)ex2 * (double)ex2 == 0) alphae = ey2 * 0xFFFFFFFF; else alphae = (double)ey2 / ((double)ex2 * (double)ex2); if (alphas * alphae < 0) { MainImageForm->DrawFreeLineLocate(Point(sx, sy), -2); MainImageForm->DrawFreeLineLocate(Point(ex, ey), -2); END_LOG; return; } t = 1; MainImageForm->DrawFreeLineLocate(Point(sx, sy), -2); while (t >= 1 && t <= 19) { x2 = (double)sx2 * (double)(20 - t) / 20.0; y2 = -alphas * ((double)x2 * (double)x2); MainImageForm->DrawFreeLineLocate(Point(tx + c * x2 - s * y2, ty + c * y2 + s * x2), -2); t++; } t = 1; MainImageForm->DrawFreeLineLocate(Point(tx, ty), -2); while (t >= 1 && t <= 19) { x2 = (double)ex2 * (double)t / 20.0; y2 = -alphae * ((double)x2 * (double)x2); MainImageForm->DrawFreeLineLocate(Point(tx + c * x2 - s * y2, ty + c * y2 + s * x2), -2); t++; } MainImageForm->DrawFreeLineLocate(Point(ex, ey)); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::AddCurve(POINT First, POINT Second, POINT Third, TList *pstore) { // by jeegeo BEGIN_LOG(""); int x2, y2, mx, my, sx2, sy2, ex2, ey2; int sx = First.x, sy = First.y, ex = Second.x, ey = Second.y, tx = Third.x, ty = Third.y; int t; double Theta, c, s; double alphas, alphae, tangent; double m; double d1, d2, d3; d1 = sqrt((double)(sx - tx) * (sx - tx) + (sy - ty) * (sy - ty)); d2 = sqrt((double)(ex - tx) * (ex - tx) + (ey - ty) * (ey - ty)); d3 = sqrt((double)(ex - sx) * (ex - sx) + (ey - sy) * (ey - sy)); if (d1 + d2 == 0) { END_LOG; return; } if (d1 == d2 + d3 || d2 == d1 + d3 || d3 == d1 + d2) { POINT *p1 = new POINT; *p1 = Point(sx, sy); pstore->Add(p1); POINT *p2 = new POINT; *p2 = Point(ex, ey); pstore->Add(p2); END_LOG; return; } m = d1 / (d1 + d2); mx = ex * m + sx * (1 - m); my = ey * m + sy * (1 - m); if ((tx - mx) == 0) { Theta = 0; } else { tangent = -(double)(my - ty) / (mx - tx); Theta = M_PI / 2.0 - atan(tangent); if (mx - tx < 0) Theta += M_PI; } c = cos(Theta); s = sin(Theta); sx2 = (sx - tx) * c - (ty - sy) * s + 0.5; sy2 = (ty - sy) * c + (sx - tx) * s + 0.5; ex2 = (ex - tx) * c - (ty - ey) * s + 0.5; ey2 = (ty - ey) * c + (ex - tx) * s + 0.5; if ((double)sx2 * (double)sx2 == 0) alphas = sy2 * 0xFFFFFFFF; else alphas = (double)sy2 / ((double)sx2 * (double)sx2); if ((double)ex2 * (double)ex2 == 0) alphae = ey2 * 0xFFFFFFFF; else alphae = (double)ey2 / ((double)ex2 * (double)ex2); if (alphas * alphae < 0) { POINT *p1 = new POINT; *p1 = Point(sx, sy); pstore->Add(p1); POINT *p2 = new POINT; *p2 = Point(ex, ey); pstore->Add(p2); END_LOG; return; } t = 1; POINT *p1 = new POINT; *p1 = Point(sx, sy); pstore->Add(p1); while (t >= 1 && t <= 19) { x2 = (double)sx2 * (double)(20 - t) / 20.0; y2 = -alphas * ((double)x2 * (double)x2); POINT *p = new POINT; *p = Point(tx + c * x2 - s * y2, ty + c * y2 + s * x2); pstore->Add(p); t++; } t = 1; while (t >= 1 && t <= 19) { x2 = (double)ex2 * (double)t / 20.0; y2 = -alphae * ((double)x2 * (double)x2); POINT *p = new POINT; *p = Point(tx + c * x2 - s * y2, ty + c * y2 + s * x2); pstore->Add(p); t++; } POINT *p2 = new POINT; *p2 = Point(ex, ey); pstore->Add(p2); END_LOG; return; } // ----------------------------------------------------------------------------- double __fastcall TTextForm::GetLength(TList *pstore) { BEGIN_LOG(""); double len = 0; POINT p1, p2; for (int i = 0; i < pstore->Count - 1; i++) { p1 = *(POINT*)pstore->Items[i]; p2 = *(POINT*)pstore->Items[i + 1]; len += sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } END_LOG; return len; } // ----------------------------------------------------------------------------- POINT __fastcall TTextForm::GetPoint(TList *pstore, double traceLength) { BEGIN_LOG(""); POINT p1, p2, pm; TList *line = new TList; double len = 0; if (pstore->Count == 1) { END_LOG; return *(POINT*)pstore->Items[0]; } len = 0; for (int i = 0; i < pstore->Count - 1; i++) { p1 = *(POINT*)pstore->Items[i]; p2 = *(POINT*)pstore->Items[i + 1]; POINT *pa = new POINT; *pa = p1; line->Add(pa); POINT *pb = new POINT; *pb = p2; line->Add(pb); len = GetLength(line); // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) if (pa) delete pa; if (pb) delete pb; line->Clear(); if (traceLength > len) traceLength -= len; else { pm.x = (p1.x * (len - traceLength) + p2.x * traceLength) / len; pm.y = (p1.y * (len - traceLength) + p2.y * traceLength) / len; END_LOG; return pm; } } p1 = *(POINT*)pstore->Items[pstore->Count - 2]; p2 = *(POINT*)pstore->Items[pstore->Count - 1]; pm.x = (p1.x * (-traceLength) + p2.x * (traceLength + len)) / len; pm.y = (p1.y * (-traceLength) + p2.y * (traceLength + len)) / len; // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) if (line) delete line; END_LOG; return pm; } // ----------------------------------------------------------------------------- double __fastcall TTextForm::GetAngle(TList *pstore, double traceLength) { BEGIN_LOG(""); POINT p1 = GetPoint(pstore, traceLength), p2 = GetPoint(pstore, traceLength + 10); double theta; // try{ if (p1.y - p2.y != 0 || p1.x - p2.x != 0) theta = -atan2(p1.y - p2.y, p1.x - p2.x) + M_PI; // }catch(Exception &exception){ else theta = M_PI; // } // return -atan2(p1.y - p2.y, p1.x - p2.x)+M_PI; //atan END_LOG; return theta; // atan } // ----------------------------------------------------------------------------- void __fastcall TTextForm::rzcbSizeTypeCloseUp(TObject *Sender) { BEGIN_LOG(""); // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) POINT *pData = NULL; for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); if ((Shape == 3) && (rzcbSizeType->ItemIndex < 1)) { ShowMessage(IDS_MESSAGE_NOTNORMALORFIX); rzcbSizeType->ItemIndex = SizeItem; } else if (Shape == 4 && rzcbSizeType->ItemIndex != 1) { ShowMessage(IDS_MESSAGE_NOTCURVE); rzcbSizeType->ItemIndex = SizeItem; } else { SizeItem = rzcbSizeType->ItemIndex; } if (SizeItem == 1 && Shape == 4) RzCheckBox1->Enabled = true; else RzCheckBox1->Enabled = false; RzCheckBox2->Enabled = RzCheckBox1->Enabled; MainImageForm->ResetDraw(true); UpdateMenu(); Step = 0; bPosition = false; IsPosition(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::FormClose(TObject *Sender, TCloseAction &Action) { BEGIN_LOG(""); HWND hWnd = ((TWinControl*)Owner)->Handle; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::FontNameBoxCloseUp(TObject *Sender) { BEGIN_LOG(""); String fontName; if (FontNameBox->SelectedFont) fontName = FontNameBox->SelectedFont->Name; // Text; else fontName = FontNameBox->FontName; int i = FontNameBox->ItemIndex; TFont *font = MainImageForm->iMainImage->Canvas->Font; // // ¼¼·ÎÆùÆ®(@)¸¦ ¼±ÅÃÇßÀ» °æ¿ì ÀÚµ¿À¸·Î ±âº» ÆùÆ®·Î º¯°æ by david 090917 // fontName = FontNameBox->Items->Strings[i]; // if (fontName.c_str()[0] == '@') // fontName = fontName.SubString(2, fontName.Length() - 1); i = FontNameBox->Items->IndexOf(fontName); if (i < 0) { TFont *_font = new TFont(); _font->Handle = (HFONT)GetStockObject(DEFAULT_GUI_FONT); // ±¼¸² fontName = _font->Name; delete _font; _font = NULL; i = FontNameBox->Items->IndexOf(fontName); } MainImageForm->iMainImage->Canvas->Font->Name = fontName; // --------------------------------------------------------------- // // ¼¼·ÎÆùÆ®(@)¸¦ ¼±ÅÃÇßÀ» °æ¿ì ÀÚµ¿À¸·Î ±âº» ÆùÆ®·Î º¯°æ by david 090917 // FontNameBox->ItemIndex = i; if (Edit->Enabled == true) Edit->SetFocus(); else g_FocusControl->SetFocus(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::ComboBoxShapeCloseUp(TObject *Sender) { BEGIN_LOG(""); // ¸Þ¸ð¸® ´©¼ö ¼öÁ¤ - by monkman (2010.05.08) pnCurveOption->Visible = false; pnTunnelOption->Visible = false; POINT *pData = NULL; for (int i = 0; i < pstore->Count; i++) { pData = (POINT*)pstore->Items[i]; if (pData) delete pData; } pstore->Clear(); if (ComboBoxShape->ItemIndex == 3) { if (SizeItem > 0) { Shape = ComboBoxShape->ItemIndex; } else { ShowMessage(IDS_MESSAGE_NOTTUNNEL); // lhskys ¿¡·¯ ¸Þ¼¼Áö Áß Fix size »èÁ¦ ComboBoxShape->ItemIndex = Shape; } } else if (ComboBoxShape->ItemIndex == 4) { if (SizeItem == 1) Shape = ComboBoxShape->ItemIndex; else { ShowMessage(IDS_MESSAGE_NOTCURVE); ComboBoxShape->ItemIndex = Shape; } } else { Shape = ComboBoxShape->ItemIndex; } if (ComboBoxShape->ItemIndex == 4 && SizeItem == 1) { RzCheckBox1->Enabled = true; pnCurveOption->Top = pnTunnelOption->Top; pnCurveOption->BringToFront(); pnCurveOption->Visible = true; } else RzCheckBox1->Enabled = false; RzCheckBox2->Enabled = RzCheckBox1->Enabled; MainImageForm->ResetDraw(true); UpdateMenu(); Step = 0; bPosition = false; IsPosition(); END_LOG; } // --------------------------------------------------------------------------- void __fastcall TTextForm::rzcbFontStyleCloseUp(TObject *Sender) { TFont *font = MainImageForm->iMainImage->Canvas->Font; switch(rzcbFontStyle->ItemIndex) { case 0: font->Style = TFontStyles(); break; case 1: font->Style = TFontStyles() << fsBold; break; case 2: font->Style = TFontStyles() << fsItalic; break; case 3: font->Style = TFontStyles() << fsBold << fsItalic; break; } } // ---------------------------------------------------------------------------