Add a 'Stamp' widget.

Place one or multiple stamps on scanned pages in defined locations.

A stamp is understood here as
 - a transparent text in a transparent frame with no borders
 - an opaque text on an opaque background with no borders.

Stamp parameters:
 - text
 - font
 - foreground colour
 - background colour
 - angle of rotation
 - transparency.

Locations:
 - centre
 - cardinal directions
 - inter-cardinal directions.
This commit is contained in:
Saleem Edah-Tally
2025-07-01 22:38:07 +02:00
parent c2c792dd3d
commit a2045aa1f6
38 changed files with 3376 additions and 71 deletions

View File

@@ -103,6 +103,7 @@ InsaneWidget::~InsaneWidget()
void InsaneWidget::Init()
{
////@begin InsaneWidget member initialisation
szInsaneWidgetMain = NULL;
lblNewDoc = NULL;
txtNewDoc = NULL;
btnScan = NULL;
@@ -119,11 +120,11 @@ void InsaneWidget::CreateControls()
////@begin InsaneWidget content construction
InsaneWidget* itemPanel1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemPanel1->SetSizer(itemBoxSizer2);
szInsaneWidgetMain = new wxBoxSizer(wxVERTICAL);
itemPanel1->SetSizer(szInsaneWidgetMain);
wxBoxSizer* itemBoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
itemBoxSizer2->Add(itemBoxSizer1, 0, wxGROW|wxALL, 5);
szInsaneWidgetMain->Add(itemBoxSizer1, 0, wxGROW|wxALL, 5);
lblNewDoc = new wxStaticText( itemPanel1, ID_NewDoc_LBL, _("New"), wxDefaultPosition, wxDefaultSize, 0 );
if (InsaneWidget::ShowToolTips())
@@ -137,7 +138,7 @@ void InsaneWidget::CreateControls()
btnScan = new wxButton( itemPanel1, ID_Scan_BTN, _("Scan"), wxDefaultPosition, wxDefaultSize, 0 );
if (InsaneWidget::ShowToolTips())
btnScan->SetToolTip(_("'Left click' to start the scan project.\n'Right click' to show the scanner widget."));
btnScan->SetToolTip(_("'Left click' to start the scan project.\n'Right click' to show the scanner widget.\n'Ctrl + Right click' to show the Stamp dialog."));
itemBoxSizer1->Add(btnScan, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
////@end InsaneWidget content construction

View File

@@ -25,6 +25,7 @@
*/
////@begin forward declarations
class wxBoxSizer;
////@end forward declarations
/*!
@@ -39,7 +40,7 @@
#define SYMBOL_INSANEWIDGET_STYLE wxTAB_TRAVERSAL
#define SYMBOL_INSANEWIDGET_TITLE _("InsaneWidget")
#define SYMBOL_INSANEWIDGET_IDNAME ID_INSANEWIDGET
#define SYMBOL_INSANEWIDGET_SIZE wxSize(400, 300)
#define SYMBOL_INSANEWIDGET_SIZE wxDefaultSize
#define SYMBOL_INSANEWIDGET_POSITION wxDefaultPosition
////@end control identifiers
@@ -87,6 +88,7 @@ public:
static bool ShowToolTips();
////@begin InsaneWidget member variables
wxBoxSizer* szInsaneWidgetMain;
wxStaticText* lblNewDoc;
wxTextCtrl* txtNewDoc;
wxButton* btnScan;

View File

@@ -245,7 +245,7 @@
<string name="proxy-Font">""</string>
<string name="proxy-Foreground colour">""</string>
<string name="proxy-Header filename">"InsaneWidget.h"</string>
<long name="proxy-Height">300</long>
<long name="proxy-Height">-1</long>
<string name="proxy-Help text">""</string>
<bool name="proxy-Hidden">0</bool>
<string name="proxy-Icon">""</string>
@@ -257,7 +257,7 @@
<string name="proxy-Texture style">"Tiled"</string>
<string name="proxy-Title">"InsaneWidget"</string>
<string name="proxy-Tooltip text">""</string>
<long name="proxy-Width">400</long>
<long name="proxy-Width">-1</long>
<string name="proxy-Window kind">"wxPanel"</string>
<bool name="proxy-wxBORDER_THEME">0</bool>
<bool name="proxy-wxCAPTION">0</bool>
@@ -303,13 +303,21 @@
<long name="is-transient">0</long>
<long name="locked">0</long>
<long name="owns-file">1</long>
<string name="proxy-Member variable name">""</string>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Border">5</long>
<string name="proxy-Member variable name">"szInsaneWidgetMain"</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<long name="proxy-Stretch factor">0</long>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRESERVE_SPACE_EVEN_IF_HIDDEN">0</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxTOP">1</bool>
<string name="title">"wxBoxSizer V"</string>
<long name="title-mode">0</long>
<string name="type">"dialog-control-document"</string>
@@ -538,7 +546,8 @@
<bool name="proxy-Separate files">0</bool>
<long name="proxy-Stretch factor">0</long>
<string name="proxy-Tooltip text">"'Left click' to start the scan project.
'Right click' to show the scanner widget."</string>
'Right click' to show the scanner widget.
'Ctrl + Right click' to show the Stamp dialog."</string>
<long name="proxy-Width">-1</long>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
@@ -654,13 +663,21 @@
<long name="is-transient">0</long>
<long name="locked">0</long>
<long name="owns-file">1</long>
<string name="proxy-AlignH">"Centre"</string>
<string name="proxy-AlignV">"Centre"</string>
<long name="proxy-Border">5</long>
<string name="proxy-Member variable name">""</string>
<string name="proxy-Orientation">"Vertical"</string>
<string name="proxy-Platform">"&lt;Any platform&gt;"</string>
<long name="proxy-Stretch factor">0</long>
<bool name="proxy-wxADJUST_MINSIZE">0</bool>
<bool name="proxy-wxBOTTOM">1</bool>
<bool name="proxy-wxFIXED_MINSIZE">0</bool>
<bool name="proxy-wxLEFT">1</bool>
<bool name="proxy-wxRESERVE_SPACE_EVEN_IF_HIDDEN">0</bool>
<bool name="proxy-wxRIGHT">1</bool>
<bool name="proxy-wxSHAPED">0</bool>
<bool name="proxy-wxTOP">1</bool>
<string name="title">"wxBoxSizer V"</string>
<long name="title-mode">0</long>
<string name="type">"dialog-control-document"</string>