feat: rebrand to MMD PDF, single corporate theme, and remove original text under an edit

- Services/PdfRedactText.cs: strip text whose origin falls inside a CoverAnnotation
  from the page content stream at save time, hooked into PdfBurn.DrawAnnotationsIntoDoc.
  Fixes edited values staying recoverable by text extraction.
- Themes/MMD.xaml replaces all thirteen themes; picker and accent strip removed; no dark mode.
- Rename KillerPDF -> MMD PDF across code, resources, packaging and locale strings; new icon.
- Remove the upstream author credit and the in-app install button.
This commit is contained in:
2026-08-27 07:37:09 +02:00
parent 532485a830
commit 6610acfa44
230 changed files with 9362 additions and 11508 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ using System;
using System.Windows;
using System.Windows.Media;
namespace KillerPDF
namespace MmdPdf
{
public enum EditTool { Select, Text, Highlight, Strikethrough, Underline, Draw, Signature, Image, Crop, Line, Rotate, Shape }
+1 -1
View File
@@ -1,4 +1,4 @@
namespace KillerPDF
namespace MmdPdf
{
/// <summary>
/// One link rectangle on a page, in render-dim coordinates.
+2 -2
View File
@@ -8,7 +8,7 @@ using System.Windows.Media.Imaging;
using Docnet.Core;
using Docnet.Core.Models;
namespace KillerPDF
namespace MmdPdf
{
/// <summary>
/// ViewModel for a single page thumbnail in the sidebar PageList.
@@ -88,7 +88,7 @@ namespace KillerPDF
using var pr = docReader.GetPageReader(pageIndex);
int tw = pr.GetPageWidth();
int th = pr.GetPageHeight();
var raw = KillerPDF.Services.PdfiumInterop.RenderPageWithAnnotations(filePath, pageIndex, tw, th)
var raw = MmdPdf.Services.PdfiumInterop.RenderPageWithAnnotations(filePath, pageIndex, tw, th)
?? pr.GetImage(); // #141
if (tw <= 0 || th <= 0 || raw == null || raw.Length < tw * th * 4)
return null;
+1 -1
View File
@@ -1,6 +1,6 @@
using System.Windows.Media;
namespace KillerPDF
namespace MmdPdf
{
internal enum StampKind { PageNumber, Watermark }
+3 -3
View File
@@ -1,14 +1,14 @@
using System.Collections.Generic;
namespace KillerPDF
namespace MmdPdf
{
// The undo stack's entry type. Each entry is either an annotation removal or a full document
// snapshot; AnnotationGroup removes a specific set in one step (a text edit = cover + text).
//
// TOP-LEVEL, not nested in MainWindow. The code that pushes undo entries - Annotations.cs and
// TextEditing.cs - lives in KillerPDF.Controls, where a type nested in MainWindow only spells
// TextEditing.cs - lives in MmdPdf.Controls, where a type nested in MainWindow only spells
// as MainWindow.UndoEntry; that would mean qualifying roughly 30 call sites for no gain. As
// top-level types in KillerPDF they resolve unqualified from the child namespace too.
// top-level types in MmdPdf they resolve unqualified from the child namespace too.
//
// This also retires the CS0052 chain that made them internal in the first place: DocumentSession
// had to be internal for the render cache, its UndoStack field is Stack<UndoEntry>, and a field
+4 -4
View File
@@ -1,11 +1,11 @@
namespace KillerPDF
namespace MmdPdf
{
// How a document view lays its pages out, and how it fits them to the viewport.
//
// TOP-LEVEL, not nested in MainWindow. The viewer is a UserControl in KillerPDF.Controls, and
// TOP-LEVEL, not nested in MainWindow. The viewer is a UserControl in MmdPdf.Controls, and
// from there a type nested in MainWindow only spells as MainWindow.ViewMode - which would mean
// qualifying 91 references for no gain. As top-level types in KillerPDF they resolve
// unqualified from KillerPDF.Controls too (a namespace declaration puts its parent namespaces
// qualifying 91 references for no gain. As top-level types in MmdPdf they resolve
// unqualified from MmdPdf.Controls too (a namespace declaration puts its parent namespaces
// in scope), so every call site compiles untouched.
//
// internal, not public: nothing outside the assembly has any business with either.
+2 -2
View File
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Windows.Controls;
namespace KillerPDF
namespace MmdPdf
{
/// <summary>
/// Everything ONE document view owns. Split pane needs two of these; each PdfViewer control
@@ -15,7 +15,7 @@ namespace KillerPDF
/// and zoom; it does NOT need a second copy of the per-document machinery, because each
/// pane will simply own its own set of sessions.
///
/// TOP-LEVEL, not nested in MainWindow. The viewer lives in KillerPDF.Controls and cannot own a
/// TOP-LEVEL, not nested in MainWindow. The viewer lives in MmdPdf.Controls and cannot own a
/// type nested in the window without every reference spelling out MainWindow.ViewerState.
/// ViewMode and FitMode live in Models/ViewTypes.cs for the same reason.
/// </summary>