//--------------------------------------------------------------------------- #include #pragma hdrstop #include "DesignViewForm.h" #include "Main_F.h" #include "define.h" #include "common.h" #ifdef LOCK_TEX #include "Seedx.h" #endif //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "TPRuler2D" #pragma link "RzEdit" #pragma link "RzPanel" #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_DESIGN_VIEWER StringTable[0] #define IDS_COPY StringTable[1] #define IDS_SAVE StringTable[2] #define IDS_ZOOM StringTable[3] //--------------------------------------------------------------------------- TDesignView_F *DesignView_F; //--------------------------------------------------------------------------- __fastcall TDesignView_F::TDesignView_F(TComponent* Owner) : TForm(Owner) { Left = 15; Top = 15; StringTable.Create(BaseDir, Language, "DesignViewer"); Caption=IDS_DESIGN_VIEWER; pmdmToClipBoard->Caption=IDS_COPY; pmdmSave->Caption=IDS_SAVE; pmdmZoom->Caption=IDS_ZOOM; clickx=0; clicky=0; mouse_down = false; cursor = Cursor; //width=TEX_MAX_WIDTH; // ¹Ù´Ã¼ö //height=0; // ¹Ù´Ã¼ö //unused wtimes=2; // °¡·Î¹è¼ö htimes=2; // ¼¼·Î¹è¼ö focusEater->Top = -30; DesignViewRulerPanel->DoubleBuffered = true; DoubleBuffered = true; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::DVResize(RECT r, int DistX, int DistY){//ÀåÁø¸¸: ½ºÅ©·ÑÀ» À§ÇØ /* ClientWidth=r.right*wtimes; ClientHeight=r.bottom*htimes; chartTempL2->Create(r.right*wtimes,r.bottom*htimes,24); */ // int w = (1250/DistX)*DistX; // int h = (970/DistX)*DistX; int w = ((Screen->Width-30)/DistX)*DistX; int h = ((Screen->Height-55)/DistX)*DistX; DesignViewRulerX->Top = h-DesignViewRulerX->Thick;//gabriel DesignViewRulerX->Left = 0; DesignViewRulerX->Width = w; DesignViewRulerY->Top = 0; DesignViewRulerY->Left = w-DesignViewRulerY->Thick;; DesignViewRulerY->Height = h; DesignViewRulerY->StartY=this->DistY/2; DesignViewRulerX->DPI=this->DistX; DesignViewRulerY->DPI=this->DistY; ClientWidth=w+16; ClientHeight=h+16; scHori->Top = h; scHori->Left = 0; scHori->Width = w; ChartVScrollBar->Top = 0; ChartVScrollBar->Left = w; ChartVScrollBar->Height = h; chartTempL2_Height_Ideal = max((int)r.bottom*htimes,h);//gabriel: ³ôÀÌ ¼³Á¤ int chartTempL2_Height = ((ClientHeight-16)Create(max((int)r.right*wtimes,w), chartTempL2_Height, 24); scHori->SmallChange = 16;//gabriel: max °ªµµ Àç¼³Á¤ÇÔ scHori->Max= (chartTempL2->Width - (ClientWidth-16) > 0) ? (chartTempL2->Width - (ClientWidth-16)) : 0; ChartVScrollBar->SmallChange = 16; ChartVScrollBar->Max= (chartTempL2_Height_Ideal - (ClientHeight-16) > 0) ? (chartTempL2_Height_Ideal - (ClientHeight-16)) : 0; scHori->Position = scHori->Max; if(r.right*wtimes<=w) scHori->Enabled = false; else{ scHori->Enabled = true; } ChartVScrollBar->Position = ChartVScrollBar->Max; if(r.bottom*htimes<=h) ChartVScrollBar->Enabled = false; else{ ChartVScrollBar->Enabled = true; } } //--------------------------------------------------------------------------- //µðÀÚÀÎâ¿¡ À̹ÌÁö¸¦ »Ñ¸®´Â ÇÔ¼ö void __fastcall TDesignView_F::Show(TexLayer *texlayer_in, TTexpiaBitmap *chartTempL_in, int DistX, int DistY){ if(!chartTempL_in) return; chartTempL->Create(chartTempL_in->Width, chartTempL_in->Height, 24); if (!chartTempL->Copy(chartTempL_in, SRCCOPY)) return; texlayer = texlayer_in; this->DistX=DistX; this->DistY=DistY; int width = texlayer->complete_needle; if(Main->texlayer->default_complete_needle == true){ //ÀåÁø¸¸ : ÃÖ¼Ò°ø¹è¼ö¸¦ À§ÇØ int a[MAX_LAYER_COUNT] = {0,0,0,0,0,0,0}; TList *TexList = Main->texlayer->TexList; for(int j2=0;j2Count;j2++){ Tex *tex = ((Tex *)TexList->Items[j2]); for(int i2=0;i2Wales->Count;i2++) a[j2]+= ((WaleState *)(tex->Wales->Items[i2]))->cnt; } width = GetLCN(a[0],a[1],a[2],a[3],a[4],a[5],a[6]); } int maxrun=0; int minrun=0; for(int j2=0;j2texlayer->TexList->Count;j2++){ Tex *tex = ((Tex *)Main->texlayer->TexList->Items[j2]); for(int i2=0;i2Curve->Count;i2++) { KO *ko = (KO *)tex->Curve->Items[i2]; maxrun = max(ko->in,max(ko->via,max(ko->out,maxrun))); minrun = min(ko->in,min(ko->via,min(ko->out,minrun))); } } width+=(maxrun-minrun); RECT r=Rect(0,0,width*DistX,Main->texlayer->GetHeight()*DistY); if(r.right<128) wtimes=8; else if(r.right<512) wtimes=3; else if(r.right<800) wtimes=2; else wtimes=1; if(r.bottom<512) htimes=3; else htimes=2; DVResize(r, DistX, DistY); FormPaint(NULL); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormCreate(TObject *Sender) { SetFont(); chartTempL2 = new TTexpiaBitmap; chartTempL = new TTexpiaBitmap; SavePictureDialog->InitialDir=BaseDir+"\\bmp"; SavePictureDialog->DefaultExt = "bmp"; SavePictureDialog->FileName = "Noname1"; SavePictureDialog->Filter="Bitmaps (*.bmp)|*.bmp|JPEG Image File (*.jpg)|*.jpg"; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::SetFont() { SetSmallFont(Font); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormDestroy(TObject *Sender) { delete chartTempL2; chartTempL2=NULL; delete chartTempL; chartTempL=NULL; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if((chartTempL2->Width > (ClientWidth-16))||(chartTempL2_Height_Ideal > (ClientHeight-16))){ clickx=X; clicky=Y; if (scHori->Max) ws_move = (chartTempL2->Width - (ClientWidth-16))*scHori->Position/scHori->Max; else ws_move = 0; hs_move = ChartVScrollBar->Position; //hs_move = (chartTempL2_Height_Ideal - (ClientHeight-16))*ChartVScrollBar->Position/ChartVScrollBar->Max; mouse_down = true; } cursor = Cursor; if(Button==mbLeft) Screen->Cursor=crSizeAll; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(!mouse_down) return; if(chartTempL2->Width > (ClientWidth-16)) scHori->Position = (ws_move+clickx-X)*scHori->Max / (chartTempL2->Width - (ClientWidth-16)); if(chartTempL2_Height_Ideal > (ClientHeight-16)) ChartVScrollBar->Position = (hs_move+clicky-Y); //ChartVScrollBar->Position = (hs_move+clicky-Y)*ChartVScrollBar->Max / (chartTempL2_Height_Ideal - (ClientHeight-16)); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { mouse_down = false; // Left+=X-clickx; // ¸¶¿ì½º ¿òÁ÷À̸é âÀÌ ¿òÁ÷Àδ٠// Top+=Y-clicky; Screen->Cursor=cursor; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormPaint(TObject *Sender) //gabriel { HDC dc=chartTempL->CreateDC(); HDC dc2=chartTempL2->CreateDC(); int yoff2=ChartVScrollBar->Max-ChartVScrollBar->Position; int xoff2=scHori->Max-scHori->Position; int trim_y = -yoff2%DistY;//gabriel: ´«±Ý ¸ÂÃá´Ù if (trim_y<0) trim_y += DistY; int dx=0,dy=0,sx=0,sy=0; if(chartTempL2->Width>(ClientWidth-16)) { sx = chartTempL2->Width-(ClientWidth-16)-xoff2; dx = 0; } else { sx = 0; dx = (ClientWidth-16)-chartTempL2->Width; } if(chartTempL2->Height>(ClientHeight-16)) { sy = chartTempL2->Height-(ClientHeight-16)-yoff2; dy = 0; } else { sy = 0; dy = (ClientHeight-16)-chartTempL2->Height; } for(int i=0;iHeight;i+=chartTempL->Height){ // ÀåÁø¸¸: ¹è°æÀÇ Á¡ º¹»ç, À§for ÀÖÀ½ for(int j=0;jWidth;j+=chartTempL->Width){ BitBlt(dc2,j,i,min(chartTempL->Width, chartTempL2->Width-j),min(chartTempL->Height, chartTempL2->Height-i), dc,0,trim_y+0,SRCCOPY); } } if(!texlayer) return; HDC hDC = Canvas->Handle; int diff = ChartVScrollBar->Max-ChartVScrollBar->Position ; int r_top = chartTempL2_Height_Ideal-chartTempL2->Height-diff; if(r_top<0) r_top = 0; texlayer->Draw2(dc2, Rect(0, r_top,chartTempL2->Width, chartTempL2_Height_Ideal), DistX, DistY , chartTempL2->Height, diff ); BitBlt(hDC,// ¹ÙÅÁÈ­¸é¿¡ Ãâ·Â -DesignViewRulerX->Thick+dx, -DesignViewRulerY->Thick+dy, ClientWidth-16, ClientHeight-16, dc2, sx, 0, SRCCOPY); chartTempL->DeleteDC(dc); chartTempL2->DeleteDC(dc); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::pmdmToClipBoardClick(TObject *Sender) { BEGIN_TEX; BITMAPHANDLE bh; HDC dcSrc = NULL, dcDst = NULL; memset(&bh, 0, sizeof(BITMAPHANDLE)); L_CreateBitmap(&bh, sizeof(BITMAPHANDLE), TYPE_CONV, chartTempL2->Width, chartTempL2->Height, 24, ORDER_BGR, NULL, TOP_LEFT, NULL, NULL); dcDst = L_CreateLeadDC(&bh); dcSrc = chartTempL2->CreateDC(); BitBlt(dcDst, 0, 0, chartTempL2->Width, chartTempL2->Height, dcSrc, 0, 0, SRCCOPY); chartTempL2->DeleteDC(dcSrc); L_DeleteLeadDC(dcDst); dcDst = NULL; L_CopyToClipboard(Handle, &bh, COPY2CB_EMPTY | COPY2CB_DIB); L_FreeBitmap(&bh); END_TEX; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::pmdmSaveClick(TObject *Sender) { BEGIN_TEX; if (SavePictureDialog->Execute()) { if(SavePictureDialog->FilterIndex==1){ chartTempL2->SaveToFile(SavePictureDialog->FileName, FILE_BMP); } else if(SavePictureDialog->FilterIndex==2){ chartTempL2->SaveToFile(SavePictureDialog->FileName, FILE_JFIF, 2);//2´Â ¹«¼Õ½Ç } } END_TEX; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::scHoriChange(TObject *Sender) { Repaint(); DesignViewRulerX->StartX=(scHori->Max-scHori->Position); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::ChartVScrollBarChange(TObject *Sender) { Repaint(); DesignViewRulerY->StartY=DistY/2 + ChartVScrollBar->Max-ChartVScrollBar->Position; } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::focusEaterKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(Key == 37 && scHori->Enabled){ scHori->Position -= 1; } if(Key == 38 && ChartVScrollBar->Enabled){ ChartVScrollBar->Position -= 1; } if(Key == 39 && scHori->Enabled){ scHori->Position += 1; } if(Key == 40 && ChartVScrollBar->Enabled){ ChartVScrollBar->Position += 1; } } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::FormDblClick(TObject *Sender) { DesignView_F->Close(); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::ChartVScrollBarEnter(TObject *Sender) { focusEater->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TDesignView_F::scHoriEnter(TObject *Sender) { focusEater->SetFocus(); } //---------------------------------------------------------------------------