AddBrandingImage doesn't depend on the UI now. Can now set the branding image on the bottom and on the right too, and set a custom padding value
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2334 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
3ae6d897b8
commit
156648c9d5
6 changed files with 50 additions and 21 deletions
|
@ -8,9 +8,9 @@ The commands below all adjust attributes of the installer. These attributes cont
|
|||
|
||||
\S2{aaddbrandingimage} AddBrandingImage
|
||||
|
||||
\c (left|top) (width|height)
|
||||
\c (left|right|top|bottom) (width|height) [padding]
|
||||
|
||||
Adds a branding image on the top of the installer or on the left. Its size will be set according to the width/height specified, the installer width/height and the installer font. Because this depends on the installer font, you should put SetFont before AddBrandingImage.
|
||||
Adds a branding image on the top, bottom, left, or right of the installer. Its size will be set according to the width/height specified, the installer width/height and the installer font. The final size will not always be the same as the what you have requsted. Have a look at the output of the command for the final size. Because this depends on the installer font, you should use SetFont before AddBrandingImage. The default padding value is 2.
|
||||
|
||||
\S2{aallowrootdirinstall} AllowRootDirInstall
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ Overrides the default auto window-closing flag (specified for the installer usin
|
|||
|
||||
\c [/IMGID=item_id_in_dialog] [/RESIZETOFIT] path_to_bitmap_file.bmp
|
||||
|
||||
Sets the current bitmap file displayed as the branding image. If no IMGID is specified, the first image control found will be used, or the image control created by AddBrandingImage. Note that this bitmap must be present on the user's machine. Use File first to put it there. If /RESIZETOFIT is specified the image will be automatically resized (very poorly) to the image control size. If you used AddBrandingImage you can get this size, by compiling your script and watching for AddBrandingImage output, it will tell you the size. SetBrandingImage will not work when called from .onInit!
|
||||
Sets the current bitmap file displayed as the branding image. If no IMGID is specified, the first image control found will be used, or the image control created by \R{aaddbrandingimage}{AddBrandingImage}. Note that this bitmap must be present on the user's machine. Use File first to put it there. If /RESIZETOFIT is specified the image will be automatically resized (very poorly) to the image control size. If you used \R{aaddbrandingimage}{AddBrandingImage} you can get this size, by compiling your script and watching for \R{aaddbrandingimage}{AddBrandingImage} output, it will tell you the size. SetBrandingImage will not work when called from .onInit!
|
||||
|
||||
\S2{setdetailsview} SetDetailsView
|
||||
|
||||
|
|
|
@ -224,6 +224,16 @@ CDialogTemplate::~CDialogTemplate() {
|
|||
// Methods
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Returns the width of the dialog
|
||||
short CDialogTemplate::GetWidth() {
|
||||
return m_sWidth;
|
||||
}
|
||||
|
||||
// Returns the height of the dialog
|
||||
short CDialogTemplate::GetHeight() {
|
||||
return m_sHeight;
|
||||
}
|
||||
|
||||
// Returns info about the item with the id wId
|
||||
DialogItemTemplate* CDialogTemplate::GetItem(WORD wId) {
|
||||
for (unsigned int i = 0; i < m_vItems.size(); i++)
|
||||
|
@ -288,14 +298,16 @@ void CDialogTemplate::AddItem(DialogItemTemplate item) {
|
|||
m_vItems.push_back(newItem);
|
||||
}
|
||||
|
||||
// Moves all of the items in the dialog by (x,y) and resizes the dialog by (x,y)
|
||||
void CDialogTemplate::MoveAllAndResize(short x, short y) {
|
||||
// Move all items
|
||||
// Moves all of the items in the dialog by (x,y)
|
||||
void CDialogTemplate::MoveAll(short x, short y) {
|
||||
for (unsigned int i = 0; i < m_vItems.size(); i++) {
|
||||
m_vItems[i]->sX += x;
|
||||
m_vItems[i]->sY += y;
|
||||
}
|
||||
// Resize
|
||||
}
|
||||
|
||||
// Resizes the dialog by (x,y)
|
||||
void CDialogTemplate::Resize(short x, short y) {
|
||||
m_sWidth += x;
|
||||
m_sHeight += y;
|
||||
}
|
||||
|
|
|
@ -92,13 +92,16 @@ public:
|
|||
CDialogTemplate(BYTE* pbData);
|
||||
virtual ~CDialogTemplate();
|
||||
|
||||
short GetWidth();
|
||||
short GetHeight();
|
||||
DialogItemTemplate* GetItem(WORD wId);
|
||||
DialogItemTemplate* GetItemByIdx(DWORD i);
|
||||
void RemoveItem(WORD wId);
|
||||
void SetFont(char* szFaceName, WORD wFontSize);
|
||||
void AddItem(DialogItemTemplate item);
|
||||
HWND CreateDummyDialog();
|
||||
void MoveAllAndResize(short x, short y);
|
||||
void MoveAll(short x, short y);
|
||||
void Resize(short x, short y);
|
||||
void PixelsToDlgUnits(short& x, short& y);
|
||||
void DlgUnitsToPixels(short& x, short& y);
|
||||
SIZE GetStringSize(WORD id, char *str);
|
||||
|
|
|
@ -1522,9 +1522,12 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
||||
case TOK_ADDBRANDINGIMAGE:
|
||||
try {
|
||||
int k=line.gettoken_enum(1,"top\0left\0");
|
||||
int k=line.gettoken_enum(1,"top\0left\0bottom\0right\0");
|
||||
int wh=line.gettoken_int(2);
|
||||
if (k == -1) PRINTHELP()
|
||||
if (k == -1) PRINTHELP();
|
||||
int padding = 2;
|
||||
if (line.getnumtokens() == 4)
|
||||
padding = line.gettoken_int(3);
|
||||
|
||||
init_res_editor();
|
||||
BYTE* dlg = res_editor->GetResource(RT_DIALOG, MAKEINTRESOURCE(IDD_INST), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||||
|
@ -1536,8 +1539,8 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
DialogItemTemplate brandingCtl = {0,};
|
||||
|
||||
brandingCtl.dwStyle = SS_BITMAP | WS_CHILD | WS_VISIBLE;
|
||||
brandingCtl.sX = childRect->sX;
|
||||
brandingCtl.sY = childRect->sY;
|
||||
brandingCtl.sX = padding;
|
||||
brandingCtl.sY = padding;
|
||||
brandingCtl.szClass = MAKEINTRESOURCE(0x0082);
|
||||
brandingCtl.szTitle = "";
|
||||
brandingCtl.wId = IDC_BRANDIMAGE;
|
||||
|
@ -1545,18 +1548,29 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char
|
|||
brandingCtl.sHeight = wh;
|
||||
brandingCtl.sWidth = wh;
|
||||
dt.PixelsToDlgUnits(brandingCtl.sWidth, brandingCtl.sHeight);
|
||||
if (k) {
|
||||
// Left
|
||||
dt.MoveAllAndResize(brandingCtl.sWidth + childRect->sX, 0);
|
||||
if (k%2) {
|
||||
// left (1) / right (3)
|
||||
|
||||
DialogItemTemplate *okButton = dt.GetItem(IDOK);
|
||||
brandingCtl.sHeight = okButton->sY + okButton->sHeight - childRect->sY;
|
||||
if (k & 2) // right
|
||||
brandingCtl.sX += dt.GetWidth();
|
||||
else // left
|
||||
dt.MoveAll(brandingCtl.sWidth + (padding * 2), 0);
|
||||
|
||||
dt.Resize(brandingCtl.sWidth + (padding * 2), 0);
|
||||
|
||||
brandingCtl.sHeight = dt.GetHeight() - (padding * 2);
|
||||
}
|
||||
else {
|
||||
// Top
|
||||
dt.MoveAllAndResize(0, brandingCtl.sHeight + childRect->sY);
|
||||
// top (0) / bottom (2)
|
||||
|
||||
brandingCtl.sWidth = childRect->sWidth;
|
||||
if (k & 2) // bottom
|
||||
brandingCtl.sY += dt.GetHeight();
|
||||
else // top
|
||||
dt.MoveAll(0, brandingCtl.sHeight + (padding * 2));
|
||||
|
||||
dt.Resize(0, brandingCtl.sHeight + (padding * 2));
|
||||
|
||||
brandingCtl.sWidth = dt.GetWidth() - (padding * 2);
|
||||
}
|
||||
|
||||
dt.AddItem(brandingCtl);
|
||||
|
|
|
@ -18,7 +18,7 @@ typedef struct
|
|||
static tokenType tokenlist[TOK__LAST] =
|
||||
{
|
||||
{TOK_ABORT,"Abort",0,1,"[message]"},
|
||||
{TOK_ADDBRANDINGIMAGE,"AddBrandingImage",2,0,"(top|left) (height|width)"},
|
||||
{TOK_ADDBRANDINGIMAGE,"AddBrandingImage",2,1,"(top|left|bottom|right) (height|width) [padding]"},
|
||||
{TOK_ADDSIZE,"AddSize",1,0,"size_to_add_to_section_in_kb"},
|
||||
{TOK_AUTOCLOSE,"AutoCloseWindow",1,0,"(false|true)"},
|
||||
{TOK_BGGRADIENT,"BGGradient",0,3,"(off | [top_color [bottom_color [text_color]]])"},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue