From 36c9105fe5feb0f8cdd2400840372923990a203c Mon Sep 17 00:00:00 2001 From: Alex Alabuzhev Date: Wed, 16 Aug 2017 08:23:52 +0000 Subject: [PATCH] DIF_CENTERTEXT fix --- far/changelog | 4 ++++ far/dialog.cpp | 10 ++++++---- far/vbuild.m4 | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/far/changelog b/far/changelog index c7f8b8ef5f..c28322a4ac 100644 --- a/far/changelog +++ b/far/changelog @@ -1,3 +1,7 @@ +drkns 16.08.2017 09:22:10 +0000 - build 5007 + +1. C форума: DI_TEXT + DIF_CENTERTEXT выравнивался по центру диалога вместо относительно координат X1 и X2. + drkns 14.08.2017 21:38:39 +0000 - build 5006 1. Теперь FCTL_ETUSERSCREEN можно использовать и из режимов редактора (-e) и просмотра (-v). diff --git a/far/dialog.cpp b/far/dialog.cpp index 0caf722409..74ad987bce 100644 --- a/far/dialog.cpp +++ b/far/dialog.cpp @@ -1724,7 +1724,7 @@ void Dialog::ShowDialog(size_t ID) { LenText=LenStrItem(I,strStr); - if (!(Items[I].Flags & (DIF_SEPARATORUSER | DIF_SEPARATOR | DIF_SEPARATOR2)) && (Items[I].Flags & DIF_CENTERTEXT) && CX1 != -1) + if (!(Items[I].Flags & (DIF_SEPARATORUSER | DIF_SEPARATOR | DIF_SEPARATOR2)) && (Items[I].Flags & DIF_CENTERTEXT) && CX1 != -1 && CX2 != -1) { inplace::fit_to_center(strStr, CX2 - CX1 + 1); LenText = LenStrItem(I, strStr); @@ -1733,7 +1733,7 @@ void Dialog::ShowDialog(size_t ID) if ((CX2 <= 0) || (CX2 < CX1)) CW = LenText; - X=(CX1==-1 || (Items[I].Flags & DIF_CENTERTEXT))?(m_X2-m_X1+1-LenText)/2:CX1; + X=(CX1==-1)?(m_X2-m_X1+1-LenText)/2:CX1; Y=(CY1==-1)?(m_Y2-m_Y1+1)/2:CY1; int XS=(CX1==-1 || !(Items[I].Flags&DIF_SEPARATORUSER))?X:CX1; @@ -1806,6 +1806,8 @@ void Dialog::ShowDialog(size_t ID) inplace::fit_to_center(strResult, CW); else if (Items[I].Flags & DIF_RIGHTTEXT) inplace::fit_to_right(strResult, CW); + else + inplace::fit_to_left(strResult, CW); LenText=LenStrItem(I,strResult); X=(CX1==-1 || (Items[I].Flags & DIF_CENTERTEXT))?(CW-LenText)/2:CX1; @@ -1834,7 +1836,7 @@ void Dialog::ShowDialog(size_t ID) strStr = Items[I].strData; LenText=LenStrItem(I,strStr); - if (!(Items[I].Flags & (DIF_SEPARATORUSER | DIF_SEPARATOR | DIF_SEPARATOR2)) && (Items[I].Flags & DIF_CENTERTEXT) && CY1 != -1) + if (!(Items[I].Flags & (DIF_SEPARATORUSER | DIF_SEPARATOR | DIF_SEPARATOR2)) && (Items[I].Flags & DIF_CENTERTEXT) && CY1 != -1 && CY1 != -1) { inplace::fit_to_center(strStr, CY2 - CY1 + 1); LenText = static_cast(strStr.size()); @@ -1844,7 +1846,7 @@ void Dialog::ShowDialog(size_t ID) CH = LenStrItem(I,strStr); X=(CX1==-1)?(m_X2-m_X1+1)/2:CX1; - Y=(CY1==-1 || (Items[I].Flags & DIF_CENTERTEXT))?(m_Y2-m_Y1+1-LenText)/2:CY1; + Y=(CY1==-1)?(m_Y2-m_Y1+1-LenText)/2:CY1; int YS=(CY1==-1 || !(Items[I].Flags&DIF_SEPARATORUSER))?Y:CY1; if( (Items[I].Flags & DIF_RIGHTTEXT) && CY2 > CY1 ) diff --git a/far/vbuild.m4 b/far/vbuild.m4 index 5e59b92117..567fbd94ec 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,5006)m4_dnl +m4_define(BUILD,5007)m4_dnl